Name: series-workflowhrn2h Phase: Succeeded StartedAt: 2026-07-20 17:51:34 +0000 UTC FinishedAt: 2026-07-20 22:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[0] Phase: Succeeded StartedAt: 2026-07-20 17:51:34 +0000 UTC FinishedAt: 2026-07-20 18:32:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 17:51:34 +0000 UTC FinishedAt: 2026-07-20 18:32:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "fec1d108-66c3-45b8-85e1-c459b2fdcea4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_rq_stat_sum", "blk_stat_timer_fn", "iolatency_check_latencies" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19ycV9zdGF0X3N1bSYjMzQ7LAogICAgJiMzNDtibGtfc3RhdF90aW1lcl9mbiYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uIHdoZXJlIHRoZSBgYmF0Y2hgIHZhbHVlIHdhcyBub3QgdXBkYXRlZCBpbiB0aGUgZGVzdGluYXRpb24gc3RydWN0LiBUaGlzIGNhdXNlZCBpbmNvcnJlY3QgbWVhbiBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gc3RydWN0IHdhcyBzdWJzZXF1ZW50bHkgdXNlZCBhcyBhIHNvdXJjZSwgc3VjaCBhcyBpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3YzU2ZGRjY2VmYTBjNzY4N2Y2ZDFkMzI4YjhhOGUzNGVkNjk4NTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxODozMDowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3RhdC5jIGIvYmxvY2svYmxrLXN0YXQuY1xuaW5kZXggZGUxMjZlMWVhNWFjNDIuLjRkNDc4MTM1MDA4MzdhIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXN0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXN0YXQuY1xuQEAgLTM2LDYgJiM0MzszNiw3IEBAIHZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYylcbiBcdGRzdC1cdTAwM2VtZWFuID0gZGl2X3U2NChzcmMtXHUwMDNlYmF0Y2ggJiM0MzsgZHN0LVx1MDAzZW1lYW4gKiBkc3QtXHUwMDNlbnJfc2FtcGxlcyxcbiBcdFx0XHRcdGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7IHNyYy1cdTAwM2Vucl9zYW1wbGVzKTtcbiBcbiYjNDM7XHRkc3QtXHUwMDNlYmF0Y2ggJiM0Mzs9IHNyYy1cdTAwM2ViYXRjaDtcbiBcdGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7PSBzcmMtXHUwMDNlbnJfc2FtcGxlcztcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19ycV9zdGF0X3N1bSYjMzQ7LAogICAgJiMzNDtibGtfc3RhdF90aW1lcl9mbiYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uIHdoZXJlIHRoZSBgYmF0Y2hgIHZhbHVlIHdhcyBub3QgdXBkYXRlZCBpbiB0aGUgZGVzdGluYXRpb24gc3RydWN0LiBUaGlzIGNhdXNlZCBpbmNvcnJlY3QgbWVhbiBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gc3RydWN0IHdhcyBzdWJzZXF1ZW50bHkgdXNlZCBhcyBhIHNvdXJjZSwgc3VjaCBhcyBpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdjNTZkZGNjZWZhMGM3Njg3ZjZkMWQzMjhiOGE4ZTM0ZWQ2OTg1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE4OjMwOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN0YXQuYyBiL2Jsb2NrL2Jsay1zdGF0LmMKaW5kZXggZGUxMjZlMWVhNWFjNDIuLjRkNDc4MTM1MDA4MzdhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3RhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1zdGF0LmMKQEAgLTM2LDYgJiM0MzszNiw3IEBAIHZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYykKIAlkc3QtJmd0O21lYW4gPSBkaXZfdTY0KHNyYy0mZ3Q7YmF0Y2ggJiM0MzsgZHN0LSZndDttZWFuICogZHN0LSZndDtucl9zYW1wbGVzLAogCQkJCWRzdC0mZ3Q7bnJfc2FtcGxlcyAmIzQzOyBzcmMtJmd0O25yX3NhbXBsZXMpOwogCiYjNDM7CWRzdC0mZ3Q7YmF0Y2ggJiM0Mzs9IHNyYy0mZ3Q7YmF0Y2g7CiAJZHN0LSZndDtucl9zYW1wbGVzICYjNDM7PSBzcmMtJmd0O25yX3NhbXBsZXM7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guCgoqKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIFN0YXRpc3RpY3MgU3VtbWF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoZWQgYGJsb2NrL2Jsay1zdGF0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBibGtfcnFfc3RhdF9zdW1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBzZWVtcyB3ZSBoYXZlIGFuIGFkZGl0aW9uOiBgZHN0LSZndDtiYXRjaCAmIzQzOz0gc3JjLSZndDtiYXRjaDtgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLgoKTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGJsa19ycV9zdGF0X3N1bWAgaXRzZWxmIHdpdGhpbiB0aGUgc291cmNlIGZpbGUsIGBibG9jay9ibGstc3RhdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgYmxvY2sgSS9PIHN0YXRpc3RpY3Mgc3VtbWF0aW9uIG11c3QgcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkc3QtJmd0O2JhdGNoYCBhbmQgYHNyYy0mZ3Q7YmF0Y2hgIHJlcHJlc2VudCwgYW5kIHdoeSB3ZSYjMzk7cmUgYWRkaW5nIHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYmF0Y2ggc3RhdGlzdGljcyBhcmUgYmVpbmcgdXNlZCBkb3duc3RyZWFtIHRvIGZ1bGx5IGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXRjaC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gYmF0Y2hpbmcgc29tZSBraW5kIG9mIEkvTyBzdGF0aXN0aWMuIEkgbmVlZCB0byBzZWUgaWYgaXQgaXMgSU9QUywgb3IgbGF0ZW5jeS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfcnFfc3RhdF9zdW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstc3RhdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zdGF0LmM9MjA9dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstc3RhdC5jLTI3LS8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKi9cbmJsb2NrL2Jsay1zdGF0LmM6Mjg6dm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICpkc3QsIHN0cnVjdCBibGtfcnFfc3RhdCAqc3JjKVxuYmxvY2svYmxrLXN0YXQuYy0yOS17XG4tLVxuYmxvY2svYmxrLXN0YXQuYz03OD1zdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5ibG9jay9ibGstc3RhdC5jLTkxLVx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgY2ItXHUwMDNlYnVja2V0czsgYnVja2V0JiM0MzsmIzQzOykge1xuYmxvY2svYmxrLXN0YXQuYzo5MjpcdFx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2Y2ItXHUwMDNlc3RhdFtidWNrZXRdLCBcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcbmJsb2NrL2Jsay1zdGF0LmMtOTMtXHRcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgYmxrX3JxX3N0YXRfc3VtYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmxrX3JxX3N0YXRfc3VtYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYmxvY2sgSS9PIHN1YnN5c3RlbS4gRmlyc3QsIEkmIzM5O2xsIHRyYWNrIGRvd24gaXRzIHVzZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgZW1wbG95ZWQgaW4gYGJsa19zdGF0X3RpbWVyX2ZuYC4gTm93LCB0aGF0IHByb3ZpZGVzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBJJiMzOTttIGZhbWlsaWFyIHdpdGggaG93IGJsb2NrIEkvTyBzdGF0aXN0aWNzIGFuZCB0aW1lcnMgd29yaywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyBkb2luZyB3aXRoIGBibGtfcnFfc3RhdF9zdW1gLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGBibGtfc3RhdF90aW1lcl9mbmAgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc3RhdGlzdGljIGlzIGJlaW5nIGxldmVyYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfc3RhdF90aW1lcl9mbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zdGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYz01MT12b2lkIGJsa19zdGF0X2FkZChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU2NCBub3cpXG4tLVxuYmxvY2svYmxrLXN0YXQuYy03Ny1cbmJsb2NrL2Jsay1zdGF0LmM6Nzg6c3RhdGljIHZvaWQgYmxrX3N0YXRfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5ibG9jay9ibGstc3RhdC5jLTc5LXtcbi0tXG5ibG9jay9ibGstc3RhdC5jPTEwMT1ibGtfc3RhdF9hbGxvY19jYWxsYmFjayh2b2lkICgqdGltZXJfZm4pKHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5jLTEyNy1cdGNiLVx1MDAzZWJ1Y2tldHMgPSBidWNrZXRzO1xuYmxvY2svYmxrLXN0YXQuYzoxMjg6XHR0aW1lcl9zZXR1cChcdTAwMjZjYi1cdTAwM2V0aW1lciwgYmxrX3N0YXRfdGltZXJfZm4sIDApO1xuYmxvY2svYmxrLXN0YXQuYy0xMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBTdGF0aXN0aWNzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyBhIHRpbWVyIGNhbGxiYWNrLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZpeCB0byBgYmxrX3JxX3N0YXRfc3VtYCwgc3BlY2lmaWNhbGx5IGEgbWlzc2luZyB1cGRhdGUgdG8gYGRzdC0mZ3Q7YmF0Y2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIGltcGFjdGluZyBibG9jayBsYXllciBzdGF0aXN0aWNzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgdGhlIGJsb2NrIGxheWVyLCBhbmQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByYXRoZXIgdGhhbiBqdXN0IGEgY29zbWV0aWMgb25lLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN0YXRpc3RpY3MgdGhhdCBmZWVkIGludG8gdGhpbmdzIGxpa2Uga3liZXIgSS9PIHNjaGVkdWxlciBhbmQgYmxvY2sgcG9sbGluZyDigJMgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50cy4gR2l2ZW4gaG93IHZpdGFsIHRob3NlIGZ1bmN0aW9ucyBhcmUsIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBpbXBhY3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggd2hpY2ggbW9kdWxlcyBhbmQgc3RydWN0dXJlcyB1c2UgYGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrYCB0byB0aG9yb3VnaGx5IGFzc2VzcyB0aGUgcGF0Y2gmIzM5O3MgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYz0xMDA9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0LmM6MTAxOmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxuYmxvY2svYmxrLXN0YXQuYy0xMDItXHRcdFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5oPTc1PXZvaWQgYmxrX3N0YXRfZGlzYWJsZV9hY2NvdW50aW5nKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcbi0tXG5ibG9jay9ibGstc3RhdC5oLTc3LS8qKlxuYmxvY2svYmxrLXN0YXQuaDo3ODogKiBibGtfc3RhdF9hbGxvY19jYWxsYmFjaygpIC0gQWxsb2NhdGUgYSBibG9jayBzdGF0aXN0aWNzIGNhbGxiYWNrLlxuYmxvY2svYmxrLXN0YXQuaC03OS0gKiBAdGltZXJfZm46IFRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuLS1cbmJsb2NrL2Jsay1zdGF0Lmg9ODg9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0Lmg6ODk6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXG5ibG9jay9ibGstc3RhdC5oLTkwLVx0XHRcdGludCAoKmJ1Y2tldF9mbikoY29uc3Qgc3RydWN0IHJlcXVlc3QgKiksXG4tLVxuYmxvY2svYmxrLXdidC5jPTcxND1zdGF0aWMgc3RydWN0IHJxX3diICp3YnRfYWxsb2Modm9pZClcbi0tXG5ibG9jay9ibGstd2J0LmMtNzIwLVxuYmxvY2svYmxrLXdidC5jOjcyMTpcdHJ3Yi1cdTAwM2VjYiA9IGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHdiX3RpbWVyX2ZuLCB3YnRfZGF0YV9kaXIsIDIsIHJ3Yik7XG5ibG9jay9ibGstd2J0LmMtNzIyLVx0aWYgKCFyd2ItXHUwMDNlY2IpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgV3JpdGViYWNrIFRocm90dGxpbmcgaW4gdGhlIEJsb2NrIExheWVyKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd3JpdGViYWNrIHRocm90dGxpbmcgd29ya3MgYXQgdGhlIGJsb2NrIGxheWVyLiBJIGtub3cgYGJsay13YnQuY2AgaXMgaW52b2x2ZWQsIG9idmlvdXNseS4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGFjdHVhbGx5IGRvaW5nIHRoZSB0aHJvdHRsaW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYmxrLXN0YXQuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBzdGF0cyBhcmUgYmVpbmcgc3VtbWVkLCB3aGljaCBzaG91bGQgaW52b2x2ZSBgYmxrX3JxX3N0YXRfc3VtYC4gVGhhdCBmZWVscyBsaWtlIHRoZSBrZXkgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgaXMgY2FsbGVkIGZyb20uIFJpZ2h0LCBgYmxrX3JxX3N0YXRfc3VtYCBpcyBjYWxsZWQgZnJvbSBgYmxrX3N0YXRfdGltZXJfZm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBhIHRpbWVyIHRyaWdnZXJzIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgc3RhdHMuIFNvLCBJIG5lZWQgdG8gZGlnIGludG8gYGJsa19zdGF0X3RpbWVyX2ZuYCB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgYW5kIGZyZXF1ZW5jeSBvZiB0aGVzZSBzdGF0cyBhbmQgdGhhdCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhyb3R0bGluZyBiZWhhdmlvci4gTGV0IG1lIHN3aXRjaCBteSBmb2N1cyB0byBgYmxvY2svYmxrLXN0YXQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcbiAgNzE6XHRcdFx0c3RhdCA9IFx1MDAyNnBlcl9jcHVfcHRyKGNiLVx1MDAzZWNwdV9zdGF0LCBjcHUpW2J1Y2tldF07XG4gIDcyOlx0XHRcdGJsa19ycV9zdGF0X2FkZChzdGF0LCB2YWx1ZSk7XG4gIDczOlx0XHR9XG4gIDc0Olx0XHRwdXRfY3B1KCk7XG4gIDc1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIHZvaWQgYmxrX3N0YXRfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gIDc5Olx0e1xuICA4MDpcdFx0c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYiA9IHRpbWVyX2NvbnRhaW5lcl9vZihjYiwgdCwgdGltZXIpO1xuICA4MTpcdFx0dW5zaWduZWQgaW50IGJ1Y2tldDtcbiAgODI6XHRcdGludCBjcHU7XG4gIDgzOlx0XG4gIDg0Olx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgY2ItXHUwMDNlYnVja2V0czsgYnVja2V0JiM0MzsmIzQzOylcbiAgODU6XHRcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZjYi1cdTAwM2VzdGF0W2J1Y2tldF0pO1xuICA4NjpcdFxuICA4NzpcdFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiAgODg6XHRcdFx0c3RydWN0IGJsa19ycV9zdGF0ICpjcHVfc3RhdDtcbiAgODk6XHRcbiAgOTA6XHRcdFx0Y3B1X3N0YXQgPSBwZXJfY3B1X3B0cihjYi1cdTAwM2VjcHVfc3RhdCwgY3B1KTtcbiAgOTE6XHRcdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIGNiLVx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCYjNDM7JiM0MzspIHtcbiAgOTI6XHRcdFx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2Y2ItXHUwMDNlc3RhdFtidWNrZXRdLCBcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcbiAgOTM6XHRcdFx0XHRibGtfcnFfc3RhdF9pbml0KFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xuICA5NDpcdFx0XHR9XG4gIDk1Olx0XHR9XG4gIDk2Olx0XG4gIDk3Olx0XHRjYi1cdTAwM2V0aW1lcl9mbihjYik7XG4gIDk4Olx0fVxuICA5OTpcdFxuIDEwMDpcdHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqXG4gMTAxOlx0YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXG4gMTAyOlx0XHRcdFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcbiAxMDM6XHRcdFx0XHR1bnNpZ25lZCBpbnQgYnVja2V0cywgdm9pZCAqZGF0YSlcbiAxMDQ6XHR7XG4gMTA1Olx0XHRzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKmNiO1xuIDEwNjpcdFxuIDEwNzpcdFx0Y2IgPSBrbWFsbG9jX29iaigqY2IpO1xuIDEwODpcdFx0aWYgKCFjYilcbiAxMDk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTEwOlx0XG4gMTExOlx0XHRjYi1cdTAwM2VzdGF0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBibGtfcnFfc3RhdCwgYnVja2V0cyk7XG4gMTEyOlx0XHRpZiAoIWNiLVx1MDAzZXN0YXQpIHtcbiAxMTM6XHRcdFx0a2ZyZWUoY2IpO1xuIDExNDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMTU6XHRcdH1cbiAxMTY6XHRcdGNiLVx1MDAzZWNwdV9zdGF0ID0gX19hbGxvY19wZXJjcHUoYnVja2V0cyAqIHNpemVvZihzdHJ1Y3QgYmxrX3JxX3N0YXQpLFxuIDExNzpcdFx0XHRcdFx0ICAgICAgX19hbGlnbm9mX18oc3RydWN0IGJsa19ycV9zdGF0KSk7XG4gMTE4Olx0XHRpZiAoIWNiLVx1MDAzZWNwdV9zdGF0KSB7XG4gMTE5Olx0XHRcdGtmcmVlKGNiLVx1MDAzZXN0YXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbG9jayBMYXllciBTdGF0aXN0aWNzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHR3ZWFraW5nIHRoZSBzdGF0aXN0aWNzIGdhdGhlcmVkIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdXBkYXRpbmcgYGRzdC0mZ3Q7YmF0Y2hgIHdpdGhpbiB0aGUgYGJsa19ycV9zdGF0X3N1bWAgZnVuY3Rpb24uIEhtbSwgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IEFic29sdXRlbHksIHllcy4gQW55IGNoYW5nZSB0b3VjaGluZyBzdGF0aXN0aWNzIGNvbGxlY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBibG9jayBsYXllciwgaXMgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciB1bmNvdmVyaW5nIGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBXZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB3cml0ZWJhY2sgb3IgdGhyb3R0bGluZywgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCYjMzk7cyBzZWUuLi4gY291bGQgaXQgYmUgYENPTkZJR19CTEtfV0JUYCBvciBgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR2A/IFJpZ2h0LCBiZXN0IHRvIGNoZWNrIGBibG9jay9LY29uZmlnYCB0byBiZSBjZXJ0YWluLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBCTEtfV0JUYCBmb3IgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19XQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTA2PWNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbi0tXG5ibG9jay9LY29uZmlnLTExNy1cbmJsb2NrL0tjb25maWc6MTE4OmNvbmZpZyBCTEtfV0JUXG5ibG9jay9LY29uZmlnLTExOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTI2LVxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcbmJsb2NrL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBibGstc3RhdC5jYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIGBibGstc3RhdC5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHNwZWNpZmljIGNvbmRpdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBvciBpZiB0aGVyZSBhcmUgY2VydGFpbiBmbGFncywgZGVmaW5lcywgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBpdHMgcHJlc2VuY2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBndWFyZCBpdHMgY29tcGlsYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSBkaWFnbm9zaW5nIGFueSByZWxhdGVkIGlzc3Vlcy4gTGV0JiMzOTtzIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstc3RhdC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuLS1cbmJsb2NrL01ha2VmaWxlLTEwLVx0XHRcdGJsay1tZXJnZS5vIGJsay10aW1lb3V0Lm8gYmxrLWxpYi5vIGJsay1tcS5vIFxcXG5ibG9jay9NYWtlZmlsZToxMTpcdFx0XHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcbmJsb2NrL01ha2VmaWxlLTEyLVx0XHRcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIGxpa2UgYGJsay1zdGF0Lm9gIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggc3VnZ2VzdHMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgY29yZSB0byB0aGUgc3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBgYmxrX3JxX3N0YXRfc3VtYCBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gYGJsa19zdGF0X3RpbWVyX2ZuYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0ZWxscyBtZSBob3cgdGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IGFnZ3JlZ2F0ZWQuIEZvbGxvd2luZyB0aGUgZmxvdywgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyB0cmlnZ2VyZWQgYnkgYSB0aW1lci4gTm93LCB3aGVyZSBpcyB0aGlzIHRpbWVyIHNldCB1cD8gQWgsIGl0JiMzOTtzIGluIGBibGtfc3RhdF9hbGxvY19jYWxsYmFja2AuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluay4gQW5kLCBJIHNlZSB0aGF0IGBibGstd2J0LmNgIG1ha2VzIHVzZSBvZiBgYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGJhY2smIzM5O3MgdXNlLiBTaW5jZSBpdCYjMzk7cyBhIGNhbGxiYWNrLCBvdGhlciBtb2R1bGVzIG1pZ2h0IGJlIHVzaW5nIHRoaXMgYXMgd2VsbC4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBjb25maXJtIHdoZXRoZXIgYGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrYCBpcyB1c2VkIGVsc2V3aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgdXNhZ2Ugb2YgdGhhdCBjYWxsYmFjayBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBzdXJyb3VuZGluZyB0aGUgYmxvY2sgbGF5ZXIgc3RhdGlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYz0xMDA9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0LmM6MTAxOmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxuYmxvY2svYmxrLXN0YXQuYy0xMDItXHRcdFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5oPTc1PXZvaWQgYmxrX3N0YXRfZGlzYWJsZV9hY2NvdW50aW5nKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcbi0tXG5ibG9jay9ibGstc3RhdC5oLTc3LS8qKlxuYmxvY2svYmxrLXN0YXQuaDo3ODogKiBibGtfc3RhdF9hbGxvY19jYWxsYmFjaygpIC0gQWxsb2NhdGUgYSBibG9jayBzdGF0aXN0aWNzIGNhbGxiYWNrLlxuYmxvY2svYmxrLXN0YXQuaC03OS0gKiBAdGltZXJfZm46IFRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuLS1cbmJsb2NrL2Jsay1zdGF0Lmg9ODg9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0Lmg6ODk6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXG5ibG9jay9ibGstc3RhdC5oLTkwLVx0XHRcdGludCAoKmJ1Y2tldF9mbikoY29uc3Qgc3RydWN0IHJlcXVlc3QgKiksXG4tLVxuYmxvY2svYmxrLXdidC5jPTcxND1zdGF0aWMgc3RydWN0IHJxX3diICp3YnRfYWxsb2Modm9pZClcbi0tXG5ibG9jay9ibGstd2J0LmMtNzIwLVxuYmxvY2svYmxrLXdidC5jOjcyMTpcdHJ3Yi1cdTAwM2VjYiA9IGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHdiX3RpbWVyX2ZuLCB3YnRfZGF0YV9kaXIsIDIsIHJ3Yik7XG5ibG9jay9ibGstd2J0LmMtNzIyLVx0aWYgKCFyd2ItXHUwMDNlY2IpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBibGtfcnFfc3RhdF9zdW1gIFVzYWdlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJsa19ycV9zdGF0X3N1bWAuIEkgcmVtZW1iZXIgZnJvbSBnbGFuY2luZyBhdCB0aGUgY29kZSB0aGF0IG9ubHkgYGJsay13YnQuY2Agc2VlbXMgdG8gYmUgbWFraW5nIHVzZSBvZiBpdC4gVGhhdOKAmXMgaW50ZXJlc3RpbmcuICBUaGlzIG1lYW5zLCB0byByZWFsbHkgZ2V0IGEgZ29vZCBoYW5kbGUgb24gaXRzIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCB0ZXN0aW5nLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CTEtfV0JUYCBlbmFibGVkLiAgTm8gcG9pbnQgdHJ5aW5nIHRvIGV4ZXJjaXNlIGl0IG90aGVyd2lzZS4KCkJ1dCBiZWZvcmUgSSBkaXZlIGludG8gd3JpdGluZyB0ZXN0cywgSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBKdXN0IGJlY2F1c2UgSSByZW1lbWJlciBpdCBiZWluZyB1c2VkIGluIG9uZSBwbGFjZSwgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyB0aGUgKm9ubHkqIHBsYWNlLiAgU28sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayB3aXRoIHRoZSB0b29scy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgYmxrX3JxX3N0YXRfc3VtYCBpc24mIzM5O3QgY2FsbGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBjb2RlIGJhc2UsIGp1c3QgdG8gYmUgdGhvcm91Z2guIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCwgcmlnaHQ/IEdvdHRhIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNvbGlkIGJlZm9yZSBJIGRlZGljYXRlIHRpbWUgdG8gdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3JxX3N0YXRfc3VtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYz0yMDg9c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMTUtXHR9IGVsc2VcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMTY6XHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZzdW0tXHUwMDNlcnFzLCBcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE3LX1cbi0tXG5ibG9jay9ibGstc3RhdC5jPTIwPXZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQpXG4tLVxuYmxvY2svYmxrLXN0YXQuYy0yNy0vKiBzcmMgaXMgYSBwZXItY3B1IHN0YXQsIG1lYW4gaXNuJiMzOTt0IGluaXRpYWxpemVkICovXG5ibG9jay9ibGstc3RhdC5jOjI4OnZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYylcbmJsb2NrL2Jsay1zdGF0LmMtMjkte1xuLS1cbmJsb2NrL2Jsay1zdGF0LmM9Nzg9c3RhdGljIHZvaWQgYmxrX3N0YXRfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuYmxvY2svYmxrLXN0YXQuYy05MS1cdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIGNiLVx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1zdGF0LmM6OTI6XHRcdFx0YmxrX3JxX3N0YXRfc3VtKFx1MDAyNmNiLVx1MDAzZXN0YXRbYnVja2V0XSwgXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XG5ibG9jay9ibGstc3RhdC5jLTkzLVx0XHRcdGJsa19ycV9zdGF0X2luaXQoXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XG4tLVxuYmxvY2svYmxrLXN0YXQuaD0xNzM9dm9pZCBibGtfcnFfc3RhdF9hZGQoc3RydWN0IGJsa19ycV9zdGF0ICosIHU2NCk7XG5ibG9jay9ibGstc3RhdC5oOjE3NDp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKiwgc3RydWN0IGJsa19ycV9zdGF0ICopO1xuYmxvY2svYmxrLXN0YXQuaC0xNzUtdm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIEkvTyBMYXRlbmN5KioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIG1hY3JvLCB3aGF0ZXZlciBpdCBpcywgYmVpbmcgdXNlZC4gSW50ZXJlc3RpbmcsIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIGd1ZXNzLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRyYWNpbmcgb3IgcHJvZmlsaW5nLCBwZXJoYXBzIHNvbWUga2luZCBvZiBpbnN0cnVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBibGstaW9sYXRlbmN5LmNgIGZpbGUg4oCTIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBiZWluZyBhcHBsaWVkIGluIHByYWN0aWNlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSAqdXNpbmcqIGl0IHdpdGhpbiB0aGUgYmxvY2sgSS9PIGxheWVyIGl0c2VsZi4gV2hhdCBwYXJ0cyBvZiB0aGUgSS9PIHBhdGggYXJlIHRoZXkgaW5zdHJ1bWVudGluZz8gQXJlIHRoZXkgY2FwdHVyaW5nIHRpbWVzdGFtcHMsIGNhbGN1bGF0aW5nIGRlbHRhcywgYXNzb2NpYXRpbmcgZXZlbnRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBvdmVyaGVhZD8gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIHRvIHNlZSB0aGUgZXhhY3QgY29udGV4dCBpbiB3aGljaCB0aGlzIG1hY3JvIGlzIGJlaW5nIGVtcGxveWVkIC0gd2hhdCBkb2VzIGl0cyB1c2FnZSB0ZWxsIG1lPyBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIGFuZCBgYmxrLWlvbGF0ZW5jeS5jYCBob2xkcyB0aGUga2V5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaW5zdHJ1bWVudGF0aW9uIGlzIGdyYW51bGFyIGVub3VnaCBmb3IgbXkgYW5hbHl0aWNhbCBnb2Fscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIEkvTyBMYXRlbmN5IGluIHRoZSBDb250ZXh0IG9mIENvbnRyb2wgR3JvdXBzKioKClJpZ2h0LCBzbyBgQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZhY3RvciBoZXJlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGJsb2NrIEkvTyBsYXRlbmN5IGFuZCBjZ3JvdXBzLiBOb3csIHdoZXJlIHdvdWxkIHRoZSBjb3JlIGxhdGVuY3kgY2FsY3VsYXRpb25zIHJlc2lkZT8gQWgsIG9mIGNvdXJzZSwgYGJsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoYXQgYGxhdGVuY3lfc3RhdF9zdW1gIHZhcmlhYmxlLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgYWdncmVnYXRlZCBsYXRlbmN5IHN0YXRpc3RpY3MgYXJlIGJlaW5nIGhlbGQgYW5kIHVwZGF0ZWQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIGdvIHRvIGdldCBteSBiZWFyaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGF0ZW5jeV9zdGF0X3N1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmM9MTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNy1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMDg6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwOS1cdFx0XHRcdCAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTUxNT1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTI4LVx0XHRzID0gcGVyX2NwdV9wdHIoaW9sYXQtXHUwMDNlc3RhdHMsIGNwdSk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NTI5Olx0XHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZzdGF0LCBzKTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MzAtXHRcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBzKTtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQ5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU1MDpcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0LCBcdTAwMjZzdGF0KTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NTEtXHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzIC09IGlvbGF0LVx1MDAzZW5yX3NhbXBsZXM7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTkyMT1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfc3NkX3N0YXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzMC1cdFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVx1MDAzZXN0YXRzLCBjcHUpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjkzMTpcdFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2c3RhdCwgcyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTMyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgVXBkYXRlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYGJsa19ycV9zdGF0X3N1bWAganVtcHMgb3V0LiBJIHJlbWVtYmVyIGl0JiMzOTtzIHVzZWQgaW4gYm90aCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgYGJsay1zdGF0LmNgLiBDbGFzc2ljIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MsIG5hdHVyYWxseS4gU28sIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIGBibGtfcnFfc3RhdF9zdW1gLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyBvZmYgdGhlIGJhdCwgYXMgdGhpcyBpcyBtb3JlIHRoYW4gYSByZWZhY3Rvci4KCkxldCYjMzk7cyBrZWVwIGFuIGV5ZSBvbiBhIGZldyBvdGhlciBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSByZWxhdGVkOiBgYmxrX3N0YXRfdGltZXJfZm5gIGFuZCB0aGF0IGBsYXRlbmN5X3N0YXRfc3VtYCBtYWNyby4gU2luY2UgaXQmIzM5O3MgaW5saW5lLCB0aGF0IG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IGl0cyB1c2FnZXMsIGxpa2UgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIG9yIGBpb2xhdGVuY3lfc3NkX3N0YXRgIGFzIHBvdGVudGlhbCBhcmVhcyBpbXBhY3RlZCBhcyB3ZWxsLiBHb29kIHByYWN0aWNlIHRvIGNvbnNpZGVyIGluZGlyZWN0IGltcGFjdHMuCgpJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGBibGtfcnFfc3RhdF9zdW1gIGFnYWluIHRvIHNvbGlkaWZ5IG15IHRob3VnaHQgcHJvY2VzcyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zdGF0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbiAgMjE6XHR7XG4gIDIyOlx0XHRzdGF0LVx1MDAzZW1pbiA9IC0xVUxMO1xuICAyMzpcdFx0c3RhdC1cdTAwM2VtYXggPSBzdGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBzdGF0LVx1MDAzZW1lYW4gPSAwO1xuICAyNDpcdFx0c3RhdC1cdTAwM2ViYXRjaCA9IDA7XG4gIDI1Olx0fVxuICAyNjpcdFxuICAyNzpcdC8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKi9cbiAgMjg6XHR2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXG4gIDI5Olx0e1xuICAzMDpcdFx0aWYgKGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7IHNyYy1cdTAwM2Vucl9zYW1wbGVzIFx1MDAzYz0gZHN0LVx1MDAzZW5yX3NhbXBsZXMpXG4gIDMxOlx0XHRcdHJldHVybjtcbiAgMzI6XHRcbiAgMzM6XHRcdGRzdC1cdTAwM2VtaW4gPSBtaW4oZHN0LVx1MDAzZW1pbiwgc3JjLVx1MDAzZW1pbik7XG4gIDM0Olx0XHRkc3QtXHUwMDNlbWF4ID0gbWF4KGRzdC1cdTAwM2VtYXgsIHNyYy1cdTAwM2VtYXgpO1xuICAzNTpcdFxuICAzNjpcdFx0ZHN0LVx1MDAzZW1lYW4gPSBkaXZfdTY0KHNyYy1cdTAwM2ViYXRjaCAmIzQzOyBkc3QtXHUwMDNlbWVhbiAqIGRzdC1cdTAwM2Vucl9zYW1wbGVzLFxuICAzNzpcdFx0XHRcdFx0ZHN0LVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzsgc3JjLVx1MDAzZW5yX3NhbXBsZXMpO1xuICAzODpcdFxuICAzOTpcdFx0ZHN0LVx1MDAzZWJhdGNoICYjNDM7PSBzcmMtXHUwMDNlYmF0Y2g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBibGtfcnFfc3RhdF9zdW1gIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBsb29raW5nIGF0IGEgZml4IGZvciBgYmxrX3JxX3N0YXRfc3VtYCwgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgYGRzdC0mZ3Q7YmF0Y2hgIGlzbiYjMzk7dCBiZWluZyBwcm9wZXJseSBhY2N1bXVsYXRlZC4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSYjMzk7cmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIOKAkyBzcGVjaWZpY2FsbHksIGFjY3VtdWxhdGluZyBkYXRhIGZyb20gbXVsdGlwbGUgQ1BVcyDigJMgdGhlIGBkc3QtJmd0O2JhdGNoYCB2YWx1ZSBpcyBhbHdheXMgZ29pbmcgdG8gYmUgemVybyAob3Igd2hhdGV2ZXIgaXQgd2FzIGluaXRpYWxpemVkIHRvKSwgYW5kIHRoYXQmIzM5O3MgZ29pbmcgdG8gbWVzcyB1cCB0aGUgYGRzdC0mZ3Q7bWVhbmAgY2FsY3VsYXRpb24gaW4gc3Vic2VxdWVudCBjYWxscy4KCldhaXQsIGxvb2tpbmcgY2xvc2VyLCBJIHNlZSB0aGUgY2FsY3VsYXRpb24gb2YgYGRzdC0mZ3Q7bWVhbmAgcmVsaWVzIG9uIGBzcmMtJmd0O2JhdGNoYCwgd2hpY2ggaXMgZ3JlYXQgYnV0IHRoZSBjcml0aWNhbCBiaXQgdGhhdCYjMzk7cyBtaXNzaW5nIGlzIHVwZGF0aW5nIGBkc3QtJmd0O2JhdGNoYCBpdHNlbGYuIFNvLCBpZiBgYmxrX3JxX3N0YXRfc3VtYCBpcyB1c2VkIHRvIGFnZ3JlZ2F0ZSBkYXRhIGZyb20gbXVsdGlwbGUgc291cmNlcyBpbnRvIGEgc2luZ2xlIGFjY3VtdWxhdG9yIChgZHN0YCksIGFuZCB0aGVuIHRoYXQgYWNjdW11bGF0b3IgKGBkc3RgKSBiZWNvbWVzIGEgc291cmNlIChgc3JjYCkgbGF0ZXIgb24uLi4gYm9vbSEgSW5jb3JyZWN0IGBtZWFuYCBjYWxjdWxhdGlvbiBiZWNhdXNlIGBkc3QtJmd0O2JhdGNoYCBpcyBzdGFsZS4KClJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0eXBpY2FsIHVzYWdlIHBhdHRlcm4uIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGFjY3VtdWxhdGluZyBwZXItQ1BVIHN0YXRzIGludG8gYSBnbG9iYWwgc3RhdC4gTG9va2luZyBhdCB0aGUgYGJsa19zdGF0X3RpbWVyX2ZuYCwgSSBjYW4gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBvdXRlciBsb29wIGdvZXMgdGhyb3VnaCBlYWNoIG9ubGluZSBDUFUsIGFuZCB0aGVuIGFuIGlubmVyIGxvb3AgaXRlcmF0ZXMgdGhyb3VnaCBidWNrZXRzLiBJbiBlYWNoIENQVSYjMzk7cyBpdGVyYXRpb24sIGBibGtfcnFfc3RhdF9zdW1gIGlzIGNhbGxlZCB0byBzdW0gdXAgYSBgZHN0YCAoYGNiLSZndDtzdGF0W2J1Y2tldF1gKSBmcm9tIHRoZSBpbmRpdmlkdWFsIHBlci1jcHUgc3RhdHMgKGBjcHVfc3RhdFtidWNrZXRdYCkuIFNvLCB0aGUgYGRzdGAgYmVjb21lcyB0aGUgZ2xvYmFsIHN0YXQsIGFuZCBpdCYjMzk7cyBsYXRlciB1c2VkIGJ5IHRoZSB0aW1lciBjYWxsYmFjay4KCkFoLCBJIHNlZSBpdC4gVGhlIGtleSBpcyBpbiB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdXNlZCB0byBhY2N1bXVsYXRlIHRoZSBwZXItY3B1IHN0YXRzIGludG8gYSBnbG9iYWwgc3RhdCwgYW5kIHRoZW4gdGhlIGFjY3VtdWxhdGVkIGdsb2JhbCBzdGF0cyBhcmUgdXNlZCBsYXRlci4KCkkgYW0gcmUtcmVhZGluZyB0aGUgY29kZSBpbiBgYmxrLWlvbGF0ZW5jeS5jYCBmb3IgYWRkaXRpb25hbCBjbGFyaXR5LgoKYGBgYwoJbGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgJmFtcDtzdGF0LCBzKTsKYGBgClNvLCBoZXJlIGBzdGF0YCBpcyBiZWluZyBpbml0aWFsaXplZCBsb2NhbGx5IGFuZCB1c2VkIGFzIHRoZSBhY2N1bXVsYXRpbmcgYGRzdGAgZnJvbSBhbGwgQ1BVcywgYW5kIHRoZW4gaW4gdGhlIGZvbGxvd2luZyBsaW5lLApgYGBjCglsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCAmYW1wO2lvbGF0LSZndDtjdXJfc3RhdCwgJmFtcDtzdGF0KTsKYGBgCmBzdGF0YCBhY3RzIGFzIGEgYHNyY2AuICpUaGF0JiMzOTtzKiB3aGVyZSB0aGUgYnVnIHNob3dzIHVwLiBTaW5jZSBgc3RhdGAgd2FzIHRoZSBgZHN0YCBpbiB0aGUgZWFybGllciBjYWxsLCBpdHMgYGJhdGNoYCBuZWVkcyB0byBoYXZlIGJlZW4gY29ycmVjdGx5IHVwZGF0ZWQuIEFuZCBiZWNhdXNlIGl0IHdhc24mIzM5O3QsIHRoZSBjYWxjdWxhdGVkIGBpb2xhdC0mZ3Q7Y3VyX3N0YXQubWVhbmAgd291bGQgYmUgY29tcGxldGVseSB3cm9uZy4KClllYWgsIHRoYXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGJ1ZyBhbmQgdGhpcyBwYXRjaCBpcyB0aGUgZGlyZWN0IGZpeC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlIHNpbmNlIHRoaXMgY2hhbmdlIGFmZmVjdHMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYmxvY2sgZGV2aWNlIHN1YnN5c3RlbSBpbiB0aGUga2VybmVsIHRoZXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNldHRpbmdzIHRoYXQgaW5mbHVlbmNlIGZlYXR1cmVzLCBkcml2ZXJzLCBvciBtYXliZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIGJsb2NrIGRldmljZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGxpbmUgMTM0IHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgYmxvY2sgY29uZmlndXJhdGlvbiwgbGlrZWx5IHNvbWV0aGluZyBub24tdHJpdmlhbC4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgY29udGV4dCBhbmQgc2VlIHdoYXQga2luZCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGJlaW5nIHByZXNlbnRlZC4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIHdoYXQgdGhvc2Ugb3B0aW9ucyBhcmUgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgYmxvY2sgZGV2aWNlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHRkZXBlbmRzIG9uIEJMS19XQlRcbiAxMzE6XHRcdGhlbHBcbiAxMzI6XHRcdEVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0IGZvciByZXF1ZXN0LWJhc2VkIGJsb2NrIGRldmljZXMuXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG4gMTM1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4gMTM2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMzc6XHRcdGhlbHBcbiAxMzg6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC5sYXRlbmN5IGludGVyZmFjZSBmb3IgSU8gdGhyb3R0bGluZy5cbiAxMzk6XHRcdFRoZSBJTyBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbiBhdmVyYWdlIElPIGxhdGVuY2llcyBiZWxvd1xuIDE0MDpcdFx0dGhlIGNvbmZpZ3VyZWQgbGF0ZW5jeSB0YXJnZXQsIHRocm90dGxpbmcgYW55Ym9keSB3aXRoIGEgaGlnaGVyIGxhdGVuY3lcbiAxNDE6XHRcdHRhcmdldCB0aGFuIHRoZSB2aWN0aW1pemVkIGdyb3VwLlxuIDE0MjpcdFxuIDE0MzpcdFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXG4gMTQ0Olx0XG4gMTQ1Olx0Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbiAxNDY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbiAxNDc6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcdTAwMjZcdTAwMjYgTlZNRV9GQ1xuIDE0ODpcdFx0aGVscFxuIDE0OTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyB0cmFmZmljIGFjcm9zc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NQoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHJlZ2FyZGluZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBCTEtfQ0dST1VQYCBhbmQgYEJMS19XQlRgIGlzIG9uIG15IHJhZGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBibGtfcnFfc3RhdF9zdW1gIHdvcmtzIGluIGBibG9jay9ibGstc3RhdC5jYC4gVGltZSB0byBkaXZlIGJhY2sgaW50byB0aGUgY29kZS4KCkdpdmVuIHRoZSBidWcgZml4IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgbWlzc2luZyB1cGRhdGUgb2YgdGhlIGBiYXRjaGAgdmFsdWUgd2l0aGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QgZHVyaW5nIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoYXQgc3RydWN0IGlzIHJldXNlZCAoYXMgaW4gYGJsay1pb2xhdGVuY3kuY2ApIOKAkyB5ZXMsIGFic29sdXRlbHksIHRoaXMgd2FycmFudHMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW1wYWN0IHRoZSBhY2N1cmFjeSBvZiBjcnVjaWFsIEkvTyBzdGF0aXN0aWNzLiBXZSBjb3VsZCBzZWUgc2lnbmlmaWNhbnQgZGlzY3JlcGFuY2llcyBoZXJlLgoKV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBgQkxLX1dCVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGFuZCBgQkxLX0NHUk9VUGAgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgYmxrX3JxX3N0YXRfc3VtYCwgb2YgY291cnNlLCBidXQgSSBzaG91bGQgYWxzbyBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBibGtfc3RhdF90aW1lcl9mbmAgYW5kIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBhZmZlY3RlZCBjb2RlIHBhdGguIFRpbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIGdldCB0aG9zZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX1dCVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX3JxX3N0YXRfc3VtJiMzNDssCiAgICAmIzM0O2Jsa19zdGF0X3RpbWVyX2ZuJiMzNDssCiAgICAmIzM0O2lvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYmxvY2sgbGF5ZXIgc3RhdGlzdGljcyBhY2N1bXVsYXRpb24gd2hlcmUgdGhlIGBiYXRjaGAgdmFsdWUgd2FzIG5vdCB1cGRhdGVkIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QuIFRoaXMgY2F1c2VkIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3Qgd2FzIHN1YnNlcXVlbnRseSB1c2VkIGFzIGEgc291cmNlLCBzdWNoIGFzIGluIGBibGstaW9sYXRlbmN5LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfV0JUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfcnFfc3RhdF9zdW0mIzM0OywKICAgICYjMzQ7YmxrX3N0YXRfdGltZXJfZm4mIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBibG9jayBsYXllciBzdGF0aXN0aWNzIGFjY3VtdWxhdGlvbiB3aGVyZSB0aGUgYGJhdGNoYCB2YWx1ZSB3YXMgbm90IHVwZGF0ZWQgaW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdC4gVGhpcyBjYXVzZWQgaW5jb3JyZWN0IG1lYW4gY2FsY3VsYXRpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCB3YXMgc3Vic2VxdWVudGx5IHVzZWQgYXMgYSBzb3VyY2UsIHN1Y2ggYXMgaW4gYGJsay1pb2xhdGVuY3kuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDoxMC42NDU0NDgzNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyOTUxMjUzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX1dCVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfcnFfc3RhdF9zdW1cIixcbiAgICBcImJsa19zdGF0X3RpbWVyX2ZuXCIsXG4gICAgXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYmxvY2sgbGF5ZXIgc3RhdGlzdGljcyBhY2N1bXVsYXRpb24gd2hlcmUgdGhlIGBiYXRjaGAgdmFsdWUgd2FzIG5vdCB1cGRhdGVkIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QuIFRoaXMgY2F1c2VkIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3Qgd2FzIHN1YnNlcXVlbnRseSB1c2VkIGFzIGEgc291cmNlLCBzdWNoIGFzIGluIGBibGstaW9sYXRlbmN5LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDoxMC42NDU1MTk1OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3YzU2ZGRjY2VmYTBjNzY4N2Y2ZDFkMzI4YjhhOGUzNGVkNjk4NTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTg6MzA6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN0YXQuYyBiL2Jsb2NrL2Jsay1zdGF0LmNcXG5pbmRleCBkZTEyNmUxZWE1YWM0Mi4uNGQ0NzgxMzUwMDgzN2EgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLXN0YXQuY1xcbisrKyBiL2Jsb2NrL2Jsay1zdGF0LmNcXG5AQCAtMzYsNiArMzYsNyBAQCB2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuIFxcdGRzdC1cXHUwMDNlbWVhbiA9IGRpdl91NjQoc3JjLVxcdTAwM2ViYXRjaCArIGRzdC1cXHUwMDNlbWVhbiAqIGRzdC1cXHUwMDNlbnJfc2FtcGxlcyxcXG4gXFx0XFx0XFx0XFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICsgc3JjLVxcdTAwM2Vucl9zYW1wbGVzKTtcXG4gXFxuK1xcdGRzdC1cXHUwMDNlYmF0Y2ggKz0gc3JjLVxcdTAwM2ViYXRjaDtcXG4gXFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICs9IHNyYy1cXHUwMDNlbnJfc2FtcGxlcztcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTEuMDkwNjk0NDU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExODQ5ODY5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19XQlRcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX3JxX3N0YXRfc3VtXCIsXG4gICAgXCJibGtfc3RhdF90aW1lcl9mblwiLFxuICAgIFwiaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uIHdoZXJlIHRoZSBgYmF0Y2hgIHZhbHVlIHdhcyBub3QgdXBkYXRlZCBpbiB0aGUgZGVzdGluYXRpb24gc3RydWN0LiBUaGlzIGNhdXNlZCBpbmNvcnJlY3QgbWVhbiBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gc3RydWN0IHdhcyBzdWJzZXF1ZW50bHkgdXNlZCBhcyBhIHNvdXJjZSwgc3VjaCBhcyBpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2M1NmRkY2NlZmEwYzc2ODdmNmQxZDMyOGI4YThlMzRlZDY5ODU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTg6MzA6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3RhdC5jIGIvYmxvY2svYmxrLXN0YXQuY1xuaW5kZXggZGUxMjZlMWVhNWFjNDIuLjRkNDc4MTM1MDA4MzdhIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXN0YXQuY1xuKysrIGIvYmxvY2svYmxrLXN0YXQuY1xuQEAgLTM2LDYgKzM2LDcgQEAgdm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICpkc3QsIHN0cnVjdCBibGtfcnFfc3RhdCAqc3JjKVxuIFx0ZHN0LVx1MDAzZW1lYW4gPSBkaXZfdTY0KHNyYy1cdTAwM2ViYXRjaCArIGRzdC1cdTAwM2VtZWFuICogZHN0LVx1MDAzZW5yX3NhbXBsZXMsXG4gXHRcdFx0XHRkc3QtXHUwMDNlbnJfc2FtcGxlcyArIHNyYy1cdTAwM2Vucl9zYW1wbGVzKTtcbiBcbitcdGRzdC1cdTAwM2ViYXRjaCArPSBzcmMtXHUwMDNlYmF0Y2g7XG4gXHRkc3QtXHUwMDNlbnJfc2FtcGxlcyArPSBzcmMtXHUwMDNlbnJfc2FtcGxlcztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDoxMS4wOTA2OTU3NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcwNjA3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC5cblxuKipBbmFseXppbmcgdGhlIEJsb2NrIEkvTyBTdGF0aXN0aWNzIFN1bW1hdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBibG9jay9ibGstc3RhdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYmxrX3JxX3N0YXRfc3VtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgc2VlbXMgd2UgaGF2ZSBhbiBhZGRpdGlvbjogYGRzdC1cdTAwM2ViYXRjaCArPSBzcmMtXHUwMDNlYmF0Y2g7YCB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuTGV0J3MgZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgY29udGV4dCBvZiBgYmxrX3JxX3N0YXRfc3VtYCBpdHNlbGYgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSwgYGJsb2NrL2Jsay1zdGF0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBibG9jayBJL08gc3RhdGlzdGljcyBzdW1tYXRpb24gbXVzdCByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRzdC1cdTAwM2ViYXRjaGAgYW5kIGBzcmMtXHUwMDNlYmF0Y2hgIHJlcHJlc2VudCwgYW5kIHdoeSB3ZSdyZSBhZGRpbmcgdGhlbS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGJhdGNoIHN0YXRpc3RpY3MgYXJlIGJlaW5nIHVzZWQgZG93bnN0cmVhbSB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGF0Y2guIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIGJhdGNoaW5nIHNvbWUga2luZCBvZiBJL08gc3RhdGlzdGljLiBJIG5lZWQgdG8gc2VlIGlmIGl0IGlzIElPUFMsIG9yIGxhdGVuY3kuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTUuMjYxMzA1Mzc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MzYxNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19ycV9zdGF0X3N1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstc3RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zdGF0LmM9MjA9dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtMjctLyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbid0IGluaXRpYWxpemVkICovXFxuYmxvY2svYmxrLXN0YXQuYzoyODp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuYmxvY2svYmxrLXN0YXQuYy0yOS17XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTc4PXN0YXRpYyB2b2lkIGJsa19zdGF0X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy05MS1cXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIGNiLVxcdTAwM2VidWNrZXRzOyBidWNrZXQrKykge1xcbmJsb2NrL2Jsay1zdGF0LmM6OTI6XFx0XFx0XFx0YmxrX3JxX3N0YXRfc3VtKFxcdTAwMjZjYi1cXHUwMDNlc3RhdFtidWNrZXRdLCBcXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XFxuYmxvY2svYmxrLXN0YXQuYy05My1cXHRcXHRcXHRibGtfcnFfc3RhdF9pbml0KFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTUuMzU2Njc1NDU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MTM3MjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGJsa19ycV9zdGF0X3N1bWAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmxrX3JxX3N0YXRfc3VtYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYmxvY2sgSS9PIHN1YnN5c3RlbS4gRmlyc3QsIEknbGwgdHJhY2sgZG93biBpdHMgdXNlcy4gTG9va3MgbGlrZSBpdCdzIGVtcGxveWVkIGluIGBibGtfc3RhdF90aW1lcl9mbmAuIE5vdywgdGhhdCBwcm92aWRlcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gU2luY2UgSSdtIGZhbWlsaWFyIHdpdGggaG93IGJsb2NrIEkvTyBzdGF0aXN0aWNzIGFuZCB0aW1lcnMgd29yaywgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgYmxrX3N0YXRfdGltZXJfZm5gIGlzIGRvaW5nIHdpdGggYGJsa19ycV9zdGF0X3N1bWAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgYGJsa19zdGF0X3RpbWVyX2ZuYCB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBzdGF0aXN0aWMgaXMgYmVpbmcgbGV2ZXJhZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTguNzM4MDQ5OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyNzM1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3N0YXRfdGltZXJfZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLXN0YXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3RhdC5jPTUxPXZvaWQgYmxrX3N0YXRfYWRkKHN0cnVjdCByZXF1ZXN0ICpycSwgdTY0IG5vdylcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtNzctXFxuYmxvY2svYmxrLXN0YXQuYzo3ODpzdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5ibG9jay9ibGstc3RhdC5jLTc5LXtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmM9MTAxPWJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy0xMjctXFx0Y2ItXFx1MDAzZWJ1Y2tldHMgPSBidWNrZXRzO1xcbmJsb2NrL2Jsay1zdGF0LmM6MTI4OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZjYi1cXHUwMDNldGltZXIsIGJsa19zdGF0X3RpbWVyX2ZuLCAwKTtcXG5ibG9jay9ibGstc3RhdC5jLTEyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTguODE3MzI4MTI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMzQ5OTE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgU3RhdGlzdGljcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyBhIHRpbWVyIGNhbGxiYWNrLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgZml4IHRvIGBibGtfcnFfc3RhdF9zdW1gLCBzcGVjaWZpY2FsbHkgYSBtaXNzaW5nIHVwZGF0ZSB0byBgZHN0LVx1MDAzZWJhdGNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIGltcGFjdGluZyBibG9jayBsYXllciBzdGF0aXN0aWNzLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gVGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZy4gR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHRoZSBibG9jayBsYXllciwgYW5kIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByYXRoZXIgdGhhbiBqdXN0IGEgY29zbWV0aWMgb25lLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3RhdGlzdGljcyB0aGF0IGZlZWQgaW50byB0aGluZ3MgbGlrZSBreWJlciBJL08gc2NoZWR1bGVyIGFuZCBibG9jayBwb2xsaW5nIOKAkyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnRzLiBHaXZlbiBob3cgdml0YWwgdGhvc2UgZnVuY3Rpb25zIGFyZSwgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkb3duc3RyZWFtIGltcGFjdC4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIHdoaWNoIG1vZHVsZXMgYW5kIHN0cnVjdHVyZXMgdXNlIGBibGtfc3RhdF9hbGxvY19jYWxsYmFja2AgdG8gdGhvcm91Z2hseSBhc3Nlc3MgdGhlIHBhdGNoJ3MgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MzAuMDUyMzIyMjYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDIyNzY3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zdGF0LmM9MTAwPXN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqXFxuYmxvY2svYmxrLXN0YXQuYzoxMDE6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuYmxvY2svYmxrLXN0YXQuYy0xMDItXFx0XFx0XFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcXG4tLVxcbmJsb2NrL2Jsay1zdGF0Lmg9NzU9dm9pZCBibGtfc3RhdF9kaXNhYmxlX2FjY291bnRpbmcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbi0tXFxuYmxvY2svYmxrLXN0YXQuaC03Ny0vKipcXG5ibG9jay9ibGstc3RhdC5oOjc4OiAqIGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKCkgLSBBbGxvY2F0ZSBhIGJsb2NrIHN0YXRpc3RpY3MgY2FsbGJhY2suXFxuYmxvY2svYmxrLXN0YXQuaC03OS0gKiBAdGltZXJfZm46IFRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxcbi0tXFxuYmxvY2svYmxrLXN0YXQuaD04OD1zdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKlxcbmJsb2NrL2Jsay1zdGF0Lmg6ODk6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuYmxvY2svYmxrLXN0YXQuaC05MC1cXHRcXHRcXHRpbnQgKCpidWNrZXRfZm4pKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICopLFxcbi0tXFxuYmxvY2svYmxrLXdidC5jPTcxND1zdGF0aWMgc3RydWN0IHJxX3diICp3YnRfYWxsb2Modm9pZClcXG4tLVxcbmJsb2NrL2Jsay13YnQuYy03MjAtXFxuYmxvY2svYmxrLXdidC5jOjcyMTpcXHRyd2ItXFx1MDAzZWNiID0gYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sod2JfdGltZXJfZm4sIHdidF9kYXRhX2RpciwgMiwgcndiKTtcXG5ibG9jay9ibGstd2J0LmMtNzIyLVxcdGlmICghcndiLVxcdTAwM2VjYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDozMi4yOTQ2MDQxMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcwMzI5NjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgV3JpdGViYWNrIFRocm90dGxpbmcgaW4gdGhlIEJsb2NrIExheWVyKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHdyaXRlYmFjayB0aHJvdHRsaW5nIHdvcmtzIGF0IHRoZSBibG9jayBsYXllci4gSSBrbm93IGBibGstd2J0LmNgIGlzIGludm9sdmVkLCBvYnZpb3VzbHkuIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCdzIGFjdHVhbGx5IGRvaW5nIHRoZSB0aHJvdHRsaW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYmxrLXN0YXQuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igd2hlcmUgdGhlIHN0YXRzIGFyZSBiZWluZyBzdW1tZWQsIHdoaWNoIHNob3VsZCBpbnZvbHZlIGBibGtfcnFfc3RhdF9zdW1gLiBUaGF0IGZlZWxzIGxpa2UgdGhlIGtleSBmdW5jdGlvbi5cblxuT2theSwgbGV0J3Mgc2VlIHdoZXJlIHRoYXQgaXMgY2FsbGVkIGZyb20uIFJpZ2h0LCBgYmxrX3JxX3N0YXRfc3VtYCBpcyBjYWxsZWQgZnJvbSBgYmxrX3N0YXRfdGltZXJfZm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBhIHRpbWVyIHRyaWdnZXJzIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgc3RhdHMuIFNvLCBJIG5lZWQgdG8gZGlnIGludG8gYGJsa19zdGF0X3RpbWVyX2ZuYCB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgYW5kIGZyZXF1ZW5jeSBvZiB0aGVzZSBzdGF0cyBhbmQgdGhhdCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhyb3R0bGluZyBiZWhhdmlvci4gTGV0IG1lIHN3aXRjaCBteSBmb2N1cyB0byBgYmxvY2svYmxrLXN0YXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDo0My45OTc5MDI4OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXN0YXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdHN0YXQgPSBcXHUwMDI2cGVyX2NwdV9wdHIoY2ItXFx1MDAzZWNwdV9zdGF0LCBjcHUpW2J1Y2tldF07XFxuICA3MjpcXHRcXHRcXHRibGtfcnFfc3RhdF9hZGQoc3RhdCwgdmFsdWUpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFx0cHV0X2NwdSgpO1xcbiAgNzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyB2b2lkIGJsa19zdGF0X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiAgNzk6XFx0e1xcbiAgODA6XFx0XFx0c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYiA9IHRpbWVyX2NvbnRhaW5lcl9vZihjYiwgdCwgdGltZXIpO1xcbiAgODE6XFx0XFx0dW5zaWduZWQgaW50IGJ1Y2tldDtcXG4gIDgyOlxcdFxcdGludCBjcHU7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFxcdTAwM2MgY2ItXFx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCsrKVxcbiAgODU6XFx0XFx0XFx0YmxrX3JxX3N0YXRfaW5pdChcXHUwMDI2Y2ItXFx1MDAzZXN0YXRbYnVja2V0XSk7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XFxuICA4ODpcXHRcXHRcXHRzdHJ1Y3QgYmxrX3JxX3N0YXQgKmNwdV9zdGF0O1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRcXHRjcHVfc3RhdCA9IHBlcl9jcHVfcHRyKGNiLVxcdTAwM2VjcHVfc3RhdCwgY3B1KTtcXG4gIDkxOlxcdFxcdFxcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFxcdTAwM2MgY2ItXFx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCsrKSB7XFxuICA5MjpcXHRcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNmNiLVxcdTAwM2VzdGF0W2J1Y2tldF0sIFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG4gIDkzOlxcdFxcdFxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xcbiAgOTQ6XFx0XFx0XFx0fVxcbiAgOTU6XFx0XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRjYi1cXHUwMDNldGltZXJfZm4oY2IpO1xcbiAgOTg6XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKlxcbiAxMDE6XFx0YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuIDEwMjpcXHRcXHRcXHRcXHRpbnQgKCpidWNrZXRfZm4pKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICopLFxcbiAxMDM6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGJ1Y2tldHMsIHZvaWQgKmRhdGEpXFxuIDEwNDpcXHR7XFxuIDEwNTpcXHRcXHRzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKmNiO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRjYiA9IGttYWxsb2Nfb2JqKCpjYik7XFxuIDEwODpcXHRcXHRpZiAoIWNiKVxcbiAxMDk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdGNiLVxcdTAwM2VzdGF0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBibGtfcnFfc3RhdCwgYnVja2V0cyk7XFxuIDExMjpcXHRcXHRpZiAoIWNiLVxcdTAwM2VzdGF0KSB7XFxuIDExMzpcXHRcXHRcXHRrZnJlZShjYik7XFxuIDExNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTE1OlxcdFxcdH1cXG4gMTE2OlxcdFxcdGNiLVxcdTAwM2VjcHVfc3RhdCA9IF9fYWxsb2NfcGVyY3B1KGJ1Y2tldHMgKiBzaXplb2Yoc3RydWN0IGJsa19ycV9zdGF0KSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCBibGtfcnFfc3RhdCkpO1xcbiAxMTg6XFx0XFx0aWYgKCFjYi1cXHUwMDNlY3B1X3N0YXQpIHtcXG4gMTE5OlxcdFxcdFxcdGtmcmVlKGNiLVxcdTAwM2VzdGF0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6NDMuOTk3OTg1OTg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mjg0MTIxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBMYXllciBTdGF0aXN0aWNzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdHdlYWtpbmcgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgd2l0aGluIHRoZSBibG9jayBsYXllci4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB1cGRhdGluZyBgZHN0LVx1MDAzZWJhdGNoYCB3aXRoaW4gdGhlIGBibGtfcnFfc3RhdF9zdW1gIGZ1bmN0aW9uLiBIbW0sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMuIEFueSBjaGFuZ2UgdG91Y2hpbmcgc3RhdGlzdGljcyBjb2xsZWN0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGlzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHdyaXRlYmFjayBvciB0aHJvdHRsaW5nLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3Mgc2VlLi4uIGNvdWxkIGl0IGJlIGBDT05GSUdfQkxLX1dCVGAgb3IgYENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdgPyBSaWdodCwgYmVzdCB0byBjaGVjayBgYmxvY2svS2NvbmZpZ2AgdG8gYmUgY2VydGFpbiwgc3BlY2lmaWNhbGx5IGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgQkxLX1dCVGAgZm9yIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMwOjQ3LjUyNjQwMDc1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk0NjcxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19XQlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTEwNj1jb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuLS1cXG5ibG9jay9LY29uZmlnLTExNy1cXG5ibG9jay9LY29uZmlnOjExODpjb25maWcgQkxLX1dCVFxcbmJsb2NrL0tjb25maWctMTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTEyNi1cXG5ibG9jay9LY29uZmlnOjEyNzpjb25maWcgQkxLX1dCVF9NUVxcbmJsb2NrL0tjb25maWctMTI4LVxcdGJvb2wgXFxcIkVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDo0Ny42MTU4NzI4MDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxNDg3MjIwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGJsay1zdGF0LmNgKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBpZiBgYmxrLXN0YXQuY2AgaXMgY29tcGlsZWQgYmFzZWQgb24gYSBzcGVjaWZpYyBjb25kaXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBvciBpZiB0aGVyZSBhcmUgY2VydGFpbiBmbGFncywgZGVmaW5lcywgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBpdHMgcHJlc2VuY2UuIEknbGwgbmVlZCB0byBsb29rIGZvciBgI2lmZGVmYCwgYCNpZm5kZWZgLCBgI2lmYCwgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGd1YXJkIGl0cyBjb21waWxhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IGRpYWdub3NpbmcgYW55IHJlbGF0ZWQgaXNzdWVzLiBMZXQncyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NTE2OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjAzLjc2NDU5NzQxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzMxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1zdGF0Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9OD1vYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4tLVxcbmJsb2NrL01ha2VmaWxlLTEwLVxcdFxcdFxcdGJsay1tZXJnZS5vIGJsay10aW1lb3V0Lm8gYmxrLWxpYi5vIGJsay1tcS5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZToxMTpcXHRcXHRcXHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTEyLVxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MDMuODgwMzM0NDUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzYyNjE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgbGlrZSBgYmxrLXN0YXQub2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBzdWdnZXN0cyBpdHMgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIHRvIHRoZSBzeXN0ZW0uIEkgc2VlIHRoYXQgdGhlIGBibGtfcnFfc3RhdF9zdW1gIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgZnJvbSBgYmxrX3N0YXRfdGltZXJfZm5gLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIGhvdyB0aGUgc3RhdGlzdGljcyBhcmUgYWN0dWFsbHkgYWdncmVnYXRlZC4gRm9sbG93aW5nIHRoZSBmbG93LCBgYmxrX3N0YXRfdGltZXJfZm5gIGlzIHRyaWdnZXJlZCBieSBhIHRpbWVyLiBOb3csIHdoZXJlIGlzIHRoaXMgdGltZXIgc2V0IHVwPyBBaCwgaXQncyBpbiBgYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tgLiBUaGF0J3MgdGhlIGNydWNpYWwgbGluay4gQW5kLCBJIHNlZSB0aGF0IGBibGstd2J0LmNgIG1ha2VzIHVzZSBvZiBgYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGJhY2sncyB1c2UuIFNpbmNlIGl0J3MgYSBjYWxsYmFjaywgb3RoZXIgbW9kdWxlcyBtaWdodCBiZSB1c2luZyB0aGlzIGFzIHdlbGwuIExldCBtZSBxdWlja2x5IHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gY29uZmlybSB3aGV0aGVyIGBibGtfc3RhdF9hbGxvY19jYWxsYmFja2AgaXMgdXNlZCBlbHNld2hlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIG9mIHRoYXQgY2FsbGJhY2sgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgc3Vycm91bmRpbmcgdGhlIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MDcuODE2NTk4OTg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3ODAyNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19zdGF0X2FsbG9jX2NhbGxiYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3RhdC5jPTEwMD1zdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKlxcbmJsb2NrL2Jsay1zdGF0LmM6MTAxOmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbmJsb2NrL2Jsay1zdGF0LmMtMTAyLVxcdFxcdFxcdGludCAoKmJ1Y2tldF9mbikoY29uc3Qgc3RydWN0IHJlcXVlc3QgKiksXFxuLS1cXG5ibG9jay9ibGstc3RhdC5oPTc1PXZvaWQgYmxrX3N0YXRfZGlzYWJsZV9hY2NvdW50aW5nKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmgtNzctLyoqXFxuYmxvY2svYmxrLXN0YXQuaDo3ODogKiBibGtfc3RhdF9hbGxvY19jYWxsYmFjaygpIC0gQWxsb2NhdGUgYSBibG9jayBzdGF0aXN0aWNzIGNhbGxiYWNrLlxcbmJsb2NrL2Jsay1zdGF0LmgtNzktICogQHRpbWVyX2ZuOiBUaW1lciBjYWxsYmFjayBmdW5jdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1zdGF0Lmg9ODg9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcXG5ibG9jay9ibGstc3RhdC5oOjg5OmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbmJsb2NrL2Jsay1zdGF0LmgtOTAtXFx0XFx0XFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcXG4tLVxcbmJsb2NrL2Jsay13YnQuYz03MTQ9c3RhdGljIHN0cnVjdCBycV93YiAqd2J0X2FsbG9jKHZvaWQpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtNzIwLVxcbmJsb2NrL2Jsay13YnQuYzo3MjE6XFx0cndiLVxcdTAwM2VjYiA9IGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHdiX3RpbWVyX2ZuLCB3YnRfZGF0YV9kaXIsIDIsIHJ3Yik7XFxuYmxvY2svYmxrLXdidC5jLTcyMi1cXHRpZiAoIXJ3Yi1cXHUwMDNlY2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MDkuODI0NDA3NDUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzY0NTg3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBibGtfcnFfc3RhdF9zdW1gIFVzYWdlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBibGtfcnFfc3RhdF9zdW1gLiBJIHJlbWVtYmVyIGZyb20gZ2xhbmNpbmcgYXQgdGhlIGNvZGUgdGhhdCBvbmx5IGBibGstd2J0LmNgIHNlZW1zIHRvIGJlIG1ha2luZyB1c2Ugb2YgaXQuIFRoYXTigJlzIGludGVyZXN0aW5nLiAgVGhpcyBtZWFucywgdG8gcmVhbGx5IGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGVzdGluZywgSSdtIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CTEtfV0JUYCBlbmFibGVkLiAgTm8gcG9pbnQgdHJ5aW5nIHRvIGV4ZXJjaXNlIGl0IG90aGVyd2lzZS5cblxuQnV0IGJlZm9yZSBJIGRpdmUgaW50byB3cml0aW5nIHRlc3RzLCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIEp1c3QgYmVjYXVzZSBJIHJlbWVtYmVyIGl0IGJlaW5nIHVzZWQgaW4gb25lIHBsYWNlLCBkb2Vzbid0IG1lYW4gaXQncyB0aGUgKm9ubHkqIHBsYWNlLiAgU28sIGxldCdzIHRha2UgYSBxdWljayBsb29rIHdpdGggdGhlIHRvb2xzLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGJsa19ycV9zdGF0X3N1bWAgaXNuJ3QgY2FsbGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBjb2RlIGJhc2UsIGp1c3QgdG8gYmUgdGhvcm91Z2guIENhbid0IGJlIHRvbyBjYXJlZnVsLCByaWdodD8gR290dGEgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgc29saWQgYmVmb3JlIEkgZGVkaWNhdGUgdGltZSB0byB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MTQuMjYwODY4NzA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcwMjY4MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19ycV9zdGF0X3N1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTIwOD1zdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE1LVxcdH0gZWxzZVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMTY6XFx0XFx0YmxrX3JxX3N0YXRfc3VtKFxcdTAwMjZzdW0tXFx1MDAzZXJxcywgXFx1MDAyNnN0YXQtXFx1MDAzZXJxcyk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIxNy19XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTIwPXZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQpXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTI3LS8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24ndCBpbml0aWFsaXplZCAqL1xcbmJsb2NrL2Jsay1zdGF0LmM6Mjg6dm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICpkc3QsIHN0cnVjdCBibGtfcnFfc3RhdCAqc3JjKVxcbmJsb2NrL2Jsay1zdGF0LmMtMjkte1xcbi0tXFxuYmxvY2svYmxrLXN0YXQuYz03OD1zdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtOTEtXFx0XFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXFx1MDAzYyBjYi1cXHUwMDNlYnVja2V0czsgYnVja2V0KyspIHtcXG5ibG9jay9ibGstc3RhdC5jOjkyOlxcdFxcdFxcdGJsa19ycV9zdGF0X3N1bShcXHUwMDI2Y2ItXFx1MDAzZXN0YXRbYnVja2V0XSwgXFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xcbmJsb2NrL2Jsay1zdGF0LmMtOTMtXFx0XFx0XFx0YmxrX3JxX3N0YXRfaW5pdChcXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XFxuLS1cXG5ibG9jay9ibGstc3RhdC5oPTE3Mz12b2lkIGJsa19ycV9zdGF0X2FkZChzdHJ1Y3QgYmxrX3JxX3N0YXQgKiwgdTY0KTtcXG5ibG9jay9ibGstc3RhdC5oOjE3NDp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKiwgc3RydWN0IGJsa19ycV9zdGF0ICopO1xcbmJsb2NrL2Jsay1zdGF0LmgtMTc1LXZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjE2LjEzMTE0MzA4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE2MjY1MjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgSS9PIExhdGVuY3kqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBtYWNybywgd2hhdGV2ZXIgaXQgaXMsIGJlaW5nIHVzZWQuIEludGVyZXN0aW5nLCBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBndWVzcywgYmFzZWQgb24gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0cmFjaW5nIG9yIHByb2ZpbGluZywgcGVyaGFwcyBzb21lIGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBibGstaW9sYXRlbmN5LmNgIGZpbGUg4oCTIGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGJlaW5nIGFwcGxpZWQgaW4gcHJhY3RpY2UuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkncmUgKnVzaW5nKiBpdCB3aXRoaW4gdGhlIGJsb2NrIEkvTyBsYXllciBpdHNlbGYuIFdoYXQgcGFydHMgb2YgdGhlIEkvTyBwYXRoIGFyZSB0aGV5IGluc3RydW1lbnRpbmc/IEFyZSB0aGV5IGNhcHR1cmluZyB0aW1lc3RhbXBzLCBjYWxjdWxhdGluZyBkZWx0YXMsIGFzc29jaWF0aW5nIGV2ZW50cz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB0byBzZWUgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggdGhpcyBtYWNybyBpcyBiZWluZyBlbXBsb3llZCAtIHdoYXQgZG9lcyBpdHMgdXNhZ2UgdGVsbCBtZT8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBhbmQgYGJsay1pb2xhdGVuY3kuY2AgaG9sZHMgdGhlIGtleS4gTGV0J3Mgc2VlIGlmIHRoaXMgaW5zdHJ1bWVudGF0aW9uIGlzIGdyYW51bGFyIGVub3VnaCBmb3IgbXkgYW5hbHl0aWNhbCBnb2Fscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjI4LjI5Mzc5NzcxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDMzMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MjguNDE5ODM2NzczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMDQyNTQ0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgSS9PIExhdGVuY3kgaW4gdGhlIENvbnRleHQgb2YgQ29udHJvbCBHcm91cHMqKlxuXG5SaWdodCwgc28gYENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWWAgaXMgZGVmaW5pdGVseSBhIGtleSBmYWN0b3IgaGVyZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBibG9jayBJL08gbGF0ZW5jeSBhbmQgY2dyb3Vwcy4gTm93LCB3aGVyZSB3b3VsZCB0aGUgY29yZSBsYXRlbmN5IGNhbGN1bGF0aW9ucyByZXNpZGU/IEFoLCBvZiBjb3Vyc2UsIGBibGstaW9sYXRlbmN5LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGF0IGBsYXRlbmN5X3N0YXRfc3VtYCB2YXJpYWJsZS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgYWdncmVnYXRlZCBsYXRlbmN5IHN0YXRpc3RpY3MgYXJlIGJlaW5nIGhlbGQgYW5kIHVwZGF0ZWQuIFRoYXQncyB0aGUgZmlyc3QgcGxhY2UgSSdsbCBnbyB0byBnZXQgbXkgYmVhcmluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMTozNi41MjQwOTQwODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTc1Njg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYXRlbmN5X3N0YXRfc3VtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb2xhdGVuY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmM9MTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA3LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMDg6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMDktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz01MTU9c3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTI4LVxcdFxcdHMgPSBwZXJfY3B1X3B0cihpb2xhdC1cXHUwMDNlc3RhdHMsIGNwdSk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjUyOTpcXHRcXHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcXHUwMDI2c3RhdCwgcyk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTUzMC1cXHRcXHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgcyk7XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQ5LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo1NTA6XFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCwgXFx1MDAyNnN0YXQpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NTEtXFx0bGF0X2luZm8tXFx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXFx1MDAzZW5yX3NhbXBsZXM7XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9OTIxPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9zc2Rfc3RhdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHN0cnVjdCBzZXFfZmlsZSAqcylcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05MzAtXFx0XFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVxcdTAwM2VzdGF0cywgY3B1KTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTMxOlxcdFxcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFxcdTAwMjZzdGF0LCBzKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTMyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MzYuNjM1ODU1ODA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQ2Nzc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgVXBkYXRlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBibGtfcnFfc3RhdF9zdW1gIGp1bXBzIG91dC4gSSByZW1lbWJlciBpdCdzIHVzZWQgaW4gYm90aCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgYGJsay1zdGF0LmNgLiBDbGFzc2ljIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MsIG5hdHVyYWxseS4gU28sIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIGBibGtfcnFfc3RhdF9zdW1gLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0J3MgZ29vZCB0byBrbm93IG9mZiB0aGUgYmF0LCBhcyB0aGlzIGlzIG1vcmUgdGhhbiBhIHJlZmFjdG9yLlxuXG5MZXQncyBrZWVwIGFuIGV5ZSBvbiBhIGZldyBvdGhlciBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSByZWxhdGVkOiBgYmxrX3N0YXRfdGltZXJfZm5gIGFuZCB0aGF0IGBsYXRlbmN5X3N0YXRfc3VtYCBtYWNyby4gU2luY2UgaXQncyBpbmxpbmUsIHRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgaXRzIHVzYWdlcywgbGlrZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agb3IgYGlvbGF0ZW5jeV9zc2Rfc3RhdGAgYXMgcG90ZW50aWFsIGFyZWFzIGltcGFjdGVkIGFzIHdlbGwuIEdvb2QgcHJhY3RpY2UgdG8gY29uc2lkZXIgaW5kaXJlY3QgaW1wYWN0cy5cblxuSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBgYmxrX3JxX3N0YXRfc3VtYCBhZ2FpbiB0byBzb2xpZGlmeSBteSB0aG91Z2h0IHByb2Nlc3MgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjQwLjcyMDUzNTgxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstc3RhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdHZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQpXFxuICAyMTpcXHR7XFxuICAyMjpcXHRcXHRzdGF0LVxcdTAwM2VtaW4gPSAtMVVMTDtcXG4gIDIzOlxcdFxcdHN0YXQtXFx1MDAzZW1heCA9IHN0YXQtXFx1MDAzZW5yX3NhbXBsZXMgPSBzdGF0LVxcdTAwM2VtZWFuID0gMDtcXG4gIDI0OlxcdFxcdHN0YXQtXFx1MDAzZWJhdGNoID0gMDtcXG4gIDI1OlxcdH1cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Lyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbid0IGluaXRpYWxpemVkICovXFxuICAyODpcXHR2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuICAyOTpcXHR7XFxuICAzMDpcXHRcXHRpZiAoZHN0LVxcdTAwM2Vucl9zYW1wbGVzICsgc3JjLVxcdTAwM2Vucl9zYW1wbGVzIFxcdTAwM2M9IGRzdC1cXHUwMDNlbnJfc2FtcGxlcylcXG4gIDMxOlxcdFxcdFxcdHJldHVybjtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ZHN0LVxcdTAwM2VtaW4gPSBtaW4oZHN0LVxcdTAwM2VtaW4sIHNyYy1cXHUwMDNlbWluKTtcXG4gIDM0OlxcdFxcdGRzdC1cXHUwMDNlbWF4ID0gbWF4KGRzdC1cXHUwMDNlbWF4LCBzcmMtXFx1MDAzZW1heCk7XFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdGRzdC1cXHUwMDNlbWVhbiA9IGRpdl91NjQoc3JjLVxcdTAwM2ViYXRjaCArIGRzdC1cXHUwMDNlbWVhbiAqIGRzdC1cXHUwMDNlbnJfc2FtcGxlcyxcXG4gIDM3OlxcdFxcdFxcdFxcdFxcdGRzdC1cXHUwMDNlbnJfc2FtcGxlcyArIHNyYy1cXHUwMDNlbnJfc2FtcGxlcyk7XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdGRzdC1cXHUwMDNlYmF0Y2ggKz0gc3JjLVxcdTAwM2ViYXRjaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6NDAuNzIwNTk3ODc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzU3NzI1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBibGtfcnFfc3RhdF9zdW1gIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gbG9va2luZyBhdCBhIGZpeCBmb3IgYGJsa19ycV9zdGF0X3N1bWAsIGFuZCBpdCdzIGFsbCBhYm91dCBob3cgYGRzdC1cdTAwM2ViYXRjaGAgaXNuJ3QgYmVpbmcgcHJvcGVybHkgYWNjdW11bGF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UncmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIOKAkyBzcGVjaWZpY2FsbHksIGFjY3VtdWxhdGluZyBkYXRhIGZyb20gbXVsdGlwbGUgQ1BVcyDigJMgdGhlIGBkc3QtXHUwMDNlYmF0Y2hgIHZhbHVlIGlzIGFsd2F5cyBnb2luZyB0byBiZSB6ZXJvIChvciB3aGF0ZXZlciBpdCB3YXMgaW5pdGlhbGl6ZWQgdG8pLCBhbmQgdGhhdCdzIGdvaW5nIHRvIG1lc3MgdXAgdGhlIGBkc3QtXHUwMDNlbWVhbmAgY2FsY3VsYXRpb24gaW4gc3Vic2VxdWVudCBjYWxscy5cblxuV2FpdCwgbG9va2luZyBjbG9zZXIsIEkgc2VlIHRoZSBjYWxjdWxhdGlvbiBvZiBgZHN0LVx1MDAzZW1lYW5gIHJlbGllcyBvbiBgc3JjLVx1MDAzZWJhdGNoYCwgd2hpY2ggaXMgZ3JlYXQgYnV0IHRoZSBjcml0aWNhbCBiaXQgdGhhdCdzIG1pc3NpbmcgaXMgdXBkYXRpbmcgYGRzdC1cdTAwM2ViYXRjaGAgaXRzZWxmLiBTbywgaWYgYGJsa19ycV9zdGF0X3N1bWAgaXMgdXNlZCB0byBhZ2dyZWdhdGUgZGF0YSBmcm9tIG11bHRpcGxlIHNvdXJjZXMgaW50byBhIHNpbmdsZSBhY2N1bXVsYXRvciAoYGRzdGApLCBhbmQgdGhlbiB0aGF0IGFjY3VtdWxhdG9yIChgZHN0YCkgYmVjb21lcyBhIHNvdXJjZSAoYHNyY2ApIGxhdGVyIG9uLi4uIGJvb20hIEluY29ycmVjdCBgbWVhbmAgY2FsY3VsYXRpb24gYmVjYXVzZSBgZHN0LVx1MDAzZWJhdGNoYCBpcyBzdGFsZS5cblxuUmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJuLiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBhY2N1bXVsYXRpbmcgcGVyLUNQVSBzdGF0cyBpbnRvIGEgZ2xvYmFsIHN0YXQuIExvb2tpbmcgYXQgdGhlIGBibGtfc3RhdF90aW1lcl9mbmAsIEkgY2FuIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgaXMgaGFwcGVuaW5nLiBUaGUgb3V0ZXIgbG9vcCBnb2VzIHRocm91Z2ggZWFjaCBvbmxpbmUgQ1BVLCBhbmQgdGhlbiBhbiBpbm5lciBsb29wIGl0ZXJhdGVzIHRocm91Z2ggYnVja2V0cy4gSW4gZWFjaCBDUFUncyBpdGVyYXRpb24sIGBibGtfcnFfc3RhdF9zdW1gIGlzIGNhbGxlZCB0byBzdW0gdXAgYSBgZHN0YCAoYGNiLVx1MDAzZXN0YXRbYnVja2V0XWApIGZyb20gdGhlIGluZGl2aWR1YWwgcGVyLWNwdSBzdGF0cyAoYGNwdV9zdGF0W2J1Y2tldF1gKS4gU28sIHRoZSBgZHN0YCBiZWNvbWVzIHRoZSBnbG9iYWwgc3RhdCwgYW5kIGl0J3MgbGF0ZXIgdXNlZCBieSB0aGUgdGltZXIgY2FsbGJhY2suXG5cbkFoLCBJIHNlZSBpdC4gVGhlIGtleSBpcyBpbiB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdXNlZCB0byBhY2N1bXVsYXRlIHRoZSBwZXItY3B1IHN0YXRzIGludG8gYSBnbG9iYWwgc3RhdCwgYW5kIHRoZW4gdGhlIGFjY3VtdWxhdGVkIGdsb2JhbCBzdGF0cyBhcmUgdXNlZCBsYXRlci5cblxuSSBhbSByZS1yZWFkaW5nIHRoZSBjb2RlIGluIGBibGstaW9sYXRlbmN5LmNgIGZvciBhZGRpdGlvbmFsIGNsYXJpdHkuXG5cbmBgYGNcblx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2c3RhdCwgcyk7XG5gYGBcblNvLCBoZXJlIGBzdGF0YCBpcyBiZWluZyBpbml0aWFsaXplZCBsb2NhbGx5IGFuZCB1c2VkIGFzIHRoZSBhY2N1bXVsYXRpbmcgYGRzdGAgZnJvbSBhbGwgQ1BVcywgYW5kIHRoZW4gaW4gdGhlIGZvbGxvd2luZyBsaW5lLFxuYGBgY1xuXHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG5gYGBcbmBzdGF0YCBhY3RzIGFzIGEgYHNyY2AuICpUaGF0J3MqIHdoZXJlIHRoZSBidWcgc2hvd3MgdXAuIFNpbmNlIGBzdGF0YCB3YXMgdGhlIGBkc3RgIGluIHRoZSBlYXJsaWVyIGNhbGwsIGl0cyBgYmF0Y2hgIG5lZWRzIHRvIGhhdmUgYmVlbiBjb3JyZWN0bHkgdXBkYXRlZC4gQW5kIGJlY2F1c2UgaXQgd2Fzbid0LCB0aGUgY2FsY3VsYXRlZCBgaW9sYXQtXHUwMDNlY3VyX3N0YXQubWVhbmAgd291bGQgYmUgY29tcGxldGVseSB3cm9uZy5cblxuWWVhaCwgdGhhdCdzIGEgY2xlYXIgZnVuY3Rpb25hbCBidWcgYW5kIHRoaXMgcGF0Y2ggaXMgdGhlIGRpcmVjdCBmaXguIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSBzaW5jZSB0aGlzIGNoYW5nZSBhZmZlY3RzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6NDkuNjU2MzcyNzc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk3NDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjQ5Ljc0MjM1MzIzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE0NzAyODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEzNC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBzdWJzeXN0ZW0gaW4gdGhlIGtlcm5lbCB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNldHRpbmdzIHRoYXQgaW5mbHVlbmNlIGZlYXR1cmVzLCBkcml2ZXJzLCBvciBtYXliZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIGJsb2NrIGRldmljZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGxpbmUgMTM0IHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgYmxvY2sgY29uZmlndXJhdGlvbiwgbGlrZWx5IHNvbWV0aGluZyBub24tdHJpdmlhbC4gSSdtIHJlYWR5IHRvIHBhcnNlIHRoZSBjb250ZXh0IGFuZCBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgd2hhdCB0aG9zZSBvcHRpb25zIGFyZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBibG9jayBkZXZpY2UgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMTo1NS4xNTcwNTgxNThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfV0JUXFxuIDEzMTpcXHRcXHRoZWxwXFxuIDEzMjpcXHRcXHRFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdCBmb3IgcmVxdWVzdC1iYXNlZCBibG9jayBkZXZpY2VzLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEzNzpcXHRcXHRoZWxwXFxuIDEzODpcXHRcXHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSAubGF0ZW5jeSBpbnRlcmZhY2UgZm9yIElPIHRocm90dGxpbmcuXFxuIDEzOTpcXHRcXHRUaGUgSU8gY29udHJvbGxlciB3aWxsIGF0dGVtcHQgdG8gbWFpbnRhaW4gYXZlcmFnZSBJTyBsYXRlbmNpZXMgYmVsb3dcXG4gMTQwOlxcdFxcdHRoZSBjb25maWd1cmVkIGxhdGVuY3kgdGFyZ2V0LCB0aHJvdHRsaW5nIGFueWJvZHkgd2l0aCBhIGhpZ2hlciBsYXRlbmN5XFxuIDE0MTpcXHRcXHR0YXJnZXQgdGhhbiB0aGUgdmljdGltaXplZCBncm91cC5cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuIDE0NjpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4gMTQ3OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcXHUwMDI2XFx1MDAyNiBOVk1FX0ZDXFxuIDE0ODpcXHRcXHRoZWxwXFxuIDE0OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjU1LjE1NzEyNzAzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzA1MDI1MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gdGhpcyBwYXRjaCByZWdhcmRpbmcgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgQkxLX0NHUk9VUGAgYW5kIGBCTEtfV0JUYCBpcyBvbiBteSByYWRhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgYmxrX3JxX3N0YXRfc3VtYCB3b3JrcyBpbiBgYmxvY2svYmxrLXN0YXQuY2AuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGNvZGUuXG5cbkdpdmVuIHRoZSBidWcgZml4IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgbWlzc2luZyB1cGRhdGUgb2YgdGhlIGBiYXRjaGAgdmFsdWUgd2l0aGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QgZHVyaW5nIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoYXQgc3RydWN0IGlzIHJldXNlZCAoYXMgaW4gYGJsay1pb2xhdGVuY3kuY2ApIOKAkyB5ZXMsIGFic29sdXRlbHksIHRoaXMgd2FycmFudHMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgdGhlIGFjY3VyYWN5IG9mIGNydWNpYWwgSS9PIHN0YXRpc3RpY3MuIFdlIGNvdWxkIHNlZSBzaWduaWZpY2FudCBkaXNjcmVwYW5jaWVzIGhlcmUuXG5cbldlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYEJMS19XQlRgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19DR1JPVVBgIGVuYWJsZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgYmxrX3JxX3N0YXRfc3VtYCwgb2YgY291cnNlLCBidXQgSSBzaG91bGQgYWxzbyBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBibGtfc3RhdF90aW1lcl9mbmAgYW5kIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBiZWNhdXNlIHRoZXkncmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGFmZmVjdGVkIGNvZGUgcGF0aC4gVGltZSB0byBzZXQgdXAgdGhlIGZ1enppbmcgdGFyZ2V0cyBhbmQgZ2V0IHRob3NlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY1LCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMyOjAyLjg2MjE1NDk4OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDA1MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19ycV9zdGF0X3N1bVwiLFxuICAgIFwiYmxrX3N0YXRfdGltZXJfZm5cIixcbiAgICBcImlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBibG9jayBsYXllciBzdGF0aXN0aWNzIGFjY3VtdWxhdGlvbiB3aGVyZSB0aGUgYGJhdGNoYCB2YWx1ZSB3YXMgbm90IHVwZGF0ZWQgaW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdC4gVGhpcyBjYXVzZWQgaW5jb3JyZWN0IG1lYW4gY2FsY3VsYXRpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCB3YXMgc3Vic2VxdWVudGx5IHVzZWQgYXMgYSBzb3VyY2UsIHN1Y2ggYXMgaW4gYGJsay1pb2xhdGVuY3kuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX1dCVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfcnFfc3RhdF9zdW1cIixcbiAgICBcImJsa19zdGF0X3RpbWVyX2ZuXCIsXG4gICAgXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYmxvY2sgbGF5ZXIgc3RhdGlzdGljcyBhY2N1bXVsYXRpb24gd2hlcmUgdGhlIGBiYXRjaGAgdmFsdWUgd2FzIG5vdCB1cGRhdGVkIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QuIFRoaXMgY2F1c2VkIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3Qgd2FzIHN1YnNlcXVlbnRseSB1c2VkIGFzIGEgc291cmNlLCBzdWNoIGFzIGluIGBibGstaW9sYXRlbmN5LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhrn2h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 17:51:34 +0000 UTC FinishedAt: 2026-07-20 18:32:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "fec1d108-66c3-45b8-85e1-c459b2fdcea4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_rq_stat_sum", "blk_stat_timer_fn", "iolatency_check_latencies" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19ycV9zdGF0X3N1bSYjMzQ7LAogICAgJiMzNDtibGtfc3RhdF90aW1lcl9mbiYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uIHdoZXJlIHRoZSBgYmF0Y2hgIHZhbHVlIHdhcyBub3QgdXBkYXRlZCBpbiB0aGUgZGVzdGluYXRpb24gc3RydWN0LiBUaGlzIGNhdXNlZCBpbmNvcnJlY3QgbWVhbiBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gc3RydWN0IHdhcyBzdWJzZXF1ZW50bHkgdXNlZCBhcyBhIHNvdXJjZSwgc3VjaCBhcyBpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3YzU2ZGRjY2VmYTBjNzY4N2Y2ZDFkMzI4YjhhOGUzNGVkNjk4NTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxODozMDowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3RhdC5jIGIvYmxvY2svYmxrLXN0YXQuY1xuaW5kZXggZGUxMjZlMWVhNWFjNDIuLjRkNDc4MTM1MDA4MzdhIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXN0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXN0YXQuY1xuQEAgLTM2LDYgJiM0MzszNiw3IEBAIHZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYylcbiBcdGRzdC1cdTAwM2VtZWFuID0gZGl2X3U2NChzcmMtXHUwMDNlYmF0Y2ggJiM0MzsgZHN0LVx1MDAzZW1lYW4gKiBkc3QtXHUwMDNlbnJfc2FtcGxlcyxcbiBcdFx0XHRcdGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7IHNyYy1cdTAwM2Vucl9zYW1wbGVzKTtcbiBcbiYjNDM7XHRkc3QtXHUwMDNlYmF0Y2ggJiM0Mzs9IHNyYy1cdTAwM2ViYXRjaDtcbiBcdGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7PSBzcmMtXHUwMDNlbnJfc2FtcGxlcztcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19ycV9zdGF0X3N1bSYjMzQ7LAogICAgJiMzNDtibGtfc3RhdF90aW1lcl9mbiYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uIHdoZXJlIHRoZSBgYmF0Y2hgIHZhbHVlIHdhcyBub3QgdXBkYXRlZCBpbiB0aGUgZGVzdGluYXRpb24gc3RydWN0LiBUaGlzIGNhdXNlZCBpbmNvcnJlY3QgbWVhbiBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gc3RydWN0IHdhcyBzdWJzZXF1ZW50bHkgdXNlZCBhcyBhIHNvdXJjZSwgc3VjaCBhcyBpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdjNTZkZGNjZWZhMGM3Njg3ZjZkMWQzMjhiOGE4ZTM0ZWQ2OTg1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE4OjMwOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN0YXQuYyBiL2Jsb2NrL2Jsay1zdGF0LmMKaW5kZXggZGUxMjZlMWVhNWFjNDIuLjRkNDc4MTM1MDA4MzdhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3RhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1zdGF0LmMKQEAgLTM2LDYgJiM0MzszNiw3IEBAIHZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYykKIAlkc3QtJmd0O21lYW4gPSBkaXZfdTY0KHNyYy0mZ3Q7YmF0Y2ggJiM0MzsgZHN0LSZndDttZWFuICogZHN0LSZndDtucl9zYW1wbGVzLAogCQkJCWRzdC0mZ3Q7bnJfc2FtcGxlcyAmIzQzOyBzcmMtJmd0O25yX3NhbXBsZXMpOwogCiYjNDM7CWRzdC0mZ3Q7YmF0Y2ggJiM0Mzs9IHNyYy0mZ3Q7YmF0Y2g7CiAJZHN0LSZndDtucl9zYW1wbGVzICYjNDM7PSBzcmMtJmd0O25yX3NhbXBsZXM7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guCgoqKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIFN0YXRpc3RpY3MgU3VtbWF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoZWQgYGJsb2NrL2Jsay1zdGF0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBibGtfcnFfc3RhdF9zdW1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBzZWVtcyB3ZSBoYXZlIGFuIGFkZGl0aW9uOiBgZHN0LSZndDtiYXRjaCAmIzQzOz0gc3JjLSZndDtiYXRjaDtgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLgoKTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGJsa19ycV9zdGF0X3N1bWAgaXRzZWxmIHdpdGhpbiB0aGUgc291cmNlIGZpbGUsIGBibG9jay9ibGstc3RhdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgYmxvY2sgSS9PIHN0YXRpc3RpY3Mgc3VtbWF0aW9uIG11c3QgcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkc3QtJmd0O2JhdGNoYCBhbmQgYHNyYy0mZ3Q7YmF0Y2hgIHJlcHJlc2VudCwgYW5kIHdoeSB3ZSYjMzk7cmUgYWRkaW5nIHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYmF0Y2ggc3RhdGlzdGljcyBhcmUgYmVpbmcgdXNlZCBkb3duc3RyZWFtIHRvIGZ1bGx5IGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXRjaC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gYmF0Y2hpbmcgc29tZSBraW5kIG9mIEkvTyBzdGF0aXN0aWMuIEkgbmVlZCB0byBzZWUgaWYgaXQgaXMgSU9QUywgb3IgbGF0ZW5jeS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfcnFfc3RhdF9zdW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstc3RhdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zdGF0LmM9MjA9dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstc3RhdC5jLTI3LS8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKi9cbmJsb2NrL2Jsay1zdGF0LmM6Mjg6dm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICpkc3QsIHN0cnVjdCBibGtfcnFfc3RhdCAqc3JjKVxuYmxvY2svYmxrLXN0YXQuYy0yOS17XG4tLVxuYmxvY2svYmxrLXN0YXQuYz03OD1zdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5ibG9jay9ibGstc3RhdC5jLTkxLVx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgY2ItXHUwMDNlYnVja2V0czsgYnVja2V0JiM0MzsmIzQzOykge1xuYmxvY2svYmxrLXN0YXQuYzo5MjpcdFx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2Y2ItXHUwMDNlc3RhdFtidWNrZXRdLCBcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcbmJsb2NrL2Jsay1zdGF0LmMtOTMtXHRcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgYmxrX3JxX3N0YXRfc3VtYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmxrX3JxX3N0YXRfc3VtYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYmxvY2sgSS9PIHN1YnN5c3RlbS4gRmlyc3QsIEkmIzM5O2xsIHRyYWNrIGRvd24gaXRzIHVzZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgZW1wbG95ZWQgaW4gYGJsa19zdGF0X3RpbWVyX2ZuYC4gTm93LCB0aGF0IHByb3ZpZGVzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBJJiMzOTttIGZhbWlsaWFyIHdpdGggaG93IGJsb2NrIEkvTyBzdGF0aXN0aWNzIGFuZCB0aW1lcnMgd29yaywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyBkb2luZyB3aXRoIGBibGtfcnFfc3RhdF9zdW1gLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGBibGtfc3RhdF90aW1lcl9mbmAgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc3RhdGlzdGljIGlzIGJlaW5nIGxldmVyYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfc3RhdF90aW1lcl9mbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zdGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYz01MT12b2lkIGJsa19zdGF0X2FkZChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU2NCBub3cpXG4tLVxuYmxvY2svYmxrLXN0YXQuYy03Ny1cbmJsb2NrL2Jsay1zdGF0LmM6Nzg6c3RhdGljIHZvaWQgYmxrX3N0YXRfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5ibG9jay9ibGstc3RhdC5jLTc5LXtcbi0tXG5ibG9jay9ibGstc3RhdC5jPTEwMT1ibGtfc3RhdF9hbGxvY19jYWxsYmFjayh2b2lkICgqdGltZXJfZm4pKHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5jLTEyNy1cdGNiLVx1MDAzZWJ1Y2tldHMgPSBidWNrZXRzO1xuYmxvY2svYmxrLXN0YXQuYzoxMjg6XHR0aW1lcl9zZXR1cChcdTAwMjZjYi1cdTAwM2V0aW1lciwgYmxrX3N0YXRfdGltZXJfZm4sIDApO1xuYmxvY2svYmxrLXN0YXQuYy0xMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBTdGF0aXN0aWNzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyBhIHRpbWVyIGNhbGxiYWNrLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZpeCB0byBgYmxrX3JxX3N0YXRfc3VtYCwgc3BlY2lmaWNhbGx5IGEgbWlzc2luZyB1cGRhdGUgdG8gYGRzdC0mZ3Q7YmF0Y2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIGltcGFjdGluZyBibG9jayBsYXllciBzdGF0aXN0aWNzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgdGhlIGJsb2NrIGxheWVyLCBhbmQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByYXRoZXIgdGhhbiBqdXN0IGEgY29zbWV0aWMgb25lLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN0YXRpc3RpY3MgdGhhdCBmZWVkIGludG8gdGhpbmdzIGxpa2Uga3liZXIgSS9PIHNjaGVkdWxlciBhbmQgYmxvY2sgcG9sbGluZyDigJMgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50cy4gR2l2ZW4gaG93IHZpdGFsIHRob3NlIGZ1bmN0aW9ucyBhcmUsIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBpbXBhY3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggd2hpY2ggbW9kdWxlcyBhbmQgc3RydWN0dXJlcyB1c2UgYGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrYCB0byB0aG9yb3VnaGx5IGFzc2VzcyB0aGUgcGF0Y2gmIzM5O3MgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYz0xMDA9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0LmM6MTAxOmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxuYmxvY2svYmxrLXN0YXQuYy0xMDItXHRcdFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5oPTc1PXZvaWQgYmxrX3N0YXRfZGlzYWJsZV9hY2NvdW50aW5nKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcbi0tXG5ibG9jay9ibGstc3RhdC5oLTc3LS8qKlxuYmxvY2svYmxrLXN0YXQuaDo3ODogKiBibGtfc3RhdF9hbGxvY19jYWxsYmFjaygpIC0gQWxsb2NhdGUgYSBibG9jayBzdGF0aXN0aWNzIGNhbGxiYWNrLlxuYmxvY2svYmxrLXN0YXQuaC03OS0gKiBAdGltZXJfZm46IFRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuLS1cbmJsb2NrL2Jsay1zdGF0Lmg9ODg9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0Lmg6ODk6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXG5ibG9jay9ibGstc3RhdC5oLTkwLVx0XHRcdGludCAoKmJ1Y2tldF9mbikoY29uc3Qgc3RydWN0IHJlcXVlc3QgKiksXG4tLVxuYmxvY2svYmxrLXdidC5jPTcxND1zdGF0aWMgc3RydWN0IHJxX3diICp3YnRfYWxsb2Modm9pZClcbi0tXG5ibG9jay9ibGstd2J0LmMtNzIwLVxuYmxvY2svYmxrLXdidC5jOjcyMTpcdHJ3Yi1cdTAwM2VjYiA9IGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHdiX3RpbWVyX2ZuLCB3YnRfZGF0YV9kaXIsIDIsIHJ3Yik7XG5ibG9jay9ibGstd2J0LmMtNzIyLVx0aWYgKCFyd2ItXHUwMDNlY2IpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgV3JpdGViYWNrIFRocm90dGxpbmcgaW4gdGhlIEJsb2NrIExheWVyKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd3JpdGViYWNrIHRocm90dGxpbmcgd29ya3MgYXQgdGhlIGJsb2NrIGxheWVyLiBJIGtub3cgYGJsay13YnQuY2AgaXMgaW52b2x2ZWQsIG9idmlvdXNseS4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGFjdHVhbGx5IGRvaW5nIHRoZSB0aHJvdHRsaW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYmxrLXN0YXQuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBzdGF0cyBhcmUgYmVpbmcgc3VtbWVkLCB3aGljaCBzaG91bGQgaW52b2x2ZSBgYmxrX3JxX3N0YXRfc3VtYC4gVGhhdCBmZWVscyBsaWtlIHRoZSBrZXkgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgaXMgY2FsbGVkIGZyb20uIFJpZ2h0LCBgYmxrX3JxX3N0YXRfc3VtYCBpcyBjYWxsZWQgZnJvbSBgYmxrX3N0YXRfdGltZXJfZm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBhIHRpbWVyIHRyaWdnZXJzIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgc3RhdHMuIFNvLCBJIG5lZWQgdG8gZGlnIGludG8gYGJsa19zdGF0X3RpbWVyX2ZuYCB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgYW5kIGZyZXF1ZW5jeSBvZiB0aGVzZSBzdGF0cyBhbmQgdGhhdCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhyb3R0bGluZyBiZWhhdmlvci4gTGV0IG1lIHN3aXRjaCBteSBmb2N1cyB0byBgYmxvY2svYmxrLXN0YXQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcbiAgNzE6XHRcdFx0c3RhdCA9IFx1MDAyNnBlcl9jcHVfcHRyKGNiLVx1MDAzZWNwdV9zdGF0LCBjcHUpW2J1Y2tldF07XG4gIDcyOlx0XHRcdGJsa19ycV9zdGF0X2FkZChzdGF0LCB2YWx1ZSk7XG4gIDczOlx0XHR9XG4gIDc0Olx0XHRwdXRfY3B1KCk7XG4gIDc1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIHZvaWQgYmxrX3N0YXRfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gIDc5Olx0e1xuICA4MDpcdFx0c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYiA9IHRpbWVyX2NvbnRhaW5lcl9vZihjYiwgdCwgdGltZXIpO1xuICA4MTpcdFx0dW5zaWduZWQgaW50IGJ1Y2tldDtcbiAgODI6XHRcdGludCBjcHU7XG4gIDgzOlx0XG4gIDg0Olx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgY2ItXHUwMDNlYnVja2V0czsgYnVja2V0JiM0MzsmIzQzOylcbiAgODU6XHRcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZjYi1cdTAwM2VzdGF0W2J1Y2tldF0pO1xuICA4NjpcdFxuICA4NzpcdFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiAgODg6XHRcdFx0c3RydWN0IGJsa19ycV9zdGF0ICpjcHVfc3RhdDtcbiAgODk6XHRcbiAgOTA6XHRcdFx0Y3B1X3N0YXQgPSBwZXJfY3B1X3B0cihjYi1cdTAwM2VjcHVfc3RhdCwgY3B1KTtcbiAgOTE6XHRcdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIGNiLVx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCYjNDM7JiM0MzspIHtcbiAgOTI6XHRcdFx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2Y2ItXHUwMDNlc3RhdFtidWNrZXRdLCBcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcbiAgOTM6XHRcdFx0XHRibGtfcnFfc3RhdF9pbml0KFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xuICA5NDpcdFx0XHR9XG4gIDk1Olx0XHR9XG4gIDk2Olx0XG4gIDk3Olx0XHRjYi1cdTAwM2V0aW1lcl9mbihjYik7XG4gIDk4Olx0fVxuICA5OTpcdFxuIDEwMDpcdHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqXG4gMTAxOlx0YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXG4gMTAyOlx0XHRcdFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcbiAxMDM6XHRcdFx0XHR1bnNpZ25lZCBpbnQgYnVja2V0cywgdm9pZCAqZGF0YSlcbiAxMDQ6XHR7XG4gMTA1Olx0XHRzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKmNiO1xuIDEwNjpcdFxuIDEwNzpcdFx0Y2IgPSBrbWFsbG9jX29iaigqY2IpO1xuIDEwODpcdFx0aWYgKCFjYilcbiAxMDk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTEwOlx0XG4gMTExOlx0XHRjYi1cdTAwM2VzdGF0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBibGtfcnFfc3RhdCwgYnVja2V0cyk7XG4gMTEyOlx0XHRpZiAoIWNiLVx1MDAzZXN0YXQpIHtcbiAxMTM6XHRcdFx0a2ZyZWUoY2IpO1xuIDExNDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMTU6XHRcdH1cbiAxMTY6XHRcdGNiLVx1MDAzZWNwdV9zdGF0ID0gX19hbGxvY19wZXJjcHUoYnVja2V0cyAqIHNpemVvZihzdHJ1Y3QgYmxrX3JxX3N0YXQpLFxuIDExNzpcdFx0XHRcdFx0ICAgICAgX19hbGlnbm9mX18oc3RydWN0IGJsa19ycV9zdGF0KSk7XG4gMTE4Olx0XHRpZiAoIWNiLVx1MDAzZWNwdV9zdGF0KSB7XG4gMTE5Olx0XHRcdGtmcmVlKGNiLVx1MDAzZXN0YXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbG9jayBMYXllciBTdGF0aXN0aWNzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHR3ZWFraW5nIHRoZSBzdGF0aXN0aWNzIGdhdGhlcmVkIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdXBkYXRpbmcgYGRzdC0mZ3Q7YmF0Y2hgIHdpdGhpbiB0aGUgYGJsa19ycV9zdGF0X3N1bWAgZnVuY3Rpb24uIEhtbSwgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IEFic29sdXRlbHksIHllcy4gQW55IGNoYW5nZSB0b3VjaGluZyBzdGF0aXN0aWNzIGNvbGxlY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBibG9jayBsYXllciwgaXMgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciB1bmNvdmVyaW5nIGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBXZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB3cml0ZWJhY2sgb3IgdGhyb3R0bGluZywgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCYjMzk7cyBzZWUuLi4gY291bGQgaXQgYmUgYENPTkZJR19CTEtfV0JUYCBvciBgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR2A/IFJpZ2h0LCBiZXN0IHRvIGNoZWNrIGBibG9jay9LY29uZmlnYCB0byBiZSBjZXJ0YWluLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBCTEtfV0JUYCBmb3IgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19XQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTA2PWNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbi0tXG5ibG9jay9LY29uZmlnLTExNy1cbmJsb2NrL0tjb25maWc6MTE4OmNvbmZpZyBCTEtfV0JUXG5ibG9jay9LY29uZmlnLTExOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTI2LVxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcbmJsb2NrL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBibGstc3RhdC5jYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIGBibGstc3RhdC5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHNwZWNpZmljIGNvbmRpdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBvciBpZiB0aGVyZSBhcmUgY2VydGFpbiBmbGFncywgZGVmaW5lcywgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBpdHMgcHJlc2VuY2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBndWFyZCBpdHMgY29tcGlsYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSBkaWFnbm9zaW5nIGFueSByZWxhdGVkIGlzc3Vlcy4gTGV0JiMzOTtzIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstc3RhdC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuLS1cbmJsb2NrL01ha2VmaWxlLTEwLVx0XHRcdGJsay1tZXJnZS5vIGJsay10aW1lb3V0Lm8gYmxrLWxpYi5vIGJsay1tcS5vIFxcXG5ibG9jay9NYWtlZmlsZToxMTpcdFx0XHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcbmJsb2NrL01ha2VmaWxlLTEyLVx0XHRcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIGxpa2UgYGJsay1zdGF0Lm9gIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggc3VnZ2VzdHMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgY29yZSB0byB0aGUgc3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBgYmxrX3JxX3N0YXRfc3VtYCBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gYGJsa19zdGF0X3RpbWVyX2ZuYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0ZWxscyBtZSBob3cgdGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IGFnZ3JlZ2F0ZWQuIEZvbGxvd2luZyB0aGUgZmxvdywgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyB0cmlnZ2VyZWQgYnkgYSB0aW1lci4gTm93LCB3aGVyZSBpcyB0aGlzIHRpbWVyIHNldCB1cD8gQWgsIGl0JiMzOTtzIGluIGBibGtfc3RhdF9hbGxvY19jYWxsYmFja2AuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluay4gQW5kLCBJIHNlZSB0aGF0IGBibGstd2J0LmNgIG1ha2VzIHVzZSBvZiBgYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGJhY2smIzM5O3MgdXNlLiBTaW5jZSBpdCYjMzk7cyBhIGNhbGxiYWNrLCBvdGhlciBtb2R1bGVzIG1pZ2h0IGJlIHVzaW5nIHRoaXMgYXMgd2VsbC4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBjb25maXJtIHdoZXRoZXIgYGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrYCBpcyB1c2VkIGVsc2V3aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgdXNhZ2Ugb2YgdGhhdCBjYWxsYmFjayBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBzdXJyb3VuZGluZyB0aGUgYmxvY2sgbGF5ZXIgc3RhdGlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN0YXQuYz0xMDA9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0LmM6MTAxOmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxuYmxvY2svYmxrLXN0YXQuYy0xMDItXHRcdFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5oPTc1PXZvaWQgYmxrX3N0YXRfZGlzYWJsZV9hY2NvdW50aW5nKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcbi0tXG5ibG9jay9ibGstc3RhdC5oLTc3LS8qKlxuYmxvY2svYmxrLXN0YXQuaDo3ODogKiBibGtfc3RhdF9hbGxvY19jYWxsYmFjaygpIC0gQWxsb2NhdGUgYSBibG9jayBzdGF0aXN0aWNzIGNhbGxiYWNrLlxuYmxvY2svYmxrLXN0YXQuaC03OS0gKiBAdGltZXJfZm46IFRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuLS1cbmJsb2NrL2Jsay1zdGF0Lmg9ODg9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcbmJsb2NrL2Jsay1zdGF0Lmg6ODk6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXG5ibG9jay9ibGstc3RhdC5oLTkwLVx0XHRcdGludCAoKmJ1Y2tldF9mbikoY29uc3Qgc3RydWN0IHJlcXVlc3QgKiksXG4tLVxuYmxvY2svYmxrLXdidC5jPTcxND1zdGF0aWMgc3RydWN0IHJxX3diICp3YnRfYWxsb2Modm9pZClcbi0tXG5ibG9jay9ibGstd2J0LmMtNzIwLVxuYmxvY2svYmxrLXdidC5jOjcyMTpcdHJ3Yi1cdTAwM2VjYiA9IGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHdiX3RpbWVyX2ZuLCB3YnRfZGF0YV9kaXIsIDIsIHJ3Yik7XG5ibG9jay9ibGstd2J0LmMtNzIyLVx0aWYgKCFyd2ItXHUwMDNlY2IpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBibGtfcnFfc3RhdF9zdW1gIFVzYWdlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJsa19ycV9zdGF0X3N1bWAuIEkgcmVtZW1iZXIgZnJvbSBnbGFuY2luZyBhdCB0aGUgY29kZSB0aGF0IG9ubHkgYGJsay13YnQuY2Agc2VlbXMgdG8gYmUgbWFraW5nIHVzZSBvZiBpdC4gVGhhdOKAmXMgaW50ZXJlc3RpbmcuICBUaGlzIG1lYW5zLCB0byByZWFsbHkgZ2V0IGEgZ29vZCBoYW5kbGUgb24gaXRzIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCB0ZXN0aW5nLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CTEtfV0JUYCBlbmFibGVkLiAgTm8gcG9pbnQgdHJ5aW5nIHRvIGV4ZXJjaXNlIGl0IG90aGVyd2lzZS4KCkJ1dCBiZWZvcmUgSSBkaXZlIGludG8gd3JpdGluZyB0ZXN0cywgSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBKdXN0IGJlY2F1c2UgSSByZW1lbWJlciBpdCBiZWluZyB1c2VkIGluIG9uZSBwbGFjZSwgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyB0aGUgKm9ubHkqIHBsYWNlLiAgU28sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayB3aXRoIHRoZSB0b29scy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgYmxrX3JxX3N0YXRfc3VtYCBpc24mIzM5O3QgY2FsbGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBjb2RlIGJhc2UsIGp1c3QgdG8gYmUgdGhvcm91Z2guIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCwgcmlnaHQ/IEdvdHRhIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNvbGlkIGJlZm9yZSBJIGRlZGljYXRlIHRpbWUgdG8gdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3JxX3N0YXRfc3VtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYz0yMDg9c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMTUtXHR9IGVsc2VcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMTY6XHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZzdW0tXHUwMDNlcnFzLCBcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE3LX1cbi0tXG5ibG9jay9ibGstc3RhdC5jPTIwPXZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQpXG4tLVxuYmxvY2svYmxrLXN0YXQuYy0yNy0vKiBzcmMgaXMgYSBwZXItY3B1IHN0YXQsIG1lYW4gaXNuJiMzOTt0IGluaXRpYWxpemVkICovXG5ibG9jay9ibGstc3RhdC5jOjI4OnZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYylcbmJsb2NrL2Jsay1zdGF0LmMtMjkte1xuLS1cbmJsb2NrL2Jsay1zdGF0LmM9Nzg9c3RhdGljIHZvaWQgYmxrX3N0YXRfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuYmxvY2svYmxrLXN0YXQuYy05MS1cdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIGNiLVx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1zdGF0LmM6OTI6XHRcdFx0YmxrX3JxX3N0YXRfc3VtKFx1MDAyNmNiLVx1MDAzZXN0YXRbYnVja2V0XSwgXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XG5ibG9jay9ibGstc3RhdC5jLTkzLVx0XHRcdGJsa19ycV9zdGF0X2luaXQoXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XG4tLVxuYmxvY2svYmxrLXN0YXQuaD0xNzM9dm9pZCBibGtfcnFfc3RhdF9hZGQoc3RydWN0IGJsa19ycV9zdGF0ICosIHU2NCk7XG5ibG9jay9ibGstc3RhdC5oOjE3NDp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKiwgc3RydWN0IGJsa19ycV9zdGF0ICopO1xuYmxvY2svYmxrLXN0YXQuaC0xNzUtdm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIEkvTyBMYXRlbmN5KioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIG1hY3JvLCB3aGF0ZXZlciBpdCBpcywgYmVpbmcgdXNlZC4gSW50ZXJlc3RpbmcsIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIGd1ZXNzLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRyYWNpbmcgb3IgcHJvZmlsaW5nLCBwZXJoYXBzIHNvbWUga2luZCBvZiBpbnN0cnVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBibGstaW9sYXRlbmN5LmNgIGZpbGUg4oCTIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBiZWluZyBhcHBsaWVkIGluIHByYWN0aWNlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSAqdXNpbmcqIGl0IHdpdGhpbiB0aGUgYmxvY2sgSS9PIGxheWVyIGl0c2VsZi4gV2hhdCBwYXJ0cyBvZiB0aGUgSS9PIHBhdGggYXJlIHRoZXkgaW5zdHJ1bWVudGluZz8gQXJlIHRoZXkgY2FwdHVyaW5nIHRpbWVzdGFtcHMsIGNhbGN1bGF0aW5nIGRlbHRhcywgYXNzb2NpYXRpbmcgZXZlbnRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBvdmVyaGVhZD8gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIHRvIHNlZSB0aGUgZXhhY3QgY29udGV4dCBpbiB3aGljaCB0aGlzIG1hY3JvIGlzIGJlaW5nIGVtcGxveWVkIC0gd2hhdCBkb2VzIGl0cyB1c2FnZSB0ZWxsIG1lPyBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIGFuZCBgYmxrLWlvbGF0ZW5jeS5jYCBob2xkcyB0aGUga2V5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaW5zdHJ1bWVudGF0aW9uIGlzIGdyYW51bGFyIGVub3VnaCBmb3IgbXkgYW5hbHl0aWNhbCBnb2Fscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIEkvTyBMYXRlbmN5IGluIHRoZSBDb250ZXh0IG9mIENvbnRyb2wgR3JvdXBzKioKClJpZ2h0LCBzbyBgQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZhY3RvciBoZXJlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGJsb2NrIEkvTyBsYXRlbmN5IGFuZCBjZ3JvdXBzLiBOb3csIHdoZXJlIHdvdWxkIHRoZSBjb3JlIGxhdGVuY3kgY2FsY3VsYXRpb25zIHJlc2lkZT8gQWgsIG9mIGNvdXJzZSwgYGJsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoYXQgYGxhdGVuY3lfc3RhdF9zdW1gIHZhcmlhYmxlLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgYWdncmVnYXRlZCBsYXRlbmN5IHN0YXRpc3RpY3MgYXJlIGJlaW5nIGhlbGQgYW5kIHVwZGF0ZWQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIGdvIHRvIGdldCBteSBiZWFyaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGF0ZW5jeV9zdGF0X3N1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmM9MTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNy1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMDg6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwOS1cdFx0XHRcdCAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTUxNT1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTI4LVx0XHRzID0gcGVyX2NwdV9wdHIoaW9sYXQtXHUwMDNlc3RhdHMsIGNwdSk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NTI5Olx0XHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZzdGF0LCBzKTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MzAtXHRcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBzKTtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQ5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU1MDpcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0LCBcdTAwMjZzdGF0KTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NTEtXHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzIC09IGlvbGF0LVx1MDAzZW5yX3NhbXBsZXM7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTkyMT1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfc3NkX3N0YXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzMC1cdFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVx1MDAzZXN0YXRzLCBjcHUpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjkzMTpcdFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2c3RhdCwgcyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTMyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgVXBkYXRlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYGJsa19ycV9zdGF0X3N1bWAganVtcHMgb3V0LiBJIHJlbWVtYmVyIGl0JiMzOTtzIHVzZWQgaW4gYm90aCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgYGJsay1zdGF0LmNgLiBDbGFzc2ljIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MsIG5hdHVyYWxseS4gU28sIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIGBibGtfcnFfc3RhdF9zdW1gLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyBvZmYgdGhlIGJhdCwgYXMgdGhpcyBpcyBtb3JlIHRoYW4gYSByZWZhY3Rvci4KCkxldCYjMzk7cyBrZWVwIGFuIGV5ZSBvbiBhIGZldyBvdGhlciBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSByZWxhdGVkOiBgYmxrX3N0YXRfdGltZXJfZm5gIGFuZCB0aGF0IGBsYXRlbmN5X3N0YXRfc3VtYCBtYWNyby4gU2luY2UgaXQmIzM5O3MgaW5saW5lLCB0aGF0IG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IGl0cyB1c2FnZXMsIGxpa2UgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIG9yIGBpb2xhdGVuY3lfc3NkX3N0YXRgIGFzIHBvdGVudGlhbCBhcmVhcyBpbXBhY3RlZCBhcyB3ZWxsLiBHb29kIHByYWN0aWNlIHRvIGNvbnNpZGVyIGluZGlyZWN0IGltcGFjdHMuCgpJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGBibGtfcnFfc3RhdF9zdW1gIGFnYWluIHRvIHNvbGlkaWZ5IG15IHRob3VnaHQgcHJvY2VzcyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zdGF0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbiAgMjE6XHR7XG4gIDIyOlx0XHRzdGF0LVx1MDAzZW1pbiA9IC0xVUxMO1xuICAyMzpcdFx0c3RhdC1cdTAwM2VtYXggPSBzdGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBzdGF0LVx1MDAzZW1lYW4gPSAwO1xuICAyNDpcdFx0c3RhdC1cdTAwM2ViYXRjaCA9IDA7XG4gIDI1Olx0fVxuICAyNjpcdFxuICAyNzpcdC8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKi9cbiAgMjg6XHR2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXG4gIDI5Olx0e1xuICAzMDpcdFx0aWYgKGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7IHNyYy1cdTAwM2Vucl9zYW1wbGVzIFx1MDAzYz0gZHN0LVx1MDAzZW5yX3NhbXBsZXMpXG4gIDMxOlx0XHRcdHJldHVybjtcbiAgMzI6XHRcbiAgMzM6XHRcdGRzdC1cdTAwM2VtaW4gPSBtaW4oZHN0LVx1MDAzZW1pbiwgc3JjLVx1MDAzZW1pbik7XG4gIDM0Olx0XHRkc3QtXHUwMDNlbWF4ID0gbWF4KGRzdC1cdTAwM2VtYXgsIHNyYy1cdTAwM2VtYXgpO1xuICAzNTpcdFxuICAzNjpcdFx0ZHN0LVx1MDAzZW1lYW4gPSBkaXZfdTY0KHNyYy1cdTAwM2ViYXRjaCAmIzQzOyBkc3QtXHUwMDNlbWVhbiAqIGRzdC1cdTAwM2Vucl9zYW1wbGVzLFxuICAzNzpcdFx0XHRcdFx0ZHN0LVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzsgc3JjLVx1MDAzZW5yX3NhbXBsZXMpO1xuICAzODpcdFxuICAzOTpcdFx0ZHN0LVx1MDAzZWJhdGNoICYjNDM7PSBzcmMtXHUwMDNlYmF0Y2g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBibGtfcnFfc3RhdF9zdW1gIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBsb29raW5nIGF0IGEgZml4IGZvciBgYmxrX3JxX3N0YXRfc3VtYCwgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgYGRzdC0mZ3Q7YmF0Y2hgIGlzbiYjMzk7dCBiZWluZyBwcm9wZXJseSBhY2N1bXVsYXRlZC4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSYjMzk7cmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIOKAkyBzcGVjaWZpY2FsbHksIGFjY3VtdWxhdGluZyBkYXRhIGZyb20gbXVsdGlwbGUgQ1BVcyDigJMgdGhlIGBkc3QtJmd0O2JhdGNoYCB2YWx1ZSBpcyBhbHdheXMgZ29pbmcgdG8gYmUgemVybyAob3Igd2hhdGV2ZXIgaXQgd2FzIGluaXRpYWxpemVkIHRvKSwgYW5kIHRoYXQmIzM5O3MgZ29pbmcgdG8gbWVzcyB1cCB0aGUgYGRzdC0mZ3Q7bWVhbmAgY2FsY3VsYXRpb24gaW4gc3Vic2VxdWVudCBjYWxscy4KCldhaXQsIGxvb2tpbmcgY2xvc2VyLCBJIHNlZSB0aGUgY2FsY3VsYXRpb24gb2YgYGRzdC0mZ3Q7bWVhbmAgcmVsaWVzIG9uIGBzcmMtJmd0O2JhdGNoYCwgd2hpY2ggaXMgZ3JlYXQgYnV0IHRoZSBjcml0aWNhbCBiaXQgdGhhdCYjMzk7cyBtaXNzaW5nIGlzIHVwZGF0aW5nIGBkc3QtJmd0O2JhdGNoYCBpdHNlbGYuIFNvLCBpZiBgYmxrX3JxX3N0YXRfc3VtYCBpcyB1c2VkIHRvIGFnZ3JlZ2F0ZSBkYXRhIGZyb20gbXVsdGlwbGUgc291cmNlcyBpbnRvIGEgc2luZ2xlIGFjY3VtdWxhdG9yIChgZHN0YCksIGFuZCB0aGVuIHRoYXQgYWNjdW11bGF0b3IgKGBkc3RgKSBiZWNvbWVzIGEgc291cmNlIChgc3JjYCkgbGF0ZXIgb24uLi4gYm9vbSEgSW5jb3JyZWN0IGBtZWFuYCBjYWxjdWxhdGlvbiBiZWNhdXNlIGBkc3QtJmd0O2JhdGNoYCBpcyBzdGFsZS4KClJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0eXBpY2FsIHVzYWdlIHBhdHRlcm4uIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGFjY3VtdWxhdGluZyBwZXItQ1BVIHN0YXRzIGludG8gYSBnbG9iYWwgc3RhdC4gTG9va2luZyBhdCB0aGUgYGJsa19zdGF0X3RpbWVyX2ZuYCwgSSBjYW4gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBvdXRlciBsb29wIGdvZXMgdGhyb3VnaCBlYWNoIG9ubGluZSBDUFUsIGFuZCB0aGVuIGFuIGlubmVyIGxvb3AgaXRlcmF0ZXMgdGhyb3VnaCBidWNrZXRzLiBJbiBlYWNoIENQVSYjMzk7cyBpdGVyYXRpb24sIGBibGtfcnFfc3RhdF9zdW1gIGlzIGNhbGxlZCB0byBzdW0gdXAgYSBgZHN0YCAoYGNiLSZndDtzdGF0W2J1Y2tldF1gKSBmcm9tIHRoZSBpbmRpdmlkdWFsIHBlci1jcHUgc3RhdHMgKGBjcHVfc3RhdFtidWNrZXRdYCkuIFNvLCB0aGUgYGRzdGAgYmVjb21lcyB0aGUgZ2xvYmFsIHN0YXQsIGFuZCBpdCYjMzk7cyBsYXRlciB1c2VkIGJ5IHRoZSB0aW1lciBjYWxsYmFjay4KCkFoLCBJIHNlZSBpdC4gVGhlIGtleSBpcyBpbiB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdXNlZCB0byBhY2N1bXVsYXRlIHRoZSBwZXItY3B1IHN0YXRzIGludG8gYSBnbG9iYWwgc3RhdCwgYW5kIHRoZW4gdGhlIGFjY3VtdWxhdGVkIGdsb2JhbCBzdGF0cyBhcmUgdXNlZCBsYXRlci4KCkkgYW0gcmUtcmVhZGluZyB0aGUgY29kZSBpbiBgYmxrLWlvbGF0ZW5jeS5jYCBmb3IgYWRkaXRpb25hbCBjbGFyaXR5LgoKYGBgYwoJbGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgJmFtcDtzdGF0LCBzKTsKYGBgClNvLCBoZXJlIGBzdGF0YCBpcyBiZWluZyBpbml0aWFsaXplZCBsb2NhbGx5IGFuZCB1c2VkIGFzIHRoZSBhY2N1bXVsYXRpbmcgYGRzdGAgZnJvbSBhbGwgQ1BVcywgYW5kIHRoZW4gaW4gdGhlIGZvbGxvd2luZyBsaW5lLApgYGBjCglsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCAmYW1wO2lvbGF0LSZndDtjdXJfc3RhdCwgJmFtcDtzdGF0KTsKYGBgCmBzdGF0YCBhY3RzIGFzIGEgYHNyY2AuICpUaGF0JiMzOTtzKiB3aGVyZSB0aGUgYnVnIHNob3dzIHVwLiBTaW5jZSBgc3RhdGAgd2FzIHRoZSBgZHN0YCBpbiB0aGUgZWFybGllciBjYWxsLCBpdHMgYGJhdGNoYCBuZWVkcyB0byBoYXZlIGJlZW4gY29ycmVjdGx5IHVwZGF0ZWQuIEFuZCBiZWNhdXNlIGl0IHdhc24mIzM5O3QsIHRoZSBjYWxjdWxhdGVkIGBpb2xhdC0mZ3Q7Y3VyX3N0YXQubWVhbmAgd291bGQgYmUgY29tcGxldGVseSB3cm9uZy4KClllYWgsIHRoYXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGJ1ZyBhbmQgdGhpcyBwYXRjaCBpcyB0aGUgZGlyZWN0IGZpeC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlIHNpbmNlIHRoaXMgY2hhbmdlIGFmZmVjdHMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYmxvY2sgZGV2aWNlIHN1YnN5c3RlbSBpbiB0aGUga2VybmVsIHRoZXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNldHRpbmdzIHRoYXQgaW5mbHVlbmNlIGZlYXR1cmVzLCBkcml2ZXJzLCBvciBtYXliZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIGJsb2NrIGRldmljZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGxpbmUgMTM0IHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgYmxvY2sgY29uZmlndXJhdGlvbiwgbGlrZWx5IHNvbWV0aGluZyBub24tdHJpdmlhbC4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgY29udGV4dCBhbmQgc2VlIHdoYXQga2luZCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGJlaW5nIHByZXNlbnRlZC4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIHdoYXQgdGhvc2Ugb3B0aW9ucyBhcmUgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgYmxvY2sgZGV2aWNlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHRkZXBlbmRzIG9uIEJMS19XQlRcbiAxMzE6XHRcdGhlbHBcbiAxMzI6XHRcdEVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0IGZvciByZXF1ZXN0LWJhc2VkIGJsb2NrIGRldmljZXMuXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG4gMTM1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4gMTM2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMzc6XHRcdGhlbHBcbiAxMzg6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC5sYXRlbmN5IGludGVyZmFjZSBmb3IgSU8gdGhyb3R0bGluZy5cbiAxMzk6XHRcdFRoZSBJTyBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbiBhdmVyYWdlIElPIGxhdGVuY2llcyBiZWxvd1xuIDE0MDpcdFx0dGhlIGNvbmZpZ3VyZWQgbGF0ZW5jeSB0YXJnZXQsIHRocm90dGxpbmcgYW55Ym9keSB3aXRoIGEgaGlnaGVyIGxhdGVuY3lcbiAxNDE6XHRcdHRhcmdldCB0aGFuIHRoZSB2aWN0aW1pemVkIGdyb3VwLlxuIDE0MjpcdFxuIDE0MzpcdFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXG4gMTQ0Olx0XG4gMTQ1Olx0Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbiAxNDY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbiAxNDc6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcdTAwMjZcdTAwMjYgTlZNRV9GQ1xuIDE0ODpcdFx0aGVscFxuIDE0OTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyB0cmFmZmljIGFjcm9zc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NQoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHJlZ2FyZGluZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBCTEtfQ0dST1VQYCBhbmQgYEJMS19XQlRgIGlzIG9uIG15IHJhZGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBibGtfcnFfc3RhdF9zdW1gIHdvcmtzIGluIGBibG9jay9ibGstc3RhdC5jYC4gVGltZSB0byBkaXZlIGJhY2sgaW50byB0aGUgY29kZS4KCkdpdmVuIHRoZSBidWcgZml4IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgbWlzc2luZyB1cGRhdGUgb2YgdGhlIGBiYXRjaGAgdmFsdWUgd2l0aGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QgZHVyaW5nIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoYXQgc3RydWN0IGlzIHJldXNlZCAoYXMgaW4gYGJsay1pb2xhdGVuY3kuY2ApIOKAkyB5ZXMsIGFic29sdXRlbHksIHRoaXMgd2FycmFudHMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW1wYWN0IHRoZSBhY2N1cmFjeSBvZiBjcnVjaWFsIEkvTyBzdGF0aXN0aWNzLiBXZSBjb3VsZCBzZWUgc2lnbmlmaWNhbnQgZGlzY3JlcGFuY2llcyBoZXJlLgoKV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBgQkxLX1dCVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGFuZCBgQkxLX0NHUk9VUGAgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgYmxrX3JxX3N0YXRfc3VtYCwgb2YgY291cnNlLCBidXQgSSBzaG91bGQgYWxzbyBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBibGtfc3RhdF90aW1lcl9mbmAgYW5kIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBhZmZlY3RlZCBjb2RlIHBhdGguIFRpbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIGdldCB0aG9zZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxODozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX1dCVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX3JxX3N0YXRfc3VtJiMzNDssCiAgICAmIzM0O2Jsa19zdGF0X3RpbWVyX2ZuJiMzNDssCiAgICAmIzM0O2lvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYmxvY2sgbGF5ZXIgc3RhdGlzdGljcyBhY2N1bXVsYXRpb24gd2hlcmUgdGhlIGBiYXRjaGAgdmFsdWUgd2FzIG5vdCB1cGRhdGVkIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QuIFRoaXMgY2F1c2VkIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3Qgd2FzIHN1YnNlcXVlbnRseSB1c2VkIGFzIGEgc291cmNlLCBzdWNoIGFzIGluIGBibGstaW9sYXRlbmN5LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfV0JUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfcnFfc3RhdF9zdW0mIzM0OywKICAgICYjMzQ7YmxrX3N0YXRfdGltZXJfZm4mIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBibG9jayBsYXllciBzdGF0aXN0aWNzIGFjY3VtdWxhdGlvbiB3aGVyZSB0aGUgYGJhdGNoYCB2YWx1ZSB3YXMgbm90IHVwZGF0ZWQgaW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdC4gVGhpcyBjYXVzZWQgaW5jb3JyZWN0IG1lYW4gY2FsY3VsYXRpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCB3YXMgc3Vic2VxdWVudGx5IHVzZWQgYXMgYSBzb3VyY2UsIHN1Y2ggYXMgaW4gYGJsay1pb2xhdGVuY3kuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDoxMC42NDU0NDgzNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyOTUxMjUzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX1dCVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfcnFfc3RhdF9zdW1cIixcbiAgICBcImJsa19zdGF0X3RpbWVyX2ZuXCIsXG4gICAgXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYmxvY2sgbGF5ZXIgc3RhdGlzdGljcyBhY2N1bXVsYXRpb24gd2hlcmUgdGhlIGBiYXRjaGAgdmFsdWUgd2FzIG5vdCB1cGRhdGVkIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QuIFRoaXMgY2F1c2VkIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3Qgd2FzIHN1YnNlcXVlbnRseSB1c2VkIGFzIGEgc291cmNlLCBzdWNoIGFzIGluIGBibGstaW9sYXRlbmN5LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDoxMC42NDU1MTk1OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3YzU2ZGRjY2VmYTBjNzY4N2Y2ZDFkMzI4YjhhOGUzNGVkNjk4NTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTg6MzA6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN0YXQuYyBiL2Jsb2NrL2Jsay1zdGF0LmNcXG5pbmRleCBkZTEyNmUxZWE1YWM0Mi4uNGQ0NzgxMzUwMDgzN2EgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLXN0YXQuY1xcbisrKyBiL2Jsb2NrL2Jsay1zdGF0LmNcXG5AQCAtMzYsNiArMzYsNyBAQCB2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuIFxcdGRzdC1cXHUwMDNlbWVhbiA9IGRpdl91NjQoc3JjLVxcdTAwM2ViYXRjaCArIGRzdC1cXHUwMDNlbWVhbiAqIGRzdC1cXHUwMDNlbnJfc2FtcGxlcyxcXG4gXFx0XFx0XFx0XFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICsgc3JjLVxcdTAwM2Vucl9zYW1wbGVzKTtcXG4gXFxuK1xcdGRzdC1cXHUwMDNlYmF0Y2ggKz0gc3JjLVxcdTAwM2ViYXRjaDtcXG4gXFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICs9IHNyYy1cXHUwMDNlbnJfc2FtcGxlcztcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTEuMDkwNjk0NDU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExODQ5ODY5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19XQlRcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX3JxX3N0YXRfc3VtXCIsXG4gICAgXCJibGtfc3RhdF90aW1lcl9mblwiLFxuICAgIFwiaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uIHdoZXJlIHRoZSBgYmF0Y2hgIHZhbHVlIHdhcyBub3QgdXBkYXRlZCBpbiB0aGUgZGVzdGluYXRpb24gc3RydWN0LiBUaGlzIGNhdXNlZCBpbmNvcnJlY3QgbWVhbiBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gc3RydWN0IHdhcyBzdWJzZXF1ZW50bHkgdXNlZCBhcyBhIHNvdXJjZSwgc3VjaCBhcyBpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2M1NmRkY2NlZmEwYzc2ODdmNmQxZDMyOGI4YThlMzRlZDY5ODU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTg6MzA6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3RhdC5jIGIvYmxvY2svYmxrLXN0YXQuY1xuaW5kZXggZGUxMjZlMWVhNWFjNDIuLjRkNDc4MTM1MDA4MzdhIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXN0YXQuY1xuKysrIGIvYmxvY2svYmxrLXN0YXQuY1xuQEAgLTM2LDYgKzM2LDcgQEAgdm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICpkc3QsIHN0cnVjdCBibGtfcnFfc3RhdCAqc3JjKVxuIFx0ZHN0LVx1MDAzZW1lYW4gPSBkaXZfdTY0KHNyYy1cdTAwM2ViYXRjaCArIGRzdC1cdTAwM2VtZWFuICogZHN0LVx1MDAzZW5yX3NhbXBsZXMsXG4gXHRcdFx0XHRkc3QtXHUwMDNlbnJfc2FtcGxlcyArIHNyYy1cdTAwM2Vucl9zYW1wbGVzKTtcbiBcbitcdGRzdC1cdTAwM2ViYXRjaCArPSBzcmMtXHUwMDNlYmF0Y2g7XG4gXHRkc3QtXHUwMDNlbnJfc2FtcGxlcyArPSBzcmMtXHUwMDNlbnJfc2FtcGxlcztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDoxMS4wOTA2OTU3NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcwNjA3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC5cblxuKipBbmFseXppbmcgdGhlIEJsb2NrIEkvTyBTdGF0aXN0aWNzIFN1bW1hdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBibG9jay9ibGstc3RhdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYmxrX3JxX3N0YXRfc3VtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgc2VlbXMgd2UgaGF2ZSBhbiBhZGRpdGlvbjogYGRzdC1cdTAwM2ViYXRjaCArPSBzcmMtXHUwMDNlYmF0Y2g7YCB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuTGV0J3MgZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgY29udGV4dCBvZiBgYmxrX3JxX3N0YXRfc3VtYCBpdHNlbGYgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSwgYGJsb2NrL2Jsay1zdGF0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBibG9jayBJL08gc3RhdGlzdGljcyBzdW1tYXRpb24gbXVzdCByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRzdC1cdTAwM2ViYXRjaGAgYW5kIGBzcmMtXHUwMDNlYmF0Y2hgIHJlcHJlc2VudCwgYW5kIHdoeSB3ZSdyZSBhZGRpbmcgdGhlbS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGJhdGNoIHN0YXRpc3RpY3MgYXJlIGJlaW5nIHVzZWQgZG93bnN0cmVhbSB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGF0Y2guIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIGJhdGNoaW5nIHNvbWUga2luZCBvZiBJL08gc3RhdGlzdGljLiBJIG5lZWQgdG8gc2VlIGlmIGl0IGlzIElPUFMsIG9yIGxhdGVuY3kuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTUuMjYxMzA1Mzc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MzYxNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19ycV9zdGF0X3N1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstc3RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zdGF0LmM9MjA9dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtMjctLyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbid0IGluaXRpYWxpemVkICovXFxuYmxvY2svYmxrLXN0YXQuYzoyODp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuYmxvY2svYmxrLXN0YXQuYy0yOS17XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTc4PXN0YXRpYyB2b2lkIGJsa19zdGF0X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy05MS1cXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIGNiLVxcdTAwM2VidWNrZXRzOyBidWNrZXQrKykge1xcbmJsb2NrL2Jsay1zdGF0LmM6OTI6XFx0XFx0XFx0YmxrX3JxX3N0YXRfc3VtKFxcdTAwMjZjYi1cXHUwMDNlc3RhdFtidWNrZXRdLCBcXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XFxuYmxvY2svYmxrLXN0YXQuYy05My1cXHRcXHRcXHRibGtfcnFfc3RhdF9pbml0KFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTUuMzU2Njc1NDU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MTM3MjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGJsa19ycV9zdGF0X3N1bWAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmxrX3JxX3N0YXRfc3VtYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYmxvY2sgSS9PIHN1YnN5c3RlbS4gRmlyc3QsIEknbGwgdHJhY2sgZG93biBpdHMgdXNlcy4gTG9va3MgbGlrZSBpdCdzIGVtcGxveWVkIGluIGBibGtfc3RhdF90aW1lcl9mbmAuIE5vdywgdGhhdCBwcm92aWRlcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gU2luY2UgSSdtIGZhbWlsaWFyIHdpdGggaG93IGJsb2NrIEkvTyBzdGF0aXN0aWNzIGFuZCB0aW1lcnMgd29yaywgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgYmxrX3N0YXRfdGltZXJfZm5gIGlzIGRvaW5nIHdpdGggYGJsa19ycV9zdGF0X3N1bWAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgYGJsa19zdGF0X3RpbWVyX2ZuYCB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBzdGF0aXN0aWMgaXMgYmVpbmcgbGV2ZXJhZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTguNzM4MDQ5OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyNzM1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3N0YXRfdGltZXJfZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLXN0YXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3RhdC5jPTUxPXZvaWQgYmxrX3N0YXRfYWRkKHN0cnVjdCByZXF1ZXN0ICpycSwgdTY0IG5vdylcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtNzctXFxuYmxvY2svYmxrLXN0YXQuYzo3ODpzdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5ibG9jay9ibGstc3RhdC5jLTc5LXtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmM9MTAxPWJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy0xMjctXFx0Y2ItXFx1MDAzZWJ1Y2tldHMgPSBidWNrZXRzO1xcbmJsb2NrL2Jsay1zdGF0LmM6MTI4OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZjYi1cXHUwMDNldGltZXIsIGJsa19zdGF0X3RpbWVyX2ZuLCAwKTtcXG5ibG9jay9ibGstc3RhdC5jLTEyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MTguODE3MzI4MTI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMzQ5OTE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgU3RhdGlzdGljcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYGJsa19zdGF0X3RpbWVyX2ZuYCBpcyBhIHRpbWVyIGNhbGxiYWNrLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgZml4IHRvIGBibGtfcnFfc3RhdF9zdW1gLCBzcGVjaWZpY2FsbHkgYSBtaXNzaW5nIHVwZGF0ZSB0byBgZHN0LVx1MDAzZWJhdGNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIGltcGFjdGluZyBibG9jayBsYXllciBzdGF0aXN0aWNzLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gVGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZy4gR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHRoZSBibG9jayBsYXllciwgYW5kIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByYXRoZXIgdGhhbiBqdXN0IGEgY29zbWV0aWMgb25lLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3RhdGlzdGljcyB0aGF0IGZlZWQgaW50byB0aGluZ3MgbGlrZSBreWJlciBJL08gc2NoZWR1bGVyIGFuZCBibG9jayBwb2xsaW5nIOKAkyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnRzLiBHaXZlbiBob3cgdml0YWwgdGhvc2UgZnVuY3Rpb25zIGFyZSwgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkb3duc3RyZWFtIGltcGFjdC4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIHdoaWNoIG1vZHVsZXMgYW5kIHN0cnVjdHVyZXMgdXNlIGBibGtfc3RhdF9hbGxvY19jYWxsYmFja2AgdG8gdGhvcm91Z2hseSBhc3Nlc3MgdGhlIHBhdGNoJ3MgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6MzAuMDUyMzIyMjYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDIyNzY3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zdGF0LmM9MTAwPXN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqXFxuYmxvY2svYmxrLXN0YXQuYzoxMDE6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuYmxvY2svYmxrLXN0YXQuYy0xMDItXFx0XFx0XFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcXG4tLVxcbmJsb2NrL2Jsay1zdGF0Lmg9NzU9dm9pZCBibGtfc3RhdF9kaXNhYmxlX2FjY291bnRpbmcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbi0tXFxuYmxvY2svYmxrLXN0YXQuaC03Ny0vKipcXG5ibG9jay9ibGstc3RhdC5oOjc4OiAqIGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKCkgLSBBbGxvY2F0ZSBhIGJsb2NrIHN0YXRpc3RpY3MgY2FsbGJhY2suXFxuYmxvY2svYmxrLXN0YXQuaC03OS0gKiBAdGltZXJfZm46IFRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxcbi0tXFxuYmxvY2svYmxrLXN0YXQuaD04OD1zdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKlxcbmJsb2NrL2Jsay1zdGF0Lmg6ODk6YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuYmxvY2svYmxrLXN0YXQuaC05MC1cXHRcXHRcXHRpbnQgKCpidWNrZXRfZm4pKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICopLFxcbi0tXFxuYmxvY2svYmxrLXdidC5jPTcxND1zdGF0aWMgc3RydWN0IHJxX3diICp3YnRfYWxsb2Modm9pZClcXG4tLVxcbmJsb2NrL2Jsay13YnQuYy03MjAtXFxuYmxvY2svYmxrLXdidC5jOjcyMTpcXHRyd2ItXFx1MDAzZWNiID0gYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sod2JfdGltZXJfZm4sIHdidF9kYXRhX2RpciwgMiwgcndiKTtcXG5ibG9jay9ibGstd2J0LmMtNzIyLVxcdGlmICghcndiLVxcdTAwM2VjYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDozMi4yOTQ2MDQxMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcwMzI5NjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgV3JpdGViYWNrIFRocm90dGxpbmcgaW4gdGhlIEJsb2NrIExheWVyKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHdyaXRlYmFjayB0aHJvdHRsaW5nIHdvcmtzIGF0IHRoZSBibG9jayBsYXllci4gSSBrbm93IGBibGstd2J0LmNgIGlzIGludm9sdmVkLCBvYnZpb3VzbHkuIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCdzIGFjdHVhbGx5IGRvaW5nIHRoZSB0aHJvdHRsaW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYmxrLXN0YXQuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igd2hlcmUgdGhlIHN0YXRzIGFyZSBiZWluZyBzdW1tZWQsIHdoaWNoIHNob3VsZCBpbnZvbHZlIGBibGtfcnFfc3RhdF9zdW1gLiBUaGF0IGZlZWxzIGxpa2UgdGhlIGtleSBmdW5jdGlvbi5cblxuT2theSwgbGV0J3Mgc2VlIHdoZXJlIHRoYXQgaXMgY2FsbGVkIGZyb20uIFJpZ2h0LCBgYmxrX3JxX3N0YXRfc3VtYCBpcyBjYWxsZWQgZnJvbSBgYmxrX3N0YXRfdGltZXJfZm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBhIHRpbWVyIHRyaWdnZXJzIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgc3RhdHMuIFNvLCBJIG5lZWQgdG8gZGlnIGludG8gYGJsa19zdGF0X3RpbWVyX2ZuYCB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgYW5kIGZyZXF1ZW5jeSBvZiB0aGVzZSBzdGF0cyBhbmQgdGhhdCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhyb3R0bGluZyBiZWhhdmlvci4gTGV0IG1lIHN3aXRjaCBteSBmb2N1cyB0byBgYmxvY2svYmxrLXN0YXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDo0My45OTc5MDI4OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXN0YXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdHN0YXQgPSBcXHUwMDI2cGVyX2NwdV9wdHIoY2ItXFx1MDAzZWNwdV9zdGF0LCBjcHUpW2J1Y2tldF07XFxuICA3MjpcXHRcXHRcXHRibGtfcnFfc3RhdF9hZGQoc3RhdCwgdmFsdWUpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFx0cHV0X2NwdSgpO1xcbiAgNzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyB2b2lkIGJsa19zdGF0X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiAgNzk6XFx0e1xcbiAgODA6XFx0XFx0c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYiA9IHRpbWVyX2NvbnRhaW5lcl9vZihjYiwgdCwgdGltZXIpO1xcbiAgODE6XFx0XFx0dW5zaWduZWQgaW50IGJ1Y2tldDtcXG4gIDgyOlxcdFxcdGludCBjcHU7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFxcdTAwM2MgY2ItXFx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCsrKVxcbiAgODU6XFx0XFx0XFx0YmxrX3JxX3N0YXRfaW5pdChcXHUwMDI2Y2ItXFx1MDAzZXN0YXRbYnVja2V0XSk7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XFxuICA4ODpcXHRcXHRcXHRzdHJ1Y3QgYmxrX3JxX3N0YXQgKmNwdV9zdGF0O1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRcXHRjcHVfc3RhdCA9IHBlcl9jcHVfcHRyKGNiLVxcdTAwM2VjcHVfc3RhdCwgY3B1KTtcXG4gIDkxOlxcdFxcdFxcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFxcdTAwM2MgY2ItXFx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCsrKSB7XFxuICA5MjpcXHRcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNmNiLVxcdTAwM2VzdGF0W2J1Y2tldF0sIFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG4gIDkzOlxcdFxcdFxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xcbiAgOTQ6XFx0XFx0XFx0fVxcbiAgOTU6XFx0XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRjYi1cXHUwMDNldGltZXJfZm4oY2IpO1xcbiAgOTg6XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKlxcbiAxMDE6XFx0YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuIDEwMjpcXHRcXHRcXHRcXHRpbnQgKCpidWNrZXRfZm4pKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICopLFxcbiAxMDM6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGJ1Y2tldHMsIHZvaWQgKmRhdGEpXFxuIDEwNDpcXHR7XFxuIDEwNTpcXHRcXHRzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKmNiO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRjYiA9IGttYWxsb2Nfb2JqKCpjYik7XFxuIDEwODpcXHRcXHRpZiAoIWNiKVxcbiAxMDk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdGNiLVxcdTAwM2VzdGF0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBibGtfcnFfc3RhdCwgYnVja2V0cyk7XFxuIDExMjpcXHRcXHRpZiAoIWNiLVxcdTAwM2VzdGF0KSB7XFxuIDExMzpcXHRcXHRcXHRrZnJlZShjYik7XFxuIDExNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTE1OlxcdFxcdH1cXG4gMTE2OlxcdFxcdGNiLVxcdTAwM2VjcHVfc3RhdCA9IF9fYWxsb2NfcGVyY3B1KGJ1Y2tldHMgKiBzaXplb2Yoc3RydWN0IGJsa19ycV9zdGF0KSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCBibGtfcnFfc3RhdCkpO1xcbiAxMTg6XFx0XFx0aWYgKCFjYi1cXHUwMDNlY3B1X3N0YXQpIHtcXG4gMTE5OlxcdFxcdFxcdGtmcmVlKGNiLVxcdTAwM2VzdGF0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzA6NDMuOTk3OTg1OTg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mjg0MTIxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBMYXllciBTdGF0aXN0aWNzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdHdlYWtpbmcgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgd2l0aGluIHRoZSBibG9jayBsYXllci4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB1cGRhdGluZyBgZHN0LVx1MDAzZWJhdGNoYCB3aXRoaW4gdGhlIGBibGtfcnFfc3RhdF9zdW1gIGZ1bmN0aW9uLiBIbW0sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMuIEFueSBjaGFuZ2UgdG91Y2hpbmcgc3RhdGlzdGljcyBjb2xsZWN0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGlzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHdyaXRlYmFjayBvciB0aHJvdHRsaW5nLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3Mgc2VlLi4uIGNvdWxkIGl0IGJlIGBDT05GSUdfQkxLX1dCVGAgb3IgYENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdgPyBSaWdodCwgYmVzdCB0byBjaGVjayBgYmxvY2svS2NvbmZpZ2AgdG8gYmUgY2VydGFpbiwgc3BlY2lmaWNhbGx5IGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgQkxLX1dCVGAgZm9yIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMwOjQ3LjUyNjQwMDc1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk0NjcxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19XQlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTEwNj1jb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuLS1cXG5ibG9jay9LY29uZmlnLTExNy1cXG5ibG9jay9LY29uZmlnOjExODpjb25maWcgQkxLX1dCVFxcbmJsb2NrL0tjb25maWctMTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTEyNi1cXG5ibG9jay9LY29uZmlnOjEyNzpjb25maWcgQkxLX1dCVF9NUVxcbmJsb2NrL0tjb25maWctMTI4LVxcdGJvb2wgXFxcIkVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMDo0Ny42MTU4NzI4MDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxNDg3MjIwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGJsay1zdGF0LmNgKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBpZiBgYmxrLXN0YXQuY2AgaXMgY29tcGlsZWQgYmFzZWQgb24gYSBzcGVjaWZpYyBjb25kaXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBvciBpZiB0aGVyZSBhcmUgY2VydGFpbiBmbGFncywgZGVmaW5lcywgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBpdHMgcHJlc2VuY2UuIEknbGwgbmVlZCB0byBsb29rIGZvciBgI2lmZGVmYCwgYCNpZm5kZWZgLCBgI2lmYCwgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGd1YXJkIGl0cyBjb21waWxhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IGRpYWdub3NpbmcgYW55IHJlbGF0ZWQgaXNzdWVzLiBMZXQncyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NTE2OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjAzLjc2NDU5NzQxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzMxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1zdGF0Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9OD1vYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4tLVxcbmJsb2NrL01ha2VmaWxlLTEwLVxcdFxcdFxcdGJsay1tZXJnZS5vIGJsay10aW1lb3V0Lm8gYmxrLWxpYi5vIGJsay1tcS5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZToxMTpcXHRcXHRcXHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTEyLVxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MDMuODgwMzM0NDUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzYyNjE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgbGlrZSBgYmxrLXN0YXQub2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBzdWdnZXN0cyBpdHMgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIHRvIHRoZSBzeXN0ZW0uIEkgc2VlIHRoYXQgdGhlIGBibGtfcnFfc3RhdF9zdW1gIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgZnJvbSBgYmxrX3N0YXRfdGltZXJfZm5gLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIGhvdyB0aGUgc3RhdGlzdGljcyBhcmUgYWN0dWFsbHkgYWdncmVnYXRlZC4gRm9sbG93aW5nIHRoZSBmbG93LCBgYmxrX3N0YXRfdGltZXJfZm5gIGlzIHRyaWdnZXJlZCBieSBhIHRpbWVyLiBOb3csIHdoZXJlIGlzIHRoaXMgdGltZXIgc2V0IHVwPyBBaCwgaXQncyBpbiBgYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tgLiBUaGF0J3MgdGhlIGNydWNpYWwgbGluay4gQW5kLCBJIHNlZSB0aGF0IGBibGstd2J0LmNgIG1ha2VzIHVzZSBvZiBgYmxrX3N0YXRfYWxsb2NfY2FsbGJhY2tgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGJhY2sncyB1c2UuIFNpbmNlIGl0J3MgYSBjYWxsYmFjaywgb3RoZXIgbW9kdWxlcyBtaWdodCBiZSB1c2luZyB0aGlzIGFzIHdlbGwuIExldCBtZSBxdWlja2x5IHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gY29uZmlybSB3aGV0aGVyIGBibGtfc3RhdF9hbGxvY19jYWxsYmFja2AgaXMgdXNlZCBlbHNld2hlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIG9mIHRoYXQgY2FsbGJhY2sgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgc3Vycm91bmRpbmcgdGhlIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MDcuODE2NTk4OTg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3ODAyNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19zdGF0X2FsbG9jX2NhbGxiYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3RhdC5jPTEwMD1zdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKlxcbmJsb2NrL2Jsay1zdGF0LmM6MTAxOmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbmJsb2NrL2Jsay1zdGF0LmMtMTAyLVxcdFxcdFxcdGludCAoKmJ1Y2tldF9mbikoY29uc3Qgc3RydWN0IHJlcXVlc3QgKiksXFxuLS1cXG5ibG9jay9ibGstc3RhdC5oPTc1PXZvaWQgYmxrX3N0YXRfZGlzYWJsZV9hY2NvdW50aW5nKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmgtNzctLyoqXFxuYmxvY2svYmxrLXN0YXQuaDo3ODogKiBibGtfc3RhdF9hbGxvY19jYWxsYmFjaygpIC0gQWxsb2NhdGUgYSBibG9jayBzdGF0aXN0aWNzIGNhbGxiYWNrLlxcbmJsb2NrL2Jsay1zdGF0LmgtNzktICogQHRpbWVyX2ZuOiBUaW1lciBjYWxsYmFjayBmdW5jdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1zdGF0Lmg9ODg9c3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpcXG5ibG9jay9ibGstc3RhdC5oOjg5OmJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbmJsb2NrL2Jsay1zdGF0LmgtOTAtXFx0XFx0XFx0aW50ICgqYnVja2V0X2ZuKShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqKSxcXG4tLVxcbmJsb2NrL2Jsay13YnQuYz03MTQ9c3RhdGljIHN0cnVjdCBycV93YiAqd2J0X2FsbG9jKHZvaWQpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtNzIwLVxcbmJsb2NrL2Jsay13YnQuYzo3MjE6XFx0cndiLVxcdTAwM2VjYiA9IGJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHdiX3RpbWVyX2ZuLCB3YnRfZGF0YV9kaXIsIDIsIHJ3Yik7XFxuYmxvY2svYmxrLXdidC5jLTcyMi1cXHRpZiAoIXJ3Yi1cXHUwMDNlY2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MDkuODI0NDA3NDUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzY0NTg3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBibGtfcnFfc3RhdF9zdW1gIFVzYWdlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBibGtfcnFfc3RhdF9zdW1gLiBJIHJlbWVtYmVyIGZyb20gZ2xhbmNpbmcgYXQgdGhlIGNvZGUgdGhhdCBvbmx5IGBibGstd2J0LmNgIHNlZW1zIHRvIGJlIG1ha2luZyB1c2Ugb2YgaXQuIFRoYXTigJlzIGludGVyZXN0aW5nLiAgVGhpcyBtZWFucywgdG8gcmVhbGx5IGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGVzdGluZywgSSdtIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CTEtfV0JUYCBlbmFibGVkLiAgTm8gcG9pbnQgdHJ5aW5nIHRvIGV4ZXJjaXNlIGl0IG90aGVyd2lzZS5cblxuQnV0IGJlZm9yZSBJIGRpdmUgaW50byB3cml0aW5nIHRlc3RzLCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIEp1c3QgYmVjYXVzZSBJIHJlbWVtYmVyIGl0IGJlaW5nIHVzZWQgaW4gb25lIHBsYWNlLCBkb2Vzbid0IG1lYW4gaXQncyB0aGUgKm9ubHkqIHBsYWNlLiAgU28sIGxldCdzIHRha2UgYSBxdWljayBsb29rIHdpdGggdGhlIHRvb2xzLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGJsa19ycV9zdGF0X3N1bWAgaXNuJ3QgY2FsbGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBjb2RlIGJhc2UsIGp1c3QgdG8gYmUgdGhvcm91Z2guIENhbid0IGJlIHRvbyBjYXJlZnVsLCByaWdodD8gR290dGEgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgc29saWQgYmVmb3JlIEkgZGVkaWNhdGUgdGltZSB0byB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MTQuMjYwODY4NzA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcwMjY4MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19ycV9zdGF0X3N1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTIwOD1zdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE1LVxcdH0gZWxzZVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMTY6XFx0XFx0YmxrX3JxX3N0YXRfc3VtKFxcdTAwMjZzdW0tXFx1MDAzZXJxcywgXFx1MDAyNnN0YXQtXFx1MDAzZXJxcyk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIxNy19XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTIwPXZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQpXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTI3LS8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24ndCBpbml0aWFsaXplZCAqL1xcbmJsb2NrL2Jsay1zdGF0LmM6Mjg6dm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICpkc3QsIHN0cnVjdCBibGtfcnFfc3RhdCAqc3JjKVxcbmJsb2NrL2Jsay1zdGF0LmMtMjkte1xcbi0tXFxuYmxvY2svYmxrLXN0YXQuYz03OD1zdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtOTEtXFx0XFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXFx1MDAzYyBjYi1cXHUwMDNlYnVja2V0czsgYnVja2V0KyspIHtcXG5ibG9jay9ibGstc3RhdC5jOjkyOlxcdFxcdFxcdGJsa19ycV9zdGF0X3N1bShcXHUwMDI2Y2ItXFx1MDAzZXN0YXRbYnVja2V0XSwgXFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xcbmJsb2NrL2Jsay1zdGF0LmMtOTMtXFx0XFx0XFx0YmxrX3JxX3N0YXRfaW5pdChcXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XFxuLS1cXG5ibG9jay9ibGstc3RhdC5oPTE3Mz12b2lkIGJsa19ycV9zdGF0X2FkZChzdHJ1Y3QgYmxrX3JxX3N0YXQgKiwgdTY0KTtcXG5ibG9jay9ibGstc3RhdC5oOjE3NDp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKiwgc3RydWN0IGJsa19ycV9zdGF0ICopO1xcbmJsb2NrL2Jsay1zdGF0LmgtMTc1LXZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjE2LjEzMTE0MzA4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE2MjY1MjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgSS9PIExhdGVuY3kqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBtYWNybywgd2hhdGV2ZXIgaXQgaXMsIGJlaW5nIHVzZWQuIEludGVyZXN0aW5nLCBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBndWVzcywgYmFzZWQgb24gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0cmFjaW5nIG9yIHByb2ZpbGluZywgcGVyaGFwcyBzb21lIGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBibGstaW9sYXRlbmN5LmNgIGZpbGUg4oCTIGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGJlaW5nIGFwcGxpZWQgaW4gcHJhY3RpY2UuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkncmUgKnVzaW5nKiBpdCB3aXRoaW4gdGhlIGJsb2NrIEkvTyBsYXllciBpdHNlbGYuIFdoYXQgcGFydHMgb2YgdGhlIEkvTyBwYXRoIGFyZSB0aGV5IGluc3RydW1lbnRpbmc/IEFyZSB0aGV5IGNhcHR1cmluZyB0aW1lc3RhbXBzLCBjYWxjdWxhdGluZyBkZWx0YXMsIGFzc29jaWF0aW5nIGV2ZW50cz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB0byBzZWUgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggdGhpcyBtYWNybyBpcyBiZWluZyBlbXBsb3llZCAtIHdoYXQgZG9lcyBpdHMgdXNhZ2UgdGVsbCBtZT8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBhbmQgYGJsay1pb2xhdGVuY3kuY2AgaG9sZHMgdGhlIGtleS4gTGV0J3Mgc2VlIGlmIHRoaXMgaW5zdHJ1bWVudGF0aW9uIGlzIGdyYW51bGFyIGVub3VnaCBmb3IgbXkgYW5hbHl0aWNhbCBnb2Fscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjI4LjI5Mzc5NzcxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDMzMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MjguNDE5ODM2NzczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMDQyNTQ0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgSS9PIExhdGVuY3kgaW4gdGhlIENvbnRleHQgb2YgQ29udHJvbCBHcm91cHMqKlxuXG5SaWdodCwgc28gYENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWWAgaXMgZGVmaW5pdGVseSBhIGtleSBmYWN0b3IgaGVyZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBibG9jayBJL08gbGF0ZW5jeSBhbmQgY2dyb3Vwcy4gTm93LCB3aGVyZSB3b3VsZCB0aGUgY29yZSBsYXRlbmN5IGNhbGN1bGF0aW9ucyByZXNpZGU/IEFoLCBvZiBjb3Vyc2UsIGBibGstaW9sYXRlbmN5LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGF0IGBsYXRlbmN5X3N0YXRfc3VtYCB2YXJpYWJsZS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgYWdncmVnYXRlZCBsYXRlbmN5IHN0YXRpc3RpY3MgYXJlIGJlaW5nIGhlbGQgYW5kIHVwZGF0ZWQuIFRoYXQncyB0aGUgZmlyc3QgcGxhY2UgSSdsbCBnbyB0byBnZXQgbXkgYmVhcmluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMTozNi41MjQwOTQwODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTc1Njg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYXRlbmN5X3N0YXRfc3VtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb2xhdGVuY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmM9MTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA3LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMDg6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMDktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz01MTU9c3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTI4LVxcdFxcdHMgPSBwZXJfY3B1X3B0cihpb2xhdC1cXHUwMDNlc3RhdHMsIGNwdSk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjUyOTpcXHRcXHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcXHUwMDI2c3RhdCwgcyk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTUzMC1cXHRcXHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgcyk7XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQ5LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo1NTA6XFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCwgXFx1MDAyNnN0YXQpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NTEtXFx0bGF0X2luZm8tXFx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXFx1MDAzZW5yX3NhbXBsZXM7XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9OTIxPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9zc2Rfc3RhdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHN0cnVjdCBzZXFfZmlsZSAqcylcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05MzAtXFx0XFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVxcdTAwM2VzdGF0cywgY3B1KTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTMxOlxcdFxcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFxcdTAwMjZzdGF0LCBzKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTMyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6MzYuNjM1ODU1ODA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQ2Nzc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIFN0YXRpc3RpY3MgVXBkYXRlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBibGtfcnFfc3RhdF9zdW1gIGp1bXBzIG91dC4gSSByZW1lbWJlciBpdCdzIHVzZWQgaW4gYm90aCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgYGJsay1zdGF0LmNgLiBDbGFzc2ljIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MsIG5hdHVyYWxseS4gU28sIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIGBibGtfcnFfc3RhdF9zdW1gLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0J3MgZ29vZCB0byBrbm93IG9mZiB0aGUgYmF0LCBhcyB0aGlzIGlzIG1vcmUgdGhhbiBhIHJlZmFjdG9yLlxuXG5MZXQncyBrZWVwIGFuIGV5ZSBvbiBhIGZldyBvdGhlciBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSByZWxhdGVkOiBgYmxrX3N0YXRfdGltZXJfZm5gIGFuZCB0aGF0IGBsYXRlbmN5X3N0YXRfc3VtYCBtYWNyby4gU2luY2UgaXQncyBpbmxpbmUsIHRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgaXRzIHVzYWdlcywgbGlrZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agb3IgYGlvbGF0ZW5jeV9zc2Rfc3RhdGAgYXMgcG90ZW50aWFsIGFyZWFzIGltcGFjdGVkIGFzIHdlbGwuIEdvb2QgcHJhY3RpY2UgdG8gY29uc2lkZXIgaW5kaXJlY3QgaW1wYWN0cy5cblxuSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBgYmxrX3JxX3N0YXRfc3VtYCBhZ2FpbiB0byBzb2xpZGlmeSBteSB0aG91Z2h0IHByb2Nlc3MgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjQwLjcyMDUzNTgxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstc3RhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdHZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQpXFxuICAyMTpcXHR7XFxuICAyMjpcXHRcXHRzdGF0LVxcdTAwM2VtaW4gPSAtMVVMTDtcXG4gIDIzOlxcdFxcdHN0YXQtXFx1MDAzZW1heCA9IHN0YXQtXFx1MDAzZW5yX3NhbXBsZXMgPSBzdGF0LVxcdTAwM2VtZWFuID0gMDtcXG4gIDI0OlxcdFxcdHN0YXQtXFx1MDAzZWJhdGNoID0gMDtcXG4gIDI1OlxcdH1cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Lyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbid0IGluaXRpYWxpemVkICovXFxuICAyODpcXHR2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuICAyOTpcXHR7XFxuICAzMDpcXHRcXHRpZiAoZHN0LVxcdTAwM2Vucl9zYW1wbGVzICsgc3JjLVxcdTAwM2Vucl9zYW1wbGVzIFxcdTAwM2M9IGRzdC1cXHUwMDNlbnJfc2FtcGxlcylcXG4gIDMxOlxcdFxcdFxcdHJldHVybjtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ZHN0LVxcdTAwM2VtaW4gPSBtaW4oZHN0LVxcdTAwM2VtaW4sIHNyYy1cXHUwMDNlbWluKTtcXG4gIDM0OlxcdFxcdGRzdC1cXHUwMDNlbWF4ID0gbWF4KGRzdC1cXHUwMDNlbWF4LCBzcmMtXFx1MDAzZW1heCk7XFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdGRzdC1cXHUwMDNlbWVhbiA9IGRpdl91NjQoc3JjLVxcdTAwM2ViYXRjaCArIGRzdC1cXHUwMDNlbWVhbiAqIGRzdC1cXHUwMDNlbnJfc2FtcGxlcyxcXG4gIDM3OlxcdFxcdFxcdFxcdFxcdGRzdC1cXHUwMDNlbnJfc2FtcGxlcyArIHNyYy1cXHUwMDNlbnJfc2FtcGxlcyk7XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdGRzdC1cXHUwMDNlYmF0Y2ggKz0gc3JjLVxcdTAwM2ViYXRjaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6NDAuNzIwNTk3ODc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzU3NzI1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBibGtfcnFfc3RhdF9zdW1gIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gbG9va2luZyBhdCBhIGZpeCBmb3IgYGJsa19ycV9zdGF0X3N1bWAsIGFuZCBpdCdzIGFsbCBhYm91dCBob3cgYGRzdC1cdTAwM2ViYXRjaGAgaXNuJ3QgYmVpbmcgcHJvcGVybHkgYWNjdW11bGF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UncmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIOKAkyBzcGVjaWZpY2FsbHksIGFjY3VtdWxhdGluZyBkYXRhIGZyb20gbXVsdGlwbGUgQ1BVcyDigJMgdGhlIGBkc3QtXHUwMDNlYmF0Y2hgIHZhbHVlIGlzIGFsd2F5cyBnb2luZyB0byBiZSB6ZXJvIChvciB3aGF0ZXZlciBpdCB3YXMgaW5pdGlhbGl6ZWQgdG8pLCBhbmQgdGhhdCdzIGdvaW5nIHRvIG1lc3MgdXAgdGhlIGBkc3QtXHUwMDNlbWVhbmAgY2FsY3VsYXRpb24gaW4gc3Vic2VxdWVudCBjYWxscy5cblxuV2FpdCwgbG9va2luZyBjbG9zZXIsIEkgc2VlIHRoZSBjYWxjdWxhdGlvbiBvZiBgZHN0LVx1MDAzZW1lYW5gIHJlbGllcyBvbiBgc3JjLVx1MDAzZWJhdGNoYCwgd2hpY2ggaXMgZ3JlYXQgYnV0IHRoZSBjcml0aWNhbCBiaXQgdGhhdCdzIG1pc3NpbmcgaXMgdXBkYXRpbmcgYGRzdC1cdTAwM2ViYXRjaGAgaXRzZWxmLiBTbywgaWYgYGJsa19ycV9zdGF0X3N1bWAgaXMgdXNlZCB0byBhZ2dyZWdhdGUgZGF0YSBmcm9tIG11bHRpcGxlIHNvdXJjZXMgaW50byBhIHNpbmdsZSBhY2N1bXVsYXRvciAoYGRzdGApLCBhbmQgdGhlbiB0aGF0IGFjY3VtdWxhdG9yIChgZHN0YCkgYmVjb21lcyBhIHNvdXJjZSAoYHNyY2ApIGxhdGVyIG9uLi4uIGJvb20hIEluY29ycmVjdCBgbWVhbmAgY2FsY3VsYXRpb24gYmVjYXVzZSBgZHN0LVx1MDAzZWJhdGNoYCBpcyBzdGFsZS5cblxuUmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJuLiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBhY2N1bXVsYXRpbmcgcGVyLUNQVSBzdGF0cyBpbnRvIGEgZ2xvYmFsIHN0YXQuIExvb2tpbmcgYXQgdGhlIGBibGtfc3RhdF90aW1lcl9mbmAsIEkgY2FuIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgaXMgaGFwcGVuaW5nLiBUaGUgb3V0ZXIgbG9vcCBnb2VzIHRocm91Z2ggZWFjaCBvbmxpbmUgQ1BVLCBhbmQgdGhlbiBhbiBpbm5lciBsb29wIGl0ZXJhdGVzIHRocm91Z2ggYnVja2V0cy4gSW4gZWFjaCBDUFUncyBpdGVyYXRpb24sIGBibGtfcnFfc3RhdF9zdW1gIGlzIGNhbGxlZCB0byBzdW0gdXAgYSBgZHN0YCAoYGNiLVx1MDAzZXN0YXRbYnVja2V0XWApIGZyb20gdGhlIGluZGl2aWR1YWwgcGVyLWNwdSBzdGF0cyAoYGNwdV9zdGF0W2J1Y2tldF1gKS4gU28sIHRoZSBgZHN0YCBiZWNvbWVzIHRoZSBnbG9iYWwgc3RhdCwgYW5kIGl0J3MgbGF0ZXIgdXNlZCBieSB0aGUgdGltZXIgY2FsbGJhY2suXG5cbkFoLCBJIHNlZSBpdC4gVGhlIGtleSBpcyBpbiB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdXNlZCB0byBhY2N1bXVsYXRlIHRoZSBwZXItY3B1IHN0YXRzIGludG8gYSBnbG9iYWwgc3RhdCwgYW5kIHRoZW4gdGhlIGFjY3VtdWxhdGVkIGdsb2JhbCBzdGF0cyBhcmUgdXNlZCBsYXRlci5cblxuSSBhbSByZS1yZWFkaW5nIHRoZSBjb2RlIGluIGBibGstaW9sYXRlbmN5LmNgIGZvciBhZGRpdGlvbmFsIGNsYXJpdHkuXG5cbmBgYGNcblx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2c3RhdCwgcyk7XG5gYGBcblNvLCBoZXJlIGBzdGF0YCBpcyBiZWluZyBpbml0aWFsaXplZCBsb2NhbGx5IGFuZCB1c2VkIGFzIHRoZSBhY2N1bXVsYXRpbmcgYGRzdGAgZnJvbSBhbGwgQ1BVcywgYW5kIHRoZW4gaW4gdGhlIGZvbGxvd2luZyBsaW5lLFxuYGBgY1xuXHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG5gYGBcbmBzdGF0YCBhY3RzIGFzIGEgYHNyY2AuICpUaGF0J3MqIHdoZXJlIHRoZSBidWcgc2hvd3MgdXAuIFNpbmNlIGBzdGF0YCB3YXMgdGhlIGBkc3RgIGluIHRoZSBlYXJsaWVyIGNhbGwsIGl0cyBgYmF0Y2hgIG5lZWRzIHRvIGhhdmUgYmVlbiBjb3JyZWN0bHkgdXBkYXRlZC4gQW5kIGJlY2F1c2UgaXQgd2Fzbid0LCB0aGUgY2FsY3VsYXRlZCBgaW9sYXQtXHUwMDNlY3VyX3N0YXQubWVhbmAgd291bGQgYmUgY29tcGxldGVseSB3cm9uZy5cblxuWWVhaCwgdGhhdCdzIGEgY2xlYXIgZnVuY3Rpb25hbCBidWcgYW5kIHRoaXMgcGF0Y2ggaXMgdGhlIGRpcmVjdCBmaXguIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSBzaW5jZSB0aGlzIGNoYW5nZSBhZmZlY3RzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTg6MzE6NDkuNjU2MzcyNzc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk3NDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjQ5Ljc0MjM1MzIzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE0NzAyODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEzNC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBzdWJzeXN0ZW0gaW4gdGhlIGtlcm5lbCB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNldHRpbmdzIHRoYXQgaW5mbHVlbmNlIGZlYXR1cmVzLCBkcml2ZXJzLCBvciBtYXliZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIGJsb2NrIGRldmljZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGxpbmUgMTM0IHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgYmxvY2sgY29uZmlndXJhdGlvbiwgbGlrZWx5IHNvbWV0aGluZyBub24tdHJpdmlhbC4gSSdtIHJlYWR5IHRvIHBhcnNlIHRoZSBjb250ZXh0IGFuZCBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgd2hhdCB0aG9zZSBvcHRpb25zIGFyZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBibG9jayBkZXZpY2UgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxODozMTo1NS4xNTcwNTgxNThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfV0JUXFxuIDEzMTpcXHRcXHRoZWxwXFxuIDEzMjpcXHRcXHRFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdCBmb3IgcmVxdWVzdC1iYXNlZCBibG9jayBkZXZpY2VzLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEzNzpcXHRcXHRoZWxwXFxuIDEzODpcXHRcXHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSAubGF0ZW5jeSBpbnRlcmZhY2UgZm9yIElPIHRocm90dGxpbmcuXFxuIDEzOTpcXHRcXHRUaGUgSU8gY29udHJvbGxlciB3aWxsIGF0dGVtcHQgdG8gbWFpbnRhaW4gYXZlcmFnZSBJTyBsYXRlbmNpZXMgYmVsb3dcXG4gMTQwOlxcdFxcdHRoZSBjb25maWd1cmVkIGxhdGVuY3kgdGFyZ2V0LCB0aHJvdHRsaW5nIGFueWJvZHkgd2l0aCBhIGhpZ2hlciBsYXRlbmN5XFxuIDE0MTpcXHRcXHR0YXJnZXQgdGhhbiB0aGUgdmljdGltaXplZCBncm91cC5cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuIDE0NjpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4gMTQ3OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcXHUwMDI2XFx1MDAyNiBOVk1FX0ZDXFxuIDE0ODpcXHRcXHRoZWxwXFxuIDE0OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMxOjU1LjE1NzEyNzAzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzA1MDI1MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gdGhpcyBwYXRjaCByZWdhcmRpbmcgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgQkxLX0NHUk9VUGAgYW5kIGBCTEtfV0JUYCBpcyBvbiBteSByYWRhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgYmxrX3JxX3N0YXRfc3VtYCB3b3JrcyBpbiBgYmxvY2svYmxrLXN0YXQuY2AuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGNvZGUuXG5cbkdpdmVuIHRoZSBidWcgZml4IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgbWlzc2luZyB1cGRhdGUgb2YgdGhlIGBiYXRjaGAgdmFsdWUgd2l0aGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QgZHVyaW5nIGJsb2NrIGxheWVyIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoYXQgc3RydWN0IGlzIHJldXNlZCAoYXMgaW4gYGJsay1pb2xhdGVuY3kuY2ApIOKAkyB5ZXMsIGFic29sdXRlbHksIHRoaXMgd2FycmFudHMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgdGhlIGFjY3VyYWN5IG9mIGNydWNpYWwgSS9PIHN0YXRpc3RpY3MuIFdlIGNvdWxkIHNlZSBzaWduaWZpY2FudCBkaXNjcmVwYW5jaWVzIGhlcmUuXG5cbldlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYEJMS19XQlRgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19DR1JPVVBgIGVuYWJsZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgYmxrX3JxX3N0YXRfc3VtYCwgb2YgY291cnNlLCBidXQgSSBzaG91bGQgYWxzbyBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBibGtfc3RhdF90aW1lcl9mbmAgYW5kIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBiZWNhdXNlIHRoZXkncmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGFmZmVjdGVkIGNvZGUgcGF0aC4gVGltZSB0byBzZXQgdXAgdGhlIGZ1enppbmcgdGFyZ2V0cyBhbmQgZ2V0IHRob3NlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY1LCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE4OjMyOjAyLjg2MjE1NDk4OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDA1MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19ycV9zdGF0X3N1bVwiLFxuICAgIFwiYmxrX3N0YXRfdGltZXJfZm5cIixcbiAgICBcImlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBibG9jayBsYXllciBzdGF0aXN0aWNzIGFjY3VtdWxhdGlvbiB3aGVyZSB0aGUgYGJhdGNoYCB2YWx1ZSB3YXMgbm90IHVwZGF0ZWQgaW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdC4gVGhpcyBjYXVzZWQgaW5jb3JyZWN0IG1lYW4gY2FsY3VsYXRpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCB3YXMgc3Vic2VxdWVudGx5IHVzZWQgYXMgYSBzb3VyY2UsIHN1Y2ggYXMgaW4gYGJsay1pb2xhdGVuY3kuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX1dCVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfcnFfc3RhdF9zdW1cIixcbiAgICBcImJsa19zdGF0X3RpbWVyX2ZuXCIsXG4gICAgXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYmxvY2sgbGF5ZXIgc3RhdGlzdGljcyBhY2N1bXVsYXRpb24gd2hlcmUgdGhlIGBiYXRjaGAgdmFsdWUgd2FzIG5vdCB1cGRhdGVkIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3QuIFRoaXMgY2F1c2VkIGluY29ycmVjdCBtZWFuIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiBzdHJ1Y3Qgd2FzIHN1YnNlcXVlbnRseSB1c2VkIGFzIGEgc291cmNlLCBzdWNoIGFzIGluIGBibGstaW9sYXRlbmN5LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhrn2h[1] Phase: Succeeded StartedAt: 2026-07-20 18:32:25 +0000 UTC FinishedAt: 2026-07-20 18:32:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 18:32:25 +0000 UTC FinishedAt: 2026-07-20 18:32:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2] Phase: Succeeded StartedAt: 2026-07-20 18:32:25 +0000 UTC FinishedAt: 2026-07-20 22:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 18:32:25 +0000 UTC FinishedAt: 2026-07-20 22:45:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 18:32:25 +0000 UTC FinishedAt: 2026-07-20 18:32:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 18:32:25 +0000 UTC FinishedAt: 2026-07-20 18:32:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhrn2h/series-workflowhrn2h-convert-artifact-3905791627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 18:32:35 +0000 UTC FinishedAt: 2026-07-20 19:02:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 18:32:35 +0000 UTC FinishedAt: 2026-07-20 19:02:29 +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:*2e0d2e88-197a-434d-bd98-935e30266e36,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-workflowhrn2h/series-workflowhrn2h-convert-artifact-3905791627/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": "7c923737-301f-4e49-8523-b69c1c70eacf", "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-workflowhrn2h/series-workflowhrn2h-build-action-2115084681/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 18:32:35 +0000 UTC FinishedAt: 2026-07-20 19:01:56 +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:*2e0d2e88-197a-434d-bd98-935e30266e36,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-workflowhrn2h/series-workflowhrn2h-convert-artifact-3905791627/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": "7c923737-301f-4e49-8523-b69c1c70eacf", "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-workflowhrn2h/series-workflowhrn2h-build-action-2115084681/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 19:02:29 +0000 UTC FinishedAt: 2026-07-20 19:02:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 19:02:29 +0000 UTC FinishedAt: 2026-07-20 19:02:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 19:02:29 +0000 UTC FinishedAt: 2026-07-20 19:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 19:02:29 +0000 UTC FinishedAt: 2026-07-20 19:02:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhrn2h/series-workflowhrn2h-convert-artifact-3273363682/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 19:02:49 +0000 UTC FinishedAt: 2026-07-20 19:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 19:02:49 +0000 UTC FinishedAt: 2026-07-20 19:04:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c923737-301f-4e49-8523-b69c1c70eacf,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-workflowhrn2h/series-workflowhrn2h-build-action-2115084681/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-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 19:04:54 +0000 UTC FinishedAt: 2026-07-20 19:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 19:04:54 +0000 UTC FinishedAt: 2026-07-20 19:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 19:04:54 +0000 UTC FinishedAt: 2026-07-20 19:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 19:04:54 +0000 UTC FinishedAt: 2026-07-20 19:40:09 +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:*2e0d2e88-197a-434d-bd98-935e30266e36,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-workflowhrn2h/series-workflowhrn2h-convert-artifact-3273363682/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": "59fc228b-e504-4fc2-b475-06577aa8b6cf", "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-workflowhrn2h/series-workflowhrn2h-build-action-589167926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 19:04:54 +0000 UTC FinishedAt: 2026-07-20 19:39:59 +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:*2e0d2e88-197a-434d-bd98-935e30266e36,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-workflowhrn2h/series-workflowhrn2h-convert-artifact-3273363682/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": "59fc228b-e504-4fc2-b475-06577aa8b6cf", "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-workflowhrn2h/series-workflowhrn2h-build-action-589167926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 19:40:09 +0000 UTC FinishedAt: 2026-07-20 19:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 19:40:09 +0000 UTC FinishedAt: 2026-07-20 19:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 19:40:09 +0000 UTC FinishedAt: 2026-07-20 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 19:40:09 +0000 UTC FinishedAt: 2026-07-20 19:41:53 +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:*59fc228b-e504-4fc2-b475-06577aa8b6cf,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-workflowhrn2h/series-workflowhrn2h-build-action-589167926/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-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 19:42:03 +0000 UTC FinishedAt: 2026-07-20 22:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 19:42:03 +0000 UTC FinishedAt: 2026-07-20 22:45:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"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:*7c923737-301f-4e49-8523-b69c1c70eacf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59fc228b-e504-4fc2-b475-06577aa8b6cf,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-workflowhrn2h/series-workflowhrn2h-build-action-2115084681/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-workflowhrn2h/series-workflowhrn2h-build-action-589167926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 19:42:03 +0000 UTC FinishedAt: 2026-07-20 19:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 19:42:03 +0000 UTC FinishedAt: 2026-07-20 19:42:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"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-workflowhrn2h/series-workflowhrn2h-convert-artifact-2515895575/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 19:42:03 +0000 UTC FinishedAt: 2026-07-20 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 19:42:03 +0000 UTC FinishedAt: 2026-07-20 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 19:42:03 +0000 UTC FinishedAt: 2026-07-20 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 19:42:13 +0000 UTC FinishedAt: 2026-07-20 22:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrn2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_rq_stat_sum","blk_stat_timer_fn","iolatency_check_latencies"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT","BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"fec1d108-66c3-45b8-85e1-c459b2fdcea4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 19:42:13 +0000 UTC FinishedAt: 2026-07-20 22:45:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c923737-301f-4e49-8523-b69c1c70eacf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59fc228b-e504-4fc2-b475-06577aa8b6cf,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-workflowhrn2h/series-workflowhrn2h-build-action-2115084681/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-workflowhrn2h/series-workflowhrn2h-build-action-589167926/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-workflowhrn2h/series-workflowhrn2h-convert-artifact-2515895575/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,}