Name: series-workflowqkdzt Phase: Succeeded StartedAt: 2026-07-23 03:39:57 +0000 UTC FinishedAt: 2026-07-23 08:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[0] Phase: Succeeded StartedAt: 2026-07-23 03:39:58 +0000 UTC FinishedAt: 2026-07-23 04:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 03:39:58 +0000 UTC FinishedAt: 2026-07-23 04:19:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "e4a65ec0-705f-4f45-8621-859e60a96919" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "check_local_dest", "hsr_dev_xmit", "hsr_handle_frame" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtjaGVja19sb2NhbF9kZXN0JiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYyBpbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGNoZWNrIGlmIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UgaXMgaW4gcHJvbWlzY3VvdXMgbW9kZSBhbmQgc2V0IHRoZSBwYWNrZXQgdHlwZSB0byBQQUNLRVRfSE9TVCBhY2NvcmRpbmdseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMzkzNjFmYWRiM2Y1YmQ2M2Q5ZTg3NmY4MzM2YjhjMjhjOWI1Y2FhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDQ6MTg6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uMzhlZDZiMDlmYzRhYzYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTU4OSw2ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiB7XG4mIzQzO1x0c3RydWN0IGhzcl9wb3J0ICptYXN0ZXI7XG4mIzQzO1xuIFx0aWYgKGhzcl9hZGRyX2lzX3NlbGYoaHNyLCBldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSkge1xuIFx0XHRmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUgPSB0cnVlO1xuIFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcbkBAIC02MDAsOCAmIzQzOzYwMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgIHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUIHx8XG4gXHQgICAgc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9CUk9BRENBU1QpIHtcbiBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IHRydWU7XG4tXHR9IGVsc2Uge1xuLVx0XHRmcmFtZS1cdTAwM2Vpc19sb2NhbF9kZXN0ID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGVsc2VcbiYjNDM7XHR7XG4mIzQzO1x0XHRtYXN0ZXIgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX01BU1RFUik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtYXN0ZXIgfHwgIW1hc3Rlci1cdTAwM2VkZXYpXG4mIzQzO1x0XHR7XG4mIzQzOyAgICAgICAgXHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVsc2UgaWYgKG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKVxuJiM0MztcdFx0e1xuJiM0MzsgICAgICAgIFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcbiYjNDM7ICAgICAgICBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHR7XG4mIzQzO1x0XHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiBcdH1cbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtjaGVja19sb2NhbF9kZXN0JiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYyBpbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGNoZWNrIGlmIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UgaXMgaW4gcHJvbWlzY3VvdXMgbW9kZSBhbmQgc2V0IHRoZSBwYWNrZXQgdHlwZSB0byBQQUNLRVRfSE9TVCBhY2NvcmRpbmdseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAzOTM2MWZhZGIzZjViZDYzZDllODc2ZjgzMzZiOGMyOGM5YjVjYWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwNDoxODo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuYwppbmRleCAwNzc0OTgxYTY1YzE2NC4uMzhlZDZiMDlmYzRhYzYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTU4OSw2ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIHN0YXRpYyB2b2lkIGNoZWNrX2xvY2FsX2Rlc3Qoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiB7CiYjNDM7CXN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyOwomIzQzOwogCWlmIChoc3JfYWRkcl9pc19zZWxmKGhzciwgZXRoX2hkcihza2IpLSZndDtoX2Rlc3QpKSB7CiAJCWZyYW1lLSZndDtpc19sb2NhbF9leGNsdXNpdmUgPSB0cnVlOwogCQlza2ItJmd0O3BrdF90eXBlID0gUEFDS0VUX0hPU1Q7CkBAIC02MDAsOCAmIzQzOzYwMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICBza2ItJmd0O3BrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QgfHwKIAkgICAgc2tiLSZndDtwa3RfdHlwZSA9PSBQQUNLRVRfQlJPQURDQVNUKSB7CiAJCWZyYW1lLSZndDtpc19sb2NhbF9kZXN0ID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CWVsc2UKJiM0MzsJewomIzQzOwkJbWFzdGVyID0gaHNyX3BvcnRfZ2V0X2hzcihoc3IsIEhTUl9QVF9NQVNURVIpOwomIzQzOwomIzQzOwkJaWYgKCFtYXN0ZXIgfHwgIW1hc3Rlci0mZ3Q7ZGV2KQomIzQzOwkJewomIzQzOyAgICAgICAgCQlmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwkJZWxzZSBpZiAobWFzdGVyLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKQomIzQzOwkJewomIzQzOyAgICAgICAgCQlza2ItJmd0O3BrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiYjNDM7ICAgICAgICAJCWZyYW1lLSZndDtpc19sb2NhbF9kZXN0ID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWVsc2UKJiM0MzsJCXsKJiM0MzsJCQlmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCA9IGZhbHNlOwomIzQzOwkJfQogCX0KIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSB0b3VjaGVkIHRoZSBgY2hlY2tfbG9jYWxfZGVzdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gY2hlY2tzIGZvciB0aGUgYElGRl9QUk9NSVNDYCBmbGFnIGJlaW5nIHNldC4gSWYgaXQgaXMsIHRoZSBjb2RlIHRoZW4gc2V0cyBgc2tiLSZndDtwa3RfdHlwZWAgdG8gYFBBQ0tFVF9IT1NUYCBhbmQgYWxzbyBmbGFncyBgZnJhbWUtJmd0O2lzX2xvY2FsX2Rlc3RgIGFzIHRydWUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdl4oCZcmUgdHJlYXRpbmcgdHJhZmZpYyBhcnJpdmluZyBvbiBhIHByb21pc2N1b3VzIG1hc3RlciBwb3J0IGRpZmZlcmVudGx5LiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIEhTUiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldCB1cC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBodW50IGRvd24gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhpcyBiZWhhdmlvciBpcyBlbmFibGVkLiBUaGlzIHdpbGwgaGVscCBtZSBwdXQgdGhlIGNoYW5nZSBpbnRvIGNvbnRleHQgYW5kIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnM6CgoqKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBzZXR1cCBpcyB1dGlsaXppbmcgdGhlIGBIU1JgIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCwgZXNwZWNpYWxseSBvbiB0aGUgbG9jYWwgZGVzdGluYXRpb24gc2lkZSwgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgaW50byB0aGUgYGNoZWNrX2xvY2FsX2Rlc3RgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgbWFraW5nIHJvdXRpbmcgZGVjaXNpb25zLCBkZXRlcm1pbmluZyB3aGVyZSB0aGUgbG9jYWwgZGV2aWNlIHNob3VsZCBkaXJlY3QgdGhlIHRyYWZmaWMgYmFzZWQgb24gdGhlIEhTUiBzZXR1cC4gSSYjMzk7bSBhbHJlYWR5IHZpc3VhbGl6aW5nIHRoZSBjb2RlIGluIG15IGhlYWQsIHRoaW5raW5nIGFib3V0IHRoZSBjaGVja3MgaXQgcGVyZm9ybXMgYW5kIHRoZSBjb25kaXRpb25zIGl0IGV2YWx1YXRlcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdGhhdCBpcyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19sb2NhbF9kZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz01MTk9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTg4LVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU4OTpzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU5MC1cdFx0XHQgICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY5ND1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDUtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQ2Olx0Y2hlY2tfbG9jYWxfZGVzdChwb3J0LVx1MDAzZWhzciwgc2tiLCBmcmFtZSk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipUcmFjaW5nIHRoZSBEYXRhIEZsb3c6IGBjaGVja19sb2NhbF9kZXN0YCwgYGZpbGxfZnJhbWVfaW5mb2AsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkYXRhIHBhdGgsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhpbmdzIGFyZSBvcmlnaW5hdGluZy4gYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGdldHRpbmcgY2FsbGVkIGJ5IGBmaWxsX2ZyYW1lX2luZm9gLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjb25uZWN0aW9uIHRvIG5vdGU6IGBjaGVja19sb2NhbF9kZXN0YCBwcm92aWRlcyBzb21lIGlucHV0IG9yIHNlcnZpY2UgKnRvKiBgZmlsbF9mcmFtZV9pbmZvYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgdGhhdCBzZXJ2aWNlIGlzIHNwZWNpZmljYWxseS4gSXMgaXQgYWRkcmVzcyB2ZXJpZmljYXRpb24sIHNvbWUga2luZCBvZiByb3V0aW5nIGxvb2t1cCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZGV0ZXJtaW5pbmcgaWYgdGhlIGRlc3RpbmF0aW9uIGlzICYjMzQ7bG9jYWwmIzM0OyBidXQgJiMzNDtsb2NhbCYjMzQ7IGluIHdoYXQgY29udGV4dD8gVGhlIG5ldHdvcmsgc3RhY2s/IFRoZSBjdXJyZW50IGRldmljZT8gSSBuZWVkIHRoZSBkb2N1bWVudGF0aW9uIGhlcmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKTm93LCBgZmlsbF9mcmFtZV9pbmZvYCBpdHNlbGYgaXNuJiMzOTt0IGEgdG9wLWxldmVsIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbnZva2VkIGJ5IGBoc3JfZm9yd2FyZF9za2JgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSAqcHVycG9zZSogb2YgYGZpbGxfZnJhbWVfaW5mb2AgaXMgdG8gY29uc3RydWN0IG9yIHBvcHVsYXRlIHRoZSBmcmFtZSBpbmZvcm1hdGlvbiwgcGVyaGFwcyB1c2VkIGluIGZvcndhcmRpbmcgYSBuZXR3b3JrIHBhY2tldC4gU28sIGBoc3JfZm9yd2FyZF9za2JgIGxpa2VseSBoYW5kbGVzIHRoZSBoaWdoLWxldmVsIHRhc2sgb2Ygc2VuZGluZyBhIHBhY2tldCwgYW5kIG5lZWRzIGBmaWxsX2ZyYW1lX2luZm9gIHRvIGdlbmVyYXRlIHRoZSByZWxldmFudCBmcmFtZSBkZXRhaWxzLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYGNoZWNrX2xvY2FsX2Rlc3RgIGluZGlyZWN0bHkgcGxheXMgYSByb2xlIGluIGZvcndhcmRpbmcuIElzIGl0IHBhcnQgb2YgdGhlIG5vcm1hbCBvcGVyYXRpb24gb3IgYW4gb3B0aW1pemF0aW9uIGluIGNhc2VzIG9mIGxvY2FsIGRlc3RpbmF0aW9uPwoKU28sIGlmIEkgcHV0IGl0IGFsbCB0b2dldGhlcjogYGhzcl9mb3J3YXJkX3NrYmAgY2FsbHMgYGZpbGxfZnJhbWVfaW5mb2AsIGFuZCBgZmlsbF9mcmFtZV9pbmZvYCBpbiB0dXJuIGNhbGxzIGBjaGVja19sb2NhbF9kZXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgYXJlIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIHBhcmFtZXRlcnMgZWFjaCBmdW5jdGlvbiB1c2VzIGFuZCB3aGljaCBwYXJhbWV0ZXJzIHRoZSBvdGhlciBmdW5jdGlvbnMgZGVwZW5kIG9uLiBJIHNlZSBhIGNoYWluIG9mIHByb2Nlc3Npbmc6IHRoZSBwYWNrZXQgaXMgbGlrZWx5IHJlY2VpdmVkIGF0IGBoc3JfZm9yd2FyZF9za2JgLCB0aGVuIGBmaWxsX2ZyYW1lX2luZm9gIGRvZXMgc29tZSB3b3JrLCBhbmQgY3J1Y2lhbGx5LCBpdCBjYWxscyB1cG9uIGBjaGVja19sb2NhbF9kZXN0YC4gVGhpcyBzdHJ1Y3R1cmUgc3VnZ2VzdHMgYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGEgbG93LWxldmVsIGhlbHBlciBmdW5jdGlvbiwgcG9zc2libHkgZm9yIHZhbGlkYXRpb24gb3IgY2xhc3NpZmljYXRpb24gKmJlZm9yZSogdGhlIGZyYW1lIGdldHMgdGhlIGZ1bGwgdHJlYXRtZW50IG9mIGBmaWxsX2ZyYW1lX2luZm9gLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgZWFjaCBzdGVwLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmb3IgZWFjaCBmdW5jdGlvbiB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9mcmFtZV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz02MjY9c3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NDctXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NjQ4OmludCBoc3JfZmlsbF9mcmFtZV9pbmZvKF9fYmUxNiBwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NDktXHRcdFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjc0LVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY3NTppbnQgcHJwX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjc2LVx0XHRcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5My1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2OTQ6c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02OTUtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDEtXHRmcmFtZS1cdTAwM2Vwb3J0X3JjdiA9IHBvcnQ7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQyOlx0cmV0ID0gaHNyLVx1MDAzZXByb3RvX29wcy1cdTAwM2VmaWxsX2ZyYW1lX2luZm8ocHJvdG8sIHNrYiwgZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc0My1cdGlmIChyZXQpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTc1Mj12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1Ni1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NTc6XHRpZiAoZmlsbF9mcmFtZV9pbmZvKFx1MDAyNmZyYW1lLCBza2IsIHBvcnQpIFx1MDAzYyAwKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1OC1cdFx0Z290byBvdXRfZHJvcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSIEZvcndhcmRpbmcgUGF0aCoqCgpPa2F5LCBzbyBgaHNyX2ZvcndhcmRfc2tiYCBpcyB0aGUgcHJpbWUgZGlyZWN0aXZlLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBmb3J3YXJkaW5nIHByb2Nlc3MuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoZXJlIGV2ZXJ5dGhpbmcgc2hvdWxkIHN0YXJ0LiBBbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBiZWluZyByZWFjaGVkLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzaWduLiBObyBvYnZpb3VzIGRlYWQgY29kZSB0byBodW50IGRvd24uCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgY29uZmlndXJlZC4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBIU1IsIHRoZSBwcmltYXJ5IGNvbmZpZyB0byBjaGVjayBpcyBvYnZpb3VzbHkgYEhTUmAuIEdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgYW5kIGJlaGF2aW5nIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIHF1aWNrbHkgbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzOyBgY2hlY2tfbG9jYWxfZGVzdGAsIGBoc3JfZm9yd2FyZF9za2JgIChvYnZpb3VzbHkhKSwgYW5kIGBmaWxsX2ZyYW1lX2luZm9gIHN0YW5kIG91dC4gVGhleSYjMzk7bGwgYmUgdGhlIGtleSBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGZ1bmN0aW9uIGZsb3cuCgpSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGRpZyBpbnRvIGBoc3JfZm9yd2FyZF9za2JgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUgaGFwcGVuaW5nLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMzY6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzctXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2NDpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDQtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNDA2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz02OTQ9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzUxLS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzUyOnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NTMte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04My1cdH0gZWxzZSB7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0Olx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjIKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEhTUiBGb3J3YXJkaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJvdGggYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBjYWxsIGBoc3JfZm9yd2FyZF9za2JgLCBtZWFuaW5nIHRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaW52b2x2ZWQgaW4gZm9yd2FyZGluZywgc28gdGhhdCB3aWxsIGJlIGEgcHJpbWUgZm9jdXMgZm9yIG1lLiBFeGNlbGxlbnQuCgpBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBjYW4gc2VlIHRoYXQgYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LCBpdCBtaWdodCBiZSByZWxldmFudCB0b28sIHNvIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIHRoYXQuCgpBbHJpZ2h0LCBzbyBgaHNyX2Rldl94bWl0YCBpcyBhbm90aGVyIGtleSBvbmUgdG8ga2VlcCBpbiBtaW5kLCBhbmQgb2J2aW91c2x5IGBoc3JfaGFuZGxlX2ZyYW1lYCB0b28sIHNpbmNlIGl0IGlzIGFsc28gaW52b2x2ZWQuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0IG1lIGp1c3QgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBhdCBwbGF5LiBKdXN0IGEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgSFNSYCBpcyB0aGUgb25seSBvbmUuIE9rYXksIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuCgpBbHJpZ2h0LCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNjYW4gb2YgYGNoZWNrX2xvY2FsX2Rlc3RgIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2NoZWNrX2xvY2FsX2Rlc3QmIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2NoZWNrX2xvY2FsX2Rlc3QmIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA0OjE4OjQzLjQwNDc0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDQ1MDk0ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiY2hlY2tfbG9jYWxfZGVzdFwiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTg6NDMuNDA0NzU0MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODQ0NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAzOTM2MWZhZGIzZjViZDYzZDllODc2ZjgzMzZiOGMyOGM5YjVjYWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDQ6MTg6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjM4ZWQ2YjA5ZmM0YWM2IDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC01ODksNiArNTg5LDggQEAgc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gc3RhdGljIHZvaWQgY2hlY2tfbG9jYWxfZGVzdChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiB7XFxuK1xcdHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyO1xcbitcXG4gXFx0aWYgKGhzcl9hZGRyX2lzX3NlbGYoaHNyLCBldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdCkpIHtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2V4Y2x1c2l2ZSA9IHRydWU7XFxuIFxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcXG5AQCAtNjAwLDggKzYwMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUIHx8XFxuIFxcdCAgICBza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9CUk9BRENBU1QpIHtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2Rlc3QgPSB0cnVlO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRmcmFtZS1cXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcdGVsc2VcXG4rXFx0e1xcbitcXHRcXHRtYXN0ZXIgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX01BU1RFUik7XFxuK1xcbitcXHRcXHRpZiAoIW1hc3RlciB8fCAhbWFzdGVyLVxcdTAwM2VkZXYpXFxuK1xcdFxcdHtcXG4rICAgICAgICBcXHRcXHRmcmFtZS1cXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVsc2UgaWYgKG1hc3Rlci1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKVxcbitcXHRcXHR7XFxuKyAgICAgICAgXFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xcbisgICAgICAgIFxcdFxcdGZyYW1lLVxcdTAwM2Vpc19sb2NhbF9kZXN0ID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0ZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2Rlc3QgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA0OjE4OjQzLjk5NDMwMTkzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0NDU1NTIzNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiY2hlY2tfbG9jYWxfZGVzdFwiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMzkzNjFmYWRiM2Y1YmQ2M2Q5ZTg3NmY4MzM2YjhjMjhjOWI1Y2FhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDQ6MTg6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTY0Li4zOGVkNmIwOWZjNGFjNiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuKysrIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtNTg5LDYgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gc3RhdGljIHZvaWQgY2hlY2tfbG9jYWxfZGVzdChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4ge1xuK1x0c3RydWN0IGhzcl9wb3J0ICptYXN0ZXI7XG4rXG4gXHRpZiAoaHNyX2FkZHJfaXNfc2VsZihoc3IsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpKSB7XG4gXHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2V4Y2x1c2l2ZSA9IHRydWU7XG4gXHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xuQEAgLTYwMCw4ICs2MDIsMjQgQEAgc3RhdGljIHZvaWQgY2hlY2tfbG9jYWxfZGVzdChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICBza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCB8fFxuIFx0ICAgIHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfQlJPQURDQVNUKSB7XG4gXHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgPSB0cnVlO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xuK1x0fVxuK1x0ZWxzZVxuK1x0e1xuK1x0XHRtYXN0ZXIgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX01BU1RFUik7XG4rXG4rXHRcdGlmICghbWFzdGVyIHx8ICFtYXN0ZXItXHUwMDNlZGV2KVxuK1x0XHR7XG4rICAgICAgICBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xuK1x0XHR9XG4rXHRcdGVsc2UgaWYgKG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKVxuK1x0XHR7XG4rICAgICAgICBcdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG4rICAgICAgICBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IHRydWU7XG4rXHRcdH1cbitcdFx0ZWxzZVxuK1x0XHR7XG4rXHRcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xuK1x0XHR9XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTg6NDMuOTk0MzA1MjcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5OTEwMTM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgdG91Y2hlZCB0aGUgYGNoZWNrX2xvY2FsX2Rlc3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5J3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gY2hlY2tzIGZvciB0aGUgYElGRl9QUk9NSVNDYCBmbGFnIGJlaW5nIHNldC4gSWYgaXQgaXMsIHRoZSBjb2RlIHRoZW4gc2V0cyBgc2tiLVx1MDAzZXBrdF90eXBlYCB0byBgUEFDS0VUX0hPU1RgIGFuZCBhbHNvIGZsYWdzIGBmcmFtZS1cdTAwM2Vpc19sb2NhbF9kZXN0YCBhcyB0cnVlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdl4oCZcmUgdHJlYXRpbmcgdHJhZmZpYyBhcnJpdmluZyBvbiBhIHByb21pc2N1b3VzIG1hc3RlciBwb3J0IGRpZmZlcmVudGx5LiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIEhTUiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldCB1cC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGh1bnQgZG93biB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB1bmRlcnN0YW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGJlaGF2aW9yIGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBoZWxwIG1lIHB1dCB0aGUgY2hhbmdlIGludG8gY29udGV4dCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxODo0Ny4zOTM0MTYwNTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNjY2Mzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTg6NTIuMDAwMDg3MDQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMjk3MTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBjb25maWd1cmF0aW9uczpcblxuKipEaXZpbmcgaW50byB0aGUgSFNSIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBzZXR1cCBpcyB1dGlsaXppbmcgdGhlIGBIU1JgIGNvbmZpZ3VyYXRpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdHJhZmZpYyBpcyBiZWluZyBoYW5kbGVkLCBlc3BlY2lhbGx5IG9uIHRoZSBsb2NhbCBkZXN0aW5hdGlvbiBzaWRlLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBpbnRvIHRoZSBgY2hlY2tfbG9jYWxfZGVzdGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgcm91dGluZyBkZWNpc2lvbnMsIGRldGVybWluaW5nIHdoZXJlIHRoZSBsb2NhbCBkZXZpY2Ugc2hvdWxkIGRpcmVjdCB0aGUgdHJhZmZpYyBiYXNlZCBvbiB0aGUgSFNSIHNldHVwLiBJJ20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgY29kZSBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCB0aGUgY2hlY2tzIGl0IHBlcmZvcm1zIGFuZCB0aGUgY29uZGl0aW9ucyBpdCBldmFsdWF0ZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQgaXMgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxODo1NS4yMDMwNjI2ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTEyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2xvY2FsX2Rlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9oc3JfZm9yd2FyZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01MTk9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01ODgtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU4OTpzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01OTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY5ND1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc0NS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQ2OlxcdGNoZWNrX2xvY2FsX2Rlc3QocG9ydC1cXHUwMDNlaHNyLCBza2IsIGZyYW1lKTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxODo1NS4zODE5ODIyNzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEzNDQ3MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipUcmFjaW5nIHRoZSBEYXRhIEZsb3c6IGBjaGVja19sb2NhbF9kZXN0YCwgYGZpbGxfZnJhbWVfaW5mb2AsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGF0YSBwYXRoLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhpbmdzIGFyZSBvcmlnaW5hdGluZy4gYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0J3MgZ2V0dGluZyBjYWxsZWQgYnkgYGZpbGxfZnJhbWVfaW5mb2AuIFRoYXQncyB0aGUgZmlyc3QgY29ubmVjdGlvbiB0byBub3RlOiBgY2hlY2tfbG9jYWxfZGVzdGAgcHJvdmlkZXMgc29tZSBpbnB1dCBvciBzZXJ2aWNlICp0byogYGZpbGxfZnJhbWVfaW5mb2AuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoYXQgc2VydmljZSBpcyBzcGVjaWZpY2FsbHkuIElzIGl0IGFkZHJlc3MgdmVyaWZpY2F0aW9uLCBzb21lIGtpbmQgb2Ygcm91dGluZyBsb29rdXAsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gZGV0ZXJtaW5pbmcgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIFwibG9jYWxcIiBidXQgXCJsb2NhbFwiIGluIHdoYXQgY29udGV4dD8gVGhlIG5ldHdvcmsgc3RhY2s/IFRoZSBjdXJyZW50IGRldmljZT8gSSBuZWVkIHRoZSBkb2N1bWVudGF0aW9uIGhlcmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5Ob3csIGBmaWxsX2ZyYW1lX2luZm9gIGl0c2VsZiBpc24ndCBhIHRvcC1sZXZlbCBmdW5jdGlvbi4gSXQncyBpbnZva2VkIGJ5IGBoc3JfZm9yd2FyZF9za2JgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSAqcHVycG9zZSogb2YgYGZpbGxfZnJhbWVfaW5mb2AgaXMgdG8gY29uc3RydWN0IG9yIHBvcHVsYXRlIHRoZSBmcmFtZSBpbmZvcm1hdGlvbiwgcGVyaGFwcyB1c2VkIGluIGZvcndhcmRpbmcgYSBuZXR3b3JrIHBhY2tldC4gU28sIGBoc3JfZm9yd2FyZF9za2JgIGxpa2VseSBoYW5kbGVzIHRoZSBoaWdoLWxldmVsIHRhc2sgb2Ygc2VuZGluZyBhIHBhY2tldCwgYW5kIG5lZWRzIGBmaWxsX2ZyYW1lX2luZm9gIHRvIGdlbmVyYXRlIHRoZSByZWxldmFudCBmcmFtZSBkZXRhaWxzLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYGNoZWNrX2xvY2FsX2Rlc3RgIGluZGlyZWN0bHkgcGxheXMgYSByb2xlIGluIGZvcndhcmRpbmcuIElzIGl0IHBhcnQgb2YgdGhlIG5vcm1hbCBvcGVyYXRpb24gb3IgYW4gb3B0aW1pemF0aW9uIGluIGNhc2VzIG9mIGxvY2FsIGRlc3RpbmF0aW9uP1xuXG5TbywgaWYgSSBwdXQgaXQgYWxsIHRvZ2V0aGVyOiBgaHNyX2ZvcndhcmRfc2tiYCBjYWxscyBgZmlsbF9mcmFtZV9pbmZvYCwgYW5kIGBmaWxsX2ZyYW1lX2luZm9gIGluIHR1cm4gY2FsbHMgYGNoZWNrX2xvY2FsX2Rlc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLCBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBwYXJhbWV0ZXJzIGVhY2ggZnVuY3Rpb24gdXNlcyBhbmQgd2hpY2ggcGFyYW1ldGVycyB0aGUgb3RoZXIgZnVuY3Rpb25zIGRlcGVuZCBvbi4gSSBzZWUgYSBjaGFpbiBvZiBwcm9jZXNzaW5nOiB0aGUgcGFja2V0IGlzIGxpa2VseSByZWNlaXZlZCBhdCBgaHNyX2ZvcndhcmRfc2tiYCwgdGhlbiBgZmlsbF9mcmFtZV9pbmZvYCBkb2VzIHNvbWUgd29yaywgYW5kIGNydWNpYWxseSwgaXQgY2FsbHMgdXBvbiBgY2hlY2tfbG9jYWxfZGVzdGAuIFRoaXMgc3RydWN0dXJlIHN1Z2dlc3RzIGBjaGVja19sb2NhbF9kZXN0YCBpcyBhIGxvdy1sZXZlbCBoZWxwZXIgZnVuY3Rpb24sIHBvc3NpYmx5IGZvciB2YWxpZGF0aW9uIG9yIGNsYXNzaWZpY2F0aW9uICpiZWZvcmUqIHRoZSBmcmFtZSBnZXRzIHRoZSBmdWxsIHRyZWF0bWVudCBvZiBgZmlsbF9mcmFtZV9pbmZvYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgYXQgZWFjaCBzdGVwLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZvciBlYWNoIGZ1bmN0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA0OjE4OjU5Ljk5NTQzMjA3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMxMjM0ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9mcmFtZV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NjI2PXN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NDctXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY0ODppbnQgaHNyX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY0OS1cXHRcXHRcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY3NC1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Njc1OmludCBwcnBfZmlsbF9mcmFtZV9pbmZvKF9fYmUxNiBwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjc2LVxcdFxcdFxcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjkzLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2OTQ6c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjk1LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDEtXFx0ZnJhbWUtXFx1MDAzZXBvcnRfcmN2ID0gcG9ydDtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQyOlxcdHJldCA9IGhzci1cXHUwMDNlcHJvdG9fb3BzLVxcdTAwM2VmaWxsX2ZyYW1lX2luZm8ocHJvdG8sIHNrYiwgZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDMtXFx0aWYgKHJldClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03NTI9dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc1NzpcXHRpZiAoZmlsbF9mcmFtZV9pbmZvKFxcdTAwMjZmcmFtZSwgc2tiLCBwb3J0KSBcXHUwMDNjIDApXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1OC1cXHRcXHRnb3RvIG91dF9kcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxOTowMC4xMDg1NjU3MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4Mzk4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSIEZvcndhcmRpbmcgUGF0aCoqXG5cbk9rYXksIHNvIGBoc3JfZm9yd2FyZF9za2JgIGlzIHRoZSBwcmltZSBkaXJlY3RpdmUsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIGZvcndhcmRpbmcgcHJvY2Vzcy4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSBldmVyeXRoaW5nIHNob3VsZCBzdGFydC4gQW5kIGl0J3MgZGVmaW5pdGVseSBiZWluZyByZWFjaGVkLCBzbyB0aGF0J3MgYSBnb29kIHNpZ24uIE5vIG9idmlvdXMgZGVhZCBjb2RlIHRvIGh1bnQgZG93bi5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgY29uZmlndXJlZC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEhTUiwgdGhlIHByaW1hcnkgY29uZmlnIHRvIGNoZWNrIGlzIG9idmlvdXNseSBgSFNSYC4gR290dGEgbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkIGFuZCBiZWhhdmluZyBhcyBleHBlY3RlZC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzOyBgY2hlY2tfbG9jYWxfZGVzdGAsIGBoc3JfZm9yd2FyZF9za2JgIChvYnZpb3VzbHkhKSwgYW5kIGBmaWxsX2ZyYW1lX2luZm9gIHN0YW5kIG91dC4gVGhleSdsbCBiZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgZnVuY3Rpb24gZmxvdy5cblxuUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQncyBoZWFkIG92ZXIgdG8gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGRpZyBpbnRvIGBoc3JfZm9yd2FyZF9za2JgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIHJlYWwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTk6MDMuNzU2OTY3Mzg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMzQxOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTIyND1zdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0OlxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2NS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDYtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Njk0PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzUxLS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc1Mjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1My17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTUtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODAtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVxcdH0gZWxzZSB7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTk6MDMuOTIyMzA4NzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMzA1MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBIU1IgRm9yd2FyZGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQm90aCBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIGNhbGwgYGhzcl9mb3J3YXJkX3NrYmAsIG1lYW5pbmcgdGhhdCdzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGludm9sdmVkIGluIGZvcndhcmRpbmcsIHNvIHRoYXQgd2lsbCBiZSBhIHByaW1lIGZvY3VzIGZvciBtZS4gRXhjZWxsZW50LlxuXG5BbmQgd2hpbGUgSSdtIGF0IGl0LCBJIGNhbiBzZWUgdGhhdCBgY2hlY2tfbG9jYWxfZGVzdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiB0aGF0IGNvbnRleHQsIGl0IG1pZ2h0IGJlIHJlbGV2YW50IHRvbywgc28gSSBzaG91bGQgcHJvYmFibHkga2VlcCBhbiBleWUgb24gdGhhdC5cblxuQWxyaWdodCwgc28gYGhzcl9kZXZfeG1pdGAgaXMgYW5vdGhlciBrZXkgb25lIHRvIGtlZXAgaW4gbWluZCwgYW5kIG9idmlvdXNseSBgaHNyX2hhbmRsZV9mcmFtZWAgdG9vLCBzaW5jZSBpdCBpcyBhbHNvIGludm9sdmVkLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0IG1lIGp1c3QgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBhdCBwbGF5LiBKdXN0IGEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgSFNSYCBpcyB0aGUgb25seSBvbmUuIE9rYXksIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cbkFscmlnaHQsIEknbGwgZG8gYSBxdWljayBzY2FuIG9mIGBjaGVja19sb2NhbF9kZXN0YCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MiwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTk6MDguMjQ1MzY4NDU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NDUxNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImNoZWNrX2xvY2FsX2Rlc3RcIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYyBpbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGNoZWNrIGlmIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UgaXMgaW4gcHJvbWlzY3VvdXMgbW9kZSBhbmQgc2V0IHRoZSBwYWNrZXQgdHlwZSB0byBQQUNLRVRfSE9TVCBhY2NvcmRpbmdseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJjaGVja19sb2NhbF9kZXN0XCIsXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFja2V0IGZvcndhcmRpbmcgbG9naWMgaW4gSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSB0byBjaGVjayBpZiB0aGUgbWFzdGVyIHBvcnQgZGV2aWNlIGlzIGluIHByb21pc2N1b3VzIG1vZGUgYW5kIHNldCB0aGUgcGFja2V0IHR5cGUgdG8gUEFDS0VUX0hPU1QgYWNjb3JkaW5nbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgZm9yd2FyZGluZyBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 03:39:58 +0000 UTC FinishedAt: 2026-07-23 04:19:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "e4a65ec0-705f-4f45-8621-859e60a96919" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "check_local_dest", "hsr_dev_xmit", "hsr_handle_frame" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtjaGVja19sb2NhbF9kZXN0JiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYyBpbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGNoZWNrIGlmIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UgaXMgaW4gcHJvbWlzY3VvdXMgbW9kZSBhbmQgc2V0IHRoZSBwYWNrZXQgdHlwZSB0byBQQUNLRVRfSE9TVCBhY2NvcmRpbmdseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMzkzNjFmYWRiM2Y1YmQ2M2Q5ZTg3NmY4MzM2YjhjMjhjOWI1Y2FhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDQ6MTg6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uMzhlZDZiMDlmYzRhYzYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTU4OSw2ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiB7XG4mIzQzO1x0c3RydWN0IGhzcl9wb3J0ICptYXN0ZXI7XG4mIzQzO1xuIFx0aWYgKGhzcl9hZGRyX2lzX3NlbGYoaHNyLCBldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSkge1xuIFx0XHRmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUgPSB0cnVlO1xuIFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcbkBAIC02MDAsOCAmIzQzOzYwMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgIHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUIHx8XG4gXHQgICAgc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9CUk9BRENBU1QpIHtcbiBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IHRydWU7XG4tXHR9IGVsc2Uge1xuLVx0XHRmcmFtZS1cdTAwM2Vpc19sb2NhbF9kZXN0ID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGVsc2VcbiYjNDM7XHR7XG4mIzQzO1x0XHRtYXN0ZXIgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX01BU1RFUik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtYXN0ZXIgfHwgIW1hc3Rlci1cdTAwM2VkZXYpXG4mIzQzO1x0XHR7XG4mIzQzOyAgICAgICAgXHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVsc2UgaWYgKG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKVxuJiM0MztcdFx0e1xuJiM0MzsgICAgICAgIFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcbiYjNDM7ICAgICAgICBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHR7XG4mIzQzO1x0XHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiBcdH1cbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtjaGVja19sb2NhbF9kZXN0JiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYyBpbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGNoZWNrIGlmIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UgaXMgaW4gcHJvbWlzY3VvdXMgbW9kZSBhbmQgc2V0IHRoZSBwYWNrZXQgdHlwZSB0byBQQUNLRVRfSE9TVCBhY2NvcmRpbmdseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAzOTM2MWZhZGIzZjViZDYzZDllODc2ZjgzMzZiOGMyOGM5YjVjYWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwNDoxODo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuYwppbmRleCAwNzc0OTgxYTY1YzE2NC4uMzhlZDZiMDlmYzRhYzYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTU4OSw2ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIHN0YXRpYyB2b2lkIGNoZWNrX2xvY2FsX2Rlc3Qoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiB7CiYjNDM7CXN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyOwomIzQzOwogCWlmIChoc3JfYWRkcl9pc19zZWxmKGhzciwgZXRoX2hkcihza2IpLSZndDtoX2Rlc3QpKSB7CiAJCWZyYW1lLSZndDtpc19sb2NhbF9leGNsdXNpdmUgPSB0cnVlOwogCQlza2ItJmd0O3BrdF90eXBlID0gUEFDS0VUX0hPU1Q7CkBAIC02MDAsOCAmIzQzOzYwMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICBza2ItJmd0O3BrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QgfHwKIAkgICAgc2tiLSZndDtwa3RfdHlwZSA9PSBQQUNLRVRfQlJPQURDQVNUKSB7CiAJCWZyYW1lLSZndDtpc19sb2NhbF9kZXN0ID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CWVsc2UKJiM0MzsJewomIzQzOwkJbWFzdGVyID0gaHNyX3BvcnRfZ2V0X2hzcihoc3IsIEhTUl9QVF9NQVNURVIpOwomIzQzOwomIzQzOwkJaWYgKCFtYXN0ZXIgfHwgIW1hc3Rlci0mZ3Q7ZGV2KQomIzQzOwkJewomIzQzOyAgICAgICAgCQlmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwkJZWxzZSBpZiAobWFzdGVyLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKQomIzQzOwkJewomIzQzOyAgICAgICAgCQlza2ItJmd0O3BrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiYjNDM7ICAgICAgICAJCWZyYW1lLSZndDtpc19sb2NhbF9kZXN0ID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWVsc2UKJiM0MzsJCXsKJiM0MzsJCQlmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCA9IGZhbHNlOwomIzQzOwkJfQogCX0KIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSB0b3VjaGVkIHRoZSBgY2hlY2tfbG9jYWxfZGVzdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gY2hlY2tzIGZvciB0aGUgYElGRl9QUk9NSVNDYCBmbGFnIGJlaW5nIHNldC4gSWYgaXQgaXMsIHRoZSBjb2RlIHRoZW4gc2V0cyBgc2tiLSZndDtwa3RfdHlwZWAgdG8gYFBBQ0tFVF9IT1NUYCBhbmQgYWxzbyBmbGFncyBgZnJhbWUtJmd0O2lzX2xvY2FsX2Rlc3RgIGFzIHRydWUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdl4oCZcmUgdHJlYXRpbmcgdHJhZmZpYyBhcnJpdmluZyBvbiBhIHByb21pc2N1b3VzIG1hc3RlciBwb3J0IGRpZmZlcmVudGx5LiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIEhTUiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldCB1cC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBodW50IGRvd24gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhpcyBiZWhhdmlvciBpcyBlbmFibGVkLiBUaGlzIHdpbGwgaGVscCBtZSBwdXQgdGhlIGNoYW5nZSBpbnRvIGNvbnRleHQgYW5kIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnM6CgoqKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBzZXR1cCBpcyB1dGlsaXppbmcgdGhlIGBIU1JgIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCwgZXNwZWNpYWxseSBvbiB0aGUgbG9jYWwgZGVzdGluYXRpb24gc2lkZSwgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgaW50byB0aGUgYGNoZWNrX2xvY2FsX2Rlc3RgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgbWFraW5nIHJvdXRpbmcgZGVjaXNpb25zLCBkZXRlcm1pbmluZyB3aGVyZSB0aGUgbG9jYWwgZGV2aWNlIHNob3VsZCBkaXJlY3QgdGhlIHRyYWZmaWMgYmFzZWQgb24gdGhlIEhTUiBzZXR1cC4gSSYjMzk7bSBhbHJlYWR5IHZpc3VhbGl6aW5nIHRoZSBjb2RlIGluIG15IGhlYWQsIHRoaW5raW5nIGFib3V0IHRoZSBjaGVja3MgaXQgcGVyZm9ybXMgYW5kIHRoZSBjb25kaXRpb25zIGl0IGV2YWx1YXRlcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdGhhdCBpcyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19sb2NhbF9kZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz01MTk9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTg4LVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU4OTpzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU5MC1cdFx0XHQgICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY5ND1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDUtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQ2Olx0Y2hlY2tfbG9jYWxfZGVzdChwb3J0LVx1MDAzZWhzciwgc2tiLCBmcmFtZSk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipUcmFjaW5nIHRoZSBEYXRhIEZsb3c6IGBjaGVja19sb2NhbF9kZXN0YCwgYGZpbGxfZnJhbWVfaW5mb2AsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkYXRhIHBhdGgsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhpbmdzIGFyZSBvcmlnaW5hdGluZy4gYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGdldHRpbmcgY2FsbGVkIGJ5IGBmaWxsX2ZyYW1lX2luZm9gLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjb25uZWN0aW9uIHRvIG5vdGU6IGBjaGVja19sb2NhbF9kZXN0YCBwcm92aWRlcyBzb21lIGlucHV0IG9yIHNlcnZpY2UgKnRvKiBgZmlsbF9mcmFtZV9pbmZvYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgdGhhdCBzZXJ2aWNlIGlzIHNwZWNpZmljYWxseS4gSXMgaXQgYWRkcmVzcyB2ZXJpZmljYXRpb24sIHNvbWUga2luZCBvZiByb3V0aW5nIGxvb2t1cCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZGV0ZXJtaW5pbmcgaWYgdGhlIGRlc3RpbmF0aW9uIGlzICYjMzQ7bG9jYWwmIzM0OyBidXQgJiMzNDtsb2NhbCYjMzQ7IGluIHdoYXQgY29udGV4dD8gVGhlIG5ldHdvcmsgc3RhY2s/IFRoZSBjdXJyZW50IGRldmljZT8gSSBuZWVkIHRoZSBkb2N1bWVudGF0aW9uIGhlcmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKTm93LCBgZmlsbF9mcmFtZV9pbmZvYCBpdHNlbGYgaXNuJiMzOTt0IGEgdG9wLWxldmVsIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbnZva2VkIGJ5IGBoc3JfZm9yd2FyZF9za2JgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSAqcHVycG9zZSogb2YgYGZpbGxfZnJhbWVfaW5mb2AgaXMgdG8gY29uc3RydWN0IG9yIHBvcHVsYXRlIHRoZSBmcmFtZSBpbmZvcm1hdGlvbiwgcGVyaGFwcyB1c2VkIGluIGZvcndhcmRpbmcgYSBuZXR3b3JrIHBhY2tldC4gU28sIGBoc3JfZm9yd2FyZF9za2JgIGxpa2VseSBoYW5kbGVzIHRoZSBoaWdoLWxldmVsIHRhc2sgb2Ygc2VuZGluZyBhIHBhY2tldCwgYW5kIG5lZWRzIGBmaWxsX2ZyYW1lX2luZm9gIHRvIGdlbmVyYXRlIHRoZSByZWxldmFudCBmcmFtZSBkZXRhaWxzLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYGNoZWNrX2xvY2FsX2Rlc3RgIGluZGlyZWN0bHkgcGxheXMgYSByb2xlIGluIGZvcndhcmRpbmcuIElzIGl0IHBhcnQgb2YgdGhlIG5vcm1hbCBvcGVyYXRpb24gb3IgYW4gb3B0aW1pemF0aW9uIGluIGNhc2VzIG9mIGxvY2FsIGRlc3RpbmF0aW9uPwoKU28sIGlmIEkgcHV0IGl0IGFsbCB0b2dldGhlcjogYGhzcl9mb3J3YXJkX3NrYmAgY2FsbHMgYGZpbGxfZnJhbWVfaW5mb2AsIGFuZCBgZmlsbF9mcmFtZV9pbmZvYCBpbiB0dXJuIGNhbGxzIGBjaGVja19sb2NhbF9kZXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgYXJlIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIHBhcmFtZXRlcnMgZWFjaCBmdW5jdGlvbiB1c2VzIGFuZCB3aGljaCBwYXJhbWV0ZXJzIHRoZSBvdGhlciBmdW5jdGlvbnMgZGVwZW5kIG9uLiBJIHNlZSBhIGNoYWluIG9mIHByb2Nlc3Npbmc6IHRoZSBwYWNrZXQgaXMgbGlrZWx5IHJlY2VpdmVkIGF0IGBoc3JfZm9yd2FyZF9za2JgLCB0aGVuIGBmaWxsX2ZyYW1lX2luZm9gIGRvZXMgc29tZSB3b3JrLCBhbmQgY3J1Y2lhbGx5LCBpdCBjYWxscyB1cG9uIGBjaGVja19sb2NhbF9kZXN0YC4gVGhpcyBzdHJ1Y3R1cmUgc3VnZ2VzdHMgYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGEgbG93LWxldmVsIGhlbHBlciBmdW5jdGlvbiwgcG9zc2libHkgZm9yIHZhbGlkYXRpb24gb3IgY2xhc3NpZmljYXRpb24gKmJlZm9yZSogdGhlIGZyYW1lIGdldHMgdGhlIGZ1bGwgdHJlYXRtZW50IG9mIGBmaWxsX2ZyYW1lX2luZm9gLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgZWFjaCBzdGVwLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmb3IgZWFjaCBmdW5jdGlvbiB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9mcmFtZV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz02MjY9c3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NDctXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NjQ4OmludCBoc3JfZmlsbF9mcmFtZV9pbmZvKF9fYmUxNiBwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NDktXHRcdFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjc0LVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY3NTppbnQgcHJwX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjc2LVx0XHRcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5My1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2OTQ6c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02OTUtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDEtXHRmcmFtZS1cdTAwM2Vwb3J0X3JjdiA9IHBvcnQ7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQyOlx0cmV0ID0gaHNyLVx1MDAzZXByb3RvX29wcy1cdTAwM2VmaWxsX2ZyYW1lX2luZm8ocHJvdG8sIHNrYiwgZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc0My1cdGlmIChyZXQpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTc1Mj12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1Ni1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NTc6XHRpZiAoZmlsbF9mcmFtZV9pbmZvKFx1MDAyNmZyYW1lLCBza2IsIHBvcnQpIFx1MDAzYyAwKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1OC1cdFx0Z290byBvdXRfZHJvcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSIEZvcndhcmRpbmcgUGF0aCoqCgpPa2F5LCBzbyBgaHNyX2ZvcndhcmRfc2tiYCBpcyB0aGUgcHJpbWUgZGlyZWN0aXZlLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBmb3J3YXJkaW5nIHByb2Nlc3MuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoZXJlIGV2ZXJ5dGhpbmcgc2hvdWxkIHN0YXJ0LiBBbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBiZWluZyByZWFjaGVkLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzaWduLiBObyBvYnZpb3VzIGRlYWQgY29kZSB0byBodW50IGRvd24uCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgY29uZmlndXJlZC4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBIU1IsIHRoZSBwcmltYXJ5IGNvbmZpZyB0byBjaGVjayBpcyBvYnZpb3VzbHkgYEhTUmAuIEdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgYW5kIGJlaGF2aW5nIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIHF1aWNrbHkgbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzOyBgY2hlY2tfbG9jYWxfZGVzdGAsIGBoc3JfZm9yd2FyZF9za2JgIChvYnZpb3VzbHkhKSwgYW5kIGBmaWxsX2ZyYW1lX2luZm9gIHN0YW5kIG91dC4gVGhleSYjMzk7bGwgYmUgdGhlIGtleSBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGZ1bmN0aW9uIGZsb3cuCgpSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGRpZyBpbnRvIGBoc3JfZm9yd2FyZF9za2JgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUgaGFwcGVuaW5nLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMzY6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzctXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2NDpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDQtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNDA2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz02OTQ9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzUxLS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzUyOnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NTMte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04My1cdH0gZWxzZSB7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0Olx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjIKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEhTUiBGb3J3YXJkaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJvdGggYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBjYWxsIGBoc3JfZm9yd2FyZF9za2JgLCBtZWFuaW5nIHRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaW52b2x2ZWQgaW4gZm9yd2FyZGluZywgc28gdGhhdCB3aWxsIGJlIGEgcHJpbWUgZm9jdXMgZm9yIG1lLiBFeGNlbGxlbnQuCgpBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBjYW4gc2VlIHRoYXQgYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LCBpdCBtaWdodCBiZSByZWxldmFudCB0b28sIHNvIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIHRoYXQuCgpBbHJpZ2h0LCBzbyBgaHNyX2Rldl94bWl0YCBpcyBhbm90aGVyIGtleSBvbmUgdG8ga2VlcCBpbiBtaW5kLCBhbmQgb2J2aW91c2x5IGBoc3JfaGFuZGxlX2ZyYW1lYCB0b28sIHNpbmNlIGl0IGlzIGFsc28gaW52b2x2ZWQuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0IG1lIGp1c3QgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBhdCBwbGF5LiBKdXN0IGEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgSFNSYCBpcyB0aGUgb25seSBvbmUuIE9rYXksIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuCgpBbHJpZ2h0LCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNjYW4gb2YgYGNoZWNrX2xvY2FsX2Rlc3RgIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2NoZWNrX2xvY2FsX2Rlc3QmIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2NoZWNrX2xvY2FsX2Rlc3QmIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA0OjE4OjQzLjQwNDc0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDQ1MDk0ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiY2hlY2tfbG9jYWxfZGVzdFwiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTg6NDMuNDA0NzU0MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODQ0NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAzOTM2MWZhZGIzZjViZDYzZDllODc2ZjgzMzZiOGMyOGM5YjVjYWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDQ6MTg6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjM4ZWQ2YjA5ZmM0YWM2IDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC01ODksNiArNTg5LDggQEAgc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gc3RhdGljIHZvaWQgY2hlY2tfbG9jYWxfZGVzdChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiB7XFxuK1xcdHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyO1xcbitcXG4gXFx0aWYgKGhzcl9hZGRyX2lzX3NlbGYoaHNyLCBldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdCkpIHtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2V4Y2x1c2l2ZSA9IHRydWU7XFxuIFxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcXG5AQCAtNjAwLDggKzYwMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUIHx8XFxuIFxcdCAgICBza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9CUk9BRENBU1QpIHtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2Rlc3QgPSB0cnVlO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRmcmFtZS1cXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcdGVsc2VcXG4rXFx0e1xcbitcXHRcXHRtYXN0ZXIgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX01BU1RFUik7XFxuK1xcbitcXHRcXHRpZiAoIW1hc3RlciB8fCAhbWFzdGVyLVxcdTAwM2VkZXYpXFxuK1xcdFxcdHtcXG4rICAgICAgICBcXHRcXHRmcmFtZS1cXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVsc2UgaWYgKG1hc3Rlci1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKVxcbitcXHRcXHR7XFxuKyAgICAgICAgXFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xcbisgICAgICAgIFxcdFxcdGZyYW1lLVxcdTAwM2Vpc19sb2NhbF9kZXN0ID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0ZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2Rlc3QgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA0OjE4OjQzLjk5NDMwMTkzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0NDU1NTIzNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiY2hlY2tfbG9jYWxfZGVzdFwiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljIGluIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gY2hlY2sgaWYgdGhlIG1hc3RlciBwb3J0IGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBzZXQgdGhlIHBhY2tldCB0eXBlIHRvIFBBQ0tFVF9IT1NUIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGZvcndhcmRpbmcgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMzkzNjFmYWRiM2Y1YmQ2M2Q5ZTg3NmY4MzM2YjhjMjhjOWI1Y2FhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDQ6MTg6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTY0Li4zOGVkNmIwOWZjNGFjNiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuKysrIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtNTg5LDYgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gc3RhdGljIHZvaWQgY2hlY2tfbG9jYWxfZGVzdChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4ge1xuK1x0c3RydWN0IGhzcl9wb3J0ICptYXN0ZXI7XG4rXG4gXHRpZiAoaHNyX2FkZHJfaXNfc2VsZihoc3IsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpKSB7XG4gXHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2V4Y2x1c2l2ZSA9IHRydWU7XG4gXHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xuQEAgLTYwMCw4ICs2MDIsMjQgQEAgc3RhdGljIHZvaWQgY2hlY2tfbG9jYWxfZGVzdChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICBza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCB8fFxuIFx0ICAgIHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfQlJPQURDQVNUKSB7XG4gXHRcdGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgPSB0cnVlO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xuK1x0fVxuK1x0ZWxzZVxuK1x0e1xuK1x0XHRtYXN0ZXIgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX01BU1RFUik7XG4rXG4rXHRcdGlmICghbWFzdGVyIHx8ICFtYXN0ZXItXHUwMDNlZGV2KVxuK1x0XHR7XG4rICAgICAgICBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xuK1x0XHR9XG4rXHRcdGVsc2UgaWYgKG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKVxuK1x0XHR7XG4rICAgICAgICBcdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG4rICAgICAgICBcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IHRydWU7XG4rXHRcdH1cbitcdFx0ZWxzZVxuK1x0XHR7XG4rXHRcdFx0ZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCA9IGZhbHNlO1xuK1x0XHR9XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTg6NDMuOTk0MzA1MjcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5OTEwMTM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgdG91Y2hlZCB0aGUgYGNoZWNrX2xvY2FsX2Rlc3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5J3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gY2hlY2tzIGZvciB0aGUgYElGRl9QUk9NSVNDYCBmbGFnIGJlaW5nIHNldC4gSWYgaXQgaXMsIHRoZSBjb2RlIHRoZW4gc2V0cyBgc2tiLVx1MDAzZXBrdF90eXBlYCB0byBgUEFDS0VUX0hPU1RgIGFuZCBhbHNvIGZsYWdzIGBmcmFtZS1cdTAwM2Vpc19sb2NhbF9kZXN0YCBhcyB0cnVlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdl4oCZcmUgdHJlYXRpbmcgdHJhZmZpYyBhcnJpdmluZyBvbiBhIHByb21pc2N1b3VzIG1hc3RlciBwb3J0IGRpZmZlcmVudGx5LiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIEhTUiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldCB1cC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGh1bnQgZG93biB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB1bmRlcnN0YW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGJlaGF2aW9yIGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBoZWxwIG1lIHB1dCB0aGUgY2hhbmdlIGludG8gY29udGV4dCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxODo0Ny4zOTM0MTYwNTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNjY2Mzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTg6NTIuMDAwMDg3MDQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMjk3MTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBjb25maWd1cmF0aW9uczpcblxuKipEaXZpbmcgaW50byB0aGUgSFNSIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBzZXR1cCBpcyB1dGlsaXppbmcgdGhlIGBIU1JgIGNvbmZpZ3VyYXRpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdHJhZmZpYyBpcyBiZWluZyBoYW5kbGVkLCBlc3BlY2lhbGx5IG9uIHRoZSBsb2NhbCBkZXN0aW5hdGlvbiBzaWRlLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBpbnRvIHRoZSBgY2hlY2tfbG9jYWxfZGVzdGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgcm91dGluZyBkZWNpc2lvbnMsIGRldGVybWluaW5nIHdoZXJlIHRoZSBsb2NhbCBkZXZpY2Ugc2hvdWxkIGRpcmVjdCB0aGUgdHJhZmZpYyBiYXNlZCBvbiB0aGUgSFNSIHNldHVwLiBJJ20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgY29kZSBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCB0aGUgY2hlY2tzIGl0IHBlcmZvcm1zIGFuZCB0aGUgY29uZGl0aW9ucyBpdCBldmFsdWF0ZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQgaXMgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxODo1NS4yMDMwNjI2ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTEyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2xvY2FsX2Rlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9oc3JfZm9yd2FyZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01MTk9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01ODgtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU4OTpzdGF0aWMgdm9pZCBjaGVja19sb2NhbF9kZXN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01OTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY5ND1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc0NS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQ2OlxcdGNoZWNrX2xvY2FsX2Rlc3QocG9ydC1cXHUwMDNlaHNyLCBza2IsIGZyYW1lKTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxODo1NS4zODE5ODIyNzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEzNDQ3MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipUcmFjaW5nIHRoZSBEYXRhIEZsb3c6IGBjaGVja19sb2NhbF9kZXN0YCwgYGZpbGxfZnJhbWVfaW5mb2AsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGF0YSBwYXRoLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhpbmdzIGFyZSBvcmlnaW5hdGluZy4gYGNoZWNrX2xvY2FsX2Rlc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0J3MgZ2V0dGluZyBjYWxsZWQgYnkgYGZpbGxfZnJhbWVfaW5mb2AuIFRoYXQncyB0aGUgZmlyc3QgY29ubmVjdGlvbiB0byBub3RlOiBgY2hlY2tfbG9jYWxfZGVzdGAgcHJvdmlkZXMgc29tZSBpbnB1dCBvciBzZXJ2aWNlICp0byogYGZpbGxfZnJhbWVfaW5mb2AuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoYXQgc2VydmljZSBpcyBzcGVjaWZpY2FsbHkuIElzIGl0IGFkZHJlc3MgdmVyaWZpY2F0aW9uLCBzb21lIGtpbmQgb2Ygcm91dGluZyBsb29rdXAsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gZGV0ZXJtaW5pbmcgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIFwibG9jYWxcIiBidXQgXCJsb2NhbFwiIGluIHdoYXQgY29udGV4dD8gVGhlIG5ldHdvcmsgc3RhY2s/IFRoZSBjdXJyZW50IGRldmljZT8gSSBuZWVkIHRoZSBkb2N1bWVudGF0aW9uIGhlcmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5Ob3csIGBmaWxsX2ZyYW1lX2luZm9gIGl0c2VsZiBpc24ndCBhIHRvcC1sZXZlbCBmdW5jdGlvbi4gSXQncyBpbnZva2VkIGJ5IGBoc3JfZm9yd2FyZF9za2JgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSAqcHVycG9zZSogb2YgYGZpbGxfZnJhbWVfaW5mb2AgaXMgdG8gY29uc3RydWN0IG9yIHBvcHVsYXRlIHRoZSBmcmFtZSBpbmZvcm1hdGlvbiwgcGVyaGFwcyB1c2VkIGluIGZvcndhcmRpbmcgYSBuZXR3b3JrIHBhY2tldC4gU28sIGBoc3JfZm9yd2FyZF9za2JgIGxpa2VseSBoYW5kbGVzIHRoZSBoaWdoLWxldmVsIHRhc2sgb2Ygc2VuZGluZyBhIHBhY2tldCwgYW5kIG5lZWRzIGBmaWxsX2ZyYW1lX2luZm9gIHRvIGdlbmVyYXRlIHRoZSByZWxldmFudCBmcmFtZSBkZXRhaWxzLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYGNoZWNrX2xvY2FsX2Rlc3RgIGluZGlyZWN0bHkgcGxheXMgYSByb2xlIGluIGZvcndhcmRpbmcuIElzIGl0IHBhcnQgb2YgdGhlIG5vcm1hbCBvcGVyYXRpb24gb3IgYW4gb3B0aW1pemF0aW9uIGluIGNhc2VzIG9mIGxvY2FsIGRlc3RpbmF0aW9uP1xuXG5TbywgaWYgSSBwdXQgaXQgYWxsIHRvZ2V0aGVyOiBgaHNyX2ZvcndhcmRfc2tiYCBjYWxscyBgZmlsbF9mcmFtZV9pbmZvYCwgYW5kIGBmaWxsX2ZyYW1lX2luZm9gIGluIHR1cm4gY2FsbHMgYGNoZWNrX2xvY2FsX2Rlc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLCBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBwYXJhbWV0ZXJzIGVhY2ggZnVuY3Rpb24gdXNlcyBhbmQgd2hpY2ggcGFyYW1ldGVycyB0aGUgb3RoZXIgZnVuY3Rpb25zIGRlcGVuZCBvbi4gSSBzZWUgYSBjaGFpbiBvZiBwcm9jZXNzaW5nOiB0aGUgcGFja2V0IGlzIGxpa2VseSByZWNlaXZlZCBhdCBgaHNyX2ZvcndhcmRfc2tiYCwgdGhlbiBgZmlsbF9mcmFtZV9pbmZvYCBkb2VzIHNvbWUgd29yaywgYW5kIGNydWNpYWxseSwgaXQgY2FsbHMgdXBvbiBgY2hlY2tfbG9jYWxfZGVzdGAuIFRoaXMgc3RydWN0dXJlIHN1Z2dlc3RzIGBjaGVja19sb2NhbF9kZXN0YCBpcyBhIGxvdy1sZXZlbCBoZWxwZXIgZnVuY3Rpb24sIHBvc3NpYmx5IGZvciB2YWxpZGF0aW9uIG9yIGNsYXNzaWZpY2F0aW9uICpiZWZvcmUqIHRoZSBmcmFtZSBnZXRzIHRoZSBmdWxsIHRyZWF0bWVudCBvZiBgZmlsbF9mcmFtZV9pbmZvYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgYXQgZWFjaCBzdGVwLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZvciBlYWNoIGZ1bmN0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA0OjE4OjU5Ljk5NTQzMjA3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMxMjM0ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9mcmFtZV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NjI2PXN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NDctXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY0ODppbnQgaHNyX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY0OS1cXHRcXHRcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY3NC1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Njc1OmludCBwcnBfZmlsbF9mcmFtZV9pbmZvKF9fYmUxNiBwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjc2LVxcdFxcdFxcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjkzLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2OTQ6c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjk1LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDEtXFx0ZnJhbWUtXFx1MDAzZXBvcnRfcmN2ID0gcG9ydDtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzQyOlxcdHJldCA9IGhzci1cXHUwMDNlcHJvdG9fb3BzLVxcdTAwM2VmaWxsX2ZyYW1lX2luZm8ocHJvdG8sIHNrYiwgZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NDMtXFx0aWYgKHJldClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03NTI9dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc1NzpcXHRpZiAoZmlsbF9mcmFtZV9pbmZvKFxcdTAwMjZmcmFtZSwgc2tiLCBwb3J0KSBcXHUwMDNjIDApXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1OC1cXHRcXHRnb3RvIG91dF9kcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNDoxOTowMC4xMDg1NjU3MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4Mzk4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSIEZvcndhcmRpbmcgUGF0aCoqXG5cbk9rYXksIHNvIGBoc3JfZm9yd2FyZF9za2JgIGlzIHRoZSBwcmltZSBkaXJlY3RpdmUsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIGZvcndhcmRpbmcgcHJvY2Vzcy4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSBldmVyeXRoaW5nIHNob3VsZCBzdGFydC4gQW5kIGl0J3MgZGVmaW5pdGVseSBiZWluZyByZWFjaGVkLCBzbyB0aGF0J3MgYSBnb29kIHNpZ24uIE5vIG9idmlvdXMgZGVhZCBjb2RlIHRvIGh1bnQgZG93bi5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgY29uZmlndXJlZC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEhTUiwgdGhlIHByaW1hcnkgY29uZmlnIHRvIGNoZWNrIGlzIG9idmlvdXNseSBgSFNSYC4gR290dGEgbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkIGFuZCBiZWhhdmluZyBhcyBleHBlY3RlZC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzOyBgY2hlY2tfbG9jYWxfZGVzdGAsIGBoc3JfZm9yd2FyZF9za2JgIChvYnZpb3VzbHkhKSwgYW5kIGBmaWxsX2ZyYW1lX2luZm9gIHN0YW5kIG91dC4gVGhleSdsbCBiZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgZnVuY3Rpb24gZmxvdy5cblxuUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQncyBoZWFkIG92ZXIgdG8gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGRpZyBpbnRvIGBoc3JfZm9yd2FyZF9za2JgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIHJlYWwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTk6MDMuNzU2OTY3Mzg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMzQxOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTIyND1zdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0OlxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2NS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDYtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Njk0PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzUxLS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc1Mjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc1My17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTUtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODAtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVxcdH0gZWxzZSB7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTk6MDMuOTIyMzA4NzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMzA1MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBIU1IgRm9yd2FyZGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQm90aCBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIGNhbGwgYGhzcl9mb3J3YXJkX3NrYmAsIG1lYW5pbmcgdGhhdCdzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGludm9sdmVkIGluIGZvcndhcmRpbmcsIHNvIHRoYXQgd2lsbCBiZSBhIHByaW1lIGZvY3VzIGZvciBtZS4gRXhjZWxsZW50LlxuXG5BbmQgd2hpbGUgSSdtIGF0IGl0LCBJIGNhbiBzZWUgdGhhdCBgY2hlY2tfbG9jYWxfZGVzdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiB0aGF0IGNvbnRleHQsIGl0IG1pZ2h0IGJlIHJlbGV2YW50IHRvbywgc28gSSBzaG91bGQgcHJvYmFibHkga2VlcCBhbiBleWUgb24gdGhhdC5cblxuQWxyaWdodCwgc28gYGhzcl9kZXZfeG1pdGAgaXMgYW5vdGhlciBrZXkgb25lIHRvIGtlZXAgaW4gbWluZCwgYW5kIG9idmlvdXNseSBgaHNyX2hhbmRsZV9mcmFtZWAgdG9vLCBzaW5jZSBpdCBpcyBhbHNvIGludm9sdmVkLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0IG1lIGp1c3QgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBhdCBwbGF5LiBKdXN0IGEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgSFNSYCBpcyB0aGUgb25seSBvbmUuIE9rYXksIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cbkFscmlnaHQsIEknbGwgZG8gYSBxdWljayBzY2FuIG9mIGBjaGVja19sb2NhbF9kZXN0YCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MiwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDQ6MTk6MDguMjQ1MzY4NDU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NDUxNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImNoZWNrX2xvY2FsX2Rlc3RcIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYyBpbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGNoZWNrIGlmIHRoZSBtYXN0ZXIgcG9ydCBkZXZpY2UgaXMgaW4gcHJvbWlzY3VvdXMgbW9kZSBhbmQgc2V0IHRoZSBwYWNrZXQgdHlwZSB0byBQQUNLRVRfSE9TVCBhY2NvcmRpbmdseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJjaGVja19sb2NhbF9kZXN0XCIsXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFja2V0IGZvcndhcmRpbmcgbG9naWMgaW4gSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSB0byBjaGVjayBpZiB0aGUgbWFzdGVyIHBvcnQgZGV2aWNlIGlzIGluIHByb21pc2N1b3VzIG1vZGUgYW5kIHNldCB0aGUgcGFja2V0IHR5cGUgdG8gUEFDS0VUX0hPU1QgYWNjb3JkaW5nbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgZm9yd2FyZGluZyBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[1] Phase: Succeeded StartedAt: 2026-07-23 04:19:19 +0000 UTC FinishedAt: 2026-07-23 04:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 04:19:19 +0000 UTC FinishedAt: 2026-07-23 04:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2] Phase: Succeeded StartedAt: 2026-07-23 04:19:19 +0000 UTC FinishedAt: 2026-07-23 08:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 04:19:19 +0000 UTC FinishedAt: 2026-07-23 08:46:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 04:19:19 +0000 UTC FinishedAt: 2026-07-23 04:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 04:19:19 +0000 UTC FinishedAt: 2026-07-23 04:19:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqkdzt/series-workflowqkdzt-convert-artifact-730513285/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 04:19:29 +0000 UTC FinishedAt: 2026-07-23 04:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 04:19:29 +0000 UTC FinishedAt: 2026-07-23 04:54:45 +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:*d99ce425-5b60-4ae7-9744-128737a46870,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-workflowqkdzt/series-workflowqkdzt-convert-artifact-730513285/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": "3a4dbd88-5d2c-4d9a-868d-7c55ffb2da05", "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-workflowqkdzt/series-workflowqkdzt-build-action-474577707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 04:19:29 +0000 UTC FinishedAt: 2026-07-23 04:54: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:*d99ce425-5b60-4ae7-9744-128737a46870,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-workflowqkdzt/series-workflowqkdzt-convert-artifact-730513285/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": "3a4dbd88-5d2c-4d9a-868d-7c55ffb2da05", "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-workflowqkdzt/series-workflowqkdzt-build-action-474577707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 04:54:45 +0000 UTC FinishedAt: 2026-07-23 04:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 04:54:45 +0000 UTC FinishedAt: 2026-07-23 04:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 04:54:45 +0000 UTC FinishedAt: 2026-07-23 04:54:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 04:54:45 +0000 UTC FinishedAt: 2026-07-23 04:54:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqkdzt/series-workflowqkdzt-convert-artifact-3912936544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 04:54:55 +0000 UTC FinishedAt: 2026-07-23 04:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 04:54:55 +0000 UTC FinishedAt: 2026-07-23 04:56:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a4dbd88-5d2c-4d9a-868d-7c55ffb2da05,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-workflowqkdzt/series-workflowqkdzt-build-action-474577707/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-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 04:57:00 +0000 UTC FinishedAt: 2026-07-23 04:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 04:57:00 +0000 UTC FinishedAt: 2026-07-23 04:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 04:57:00 +0000 UTC FinishedAt: 2026-07-23 05:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 04:57:00 +0000 UTC FinishedAt: 2026-07-23 05:41:35 +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:*d99ce425-5b60-4ae7-9744-128737a46870,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-workflowqkdzt/series-workflowqkdzt-convert-artifact-3912936544/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": "cb6b4cee-c6d2-4d1e-9f44-37585157b17a", "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-workflowqkdzt/series-workflowqkdzt-build-action-1135417628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 04:57:00 +0000 UTC FinishedAt: 2026-07-23 05:40:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d99ce425-5b60-4ae7-9744-128737a46870,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-workflowqkdzt/series-workflowqkdzt-convert-artifact-3912936544/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": "cb6b4cee-c6d2-4d1e-9f44-37585157b17a", "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-workflowqkdzt/series-workflowqkdzt-build-action-1135417628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 05:41:35 +0000 UTC FinishedAt: 2026-07-23 05:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 05:41:35 +0000 UTC FinishedAt: 2026-07-23 05:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 05:41:35 +0000 UTC FinishedAt: 2026-07-23 05:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 05:41:35 +0000 UTC FinishedAt: 2026-07-23 05:43:44 +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:*cb6b4cee-c6d2-4d1e-9f44-37585157b17a,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-workflowqkdzt/series-workflowqkdzt-build-action-1135417628/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-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 05:43:50 +0000 UTC FinishedAt: 2026-07-23 08:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 05:43:50 +0000 UTC FinishedAt: 2026-07-23 08:46:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"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:*3a4dbd88-5d2c-4d9a-868d-7c55ffb2da05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb6b4cee-c6d2-4d1e-9f44-37585157b17a,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-workflowqkdzt/series-workflowqkdzt-build-action-474577707/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-workflowqkdzt/series-workflowqkdzt-build-action-1135417628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 05:43:50 +0000 UTC FinishedAt: 2026-07-23 05:44:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 05:43:50 +0000 UTC FinishedAt: 2026-07-23 05:43:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"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-workflowqkdzt/series-workflowqkdzt-convert-artifact-2524121785/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 05:43:50 +0000 UTC FinishedAt: 2026-07-23 05:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 05:43:50 +0000 UTC FinishedAt: 2026-07-23 05:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 05:43:50 +0000 UTC FinishedAt: 2026-07-23 05:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 05:44:00 +0000 UTC FinishedAt: 2026-07-23 08:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkdzt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","check_local_dest","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1df10cef2d1e7f9f2fb7eddb67fc70d3abf101f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"e4a65ec0-705f-4f45-8621-859e60a96919","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 05:44:00 +0000 UTC FinishedAt: 2026-07-23 08:46:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a4dbd88-5d2c-4d9a-868d-7c55ffb2da05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb6b4cee-c6d2-4d1e-9f44-37585157b17a,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-workflowqkdzt/series-workflowqkdzt-build-action-474577707/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-workflowqkdzt/series-workflowqkdzt-build-action-1135417628/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-workflowqkdzt/series-workflowqkdzt-convert-artifact-2524121785/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,}