Name: series-workflow9fddn Phase: Succeeded StartedAt: 2026-08-24 22:43:17 +0000 UTC FinishedAt: 2026-08-25 02:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[0] Phase: Succeeded StartedAt: 2026-08-24 22:43:17 +0000 UTC FinishedAt: 2026-08-24 23:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 22:43:17 +0000 UTC FinishedAt: 2026-08-24 23:14:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "d06b49db-031b-4c0b-a5e5-fac54445e898" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_set_eval", "nft_payload_set_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBgY3N1bV9vZmZzZXRgIGF0dHJpYnV0ZSBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgbWFuZ2xpbmcgdG8gcHJldmVudCBhcmJpdHJhcnkgb2Zmc2V0cyBmcm9tIGJlaW5nIHVzZWQgd2hlbiB1cGRhdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIGFsbG93ZWQgYm9ndXMgb2Zmc2V0cyB3aGljaCBjb3VsZCBsZWFkIHRvIHBhY2tldCBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGNhdXNlZCBieSBpbnZhbGlkIG9mZnNldHMsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0IGhlcmUgc2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgY29uc3VtZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyJiMzOTtzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYxYWI4ZmIxMjdmMDU3YTEzYmQxYWY2ZjM2ZTM0Nzg2YjhhZTcyZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAyMzoxMjowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTEwMDgsMTEgJiM0MzsxMDA4LDEzIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4tXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4tXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG5AQCAtMTA0Niw2ICYjNDM7MTA0OCwyNSBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuJiM0MztcdGNhc2UgSVBQUk9UT19UQ1A6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1VEUDpcbiYjNDM7XHRjYXNlIElQUFJPVE9fVURQTElURTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4ge1xuQEAgLTEwNTUsOSAmIzQzOzEwNzYsMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4mIzQzO1x0XHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxuJiM0MztcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciYjMzk7cyBuZnRfcGF5bG9hZCBtb2R1bGUgdG8gYWRkIHZhbGlkYXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cyB3aGVuIG1hbmdsaW5nIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMWFiOGZiMTI3ZjA1N2ExM2JkMWFmNmYzNmUzNDc4NmI4YWU3MmVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMjM6MTI6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKaW5kZXggZTMxNWQzNWY3M2Q0YS4uNzBmNzBhNjVlMzI3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtMTAwOCwxMSAmIzQzOzEwMDgsMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yICYjMzQ7cmUtdXBkYXRlJiMzNDsgb2YgTDQgY2hlY2tzdW0gKi8KIAkJCXJldHVybiBmYWxzZTsKIAotCQkvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4mIzM5O3QgYmUgbmVnYXRpdmUgc28gYm9ndXMKLQkJICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy4KLQkJICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuCi0JCSAqLwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCS8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovCiYjNDM7CQlpZiAocHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKQEAgLTEwNDYsNiAmIzQzOzEwNDgsMjUgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0LSZndDt0cHJvdCkgewomIzQzOwljYXNlIElQUFJPVE9fVENQOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX1VEUDoKJiM0MzsJY2FzZSBJUFBST1RPX1VEUExJVEU6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiB7CkBAIC0xMDU1LDkgJiM0MzsxMDc2LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKIAkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiYjNDM7CQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgotCQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKLQkJICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgomIzQzOwkJLyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KIAkJICovCiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzOAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDaGVja3N1bSBPZmZzZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgbmZ0X3BheWxvYWQuY2AgZmlsZSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgaGFuZGxpbmcgY2hlY2tzdW0gb2Zmc2V0cywgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgZmlsdGVyaW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB2YWxpZGF0aW5nIHRoZSBgY3N1bV9vZmZzZXRgIHdoZW4gd3JpdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4KCkkgc2VlIHRoYXQgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGlzIGJlaW5nIG1vZGlmaWVkLCBhbmQgYSBuZXcgZnVuY3Rpb24sIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhpcyBuZXcgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLCB3aGljaCwgYmFzZWQgb24gdGhlIG5hbWluZywgc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCB0aGUgZ2VuZXJhbCBva2F5LW5lc3Mgb2YgY2hlY2tzdW0gd3JpdGVzLgoKVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgaXMgaGVscGZ1bCB0byBrbm93LiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZGAgbW9kdWxlIGFuZCB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoaXMgdmFsaWRhdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCYjMzk7cyBsaWtlbHkgdGhpcyB2YWxpZGF0aW9uIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQvb3IgcGVyZm9ybWFuY2UsIGdpdmVuIGl0cyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4NT1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5NC1cdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExOTU9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjUzLVx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGN0eCwgcHJpdikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1NS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzgxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTkZUIFBheWxvYWQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5mdF9wYXlsb2FkX3NldF9pbml0YC4gSXQgc2VlbXMgbGlrZSB0aGUgZmlyc3QgdGhpbmcgaXQmIzM5O3MgZG9pbmcgaXMgY2FsbGluZyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24sIHdoaWNoIGlzIGNvbW1vbiBpbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nLiBJdCYjMzk7cyBsaWtlbHkgZW5zdXJpbmcgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbiBvciBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuCgpOb3csIHdoZXJlIGRvIHdlIGdvIGZyb20gaGVyZT8gTGV0JiMzOTtzIHNlZS4uLiBHaXZlbiB0aGUgY29udGV4dCBvZiBhIGNoZWNrc3VtIHZhbGlkYXRpb24gYW5kIG1vZGlmaWNhdGlvbiB3aXRoaW4gYSBwYWNrZXQgY29udGV4dCwgYSBuYXR1cmFsIG5leHQgcG9pbnQgdG8gaW52ZXN0aWdhdGUgaXMgdGhlIGNoZWNrc3VtIHdyaXRlIG9wZXJhdGlvbi4gSSBiZXQgaXQmIzM5O3MgcmVsZXZhbnQgdG8gaG93IHRoZSBzeXN0ZW0gKmFsbG93cyogY2hhbmdlcyB0byBiZSBtYWRlLiBUaGF0IG1lYW5zLCB0aGUgbmV4dCBwaWVjZSB0byByZWFsbHkgbG9vayBhdCBpcyBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIExldCYjMzk7cyBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTE9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDY5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzA6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcxLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTEwMz1zdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjgtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE2OTpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcwLVx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIG5mdF9wYXlsb2FkIFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaXMgY2FsbGluZyBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0IHNlZW1zIHRob3NlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHJpZ2h0PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBub24tc3RhdGljLiBMZXQgbWUganVtcCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCBjb25maXJtIHRoYXQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgbW9yZSBpbXBvcnRhbnQuIEl0JiMzOTtzIGFsd2F5cyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDM9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk0LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5OS1cdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwMS1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZXNlIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdGVjaG5pY2FsbHkgKipzdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIGBuZnRfZXhwcl9vcHNgIHJlZ2lzdHJhdGlvbiBpcyBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCoqLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcmlnaHQgbm93IEkgYW0gaW50ZXJlc3RlZCBpbiBob3cgdGhlIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBmaXRzIGluIHRvIHRoaXMgd2hvbGUgcGljdHVyZS4gVGltZSB0byBjaGVjayB3aGVyZSBgbmZ0X3BheWxvYWRfc2V0X29wc2AgaXMgdXNlZCBhbmQgc2VlIHdoYXQgY29tZXMgb2YgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NldF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyNzY9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMzA1PW5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzMC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzMxOlx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzMyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFBheWxvYWQgU2VsZWN0aW9uKioKCk9rYXksIHNvIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSBrZXkgcGllY2UuIFRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAqb3BzKiBzdHJvbmdseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzIHJlbGF0ZWQgdG8gcGF5bG9hZCBoYW5kbGluZy4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgZHluYW1pY2FsbHkgc2VsZWN0aW5nIHRoZSBvcGVyYXRpb24gc2V0LiBUbyB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGhhcHBlbmluZywgSSBuZWVkIHRvIGdldCBpbnNpZGUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2VsZWN0aW9uIGxvZ2ljLiBXaGF0IGZhY3RvcnMgYXJlIGRyaXZpbmcgdGhlIGNob2ljZSBvZiB3aGljaCBvcGVyYXRpb25zIHNldCBpcyByZXR1cm5lZD8gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW50ZXJuYWxzIG9mIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcyB0byB0cnVseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NlbGVjdF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgKlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDU6bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMDYtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTM1Mj1zdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My1cdC5uYW1lXHRcdD0gXCYjMzQ7cGF5bG9hZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU0Olx0LnNlbGVjdF9vcHNcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVx0LmlubmVyX29wc1x0PSBcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciYjMzk7cyBgbmZ0X3BheWxvYWRgIGZvciBFbnRyeSBQb2ludCBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfdHlwZWAgc3RydWN0dXJlLiBUaGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBieSBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMuIFRoZSBwcm9tcHQgY2xlYXJseSBzdGF0ZXMgdGhpcyBwcmVmZXJlbmNlIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuCgpUaGUgcGF0Y2ggSSYjMzk7bSByZXZpZXdpbmcgdG91Y2hlcyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgYm90aCBwYXJ0IG9mIHRoZSBgbmZ0X3BheWxvYWRgIGV4cHJlc3Npb24gaW4gbmV0ZmlsdGVyLiBUaGUgaW5pdGlhbCBlbnRyeSBwb2ludHMgSSBjb25zaWRlcmVkIGFyZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLiBIb3dldmVyLCB0aG9zZSBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLCBhbmQgdGhpcyBpcyB3aGVyZSB0aGUgZGlsZW1tYSBzdGFydHMuIFRoZSBwcm9tcHQgc3VnZ2VzdHMgYXZvaWRpbmcgdGhlc2UsIGJ1dCBzaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzZWQsIHRoZXkmIzM5O3JlIGxpa2VseSBub3QgaW5saW5lZCBkZXNwaXRlIGJlaW5nIHN0YXRpYywgd2hpY2ggaXMgdGhlIGtleSBkaXN0aW5jdGlvbi4gVGhleSAqaGF2ZSogZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4KCk5vdyBJJiMzOTttIGJhY2sgdG8gc3F1YXJlIG9uZSwgY2hlY2tpbmcgaWYgdGhlIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyDigJMgYW5kIGl0IGlzLiBTbywgbXkgaHVudCBjb250aW51ZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIHRocm91Z2ggYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYWdhaW4sIGhvcGluZyB0byB1bmNvdmVyIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBtb2R1bGUgdGhhdCBjb3VsZCBiZSB1c2VkIGluc3RlYWQuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IGFuZCBwcmVmZXIgdGhvc2Ugb3ZlciBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgdGhlIG9uZXMgY3VycmVudGx5IGluIHVzZSwgYXMgbG9uZyBhcyB0aGV5IHByb3ZpZGUgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlteIFxcdF0uKiBuZnRfcGF5bG9hZF8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTM9ZXh0ZXJuIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9ieXRlb3JkZXJfdHlwZTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE0OmV4dGVybiBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTUtZXh0ZXJuIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9keW5zZXRfdHlwZTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD03ND1zdHJ1Y3QgbmZ0X3BheWxvYWQge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg6NzU6XHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzXHRiYXNlOjg7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC03Ni1cdHUxNlx0XHRcdG9mZnNldDtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC04MC1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjgxOmV4dGVybiBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtODItXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTM2PXZvaWQgbmZ0X2xvb2t1cF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzNy1cdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjEzODp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTM5LVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD0xNjQ9c3RydWN0IG5mdF9pbm5lcl90dW5fY3R4IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xNzUtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNzY6aW50IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNzc6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTc4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTc3OT1lbnVtIG5mdF9keW5zZXRfYXR0cmlidXRlcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC04MDItICovXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgwMzplbnVtIG5mdF9wYXlsb2FkX2Jhc2VzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODA0LVx0TkZUX1BBWUxPQURfTExfSEVBREVSLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODE3LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDo4MTg6ZW51bSBuZnRfcGF5bG9hZF9jc3VtX3R5cGVzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODE5LVx0TkZUX1BBWUxPQURfQ1NVTV9OT05FLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODIzLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDo4MjQ6ZW51bSBuZnRfcGF5bG9hZF9jc3VtX2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODI1LVx0TkZUX1BBWUxPQURfTDRDU1VNX1BTRVVET0hEUiA9ICgxIFx1MDAzY1x1MDAzYyAwKSxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg0Mz1lbnVtIG5mdF9pbm5lcl9hdHRyaWJ1dGVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2NS0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODY2OmVudW0gbmZ0X3BheWxvYWRfYXR0cmlidXRlcyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cdE5GVEFfUEFZTE9BRF9VTlNQRUMsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgbmZ0X3RyYWNlX3ZlcmRpY3QoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoxNDQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDUtXHRcdFx0XHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyMTg6XHRYKGUsIG5mdF9wYXlsb2FkX2V2YWwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxOS1cdFgoZSwgbmZ0X2NtcF9ldmFsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0xMTQ9dW5pb24gbmZ0X2NtcF9vZmZsb2FkX2RhdGEge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTExOS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjEyMDpzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9uMmgodW5pb24gbmZ0X2NtcF9vZmZsb2FkX2RhdGEgKmRhdGEsXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMjEtXHRcdFx0ICAgIGNvbnN0IHU4ICp2YWwsIHUzMiBsZW4pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1hY19vZmYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjktXHRcdFx0XHRcdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGgpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTc0PXN0YXRpYyBpbnQgX19uZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzk6aW50IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDctXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTU5OnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYwLVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ni1cdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc3Olx0XHQgICAgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdChwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTc4LVx0XHRcdGlmICghbmZ0X3BheWxvYWRfY29weV92bGFuKGRlc3QsIHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTkzLVx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTk0Olx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTUtXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMi1cdFtORlRBX1BBWUxPQURfU1JFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ0LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNTk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjAtXHRcdFx0XHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4Ny1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXHRjYXNlIElQUFJPVE9fVENQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ3LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU0OC1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTE6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU1OmNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU2LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1Ny1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1OTpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjA6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY0OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjE1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfaW5uZXJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NDktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2lubmVyX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTEtXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjUyLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTM6XHQuaW5pdFx0XHQ9IG5mdF9wYXlsb2FkX2lubmVyX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU0Olx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NTpcdC8qIGRpcmVjdCBjYWxsIHRvIG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKS4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTYtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NjU4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfY3N1bV9yZXBsYWNlKF9fc3VtMTYgKnN1bSwgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NjQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjY1OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY3NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc3LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzA2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcxODpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiAqc3JjLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1Ni1cdFx0XHRcdCBfX3dzdW0gZnN1bSwgX193c3VtIHRzdW0sIGludCBjc3VtX29mZnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzcwLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc3MTpzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6XHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzXHRiYXNlOjg7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzczLVx0dTE2XHRcdFx0b2Zmc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODEtLyogVGhpcyBpcyBub3Qgc3RydWN0IHZsYW5faGRyLiAqL1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc4MjpzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc4My1cdF9fYmUxNlx0XHRcdGhfdmxhbl9wcm90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9Nzg4PW5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzkxOlx0c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICp2bGFuaDtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTItXHRfX2JlMTYgdmxhbl9wcm90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA1LVx0XHR9IGVsc2UgaWYgKGxlbiA9PSA0KSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODA2Olx0XHRcdHZsYW5oID0gKHN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciAqKXNyYztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04MDctXHRcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5oLVx1MDAzZWhfdmxhbl9wcm90byxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9ODM2PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODM3Olx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04MzgtXHRcdFx0XHRjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9ODgyPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODgzOlx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04ODQtXHRcdFx0XHRjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTAzLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkwNDpzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYXJwKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTA1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTIzPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTI0Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjUtXHRcdFx0XHQgICBjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ1Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDYtXHRcdFx0XHQgICBjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTYyPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5NjM6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTY0LVx0XHRcdCAgICBjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTg1PXN0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5MzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0Olx0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMwLSAqL1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwMzE6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzItXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDUxOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUyLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNjktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzE6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc2LVx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc3Olx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzgtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3OTpcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwOTI9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwOTM6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA5NC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDItXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTEwMzpzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNC1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDYte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMDc6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVx0Y29uc3QgdTMyICpzcmMgPSBcdTAwMjZyZWdzLVx1MDAzZWRhdGFbcHJpdi1cdTAwM2VzcmVnXTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExOC1cdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTExOTpcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjAtXHRcdFx0aWYgKCFuZnRfcGF5bG9hZF9zZXRfdmxhbihzcmMsIHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0NS1cdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNDY6XHRcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNDctXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjgtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE2OTpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTcwOlx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MS1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3My1cdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTc0Olx0XHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NS1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4NS1cdFx0aWYgKHBrdC1cdTAwM2VmcmFnb2ZmID09IDAgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE4NjpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTg3LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk0LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTktXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyMDA6XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAxLVx0aW50IGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc3LVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBib29sIHJlc2V0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzgte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzk6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTg6XHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjk5Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAwOlx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAxOlx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9zZXRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzAyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDU9bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA3LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA4Olx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlcyBiYXNlO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMDktXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTEtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1MjpzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My1cdC5uYW1lXHRcdD0gXCYjMzQ7cGF5bG9hZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU0Olx0LnNlbGVjdF9vcHNcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVx0LmlubmVyX29wc1x0PSBcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NjpcdC5wb2xpY3lcdFx0PSBuZnRfcGF5bG9hZF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Ny1cdC5tYXhhdHRyXHQ9IE5GVEFfUEFZTE9BRF9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgQVBJKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZmluZCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhlIHBheWxvYWQgZnVuY3Rpb25hbGl0eSBpbiBOZXRmaWx0ZXIuIEkgc2VlIHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgcmVnaXN0ZXJlZCB3aXRoaW4gYG5mdF9wYXlsb2FkX3NldF9vcHNgLiBUaGlzIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBzdHJ1Y3R1cmUgaXMgdGhlbiBzZWxlY3RlZCBieSBgbmZ0X3BheWxvYWRfc2VsZWN0X29wc2AsIHdoaWNoIGl0c2VsZiBpcyByZWdpc3RlcmVkIHdpdGhpbiBgbmZ0X3BheWxvYWRfdHlwZWAuIEFuZCBmaW5hbGx5LCBgbmZ0X3BheWxvYWRfdHlwZWAgZ2V0cyByZWdpc3RlcmVkIGluIGBuZl90YWJsZXNfY29yZS5jYCBvciBhIHNpbWlsYXIgY29yZSBmaWxlLgoKTXkgZmlyc3QgaW1wcmVzc2lvbiB3YXMgdG8gbG9vayBmb3IgdGhlIGtleSBlbnRyeSBwb2ludHMgdGhhdCBhcmUgKm5vdCogc3RhdGljLCBzaW5jZSBJIGtub3cgdGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhcyBleHRlcm5hbCBBUEkgZW50cnkgcG9pbnRzLiBJIG5vdGljZWQgYG5mdF9wYXlsb2FkX2V2YWxgIGlzIG5vdCBzdGF0aWMgKGl0JiMzOTtzIGRlY2xhcmVkIGluIGBuZl90YWJsZXNfY29yZS5oYCwgYW5kIGRlZmluZWQgaW4gYG5mdF9wYXlsb2FkLmNgKS4gQWhhLCBidXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCAqaXMqIHN0YXRpYyEgSG1tLiBTbywgYG5mdF9wYXlsb2FkX2V2YWxgIG11c3QgYmUgZm9yIHJlYWRpbmcgcGF5bG9hZCBkYXRhLiBBbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBmb3Igd3JpdGluZyBwYXlsb2FkIGRhdGEuCgpJIGluaXRpYWxseSB0aG91Z2h0IHRoYXQgc2luY2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgaW5kaXJlY3RseSBiZWluZyBtb2RpZmllZCwgSSBzaG91bGQgYWxzbyBsaXN0IGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgb3IgbWF5YmUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgLgoKVGhlbiBpdCBoaXRzIG1lOiBUaGUgcHJvbXB0IHN0cmVzc2VzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQuIFRoZSBmYWN0IHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgcmVnaXN0ZXJlZCBpbiBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5IGFyZSAqbm90KiBpbmxpbmVkLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gU28sIGxpc3RpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGNvbXBsZXRlbHkgdmFsaWQsIGRlc3BpdGUgdGhlIHN0YXRpYyBrZXl3b3JkLgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFRoZSBjb2RlIGlzIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYwLVx0XHRcdFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNzc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzgtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIEVUSF9BTEVOKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk4LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDAtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA3Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSAmIzQzOyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzEtXHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ3LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY0LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzczLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNy1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzMy1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNS1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM2LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzc6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDctXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYxOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYyLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDczLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzUtXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDg5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAxLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMy1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwOS1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEwOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMS1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVx0Y2FzZSBJUFBST1RPX1VEUDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTM6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTE0LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIxLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMy1cdFx0XHQgICAgICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMC1cdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMTpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMi1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMzLVx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNi1cdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mzc6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzgtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDctXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1MS1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1My19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NTU9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYwLVx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcdC5vZmZsb2FkXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDU9bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzQ4LVx0ZWxzZVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNDk6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBORl9UQUJMRVNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLiBNeSBleHBlcnRpc2UgaXMgc3VjaCB0aGF0IEkga25vdyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIHN0cnVjdHVyZSBwcmV0dHkgd2VsbCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIGlzIHRoZSBwbGFjZSB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE5ldGZpbHRlciwgd2hpY2ggaXMgY2xlYXJseSB3aGF0IGBORl9UQUJMRVNgIGFsbHVkZXMgdG8uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgb3B0aW9uIHRvIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNS0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjY6bWVudWNvbmZpZyBORl9UQUJMRVNfQlJJREdFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTctXHRkZXBlbmRzIG9uIEJSSURHRSBcdTAwMjZcdTAwMjYgTkVURklMVEVSIFx1MDAyNlx1MDAyNiBORl9UQUJMRVNcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1pZiBORl9UQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0LVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU6Y29uZmlnIE5GX1RBQkxFU19JUFY0XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7SVB2NCBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTYyPWVuZGlmICMgTkZfVEFCTEVTX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTYzLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NjQ6Y29uZmlnIE5GX1RBQkxFU19BUlBcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtBUlAgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yOT1pZiBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTMwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MzE6Y29uZmlnIE5GX1RBQkxFU19JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NiBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTkKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogNTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBuZXRmaWx0ZXIgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlnIGZvciB0aGlzIGlzIGBORl9UQUJMRVNgLiBMZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgpSaWdodCwgbG9va2luZyB0aHJvdWdoIHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBtYXJrZWQgYXMgYHN0YXRpY2AsIGJ1dCB0aGV5JiMzOTtyZSAqcmVnaXN0ZXJlZCogd2l0aGluIGBuZnRfcGF5bG9hZF9zZXRfb3BzYC4gVGhhdCBtZWFucyB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLCBhbmQgdGhlcmVmb3JlIGFyZSB2YWxpZCBlbnRyeXBvaW50cyBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJIHJlY2VpdmVkLiBOb3csIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCBpcyBzdGF0aWMgYnV0IHJlZ2lzdGVyZWQgd2l0aGluIGBuZnRfcGF5bG9hZF90eXBlYC4gYG5mdF9wYXlsb2FkX3R5cGVgIGl0c2VsZiBpcyBub24tc3RhdGljLiBUaGVuIGBuZnRfcGF5bG9hZF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX2lubmVyX2V2YWxgIGFyZSBhbHNvIG5vbi1zdGF0aWMsIGJ1dCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLiBPa2F5LCBzbyBJJiMzOTtsbCBiZSBsaXN0aW5nIHRob3NlOiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLgoKV2FpdCwgdGhlIHByb21wdCBzdGF0ZWQgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsgU2luY2UgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAqYXJlbiYjMzk7dCogaW5saW5lZCwgZXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgbWFya2VkIGBzdGF0aWNgLCB0aGV5JiMzOTtyZSBwZXJmZWN0bHkgZmluZSBjYW5kaWRhdGVzLgoKTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgdW5kZXJzdGFuZCB3aGF0IHRoZSBwYXRjaCAqZG9lcyouIEl0JiMzOTtzIGFib3V0IHZhbGlkYXRpbmcgdGhlIGBjc3VtX29mZnNldGAgd2hlbiB3cml0aW5nIHRvIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaG93IGNoZWNrc3VtcyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBuZXRmaWx0ZXIsIGFuZCB0aGVyZWZvcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIChuZnRhYmxlcyksIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4KCk15IHByaW1hcnkgY29uZmlndXJhdGlvbiB3aWxsIGJlIGBORl9UQUJMRVNgLCBhbmQgdGhlIGZ1bmN0aW9ucyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiBmb3IgZnV6emluZyBhcmUsIGFzIGRlY2lkZWQsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZS4uLkkgd2FudCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1aXRhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgYXJlYS4gV2hhdCBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YD8gVGhleSBhcmUgc3RhdGljIGFuZCBpbmxpbmVkLCBzbyB0aGF0IHNvbGlkaWZpZXMgbXkgZWFybGllciBjaG9pY2UuCgpOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgY29uZmlndXJhdGlvbi13aXNlIEkgc2hvdWxkIGNvbnNpZGVyPyBgTkZfVEFCTEVTYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBvbmUsIGFuZCBJICp0aGluayogSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IGBORl9UQUJMRVNgIGFsc28gaW1wbGljaXRseSBpbmNsdWRlcyBgTkVURklMVEVSYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LYCwgZ2l2ZW4gdGhlIGRlcGVuZGVuY3kgYW5kIHNlbGVjdGlvbiByZWxhdGlvbnNoaXBzLiBZZXAsIGBORl9UQUJMRVNgIGlzIHRoZSBvbmx5IG9uZSBJIG5lZWQuCgpPa2F5LCBJJiMzOTttIHJlYWR5IHRvIHdyaXRlIHVwIHRoZSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciYjMzk7cyBuZnRfcGF5bG9hZCBtb2R1bGUgdG8gYWRkIHZhbGlkYXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cyB3aGVuIG1hbmdsaW5nIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciYjMzk7cyBuZnRfcGF5bG9hZCBtb2R1bGUgdG8gYWRkIHZhbGlkYXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cyB3aGVuIG1hbmdsaW5nIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBgY3N1bV9vZmZzZXRgIGF0dHJpYnV0ZSBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgbWFuZ2xpbmcgdG8gcHJldmVudCBhcmJpdHJhcnkgb2Zmc2V0cyBmcm9tIGJlaW5nIHVzZWQgd2hlbiB1cGRhdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIGFsbG93ZWQgYm9ndXMgb2Zmc2V0cyB3aGljaCBjb3VsZCBsZWFkIHRvIHBhY2tldCBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGNhdXNlZCBieSBpbnZhbGlkIG9mZnNldHMsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0IGhlcmUgc2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgY29uc3VtZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjFhYjhmYjEyN2YwNTdhMTNiZDFhZjZmMzZlMzQ3ODZiOGFlNzJlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDIzOjEyOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTEwMDgsMTEgJiM0MzsxMDA4LDEzIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciAmIzM0O3JlLXVwZGF0ZSYjMzQ7IG9mIEw0IGNoZWNrc3VtICovCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJLyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzCi0JCSAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuCi0JCSAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLgotCQkgKi8KLQkJcmV0dXJuIHRydWU7CiYjNDM7CQkvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqLwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6CkBAIC0xMDQ2LDYgJiM0MzsxMDQ4LDI1IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiYjNDM7CQkJCQkgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpCiYjNDM7ewomIzQzOwlpZiAoIShwa3QtJmd0O2ZsYWdzICZhbXA7IE5GVF9QS1RJTkZPX0w0UFJPVE8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHBrdC0mZ3Q7dHByb3QpIHsKJiM0MzsJY2FzZSBJUFBST1RPX1RDUDoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CiYjNDM7CWNhc2UgSVBQUk9UT19VRFA6CiYjNDM7CWNhc2UgSVBQUk9UT19VRFBMSVRFOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX0lDTVBWNjoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KQogewpAQCAtMTA1NSw5ICYjNDM7MTA3NiwxMCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCWNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6CiAJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7CiAJY2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOgomIzQzOwkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjoKLQkJLyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlCi0JCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KJiM0MzsJCS8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlCiYjNDM7CQkgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuCiAJCSAqLwogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB2YWxpZGF0aW5nIGBjc3VtX29mZnNldGAgd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCBmdW5jdGlvbnMuIFRoZSBpbnRlbnRpb24gaXMgdG8gbGltaXQgdGhlc2Ugb2Zmc2V0cyB0byBsZWdpdGltYXRlIGNoZWNrc3VtIGZpZWxkcyB3aXRoaW4gYHRjcGhkcmAsIGB1ZHBoZHJgLCBhbmQgYGljbXA2aGRyYCBzdHJ1Y3R1cmVzLiBUaGlzIG1ha2VzIHNlbnNlOyBwcmV2ZW50aW5nIGFyYml0cmFyeSBvZmZzZXRzIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhlYWRlciBtYW5pcHVsYXRpb24gYXR0YWNrcy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBzdGVtbWluZyBmcm9tIHRoZXNlIGNoYW5nZXMuIFRoZSBwcmlvciBjb2RlIG1pZ2h0IGhhdmUgYWxsb3dlZCB3cml0ZXMgdG8gYW55d2hlcmUgd2l0aGluIHRoZSBwYWNrZXQsIGFuZCAqbWF5YmUqIGV2ZW4gcmVhZHMuIFdhaXQsIG5vLCBgbmZ0X3BheWxvYWRfc2V0YCBpcyBzcGVjaWZpY2FsbHkgZm9yIHdyaXRpbmcsIHNvIHRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHByZXZlbnRpbmcgYXJiaXRyYXJ5IHdyaXRlcy4KClRoZSBwYXRjaCBmb2N1c2VzIG9uIHZhbGlkYXRpb24gZm9yIGNoZWNrc3VtIHdyaXRpbmcuIFNvLCBpdCYjMzk7cyBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gaG93IGNoZWNrc3VtcyBhcmUgd3JpdHRlbiBvciBwYXlsb2FkIGRhdGEgaXMgbWFuaXB1bGF0ZWQuIFRoaW5raW5nIGFib3V0IHRoaXMsIHdyaXRpbmcgdG8gYSBwYWNrZXQgdXN1YWxseSAqZG9lc24mIzM5O3QqIGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/CgpTdGlsbCwgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBmb3IgcmVhZHMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZWJhc2UgZm9yIHVzYWdlcyBvZiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIHJlZmVyZW5jZXMgdG8gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgc28gSSBjYW4gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24gYWJvdXQgcmVhZC1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA1MT1zdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNjktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzEtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTAzPXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE2OC1cdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTY5Olx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzAtXHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENoZWNrc3VtIE9mZnNldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmZ0X3BheWxvYWQuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgYXMgd2VsbC4gUmlnaHQsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgdmFsaWRhdGUgdGhlIG9mZnNldCB3aGVuIHdlJiMzOTtyZSB0d2Vha2luZyBwYWNrZXQgcGF5bG9hZHMgd2l0aGluIG5ldGZpbHRlciwgcGFydGljdWxhcmx5IGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgaGFyZGVuaW5nIHRoZSBzeXN0ZW0gYnkgbGltaXRpbmcgdGhlIGBjc3VtX29mZnNldGAgdG8gb25seSAqa25vd24qIGFuZCBzYWZlIGxvY2F0aW9ucywgbGlrZSB3aGVyZSB0aGUgVENQIGhlYWRlciBjaGVja3N1bSByZXNpZGVzIChgb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spYCkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBhIGdvb2QgcHJhY3RpY2UuIFByZXZlbnRpbmcgYXJiaXRyYXJ5IG9mZnNldHMgaXMgY3J1Y2lhbC4gSXTigJlzIGEgY2xhc3NpYyBkZWZlbnNlIGFnYWluc3QgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIGNvcnJ1cHRpbmcgY3JpdGljYWwgcGFja2V0IGhlYWRlciBpbmZvcm1hdGlvbi4gVGhlIG1haW4gcmlzayBoZXJlIGlzbiYjMzk7dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGVyIHNlLiBUaGUgdGhyZWF0IGlzIGFib3V0IHByZXZlbnRpbmcgYSBtYWxpY2lvdXMgdXNlciBvciBhIGJ1Z2d5IHJ1bGUgZnJvbSBvdmVyd3JpdGluZyB2aXRhbCBkYXRhIHdpdGhpbiB0aGUgcGFja2V0IGJ1ZmZlciAoYHNrYmApLiBLQVNBTiB3b3VsZCBsaWtlbHkgY2F0Y2ggYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlmIGl0IGhhcHBlbnMsIGFuZCBhIGNvcnJ1cHRlZCBwYWNrZXQsIGFsdGhvdWdoIG5vdCBpbW1lZGlhdGVseSBmbGFnZ2VkIGFzIGFuIGlzc3VlIGJ5IHNhbml0aXplcnMsIHdvdWxkIGluZGljYXRlIHRoYXQgYSBsb2dpYyBidWcgaXMgYXQgcGxheS4gSXQmIzM5O3MgYWJvdXQgbWVtb3J5IGNvcnJ1cHRpb24sIG5vdCBkaXJlY3RseSBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLgoKV2FpdCwgdGhvdWdo4oCmIGNvdWxkIGFuICppbnZhbGlkKiBvZmZzZXQgaW5hZHZlcnRlbnRseSBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBjaGVja3N1bSB1cGRhdGUgbG9naWMgKnJlYWRzKiB0aGUgb2xkIHZhbHVlIGJlZm9yZSAqd3JpdGluZyogdGhlIG5ldyBvbmUuIElmIHRoZSBvZmZzZXQgaXMgc29tZWhvdyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHZhbGlkIGRhdGEgd2l0aGluIHRoZSBgc2tiYCwgaXTigJlzICpwb3NzaWJsZSogaXQgbWlnaHQgdHJ5IHRvIHJlYWQgc29tZXRoaW5nIHRoYXQmIzM5O3Mgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIEl04oCZcyBsZXNzIGxpa2VseSwgdGhvdWdoLCBzaW5jZSB0aGUgc2tiIGRhdGEgaXRzZWxmIGlzLCBpbiBnZW5lcmFsLCBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrIG9yIHVzZXItc3BhY2UgYXBwbGljYXRpb25zLgoKQnV0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIHZhbHVlcyB0aGUgb2Zmc2V0IGNhbiB0YWtlLiBUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoaXMgYGNzdW1fb2Zmc2V0YCB0byBvbmx5IGtub3duIGFuZCBzcGVjaWZpYyB2YWx1ZXMuIEdvb2QuIFRoYXQgc2hvdWxkIHByZXZlbnQgdGhlIHBvc3NpYmlsaXR5IG9mIHRob3NlIGtpbmRzIG9mIHVuaW50ZW5kZWQgcmVhZHMuCgpJ4oCZbSBnb2luZyB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgYW5kIGRvdWJsZS1jaGVjayBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHRvIHNlZSBob3cgdGhvc2UgY2hlY2tzIGFyZSBlbmZvcmNlZCBhbmQgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdGRlZmF1bHQ6XG4xMTUxOlx0XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XG4xMTUyOlx0XHRcdGdvdG8gZXJyO1xuMTE1MzpcdFx0fVxuMTE1NDpcdFxuMTE1NTpcdFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgJiM0MzsgcHJpdi1cdTAwM2Vjc3VtX29mZnNldDtcbjExNTY6XHRcdG9mZnNldCAmIzQzOz0gcHJpdi1cdTAwM2VvZmZzZXQ7XG4xMTU3Olx0XG4xMTU4Olx0XHRpZiAoKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIFx1MDAyNlx1MDAyNlxuMTE1OTpcdFx0ICAgICgocHJpdi1cdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVIgXHUwMDI2XHUwMDI2XG4xMTYwOlx0XHQgICAgICBwcml2LVx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKSB8fFxuMTE2MTpcdFx0ICAgICBza2ItXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpKSB7XG4xMTYyOlx0XHRcdGlmIChvZmZzZXQgJiM0MzsgcHJpdi1cdTAwM2VsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4xMTYzOlx0XHRcdFx0Z290byBlcnI7XG4xMTY0Olx0XG4xMTY1Olx0XHRcdGZzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHByaXYtXHUwMDNlbGVuLCAwKTtcbjExNjY6XHRcdFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXHUwMDNlbGVuLCAwKTtcbjExNjc6XHRcbjExNjg6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcdTAwMjZcdTAwMjZcbjExNjk6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbjExNzA6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuMTE3MTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzIFx1MDAyNlx1MDAyNlxuMTE3NDpcdFx0XHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXHUwMDNjIDApXG4xMTc1Olx0XHRcdFx0Z290byBlcnI7XG4xMTc2Olx0XHR9XG4xMTc3Olx0XG4xMTc4Olx0XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG1heChvZmZzZXQgJiM0MzsgcHJpdi1cdTAwM2VsZW4sIDApKSB8fFxuMTE3OTpcdFx0ICAgIHNrYl9zdG9yZV9iaXRzKHNrYiwgb2Zmc2V0LCBzcmMsIHByaXYtXHUwMDNlbGVuKSBcdTAwM2MgMClcbjExODA6XHRcdFx0Z290byBlcnI7XG4xMTgxOlx0XG4xMTgyOlx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9TQ1RQIFx1MDAyNlx1MDAyNlxuMTE4MzpcdFx0ICAgIHBrdC1cdTAwM2V0cHJvdCA9PSBJUFBST1RPX1NDVFAgXHUwMDI2XHUwMDI2XG4xMTg0Olx0XHQgICAgc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4xMTg1Olx0XHRcdGlmIChwa3QtXHUwMDNlZnJhZ29mZiA9PSAwIFx1MDAyNlx1MDAyNlxuMTE4NjpcdFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxuMTE4NzpcdFx0XHRcdGdvdG8gZXJyO1xuMTE4ODpcdFx0fVxuMTE4OTpcdFxuMTE5MDpcdFx0cmV0dXJuO1xuMTE5MTpcdGVycjpcbjExOTI6XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHRzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4xMTk2Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4xMTk3Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbjExOTg6XHR7XG4xMTk5Olx0XHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA3CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDU1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBuZXRmaWx0ZXIgcGF0Y2ggYW5kIHdoeSBJJiMzOTttIHNldHRpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1vZGlmaWVzIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgaW50cm9kdWNlcyBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgaW4gYG5mdF9wYXlsb2FkLmNgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGBjc3VtX29mZnNldGAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB0cmFuc3BvcnQgaGVhZGVyIChgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmApLCB0byBrbm93biwgc2FmZSBvZmZzZXRzIHdpdGhpbiB0aGUgdHJhbnNwb3J0IGhlYWRlcnMgKGxpa2UgYHRjcGhkcmAsIGB1ZHBoZHJgLCBhbmQgYGljbXA2aGRyYCkuCgpUaGUgYWRkZWQgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIGlzIGEgcnVudGltZSBjaGVjayB3aXRoaW4gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBjaGVja3N1bXMgYXJlIHdyaXR0ZW4gYW5kIHVwZGF0ZWQgaW4gdGhlIG5ldGZpbHRlciBwcm9jZXNzLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHByZXZlbnRpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJiMzOTtyZSBtYW5nbGluZyB0cmFuc3BvcnQgaGVhZGVycy4KClRoZSBjcml0aWNhbCBpc3N1ZSB0aGlzIGFkZHJlc3NlcyBpcyBwcmV2ZW50aW5nIGFuIGF0dGFja2VyIGZyb20gdXNpbmcgYSBjcmFmdGVkLCBib2d1cyBgY3N1bV9vZmZzZXRgIHRvIHdyaXRlIHRoZSBjaGVja3N1bSB0byBhbiBhcmJpdHJhcnksIG91dC1vZi1ib3VuZHMgb2Zmc2V0IHdpdGhpbiB0aGUgcGFja2V0JiMzOTtzIGRhdGEgYnVmZmVyICh0aGUgYHNrYmApLiBUaGlzIGlzIGEgY2xlYXIgbWVtb3J5IGNvcnJ1cHRpb24gLyBvdXQtb2YtYm91bmRzIHdyaXRlIHZ1bG5lcmFiaWxpdHkuIEhvd2V2ZXIsIGl0JiMzOTtzICpub3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gS0FTQU4gd291bGQgbGlrZWx5IGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlcyBpZiB0aGV5IGdvIGJleW9uZCB0aGUgYHNrYmAgYnVmZmVyLCBidXQgaWYgdGhlIHdyaXRlIGlzIHdpdGhpbiB0aGUgYnVmZmVyIGl0c2VsZiwgaXQgcmVzdWx0cyBpbiBwYWNrZXQgY29ycnVwdGlvbiDigJMgc29tZXRoaW5nIEtNU0FOIGlzbiYjMzk7dCBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZSBwYXRjaCBpcyBmaXhpbmcgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgb2xkIGNvZGUgbWlnaHQgaGF2ZSBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIG92ZXJ3cml0ZSBkYXRhIHdpdGhpbiBhIHBhY2tldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvcnJlY3QsIGJlY2F1c2UgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0IGNvdWxkIGhhdmUgYSB2ZXJ5IGxvdyBpbXBhY3Qgb24gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzIHBhdGNoJiMzOTtzIGJlaGF2aW91ci4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGlzIHVzZWQgZHVyaW5nIHJ1bGUgY29uZmlndXJhdGlvbiwgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCBpcyB1c2VkIGR1cmluZyBwYWNrZXQgZXZhbHVhdGlvbi4KCkFmdGVyIGEgZG91YmxlLWNoZWNrLCBpdCYjMzk7cyBjbGVhciB0aGUgcHJvYmxlbSBpcyB0aGUgcG90ZW50aWFsIGNvcnJ1cHRpb24gb2YgTDQgb3IgcGF5bG9hZCBoZWFkZXJzIGR1ZSB0byBhIGJvZ3VzIGBjc3VtX29mZnNldGAuIFRoZSBjb21tZW50IGFsc28gbWVudGlvbnMgdGhlIG9sZCBjb2RlIGNvdWxkIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBoZWFkZXJzLiBUaGlzIGlzbiYjMzk7dCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGFueSBjb250cm9sIGZsb3cgaXNzdWVzLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU4gPSBmYWxzZWAgaXMgdGhlIGFwcHJvcHJpYXRlIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgYGNzdW1fb2Zmc2V0YCBhdHRyaWJ1dGUgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIHRvIHByZXZlbnQgYXJiaXRyYXJ5IG9mZnNldHMgZnJvbSBiZWluZyB1c2VkIHdoZW4gdXBkYXRpbmcgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMuIFRoZSBwcmV2aW91cyBiZWhhdmlvciBhbGxvd2VkIGJvZ3VzIG9mZnNldHMgd2hpY2ggY291bGQgbGVhZCB0byBwYWNrZXQgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBjYXVzZWQgYnkgaW52YWxpZCBvZmZzZXRzLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdCBoZXJlIHNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGNvbnN1bWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgdGhlIGBjc3VtX29mZnNldGAgYXR0cmlidXRlIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBtYW5nbGluZyB0byBwcmV2ZW50IGFyYml0cmFyeSBvZmZzZXRzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHVwZGF0aW5nIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGUgcHJldmlvdXMgYmVoYXZpb3IgYWxsb3dlZCBib2d1cyBvZmZzZXRzIHdoaWNoIGNvdWxkIGxlYWQgdG8gcGFja2V0IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgY2F1c2VkIGJ5IGludmFsaWQgb2Zmc2V0cywgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQgaGVyZSBzaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBjb25zdW1lZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjowNy45NzM1MjE2NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4NDMxMDYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgdGhlIGBjc3VtX29mZnNldGAgYXR0cmlidXRlIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBtYW5nbGluZyB0byBwcmV2ZW50IGFyYml0cmFyeSBvZmZzZXRzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHVwZGF0aW5nIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGUgcHJldmlvdXMgYmVoYXZpb3IgYWxsb3dlZCBib2d1cyBvZmZzZXRzIHdoaWNoIGNvdWxkIGxlYWQgdG8gcGFja2V0IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgY2F1c2VkIGJ5IGludmFsaWQgb2Zmc2V0cywgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQgaGVyZSBzaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBjb25zdW1lZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlcidzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MDcuOTczNTI3MDY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEwOTczMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMWFiOGZiMTI3ZjA1N2ExM2JkMWFmNmYzNmUzNDc4NmI4YWU3MmVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDIzOjEyOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTEwMDgsMTEgKzEwMDgsMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXFxuLVxcdFxcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXFxuLVxcdFxcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5AQCAtMTA0Niw2ICsxMDQ4LDI1IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4re1xcbitcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbitcXHRjYXNlIElQUFJPVE9fVENQOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbitcXHRjYXNlIElQUFJPVE9fVURQOlxcbitcXHRjYXNlIElQUFJPVE9fVURQTElURTpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcXG4rXFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuIHtcXG5AQCAtMTA1NSw5ICsxMDc2LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuIFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4rXFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuLVxcdFxcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxcbi1cXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuK1xcdFxcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXFxuK1xcdFxcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjA4LjQ2NTMxMjI4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3OTUwMzE3NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlcidzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjFhYjhmYjEyN2YwNTdhMTNiZDFhZjZmMzZlMzQ3ODZiOGFlNzJlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDIzOjEyOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi43MGY3MGE2NWUzMjdmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0xMDA4LDExICsxMDA4LDEzIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwicmUtdXBkYXRlXCIgb2YgTDQgY2hlY2tzdW0gKi9cbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4tXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4tXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXG4rXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgKzEwNDgsMjUgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbit7XG4rXHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuK1x0Y2FzZSBJUFBST1RPX1RDUDpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuK1x0Y2FzZSBJUFBST1RPX1VEUDpcbitcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4ge1xuQEAgLTEwNTUsOSArMTA3NiwxMCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbiBcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbitcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuLVx0XHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcbi1cdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuK1x0XHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxuK1x0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjA4LjQ2NTMxMzU5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDg3Njc5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ2hlY2tzdW0gT2Zmc2V0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGhhbmRsaW5nIGNoZWNrc3VtIG9mZnNldHMsIHdoaWNoIG1lYW5zIHdlJ3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgZmlsdGVyaW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB2YWxpZGF0aW5nIHRoZSBgY3N1bV9vZmZzZXRgIHdoZW4gd3JpdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy5cblxuSSBzZWUgdGhhdCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBzdWdnZXN0cyBpdCBkZWFscyB3aXRoIHRoZSBnZW5lcmFsIG9rYXktbmVzcyBvZiBjaGVja3N1bSB3cml0ZXMuXG5cblRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIGlzIGhlbHBmdWwgdG8ga25vdy4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlc2UuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRgIG1vZHVsZSBhbmQgdGhlIGJyb2FkZXIgbmV0ZmlsdGVyIGZyYW1ld29yay4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIHNlbnNlIG9mIGhvdyB0aGlzIHZhbGlkYXRpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSXQncyBsaWtlbHkgdGhpcyB2YWxpZGF0aW9uIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQvb3IgcGVyZm9ybWFuY2UsIGdpdmVuIGl0cyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MTMuMTE0MDg0NTc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODI2OTk2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTg1PXN0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5MzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5NC1cXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTE5NT1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1My1cXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MTUuNjk2Nzg5Mjg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NjE4Njg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTkZUIFBheWxvYWQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAuIEl0IHNlZW1zIGxpa2UgdGhlIGZpcnN0IHRoaW5nIGl0J3MgZG9pbmcgaXMgY2FsbGluZyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiwgd2hpY2ggaXMgY29tbW9uIGluIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcuIEl0J3MgbGlrZWx5IGVuc3VyaW5nIGEgdmFsaWQgY29uZmlndXJhdGlvbiBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb24gb3IgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cbk5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSBoZXJlPyBMZXQncyBzZWUuLi4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBjaGVja3N1bSB2YWxpZGF0aW9uIGFuZCBtb2RpZmljYXRpb24gd2l0aGluIGEgcGFja2V0IGNvbnRleHQsIGEgbmF0dXJhbCBuZXh0IHBvaW50IHRvIGludmVzdGlnYXRlIGlzIHRoZSBjaGVja3N1bSB3cml0ZSBvcGVyYXRpb24uIEkgYmV0IGl0J3MgcmVsZXZhbnQgdG8gaG93IHRoZSBzeXN0ZW0gKmFsbG93cyogY2hhbmdlcyB0byBiZSBtYWRlLiBUaGF0IG1lYW5zLCB0aGUgbmV4dCBwaWVjZSB0byByZWFsbHkgbG9vayBhdCBpcyBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIExldCdzIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjoxOS4wNTI5NzkwNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTg3NTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUxPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDcwOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzEtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTAzPXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTY4LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNjk6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcwLVxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MjEuNDE4ODYxMDYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODQ5ODY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyB0aGUgbmZ0X3BheWxvYWQgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIGNhbGxpbmcgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUaGF0IG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBJdCBzZWVtcyB0aG9zZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCByaWdodD8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbm9uLXN0YXRpYy4gTGV0IG1lIGp1bXAgaW50byBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBhbmQgY29uZmlybSB0aGF0IHRvIGJlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgbW9yZSBpbXBvcnRhbnQuIEl0J3MgYWx3YXlzIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjI0LjY1NzM2NDY0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMzczNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTAzPXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTk1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5Ni1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyOTktXFx0LmV2YWxcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAwOlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwMS1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjI2LjgwODc0NDE5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTExNDQ2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGZ1bmN0aW9ucy4gVGhleSdyZSB0ZWNobmljYWxseSAqKnN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aGUgYG5mdF9leHByX29wc2AgcmVnaXN0cmF0aW9uIGlzIGhvdyB0aGV5J3JlIGV4cG9zZWQqKi4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcmlnaHQgbm93IEkgYW0gaW50ZXJlc3RlZCBpbiBob3cgdGhlIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBmaXRzIGluIHRvIHRoaXMgd2hvbGUgcGljdHVyZS4gVGltZSB0byBjaGVjayB3aGVyZSBgbmZ0X3BheWxvYWRfc2V0X29wc2AgaXMgdXNlZCBhbmQgc2VlIHdoYXQgY29tZXMgb2YgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjozMC4xOTk4OTIxOTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDg4NTQ1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfc2V0X29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3Nj1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI5NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMzA1PW5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzMwLVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzMxOlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjMyLjYwODgxMTU0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQyNjM1Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgUGF5bG9hZCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBgbmZ0X3BheWxvYWRfc2VsZWN0X29wc2AgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBgbmZ0X3BheWxvYWRfc2V0X29wc2Agc3RydWN0dXJlLiBUaGF04oCZcyB0aGUga2V5IHBpZWNlLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCAqb3BzKiBzdHJvbmdseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMgcmVsYXRlZCB0byBwYXlsb2FkIGhhbmRsaW5nLiBTZWVtcyBsaWtlIHdlJ3JlIGR5bmFtaWNhbGx5IHNlbGVjdGluZyB0aGUgb3BlcmF0aW9uIHNldC4gVG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGhhcHBlbmluZywgSSBuZWVkIHRvIGdldCBpbnNpZGUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2VsZWN0aW9uIGxvZ2ljLiBXaGF0IGZhY3RvcnMgYXJlIGRyaXZpbmcgdGhlIGNob2ljZSBvZiB3aGljaCBvcGVyYXRpb25zIHNldCBpcyByZXR1cm5lZD8gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbnRlcm5hbHMgb2YgdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIHRvIHRydWx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MzYuMTUxNDUwNTEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQzMzI1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX3NlbGVjdF9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgKlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA1Om5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNi1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTM1Mj1zdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTMtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJwYXlsb2FkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NDpcXHQuc2VsZWN0X29wc1xcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1NS1cXHQuaW5uZXJfb3BzXFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfaW5uZXJfb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjozOC40OTQ3ODA3MDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4ODU1NDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyJ3MgYG5mdF9wYXlsb2FkYCBmb3IgRW50cnkgUG9pbnQgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgbmZ0X3BheWxvYWRfc2VsZWN0X29wc2AgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZF90eXBlYCBzdHJ1Y3R1cmUuIFRoZSBnb2FsIGlzIHRvIG9wdGltaXplIGJ5IHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhlIHByb21wdCBjbGVhcmx5IHN0YXRlcyB0aGlzIHByZWZlcmVuY2Ugb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuVGhlIHBhdGNoIEknbSByZXZpZXdpbmcgdG91Y2hlcyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgYm90aCBwYXJ0IG9mIHRoZSBgbmZ0X3BheWxvYWRgIGV4cHJlc3Npb24gaW4gbmV0ZmlsdGVyLiBUaGUgaW5pdGlhbCBlbnRyeSBwb2ludHMgSSBjb25zaWRlcmVkIGFyZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLiBIb3dldmVyLCB0aG9zZSBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLCBhbmQgdGhpcyBpcyB3aGVyZSB0aGUgZGlsZW1tYSBzdGFydHMuIFRoZSBwcm9tcHQgc3VnZ2VzdHMgYXZvaWRpbmcgdGhlc2UsIGJ1dCBzaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzZWQsIHRoZXkncmUgbGlrZWx5IG5vdCBpbmxpbmVkIGRlc3BpdGUgYmVpbmcgc3RhdGljLCB3aGljaCBpcyB0aGUga2V5IGRpc3RpbmN0aW9uLiBUaGV5ICpoYXZlKiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Ob3cgSSdtIGJhY2sgdG8gc3F1YXJlIG9uZSwgY2hlY2tpbmcgaWYgdGhlIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyDigJMgYW5kIGl0IGlzLiBTbywgbXkgaHVudCBjb250aW51ZXMuIEknbGwgbmVlZCB0byBkaWcgdGhyb3VnaCBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBhZ2FpbiwgaG9waW5nIHRvIHVuY292ZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZSB0aGF0IGNvdWxkIGJlIHVzZWQgaW5zdGVhZC4gVGhlIHRhc2sgaXMgdG8gaWRlbnRpZnkgYW5kIHByZWZlciB0aG9zZSBvdmVyIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSB0aGUgb25lcyBjdXJyZW50bHkgaW4gdXNlLCBhcyBsb25nIGFzIHRoZXkgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzEwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjQ0LjQ4MzMzODA1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTU1NTkwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlteIFxcXFx0XS4qIG5mdF9wYXlsb2FkX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD0xMz1leHRlcm4gc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2J5dGVvcmRlcl90eXBlO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE0OmV4dGVybiBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE1LWV4dGVybiBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZHluc2V0X3R5cGU7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD03ND1zdHJ1Y3QgbmZ0X3BheWxvYWQge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjc1OlxcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXNcXHRiYXNlOjg7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtNzYtXFx0dTE2XFx0XFx0XFx0b2Zmc2V0O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtODAtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg6ODE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHM7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtODItXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD0xMzY9dm9pZCBuZnRfbG9va3VwX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzNy1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncywgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjEzODp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzOS1cXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oPTE2ND1zdHJ1Y3QgbmZ0X2lubmVyX3R1bl9jdHgge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTc1LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE3NjppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNzc6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE3OC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTc3OT1lbnVtIG5mdF9keW5zZXRfYXR0cmlidXRlcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgwMi0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgwMzplbnVtIG5mdF9wYXlsb2FkX2Jhc2VzIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgwNC1cXHRORlRfUEFZTE9BRF9MTF9IRUFERVIsXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgxNy0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgxODplbnVtIG5mdF9wYXlsb2FkX2NzdW1fdHlwZXMge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODE5LVxcdE5GVF9QQVlMT0FEX0NTVU1fTk9ORSxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODIzLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODI0OmVudW0gbmZ0X3BheWxvYWRfY3N1bV9mbGFncyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC04MjUtXFx0TkZUX1BBWUxPQURfTDRDU1VNX1BTRVVET0hEUiA9ICgxIFxcdTAwM2NcXHUwMDNjIDApLFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaD04NDM9ZW51bSBuZnRfaW5uZXJfYXR0cmlidXRlcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2NS0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjg2NjplbnVtIG5mdF9wYXlsb2FkX2F0dHJpYnV0ZXMge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY3LVxcdE5GVEFfUEFZTE9BRF9VTlNQRUMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdHJhY2VfdmVyZGljdChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0NDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9mYXN0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyMTg6XFx0WChlLCBuZnRfcGF5bG9hZF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjE5LVxcdFgoZSwgbmZ0X2NtcF9ldmFsKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTExND11bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMTktXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTIwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX24yaCh1bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSAqZGF0YSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMjEtXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICp2YWwsIHUzMiBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjctXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1hY19vZmYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NzQ9c3RhdGljIGludCBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldChzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzOTppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQ5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE1OTp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjAtXFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ni1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzc6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3OC1cXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX2NvcHlfdmxhbihkZXN0LCBza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTkzLVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxOTQ6XFx0XFx0b2Zmc2V0ID0gbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5NS1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTAtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3BheWxvYWRfcG9saWN5W05GVEFfUEFZTE9BRF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjEyLVxcdFtORlRBX1BBWUxPQURfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0NC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBib29sIHJlc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDMzLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzc6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3Aoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDczLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEwOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMzLVxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM2LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ3LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ4LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTA6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MTpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTU6Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU2LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU3LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTk6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MDpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjQ6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjE1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfaW5uZXJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjQ5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfaW5uZXJfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTEtXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTItXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTM6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2lubmVyX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NDpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU1OlxcdC8qIGRpcmVjdCBjYWxsIHRvIG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKS4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjU2LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NjU4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfY3N1bV9yZXBsYWNlKF9fc3VtMTYgKnN1bSwgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY2NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjY1OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY2Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NzY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3MTg6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MTktXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiAqc3JjLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTYtXFx0XFx0XFx0XFx0IF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSwgaW50IGNzdW1fb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3MC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzcxOnN0cnVjdCBuZnRfcGF5bG9hZF9zZXQge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlc1xcdGJhc2U6ODtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzczLVxcdHUxNlxcdFxcdFxcdG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODEtLyogVGhpcyBpcyBub3Qgc3RydWN0IHZsYW5faGRyLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODI6c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzgzLVxcdF9fYmUxNlxcdFxcdFxcdGhfdmxhbl9wcm90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz03ODg9bmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTAte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3OTE6XFx0c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICp2bGFuaDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkyLVxcdF9fYmUxNiB2bGFuX3Byb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNS1cXHRcXHR9IGVsc2UgaWYgKGxlbiA9PSA0KSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgwNjpcXHRcXHRcXHR2bGFuaCA9IChzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKilzcmM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNy1cXHRcXHRcXHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbmgtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04MzY9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODM3OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgzOC1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04ODI9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODgzOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTg4NC1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkwNDpzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYXJwKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTIzPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjUtXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk0NTpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDYtXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTYyPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTYzOlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NjQtXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4NT1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzAtICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwMzE6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMyLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDUxOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1Mi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA2OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDcxOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzYtXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3NzpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc4LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3OTpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwOTI9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDkzOlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDk0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTAyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTAzOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNC1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDYte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTA3OlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVxcdGNvbnN0IHUzMiAqc3JjID0gXFx1MDAyNnJlZ3MtXFx1MDAzZWRhdGFbcHJpdi1cXHUwMDNlc3JlZ107XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExOC1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTE5OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTIwLVxcdFxcdFxcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0NS1cXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE0NjpcXHRcXHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0Ny1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTY4LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNjk6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTcwOlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MS1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzQ6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NS1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTg1LVxcdFxcdGlmIChwa3QtXFx1MDAzZWZyYWdvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTg2OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3NjdHAoc2tiLCBuZnRfdGhvZmYocGt0KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExODctXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE5NTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTYtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTktXFx0dTMyIGNzdW1fb2Zmc2V0LCBvZmZzZXQsIGNzdW1fdHlwZSA9IE5GVF9QQVlMT0FEX0NTVU1fTk9ORTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTIwMDpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTIwMS1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc3LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3OC17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzk6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI5NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI5ODpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjk5OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDE6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzAyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwNT1uZnRfcGF5bG9hZF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNy17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDg6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlcyBiYXNlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA5LVxcdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUyOnN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9wYXlsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My1cXHQubmFtZVxcdFxcdD0gXFxcInBheWxvYWRcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU0OlxcdC5zZWxlY3Rfb3BzXFx0PSBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVxcdC5pbm5lcl9vcHNcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTY6XFx0LnBvbGljeVxcdFxcdD0gbmZ0X3BheWxvYWRfcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU3LVxcdC5tYXhhdHRyXFx0PSBORlRBX1BBWUxPQURfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjo1OC42OTg5MDQ3MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2OTE2MjcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXlsb2FkIEFQSSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmaW5kIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGUgcGF5bG9hZCBmdW5jdGlvbmFsaXR5IGluIE5ldGZpbHRlci4gSSBzZWUgdGhhdCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBgbmZ0X3BheWxvYWRfc2V0X29wc2AuIFRoaXMgYG5mdF9wYXlsb2FkX3NldF9vcHNgIHN0cnVjdHVyZSBpcyB0aGVuIHNlbGVjdGVkIGJ5IGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCwgd2hpY2ggaXRzZWxmIGlzIHJlZ2lzdGVyZWQgd2l0aGluIGBuZnRfcGF5bG9hZF90eXBlYC4gQW5kIGZpbmFsbHksIGBuZnRfcGF5bG9hZF90eXBlYCBnZXRzIHJlZ2lzdGVyZWQgaW4gYG5mX3RhYmxlc19jb3JlLmNgIG9yIGEgc2ltaWxhciBjb3JlIGZpbGUuXG5cbk15IGZpcnN0IGltcHJlc3Npb24gd2FzIHRvIGxvb2sgZm9yIHRoZSBrZXkgZW50cnkgcG9pbnRzIHRoYXQgYXJlICpub3QqIHN0YXRpYywgc2luY2UgSSBrbm93IHRob3NlIGFyZSB0aGUgb25lcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYXMgZXh0ZXJuYWwgQVBJIGVudHJ5IHBvaW50cy4gSSBub3RpY2VkIGBuZnRfcGF5bG9hZF9ldmFsYCBpcyBub3Qgc3RhdGljIChpdCdzIGRlY2xhcmVkIGluIGBuZl90YWJsZXNfY29yZS5oYCwgYW5kIGRlZmluZWQgaW4gYG5mdF9wYXlsb2FkLmNgKS4gQWhhLCBidXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCAqaXMqIHN0YXRpYyEgSG1tLiBTbywgYG5mdF9wYXlsb2FkX2V2YWxgIG11c3QgYmUgZm9yIHJlYWRpbmcgcGF5bG9hZCBkYXRhLiBBbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBmb3Igd3JpdGluZyBwYXlsb2FkIGRhdGEuXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCBzaW5jZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIHRoZSBvbmUgdGhhdCdzIGluZGlyZWN0bHkgYmVpbmcgbW9kaWZpZWQsIEkgc2hvdWxkIGFsc28gbGlzdCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIG9yIG1heWJlIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYC5cblxuVGhlbiBpdCBoaXRzIG1lOiBUaGUgcHJvbXB0IHN0cmVzc2VzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQuIFRoZSBmYWN0IHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgcmVnaXN0ZXJlZCBpbiBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5IGFyZSAqbm90KiBpbmxpbmVkLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuIFNvLCBsaXN0aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBjb21wbGV0ZWx5IHZhbGlkLCBkZXNwaXRlIHRoZSBzdGF0aWMga2V5d29yZC5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFRoZSBjb2RlIGlzIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzowNS41NjgwNzEzMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTU3OTA2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWQub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XFx0XFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cXHRcXHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yNDM9c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNTk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYwLVxcdFxcdFxcdFxcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBFVEhfQUxFTikpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4Ni1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9kZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBFVEhfQUxFTikpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk4LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5OTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDAtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwNi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwNzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgKyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzIzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyNC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgdmxhbl9oZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU0OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM2MzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MDM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNC1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDExLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDMzLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzc6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3Aoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDU0OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDc0OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDgyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDg4LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00OTAtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTAyOnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90aChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwOS1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTA6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTExLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTItXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMC1cXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTMxOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMyLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzMtXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mzc6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90aChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDY6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDctXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1MS1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NTU9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwNT1uZnRfcGF5bG9hZF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM0OC1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNDk6XFx0XFx0cmV0dXJuIFxcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzowOC43MjM4Njc0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUwNjgzMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBgTkZfVEFCTEVTYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQncyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLiBNeSBleHBlcnRpc2UgaXMgc3VjaCB0aGF0IEkga25vdyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIHN0cnVjdHVyZSBwcmV0dHkgd2VsbCwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyLCB3aGljaCBpcyBjbGVhcmx5IHdoYXQgYE5GX1RBQkxFU2AgYWxsdWRlcyB0by4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIG9wdGlvbiB0byBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgaXRzIGltcGxpY2F0aW9ucyBvbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzoxMy4xNzQ1NTM5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODI1NDQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNS0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2Om1lbnVjb25maWcgTkZfVEFCTEVTX0JSSURHRVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNy1cXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVIgXFx1MDAyNlxcdTAwMjYgTkZfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1pZiBORl9UQUJMRVNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozNTpjb25maWcgTkZfVEFCTEVTX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJJUHY0IG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NjI9ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTYzLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjY0OmNvbmZpZyBORl9UQUJMRVNfQVJQXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiQVJQIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9Mjk9aWYgTkZfVEFCTEVTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzAtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MzE6Y29uZmlnIE5GX1RBQkxFU19JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NiBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cXHRkZXBlbmRzIG9uIElQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjE1Ljg5MjgxNTgyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM4MjAyNzM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIG5ldGZpbHRlciBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSByZWxldmFudCBjb25maWcgZm9yIHRoaXMgaXMgYE5GX1RBQkxFU2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblJpZ2h0LCBsb29raW5nIHRocm91Z2ggdGhlIGNvZGUsIGl0IHNlZW1zIGxpa2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuIFRoZXkncmUgbWFya2VkIGFzIGBzdGF0aWNgLCBidXQgdGhleSdyZSAqcmVnaXN0ZXJlZCogd2l0aGluIGBuZnRfcGF5bG9hZF9zZXRfb3BzYC4gVGhhdCBtZWFucyB0aGV5ICphcmVuJ3QqIGlubGluZWQsIGFuZCB0aGVyZWZvcmUgYXJlIHZhbGlkIGVudHJ5cG9pbnRzIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zIEkgcmVjZWl2ZWQuIE5vdywgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgIGlzIHN0YXRpYyBidXQgcmVnaXN0ZXJlZCB3aXRoaW4gYG5mdF9wYXlsb2FkX3R5cGVgLiBgbmZ0X3BheWxvYWRfdHlwZWAgaXRzZWxmIGlzIG5vbi1zdGF0aWMuIFRoZW4gYG5mdF9wYXlsb2FkX2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbGAgYXJlIGFsc28gbm9uLXN0YXRpYywgYnV0IHRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAuIE9rYXksIHNvIEknbGwgYmUgbGlzdGluZyB0aG9zZTogYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YC5cblxuV2FpdCwgdGhlIHByb21wdCBzdGF0ZWQgXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXCIgU2luY2UgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAqYXJlbid0KiBpbmxpbmVkLCBldmVuIHRob3VnaCB0aGV5J3JlIG1hcmtlZCBgc3RhdGljYCwgdGhleSdyZSBwZXJmZWN0bHkgZmluZSBjYW5kaWRhdGVzLlxuXG5Ob3csIGxldCdzIGFjdHVhbGx5IHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggKmRvZXMqLiBJdCdzIGFib3V0IHZhbGlkYXRpbmcgdGhlIGBjc3VtX29mZnNldGAgd2hlbiB3cml0aW5nIHRvIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaG93IGNoZWNrc3VtcyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhhdCBpdCdzIG5ldGZpbHRlciwgYW5kIHRoZXJlZm9yZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKG5mdGFibGVzKSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uZmlndXJhdGlvbiB3aWxsIGJlIGBORl9UQUJMRVNgLCBhbmQgdGhlIGZ1bmN0aW9ucyBJJ2xsIGJlIGZvY3VzaW5nIG9uIGZvciBmdXp6aW5nIGFyZSwgYXMgZGVjaWRlZCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRpbWUuLi5JIHdhbnQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1aXRhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgYXJlYS4gV2hhdCBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YD8gVGhleSBhcmUgc3RhdGljIGFuZCBpbmxpbmVkLCBzbyB0aGF0IHNvbGlkaWZpZXMgbXkgZWFybGllciBjaG9pY2UuXG5cbk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBjb25maWd1cmF0aW9uLXdpc2UgSSBzaG91bGQgY29uc2lkZXI/IGBORl9UQUJMRVNgIHNlZW1zIHRvIGJlIHRoZSBtYWluIG9uZSwgYW5kIEkgKnRoaW5rKiBJIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgYE5GX1RBQkxFU2AgYWxzbyBpbXBsaWNpdGx5IGluY2x1ZGVzIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX05FVExJTktgLCBnaXZlbiB0aGUgZGVwZW5kZW5jeSBhbmQgc2VsZWN0aW9uIHJlbGF0aW9uc2hpcHMuIFllcCwgYE5GX1RBQkxFU2AgaXMgdGhlIG9ubHkgb25lIEkgbmVlZC5cblxuT2theSwgSSdtIHJlYWR5IHRvIHdyaXRlIHVwIHRoZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NTksIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjI2LjI3NDg0NTIxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDc3OTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyJ3MgbmZ0X3BheWxvYWQgbW9kdWxlIHRvIGFkZCB2YWxpZGF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMgd2hlbiBtYW5nbGluZyBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlcidzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTM6MjYuNDE1NjM1MzA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQwMDk3ODcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjI2LjQxNzQ4MDI1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDM5OTEyODkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBgY3N1bV9vZmZzZXRgIGF0dHJpYnV0ZSBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgbWFuZ2xpbmcgdG8gcHJldmVudCBhcmJpdHJhcnkgb2Zmc2V0cyBmcm9tIGJlaW5nIHVzZWQgd2hlbiB1cGRhdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIGFsbG93ZWQgYm9ndXMgb2Zmc2V0cyB3aGljaCBjb3VsZCBsZWFkIHRvIHBhY2tldCBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGNhdXNlZCBieSBpbnZhbGlkIG9mZnNldHMsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0IGhlcmUgc2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgY29uc3VtZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMWFiOGZiMTI3ZjA1N2ExM2JkMWFmNmYzNmUzNDc4NmI4YWU3MmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMjM6MTI6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTEwMDgsMTEgKzEwMDgsMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCJyZS11cGRhdGVcIiBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuQEAgLTEwNDYsNiArMTA0OCwyNSBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiB7XG5AQCAtMTA1NSw5ICsxMDc2LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4rXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTM6MjYuNDE3NDgxNjc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDA1ODk3NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgYGNzdW1fb2Zmc2V0YCB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIGZ1bmN0aW9ucy4gVGhlIGludGVudGlvbiBpcyB0byBsaW1pdCB0aGVzZSBvZmZzZXRzIHRvIGxlZ2l0aW1hdGUgY2hlY2tzdW0gZmllbGRzIHdpdGhpbiBgdGNwaGRyYCwgYHVkcGhkcmAsIGFuZCBgaWNtcDZoZHJgIHN0cnVjdHVyZXMuIFRoaXMgbWFrZXMgc2Vuc2U7IHByZXZlbnRpbmcgYXJiaXRyYXJ5IG9mZnNldHMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaGVhZGVyIG1hbmlwdWxhdGlvbiBhdHRhY2tzLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHN0ZW1taW5nIGZyb20gdGhlc2UgY2hhbmdlcy4gVGhlIHByaW9yIGNvZGUgbWlnaHQgaGF2ZSBhbGxvd2VkIHdyaXRlcyB0byBhbnl3aGVyZSB3aXRoaW4gdGhlIHBhY2tldCwgYW5kICptYXliZSogZXZlbiByZWFkcy4gV2FpdCwgbm8sIGBuZnRfcGF5bG9hZF9zZXRgIGlzIHNwZWNpZmljYWxseSBmb3Igd3JpdGluZywgc28gdGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gcHJldmVudGluZyBhcmJpdHJhcnkgd3JpdGVzLlxuXG5UaGUgcGF0Y2ggZm9jdXNlcyBvbiB2YWxpZGF0aW9uIGZvciBjaGVja3N1bSB3cml0aW5nLiBTbywgaXQncyBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gaG93IGNoZWNrc3VtcyBhcmUgd3JpdHRlbiBvciBwYXlsb2FkIGRhdGEgaXMgbWFuaXB1bGF0ZWQuIFRoaW5raW5nIGFib3V0IHRoaXMsIHdyaXRpbmcgdG8gYSBwYWNrZXQgdXN1YWxseSAqZG9lc24ndCogaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodD9cblxuU3RpbGwsIEkgd2FudCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGFueSBwb3RlbnRpYWwgZm9yIHJlYWRzLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZWJhc2UgZm9yIHVzYWdlcyBvZiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBzbyBJIGNhbiBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbiBhYm91dCByZWFkLXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTM6MzYuODIzMzgzNjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDI0MzUxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA1MT1zdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA2OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcxLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTEwMz1zdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE2OC1cXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTY5OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MC1cXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjM5LjIyNTgyNzcxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk0NzQ4NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENoZWNrc3VtIE9mZnNldCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBuZnRfcGF5bG9hZC5jYCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIGFzIHdlbGwuIFJpZ2h0LCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHZhbGlkYXRlIHRoZSBvZmZzZXQgd2hlbiB3ZSdyZSB0d2Vha2luZyBwYWNrZXQgcGF5bG9hZHMgd2l0aGluIG5ldGZpbHRlciwgcGFydGljdWxhcmx5IGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgaGFyZGVuaW5nIHRoZSBzeXN0ZW0gYnkgbGltaXRpbmcgdGhlIGBjc3VtX29mZnNldGAgdG8gb25seSAqa25vd24qIGFuZCBzYWZlIGxvY2F0aW9ucywgbGlrZSB3aGVyZSB0aGUgVENQIGhlYWRlciBjaGVja3N1bSByZXNpZGVzIChgb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spYCkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZ29vZCBwcmFjdGljZS4gUHJldmVudGluZyBhcmJpdHJhcnkgb2Zmc2V0cyBpcyBjcnVjaWFsLiBJdOKAmXMgYSBjbGFzc2ljIGRlZmVuc2UgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyB3cml0ZXMgb3IgY29ycnVwdGluZyBjcml0aWNhbCBwYWNrZXQgaGVhZGVyIGluZm9ybWF0aW9uLiBUaGUgbWFpbiByaXNrIGhlcmUgaXNuJ3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBlciBzZS4gVGhlIHRocmVhdCBpcyBhYm91dCBwcmV2ZW50aW5nIGEgbWFsaWNpb3VzIHVzZXIgb3IgYSBidWdneSBydWxlIGZyb20gb3ZlcndyaXRpbmcgdml0YWwgZGF0YSB3aXRoaW4gdGhlIHBhY2tldCBidWZmZXIgKGBza2JgKS4gS0FTQU4gd291bGQgbGlrZWx5IGNhdGNoIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpZiBpdCBoYXBwZW5zLCBhbmQgYSBjb3JydXB0ZWQgcGFja2V0LCBhbHRob3VnaCBub3QgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBhbiBpc3N1ZSBieSBzYW5pdGl6ZXJzLCB3b3VsZCBpbmRpY2F0ZSB0aGF0IGEgbG9naWMgYnVnIGlzIGF0IHBsYXkuIEl0J3MgYWJvdXQgbWVtb3J5IGNvcnJ1cHRpb24sIG5vdCBkaXJlY3RseSBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5XYWl0LCB0aG91Z2jigKYgY291bGQgYW4gKmludmFsaWQqIG9mZnNldCBpbmFkdmVydGVudGx5IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGNoZWNrc3VtIHVwZGF0ZSBsb2dpYyAqcmVhZHMqIHRoZSBvbGQgdmFsdWUgYmVmb3JlICp3cml0aW5nKiB0aGUgbmV3IG9uZS4gSWYgdGhlIG9mZnNldCBpcyBzb21laG93IG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgdmFsaWQgZGF0YSB3aXRoaW4gdGhlIGBza2JgLCBpdOKAmXMgKnBvc3NpYmxlKiBpdCBtaWdodCB0cnkgdG8gcmVhZCBzb21ldGhpbmcgdGhhdCdzIG5vdCBiZWVuIGluaXRpYWxpemVkLiBJdOKAmXMgbGVzcyBsaWtlbHksIHRob3VnaCwgc2luY2UgdGhlIHNrYiBkYXRhIGl0c2VsZiBpcywgaW4gZ2VuZXJhbCwgcG9wdWxhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgbmV0d29yayBzdGFjayBvciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucy5cblxuQnV0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIHZhbHVlcyB0aGUgb2Zmc2V0IGNhbiB0YWtlLiBUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoaXMgYGNzdW1fb2Zmc2V0YCB0byBvbmx5IGtub3duIGFuZCBzcGVjaWZpYyB2YWx1ZXMuIEdvb2QuIFRoYXQgc2hvdWxkIHByZXZlbnQgdGhlIHBvc3NpYmlsaXR5IG9mIHRob3NlIGtpbmRzIG9mIHVuaW50ZW5kZWQgcmVhZHMuXG5cbknigJltIGdvaW5nIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlLCBhbmQgZG91YmxlLWNoZWNrIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgdG8gc2VlIGhvdyB0aG9zZSBjaGVja3MgYXJlIGVuZm9yY2VkIGFuZCBpbnRlZ3JhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjUxLjE3MzMxNDU4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0ZGVmYXVsdDpcXG4xMTUxOlxcdFxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XFxuMTE1MjpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTUzOlxcdFxcdH1cXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgKyBwcml2LVxcdTAwM2Vjc3VtX29mZnNldDtcXG4xMTU2OlxcdFxcdG9mZnNldCArPSBwcml2LVxcdTAwM2VvZmZzZXQ7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdGlmICgocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjExNTk6XFx0XFx0ICAgICgocHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFxcdTAwMjZcXHUwMDI2XFxuMTE2MDpcXHRcXHQgICAgICBwcml2LVxcdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcXG4xMTYxOlxcdFxcdCAgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcXG4xMTYyOlxcdFxcdFxcdGlmIChvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMTYzOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNjQ6XFx0XFxuMTE2NTpcXHRcXHRcXHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNjY6XFx0XFx0XFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXFx1MDAzZWxlbiwgMCk7XFxuMTE2NzpcXHRcXG4xMTY4OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMTE2OTpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxuMTE3MDpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuMTE3MTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTcyOlxcdFxcbjExNzM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG4xMTc0OlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxuMTE3NTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuLCAwKSkgfHxcXG4xMTc5OlxcdFxcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVxcdTAwM2VsZW4pIFxcdTAwM2MgMClcXG4xMTgwOlxcdFxcdFxcdGdvdG8gZXJyO1xcbjExODE6XFx0XFxuMTE4MjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODM6XFx0XFx0ICAgIHBrdC1cXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFxcdTAwMjZcXHUwMDI2XFxuMTE4NDpcXHRcXHQgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjExODU6XFx0XFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE4NjpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbjExODc6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE4ODpcXHRcXHR9XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHJldHVybjtcXG4xMTkxOlxcdGVycjpcXG4xMTkyOlxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbjExOTY6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbjExOTc6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuMTE5ODpcXHR7XFxuMTE5OTpcXHRcXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzo1MS4xNzM0MjE0NTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NDMxNTQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBuZXRmaWx0ZXIgcGF0Y2ggYW5kIHdoeSBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbW9kaWZpZXMgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGFuZCBpbnRyb2R1Y2VzIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCBpbiBgbmZ0X3BheWxvYWQuY2AuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgYGNzdW1fb2Zmc2V0YCB2YWx1ZXMsIHNwZWNpZmljYWxseSBmb3IgdGhlIHRyYW5zcG9ydCBoZWFkZXIgKGBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSYCksIHRvIGtub3duLCBzYWZlIG9mZnNldHMgd2l0aGluIHRoZSB0cmFuc3BvcnQgaGVhZGVycyAobGlrZSBgdGNwaGRyYCwgYHVkcGhkcmAsIGFuZCBgaWNtcDZoZHJgKS5cblxuVGhlIGFkZGVkIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCBpcyBhIHJ1bnRpbWUgY2hlY2sgd2l0aGluIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGl0J3MgYWxsIGFib3V0IGhvdyBjaGVja3N1bXMgYXJlIHdyaXR0ZW4gYW5kIHVwZGF0ZWQgaW4gdGhlIG5ldGZpbHRlciBwcm9jZXNzLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHByZXZlbnRpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJ3JlIG1hbmdsaW5nIHRyYW5zcG9ydCBoZWFkZXJzLlxuXG5UaGUgY3JpdGljYWwgaXNzdWUgdGhpcyBhZGRyZXNzZXMgaXMgcHJldmVudGluZyBhbiBhdHRhY2tlciBmcm9tIHVzaW5nIGEgY3JhZnRlZCwgYm9ndXMgYGNzdW1fb2Zmc2V0YCB0byB3cml0ZSB0aGUgY2hlY2tzdW0gdG8gYW4gYXJiaXRyYXJ5LCBvdXQtb2YtYm91bmRzIG9mZnNldCB3aXRoaW4gdGhlIHBhY2tldCdzIGRhdGEgYnVmZmVyICh0aGUgYHNrYmApLiBUaGlzIGlzIGEgY2xlYXIgbWVtb3J5IGNvcnJ1cHRpb24gLyBvdXQtb2YtYm91bmRzIHdyaXRlIHZ1bG5lcmFiaWxpdHkuIEhvd2V2ZXIsIGl0J3MgKm5vdCogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBLQVNBTiB3b3VsZCBsaWtlbHkgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGVzIGlmIHRoZXkgZ28gYmV5b25kIHRoZSBgc2tiYCBidWZmZXIsIGJ1dCBpZiB0aGUgd3JpdGUgaXMgd2l0aGluIHRoZSBidWZmZXIgaXRzZWxmLCBpdCByZXN1bHRzIGluIHBhY2tldCBjb3JydXB0aW9uIOKAkyBzb21ldGhpbmcgS01TQU4gaXNuJ3QgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcGF0Y2ggaXMgZml4aW5nIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIG9sZCBjb2RlIG1pZ2h0IGhhdmUgYWxsb3dlZCBhbiBhdHRhY2tlciB0byBvdmVyd3JpdGUgZGF0YSB3aXRoaW4gYSBwYWNrZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBjb3JyZWN0LCBiZWNhdXNlIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCBjb3VsZCBoYXZlIGEgdmVyeSBsb3cgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbkkndmUgY29uZmlybWVkIHRoaXMgcGF0Y2gncyBiZWhhdmlvdXIuIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBpcyB1c2VkIGR1cmluZyBydWxlIGNvbmZpZ3VyYXRpb24sIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgaXMgdXNlZCBkdXJpbmcgcGFja2V0IGV2YWx1YXRpb24uXG5cbkFmdGVyIGEgZG91YmxlLWNoZWNrLCBpdCdzIGNsZWFyIHRoZSBwcm9ibGVtIGlzIHRoZSBwb3RlbnRpYWwgY29ycnVwdGlvbiBvZiBMNCBvciBwYXlsb2FkIGhlYWRlcnMgZHVlIHRvIGEgYm9ndXMgYGNzdW1fb2Zmc2V0YC4gVGhlIGNvbW1lbnQgYWxzbyBtZW50aW9ucyB0aGUgb2xkIGNvZGUgY291bGQgY29ycnVwdCBMNCBvciBwYXlsb2FkIGhlYWRlcnMuIFRoaXMgaXNuJ3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBvciBhbnkgY29udHJvbCBmbG93IGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU4gPSBmYWxzZWAgaXMgdGhlIGFwcHJvcHJpYXRlIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDcsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTQ6MDYuODE2NTc5MjE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgdGhlIGBjc3VtX29mZnNldGAgYXR0cmlidXRlIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBtYW5nbGluZyB0byBwcmV2ZW50IGFyYml0cmFyeSBvZmZzZXRzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHVwZGF0aW5nIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGUgcHJldmlvdXMgYmVoYXZpb3IgYWxsb3dlZCBib2d1cyBvZmZzZXRzIHdoaWNoIGNvdWxkIGxlYWQgdG8gcGFja2V0IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgY2F1c2VkIGJ5IGludmFsaWQgb2Zmc2V0cywgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQgaGVyZSBzaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBjb25zdW1lZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgYGNzdW1fb2Zmc2V0YCBhdHRyaWJ1dGUgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIHRvIHByZXZlbnQgYXJiaXRyYXJ5IG9mZnNldHMgZnJvbSBiZWluZyB1c2VkIHdoZW4gdXBkYXRpbmcgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMuIFRoZSBwcmV2aW91cyBiZWhhdmlvciBhbGxvd2VkIGJvZ3VzIG9mZnNldHMgd2hpY2ggY291bGQgbGVhZCB0byBwYWNrZXQgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBjYXVzZWQgYnkgaW52YWxpZCBvZmZzZXRzLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdCBoZXJlIHNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGNvbnN1bWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 22:43:17 +0000 UTC FinishedAt: 2026-08-24 23:14:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "d06b49db-031b-4c0b-a5e5-fac54445e898" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_set_eval", "nft_payload_set_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBgY3N1bV9vZmZzZXRgIGF0dHJpYnV0ZSBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgbWFuZ2xpbmcgdG8gcHJldmVudCBhcmJpdHJhcnkgb2Zmc2V0cyBmcm9tIGJlaW5nIHVzZWQgd2hlbiB1cGRhdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIGFsbG93ZWQgYm9ndXMgb2Zmc2V0cyB3aGljaCBjb3VsZCBsZWFkIHRvIHBhY2tldCBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGNhdXNlZCBieSBpbnZhbGlkIG9mZnNldHMsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0IGhlcmUgc2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgY29uc3VtZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyJiMzOTtzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYxYWI4ZmIxMjdmMDU3YTEzYmQxYWY2ZjM2ZTM0Nzg2YjhhZTcyZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAyMzoxMjowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTEwMDgsMTEgJiM0MzsxMDA4LDEzIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4tXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4tXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG5AQCAtMTA0Niw2ICYjNDM7MTA0OCwyNSBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuJiM0MztcdGNhc2UgSVBQUk9UT19UQ1A6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1VEUDpcbiYjNDM7XHRjYXNlIElQUFJPVE9fVURQTElURTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4ge1xuQEAgLTEwNTUsOSAmIzQzOzEwNzYsMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4mIzQzO1x0XHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxuJiM0MztcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciYjMzk7cyBuZnRfcGF5bG9hZCBtb2R1bGUgdG8gYWRkIHZhbGlkYXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cyB3aGVuIG1hbmdsaW5nIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMWFiOGZiMTI3ZjA1N2ExM2JkMWFmNmYzNmUzNDc4NmI4YWU3MmVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMjM6MTI6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKaW5kZXggZTMxNWQzNWY3M2Q0YS4uNzBmNzBhNjVlMzI3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtMTAwOCwxMSAmIzQzOzEwMDgsMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yICYjMzQ7cmUtdXBkYXRlJiMzNDsgb2YgTDQgY2hlY2tzdW0gKi8KIAkJCXJldHVybiBmYWxzZTsKIAotCQkvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4mIzM5O3QgYmUgbmVnYXRpdmUgc28gYm9ndXMKLQkJICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy4KLQkJICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuCi0JCSAqLwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCS8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovCiYjNDM7CQlpZiAocHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKQEAgLTEwNDYsNiAmIzQzOzEwNDgsMjUgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0LSZndDt0cHJvdCkgewomIzQzOwljYXNlIElQUFJPVE9fVENQOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX1VEUDoKJiM0MzsJY2FzZSBJUFBST1RPX1VEUExJVEU6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiB7CkBAIC0xMDU1LDkgJiM0MzsxMDc2LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKIAkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiYjNDM7CQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgotCQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKLQkJICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgomIzQzOwkJLyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KIAkJICovCiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzOAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDaGVja3N1bSBPZmZzZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgbmZ0X3BheWxvYWQuY2AgZmlsZSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgaGFuZGxpbmcgY2hlY2tzdW0gb2Zmc2V0cywgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgZmlsdGVyaW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB2YWxpZGF0aW5nIHRoZSBgY3N1bV9vZmZzZXRgIHdoZW4gd3JpdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4KCkkgc2VlIHRoYXQgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGlzIGJlaW5nIG1vZGlmaWVkLCBhbmQgYSBuZXcgZnVuY3Rpb24sIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhpcyBuZXcgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLCB3aGljaCwgYmFzZWQgb24gdGhlIG5hbWluZywgc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCB0aGUgZ2VuZXJhbCBva2F5LW5lc3Mgb2YgY2hlY2tzdW0gd3JpdGVzLgoKVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgaXMgaGVscGZ1bCB0byBrbm93LiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZGAgbW9kdWxlIGFuZCB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoaXMgdmFsaWRhdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCYjMzk7cyBsaWtlbHkgdGhpcyB2YWxpZGF0aW9uIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQvb3IgcGVyZm9ybWFuY2UsIGdpdmVuIGl0cyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4NT1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5NC1cdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExOTU9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjUzLVx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGN0eCwgcHJpdikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1NS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzgxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTkZUIFBheWxvYWQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5mdF9wYXlsb2FkX3NldF9pbml0YC4gSXQgc2VlbXMgbGlrZSB0aGUgZmlyc3QgdGhpbmcgaXQmIzM5O3MgZG9pbmcgaXMgY2FsbGluZyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24sIHdoaWNoIGlzIGNvbW1vbiBpbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nLiBJdCYjMzk7cyBsaWtlbHkgZW5zdXJpbmcgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbiBvciBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuCgpOb3csIHdoZXJlIGRvIHdlIGdvIGZyb20gaGVyZT8gTGV0JiMzOTtzIHNlZS4uLiBHaXZlbiB0aGUgY29udGV4dCBvZiBhIGNoZWNrc3VtIHZhbGlkYXRpb24gYW5kIG1vZGlmaWNhdGlvbiB3aXRoaW4gYSBwYWNrZXQgY29udGV4dCwgYSBuYXR1cmFsIG5leHQgcG9pbnQgdG8gaW52ZXN0aWdhdGUgaXMgdGhlIGNoZWNrc3VtIHdyaXRlIG9wZXJhdGlvbi4gSSBiZXQgaXQmIzM5O3MgcmVsZXZhbnQgdG8gaG93IHRoZSBzeXN0ZW0gKmFsbG93cyogY2hhbmdlcyB0byBiZSBtYWRlLiBUaGF0IG1lYW5zLCB0aGUgbmV4dCBwaWVjZSB0byByZWFsbHkgbG9vayBhdCBpcyBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIExldCYjMzk7cyBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTE9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDY5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzA6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcxLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTEwMz1zdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjgtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE2OTpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcwLVx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIG5mdF9wYXlsb2FkIFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaXMgY2FsbGluZyBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0IHNlZW1zIHRob3NlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHJpZ2h0PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBub24tc3RhdGljLiBMZXQgbWUganVtcCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCBjb25maXJtIHRoYXQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgbW9yZSBpbXBvcnRhbnQuIEl0JiMzOTtzIGFsd2F5cyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDM9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk0LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5OS1cdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwMS1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZXNlIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdGVjaG5pY2FsbHkgKipzdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIGBuZnRfZXhwcl9vcHNgIHJlZ2lzdHJhdGlvbiBpcyBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCoqLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcmlnaHQgbm93IEkgYW0gaW50ZXJlc3RlZCBpbiBob3cgdGhlIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBmaXRzIGluIHRvIHRoaXMgd2hvbGUgcGljdHVyZS4gVGltZSB0byBjaGVjayB3aGVyZSBgbmZ0X3BheWxvYWRfc2V0X29wc2AgaXMgdXNlZCBhbmQgc2VlIHdoYXQgY29tZXMgb2YgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NldF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyNzY9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMzA1PW5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzMC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzMxOlx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzMyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFBheWxvYWQgU2VsZWN0aW9uKioKCk9rYXksIHNvIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSBrZXkgcGllY2UuIFRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAqb3BzKiBzdHJvbmdseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzIHJlbGF0ZWQgdG8gcGF5bG9hZCBoYW5kbGluZy4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgZHluYW1pY2FsbHkgc2VsZWN0aW5nIHRoZSBvcGVyYXRpb24gc2V0LiBUbyB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGhhcHBlbmluZywgSSBuZWVkIHRvIGdldCBpbnNpZGUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2VsZWN0aW9uIGxvZ2ljLiBXaGF0IGZhY3RvcnMgYXJlIGRyaXZpbmcgdGhlIGNob2ljZSBvZiB3aGljaCBvcGVyYXRpb25zIHNldCBpcyByZXR1cm5lZD8gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW50ZXJuYWxzIG9mIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcyB0byB0cnVseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NlbGVjdF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgKlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDU6bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMDYtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTM1Mj1zdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My1cdC5uYW1lXHRcdD0gXCYjMzQ7cGF5bG9hZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU0Olx0LnNlbGVjdF9vcHNcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVx0LmlubmVyX29wc1x0PSBcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciYjMzk7cyBgbmZ0X3BheWxvYWRgIGZvciBFbnRyeSBQb2ludCBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfdHlwZWAgc3RydWN0dXJlLiBUaGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBieSBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMuIFRoZSBwcm9tcHQgY2xlYXJseSBzdGF0ZXMgdGhpcyBwcmVmZXJlbmNlIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuCgpUaGUgcGF0Y2ggSSYjMzk7bSByZXZpZXdpbmcgdG91Y2hlcyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgYm90aCBwYXJ0IG9mIHRoZSBgbmZ0X3BheWxvYWRgIGV4cHJlc3Npb24gaW4gbmV0ZmlsdGVyLiBUaGUgaW5pdGlhbCBlbnRyeSBwb2ludHMgSSBjb25zaWRlcmVkIGFyZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLiBIb3dldmVyLCB0aG9zZSBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLCBhbmQgdGhpcyBpcyB3aGVyZSB0aGUgZGlsZW1tYSBzdGFydHMuIFRoZSBwcm9tcHQgc3VnZ2VzdHMgYXZvaWRpbmcgdGhlc2UsIGJ1dCBzaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzZWQsIHRoZXkmIzM5O3JlIGxpa2VseSBub3QgaW5saW5lZCBkZXNwaXRlIGJlaW5nIHN0YXRpYywgd2hpY2ggaXMgdGhlIGtleSBkaXN0aW5jdGlvbi4gVGhleSAqaGF2ZSogZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4KCk5vdyBJJiMzOTttIGJhY2sgdG8gc3F1YXJlIG9uZSwgY2hlY2tpbmcgaWYgdGhlIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyDigJMgYW5kIGl0IGlzLiBTbywgbXkgaHVudCBjb250aW51ZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIHRocm91Z2ggYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYWdhaW4sIGhvcGluZyB0byB1bmNvdmVyIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBtb2R1bGUgdGhhdCBjb3VsZCBiZSB1c2VkIGluc3RlYWQuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IGFuZCBwcmVmZXIgdGhvc2Ugb3ZlciBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgdGhlIG9uZXMgY3VycmVudGx5IGluIHVzZSwgYXMgbG9uZyBhcyB0aGV5IHByb3ZpZGUgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlteIFxcdF0uKiBuZnRfcGF5bG9hZF8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTM9ZXh0ZXJuIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9ieXRlb3JkZXJfdHlwZTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE0OmV4dGVybiBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTUtZXh0ZXJuIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9keW5zZXRfdHlwZTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD03ND1zdHJ1Y3QgbmZ0X3BheWxvYWQge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg6NzU6XHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzXHRiYXNlOjg7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC03Ni1cdHUxNlx0XHRcdG9mZnNldDtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC04MC1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjgxOmV4dGVybiBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtODItXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTM2PXZvaWQgbmZ0X2xvb2t1cF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzNy1cdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjEzODp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTM5LVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD0xNjQ9c3RydWN0IG5mdF9pbm5lcl90dW5fY3R4IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xNzUtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNzY6aW50IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNzc6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTc4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTc3OT1lbnVtIG5mdF9keW5zZXRfYXR0cmlidXRlcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC04MDItICovXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgwMzplbnVtIG5mdF9wYXlsb2FkX2Jhc2VzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODA0LVx0TkZUX1BBWUxPQURfTExfSEVBREVSLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODE3LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDo4MTg6ZW51bSBuZnRfcGF5bG9hZF9jc3VtX3R5cGVzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODE5LVx0TkZUX1BBWUxPQURfQ1NVTV9OT05FLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODIzLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDo4MjQ6ZW51bSBuZnRfcGF5bG9hZF9jc3VtX2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODI1LVx0TkZUX1BBWUxPQURfTDRDU1VNX1BTRVVET0hEUiA9ICgxIFx1MDAzY1x1MDAzYyAwKSxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg0Mz1lbnVtIG5mdF9pbm5lcl9hdHRyaWJ1dGVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2NS0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODY2OmVudW0gbmZ0X3BheWxvYWRfYXR0cmlidXRlcyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cdE5GVEFfUEFZTE9BRF9VTlNQRUMsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgbmZ0X3RyYWNlX3ZlcmRpY3QoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoxNDQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDUtXHRcdFx0XHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyMTg6XHRYKGUsIG5mdF9wYXlsb2FkX2V2YWwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxOS1cdFgoZSwgbmZ0X2NtcF9ldmFsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0xMTQ9dW5pb24gbmZ0X2NtcF9vZmZsb2FkX2RhdGEge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTExOS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjEyMDpzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9uMmgodW5pb24gbmZ0X2NtcF9vZmZsb2FkX2RhdGEgKmRhdGEsXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMjEtXHRcdFx0ICAgIGNvbnN0IHU4ICp2YWwsIHUzMiBsZW4pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1hY19vZmYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjktXHRcdFx0XHRcdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGgpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTc0PXN0YXRpYyBpbnQgX19uZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzk6aW50IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDctXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTU5OnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYwLVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ni1cdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc3Olx0XHQgICAgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdChwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTc4LVx0XHRcdGlmICghbmZ0X3BheWxvYWRfY29weV92bGFuKGRlc3QsIHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTkzLVx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTk0Olx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTUtXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMi1cdFtORlRBX1BBWUxPQURfU1JFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ0LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNTk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjAtXHRcdFx0XHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4Ny1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXHRjYXNlIElQUFJPVE9fVENQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ3LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU0OC1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTE6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU1OmNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU2LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1Ny1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1OTpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjA6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY0OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjE1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfaW5uZXJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NDktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2lubmVyX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTEtXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjUyLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTM6XHQuaW5pdFx0XHQ9IG5mdF9wYXlsb2FkX2lubmVyX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU0Olx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NTpcdC8qIGRpcmVjdCBjYWxsIHRvIG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKS4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTYtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NjU4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfY3N1bV9yZXBsYWNlKF9fc3VtMTYgKnN1bSwgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NjQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjY1OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY3NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc3LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzA2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcxODpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiAqc3JjLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1Ni1cdFx0XHRcdCBfX3dzdW0gZnN1bSwgX193c3VtIHRzdW0sIGludCBjc3VtX29mZnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzcwLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc3MTpzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6XHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzXHRiYXNlOjg7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzczLVx0dTE2XHRcdFx0b2Zmc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODEtLyogVGhpcyBpcyBub3Qgc3RydWN0IHZsYW5faGRyLiAqL1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc4MjpzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc4My1cdF9fYmUxNlx0XHRcdGhfdmxhbl9wcm90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9Nzg4PW5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzkxOlx0c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICp2bGFuaDtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTItXHRfX2JlMTYgdmxhbl9wcm90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA1LVx0XHR9IGVsc2UgaWYgKGxlbiA9PSA0KSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODA2Olx0XHRcdHZsYW5oID0gKHN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciAqKXNyYztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04MDctXHRcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5oLVx1MDAzZWhfdmxhbl9wcm90byxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9ODM2PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODM3Olx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04MzgtXHRcdFx0XHRjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9ODgyPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODgzOlx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04ODQtXHRcdFx0XHRjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTAzLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkwNDpzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYXJwKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTA1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTIzPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTI0Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjUtXHRcdFx0XHQgICBjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ1Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDYtXHRcdFx0XHQgICBjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTYyPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5NjM6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTY0LVx0XHRcdCAgICBjb25zdCB1MzIgKnNyYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTg1PXN0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5MzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0Olx0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMwLSAqL1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwMzE6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzItXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDUxOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUyLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNjktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzE6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc2LVx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc3Olx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzgtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3OTpcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwOTI9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwOTM6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA5NC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDItXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTEwMzpzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNC1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDYte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMDc6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVx0Y29uc3QgdTMyICpzcmMgPSBcdTAwMjZyZWdzLVx1MDAzZWRhdGFbcHJpdi1cdTAwM2VzcmVnXTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExOC1cdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTExOTpcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjAtXHRcdFx0aWYgKCFuZnRfcGF5bG9hZF9zZXRfdmxhbihzcmMsIHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0NS1cdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNDY6XHRcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNDctXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjgtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE2OTpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTcwOlx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MS1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3My1cdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTc0Olx0XHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NS1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4NS1cdFx0aWYgKHBrdC1cdTAwM2VmcmFnb2ZmID09IDAgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE4NjpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTg3LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk0LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTktXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyMDA6XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAxLVx0aW50IGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc3LVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBib29sIHJlc2V0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzgte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzk6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTg6XHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjk5Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAwOlx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAxOlx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9zZXRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzAyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDU9bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA3LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA4Olx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlcyBiYXNlO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMDktXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTEtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1MjpzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My1cdC5uYW1lXHRcdD0gXCYjMzQ7cGF5bG9hZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU0Olx0LnNlbGVjdF9vcHNcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVx0LmlubmVyX29wc1x0PSBcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NjpcdC5wb2xpY3lcdFx0PSBuZnRfcGF5bG9hZF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Ny1cdC5tYXhhdHRyXHQ9IE5GVEFfUEFZTE9BRF9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgQVBJKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZmluZCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhlIHBheWxvYWQgZnVuY3Rpb25hbGl0eSBpbiBOZXRmaWx0ZXIuIEkgc2VlIHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgcmVnaXN0ZXJlZCB3aXRoaW4gYG5mdF9wYXlsb2FkX3NldF9vcHNgLiBUaGlzIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBzdHJ1Y3R1cmUgaXMgdGhlbiBzZWxlY3RlZCBieSBgbmZ0X3BheWxvYWRfc2VsZWN0X29wc2AsIHdoaWNoIGl0c2VsZiBpcyByZWdpc3RlcmVkIHdpdGhpbiBgbmZ0X3BheWxvYWRfdHlwZWAuIEFuZCBmaW5hbGx5LCBgbmZ0X3BheWxvYWRfdHlwZWAgZ2V0cyByZWdpc3RlcmVkIGluIGBuZl90YWJsZXNfY29yZS5jYCBvciBhIHNpbWlsYXIgY29yZSBmaWxlLgoKTXkgZmlyc3QgaW1wcmVzc2lvbiB3YXMgdG8gbG9vayBmb3IgdGhlIGtleSBlbnRyeSBwb2ludHMgdGhhdCBhcmUgKm5vdCogc3RhdGljLCBzaW5jZSBJIGtub3cgdGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhcyBleHRlcm5hbCBBUEkgZW50cnkgcG9pbnRzLiBJIG5vdGljZWQgYG5mdF9wYXlsb2FkX2V2YWxgIGlzIG5vdCBzdGF0aWMgKGl0JiMzOTtzIGRlY2xhcmVkIGluIGBuZl90YWJsZXNfY29yZS5oYCwgYW5kIGRlZmluZWQgaW4gYG5mdF9wYXlsb2FkLmNgKS4gQWhhLCBidXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCAqaXMqIHN0YXRpYyEgSG1tLiBTbywgYG5mdF9wYXlsb2FkX2V2YWxgIG11c3QgYmUgZm9yIHJlYWRpbmcgcGF5bG9hZCBkYXRhLiBBbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBmb3Igd3JpdGluZyBwYXlsb2FkIGRhdGEuCgpJIGluaXRpYWxseSB0aG91Z2h0IHRoYXQgc2luY2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgaW5kaXJlY3RseSBiZWluZyBtb2RpZmllZCwgSSBzaG91bGQgYWxzbyBsaXN0IGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgb3IgbWF5YmUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgLgoKVGhlbiBpdCBoaXRzIG1lOiBUaGUgcHJvbXB0IHN0cmVzc2VzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQuIFRoZSBmYWN0IHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgcmVnaXN0ZXJlZCBpbiBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5IGFyZSAqbm90KiBpbmxpbmVkLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gU28sIGxpc3RpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGNvbXBsZXRlbHkgdmFsaWQsIGRlc3BpdGUgdGhlIHN0YXRpYyBrZXl3b3JkLgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFRoZSBjb2RlIGlzIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYwLVx0XHRcdFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNzc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzgtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIEVUSF9BTEVOKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk4LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDAtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA3Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSAmIzQzOyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzEtXHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ3LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY0LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzczLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNy1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzMy1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNS1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM2LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzc6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDctXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYxOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYyLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDczLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzUtXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDg5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAxLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMy1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwOS1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEwOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMS1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVx0Y2FzZSBJUFBST1RPX1VEUDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTM6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTE0LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIxLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMy1cdFx0XHQgICAgICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMC1cdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMTpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMi1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMzLVx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNi1cdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mzc6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzgtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDctXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1MS1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1My19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NTU9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYwLVx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcdC5vZmZsb2FkXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDU9bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzQ4LVx0ZWxzZVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNDk6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBORl9UQUJMRVNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLiBNeSBleHBlcnRpc2UgaXMgc3VjaCB0aGF0IEkga25vdyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIHN0cnVjdHVyZSBwcmV0dHkgd2VsbCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIGlzIHRoZSBwbGFjZSB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE5ldGZpbHRlciwgd2hpY2ggaXMgY2xlYXJseSB3aGF0IGBORl9UQUJMRVNgIGFsbHVkZXMgdG8uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgb3B0aW9uIHRvIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNS0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjY6bWVudWNvbmZpZyBORl9UQUJMRVNfQlJJREdFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTctXHRkZXBlbmRzIG9uIEJSSURHRSBcdTAwMjZcdTAwMjYgTkVURklMVEVSIFx1MDAyNlx1MDAyNiBORl9UQUJMRVNcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1pZiBORl9UQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0LVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU6Y29uZmlnIE5GX1RBQkxFU19JUFY0XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7SVB2NCBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTYyPWVuZGlmICMgTkZfVEFCTEVTX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTYzLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NjQ6Y29uZmlnIE5GX1RBQkxFU19BUlBcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtBUlAgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yOT1pZiBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTMwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MzE6Y29uZmlnIE5GX1RBQkxFU19JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NiBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTkKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogNTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBuZXRmaWx0ZXIgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlnIGZvciB0aGlzIGlzIGBORl9UQUJMRVNgLiBMZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgpSaWdodCwgbG9va2luZyB0aHJvdWdoIHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBtYXJrZWQgYXMgYHN0YXRpY2AsIGJ1dCB0aGV5JiMzOTtyZSAqcmVnaXN0ZXJlZCogd2l0aGluIGBuZnRfcGF5bG9hZF9zZXRfb3BzYC4gVGhhdCBtZWFucyB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLCBhbmQgdGhlcmVmb3JlIGFyZSB2YWxpZCBlbnRyeXBvaW50cyBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJIHJlY2VpdmVkLiBOb3csIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCBpcyBzdGF0aWMgYnV0IHJlZ2lzdGVyZWQgd2l0aGluIGBuZnRfcGF5bG9hZF90eXBlYC4gYG5mdF9wYXlsb2FkX3R5cGVgIGl0c2VsZiBpcyBub24tc3RhdGljLiBUaGVuIGBuZnRfcGF5bG9hZF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX2lubmVyX2V2YWxgIGFyZSBhbHNvIG5vbi1zdGF0aWMsIGJ1dCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLiBPa2F5LCBzbyBJJiMzOTtsbCBiZSBsaXN0aW5nIHRob3NlOiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLgoKV2FpdCwgdGhlIHByb21wdCBzdGF0ZWQgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsgU2luY2UgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAqYXJlbiYjMzk7dCogaW5saW5lZCwgZXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgbWFya2VkIGBzdGF0aWNgLCB0aGV5JiMzOTtyZSBwZXJmZWN0bHkgZmluZSBjYW5kaWRhdGVzLgoKTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgdW5kZXJzdGFuZCB3aGF0IHRoZSBwYXRjaCAqZG9lcyouIEl0JiMzOTtzIGFib3V0IHZhbGlkYXRpbmcgdGhlIGBjc3VtX29mZnNldGAgd2hlbiB3cml0aW5nIHRvIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaG93IGNoZWNrc3VtcyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBuZXRmaWx0ZXIsIGFuZCB0aGVyZWZvcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIChuZnRhYmxlcyksIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4KCk15IHByaW1hcnkgY29uZmlndXJhdGlvbiB3aWxsIGJlIGBORl9UQUJMRVNgLCBhbmQgdGhlIGZ1bmN0aW9ucyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiBmb3IgZnV6emluZyBhcmUsIGFzIGRlY2lkZWQsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZS4uLkkgd2FudCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1aXRhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgYXJlYS4gV2hhdCBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YD8gVGhleSBhcmUgc3RhdGljIGFuZCBpbmxpbmVkLCBzbyB0aGF0IHNvbGlkaWZpZXMgbXkgZWFybGllciBjaG9pY2UuCgpOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgY29uZmlndXJhdGlvbi13aXNlIEkgc2hvdWxkIGNvbnNpZGVyPyBgTkZfVEFCTEVTYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBvbmUsIGFuZCBJICp0aGluayogSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IGBORl9UQUJMRVNgIGFsc28gaW1wbGljaXRseSBpbmNsdWRlcyBgTkVURklMVEVSYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LYCwgZ2l2ZW4gdGhlIGRlcGVuZGVuY3kgYW5kIHNlbGVjdGlvbiByZWxhdGlvbnNoaXBzLiBZZXAsIGBORl9UQUJMRVNgIGlzIHRoZSBvbmx5IG9uZSBJIG5lZWQuCgpPa2F5LCBJJiMzOTttIHJlYWR5IHRvIHdyaXRlIHVwIHRoZSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciYjMzk7cyBuZnRfcGF5bG9hZCBtb2R1bGUgdG8gYWRkIHZhbGlkYXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cyB3aGVuIG1hbmdsaW5nIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciYjMzk7cyBuZnRfcGF5bG9hZCBtb2R1bGUgdG8gYWRkIHZhbGlkYXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cyB3aGVuIG1hbmdsaW5nIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBgY3N1bV9vZmZzZXRgIGF0dHJpYnV0ZSBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgbWFuZ2xpbmcgdG8gcHJldmVudCBhcmJpdHJhcnkgb2Zmc2V0cyBmcm9tIGJlaW5nIHVzZWQgd2hlbiB1cGRhdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIGFsbG93ZWQgYm9ndXMgb2Zmc2V0cyB3aGljaCBjb3VsZCBsZWFkIHRvIHBhY2tldCBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGNhdXNlZCBieSBpbnZhbGlkIG9mZnNldHMsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0IGhlcmUgc2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgY29uc3VtZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjFhYjhmYjEyN2YwNTdhMTNiZDFhZjZmMzZlMzQ3ODZiOGFlNzJlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDIzOjEyOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTEwMDgsMTEgJiM0MzsxMDA4LDEzIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciAmIzM0O3JlLXVwZGF0ZSYjMzQ7IG9mIEw0IGNoZWNrc3VtICovCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJLyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzCi0JCSAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuCi0JCSAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLgotCQkgKi8KLQkJcmV0dXJuIHRydWU7CiYjNDM7CQkvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqLwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6CkBAIC0xMDQ2LDYgJiM0MzsxMDQ4LDI1IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiYjNDM7CQkJCQkgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpCiYjNDM7ewomIzQzOwlpZiAoIShwa3QtJmd0O2ZsYWdzICZhbXA7IE5GVF9QS1RJTkZPX0w0UFJPVE8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHBrdC0mZ3Q7dHByb3QpIHsKJiM0MzsJY2FzZSBJUFBST1RPX1RDUDoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CiYjNDM7CWNhc2UgSVBQUk9UT19VRFA6CiYjNDM7CWNhc2UgSVBQUk9UT19VRFBMSVRFOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX0lDTVBWNjoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KQogewpAQCAtMTA1NSw5ICYjNDM7MTA3NiwxMCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCWNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6CiAJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7CiAJY2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOgomIzQzOwkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjoKLQkJLyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlCi0JCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KJiM0MzsJCS8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlCiYjNDM7CQkgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuCiAJCSAqLwogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB2YWxpZGF0aW5nIGBjc3VtX29mZnNldGAgd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCBmdW5jdGlvbnMuIFRoZSBpbnRlbnRpb24gaXMgdG8gbGltaXQgdGhlc2Ugb2Zmc2V0cyB0byBsZWdpdGltYXRlIGNoZWNrc3VtIGZpZWxkcyB3aXRoaW4gYHRjcGhkcmAsIGB1ZHBoZHJgLCBhbmQgYGljbXA2aGRyYCBzdHJ1Y3R1cmVzLiBUaGlzIG1ha2VzIHNlbnNlOyBwcmV2ZW50aW5nIGFyYml0cmFyeSBvZmZzZXRzIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhlYWRlciBtYW5pcHVsYXRpb24gYXR0YWNrcy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBzdGVtbWluZyBmcm9tIHRoZXNlIGNoYW5nZXMuIFRoZSBwcmlvciBjb2RlIG1pZ2h0IGhhdmUgYWxsb3dlZCB3cml0ZXMgdG8gYW55d2hlcmUgd2l0aGluIHRoZSBwYWNrZXQsIGFuZCAqbWF5YmUqIGV2ZW4gcmVhZHMuIFdhaXQsIG5vLCBgbmZ0X3BheWxvYWRfc2V0YCBpcyBzcGVjaWZpY2FsbHkgZm9yIHdyaXRpbmcsIHNvIHRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHByZXZlbnRpbmcgYXJiaXRyYXJ5IHdyaXRlcy4KClRoZSBwYXRjaCBmb2N1c2VzIG9uIHZhbGlkYXRpb24gZm9yIGNoZWNrc3VtIHdyaXRpbmcuIFNvLCBpdCYjMzk7cyBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gaG93IGNoZWNrc3VtcyBhcmUgd3JpdHRlbiBvciBwYXlsb2FkIGRhdGEgaXMgbWFuaXB1bGF0ZWQuIFRoaW5raW5nIGFib3V0IHRoaXMsIHdyaXRpbmcgdG8gYSBwYWNrZXQgdXN1YWxseSAqZG9lc24mIzM5O3QqIGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/CgpTdGlsbCwgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBmb3IgcmVhZHMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZWJhc2UgZm9yIHVzYWdlcyBvZiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIHJlZmVyZW5jZXMgdG8gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgc28gSSBjYW4gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24gYWJvdXQgcmVhZC1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA1MT1zdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNjktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzEtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTAzPXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE2OC1cdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTY5Olx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzAtXHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENoZWNrc3VtIE9mZnNldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmZ0X3BheWxvYWQuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgYXMgd2VsbC4gUmlnaHQsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgdmFsaWRhdGUgdGhlIG9mZnNldCB3aGVuIHdlJiMzOTtyZSB0d2Vha2luZyBwYWNrZXQgcGF5bG9hZHMgd2l0aGluIG5ldGZpbHRlciwgcGFydGljdWxhcmx5IGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgaGFyZGVuaW5nIHRoZSBzeXN0ZW0gYnkgbGltaXRpbmcgdGhlIGBjc3VtX29mZnNldGAgdG8gb25seSAqa25vd24qIGFuZCBzYWZlIGxvY2F0aW9ucywgbGlrZSB3aGVyZSB0aGUgVENQIGhlYWRlciBjaGVja3N1bSByZXNpZGVzIChgb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spYCkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBhIGdvb2QgcHJhY3RpY2UuIFByZXZlbnRpbmcgYXJiaXRyYXJ5IG9mZnNldHMgaXMgY3J1Y2lhbC4gSXTigJlzIGEgY2xhc3NpYyBkZWZlbnNlIGFnYWluc3QgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIGNvcnJ1cHRpbmcgY3JpdGljYWwgcGFja2V0IGhlYWRlciBpbmZvcm1hdGlvbi4gVGhlIG1haW4gcmlzayBoZXJlIGlzbiYjMzk7dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGVyIHNlLiBUaGUgdGhyZWF0IGlzIGFib3V0IHByZXZlbnRpbmcgYSBtYWxpY2lvdXMgdXNlciBvciBhIGJ1Z2d5IHJ1bGUgZnJvbSBvdmVyd3JpdGluZyB2aXRhbCBkYXRhIHdpdGhpbiB0aGUgcGFja2V0IGJ1ZmZlciAoYHNrYmApLiBLQVNBTiB3b3VsZCBsaWtlbHkgY2F0Y2ggYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlmIGl0IGhhcHBlbnMsIGFuZCBhIGNvcnJ1cHRlZCBwYWNrZXQsIGFsdGhvdWdoIG5vdCBpbW1lZGlhdGVseSBmbGFnZ2VkIGFzIGFuIGlzc3VlIGJ5IHNhbml0aXplcnMsIHdvdWxkIGluZGljYXRlIHRoYXQgYSBsb2dpYyBidWcgaXMgYXQgcGxheS4gSXQmIzM5O3MgYWJvdXQgbWVtb3J5IGNvcnJ1cHRpb24sIG5vdCBkaXJlY3RseSBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLgoKV2FpdCwgdGhvdWdo4oCmIGNvdWxkIGFuICppbnZhbGlkKiBvZmZzZXQgaW5hZHZlcnRlbnRseSBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBjaGVja3N1bSB1cGRhdGUgbG9naWMgKnJlYWRzKiB0aGUgb2xkIHZhbHVlIGJlZm9yZSAqd3JpdGluZyogdGhlIG5ldyBvbmUuIElmIHRoZSBvZmZzZXQgaXMgc29tZWhvdyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHZhbGlkIGRhdGEgd2l0aGluIHRoZSBgc2tiYCwgaXTigJlzICpwb3NzaWJsZSogaXQgbWlnaHQgdHJ5IHRvIHJlYWQgc29tZXRoaW5nIHRoYXQmIzM5O3Mgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIEl04oCZcyBsZXNzIGxpa2VseSwgdGhvdWdoLCBzaW5jZSB0aGUgc2tiIGRhdGEgaXRzZWxmIGlzLCBpbiBnZW5lcmFsLCBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrIG9yIHVzZXItc3BhY2UgYXBwbGljYXRpb25zLgoKQnV0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIHZhbHVlcyB0aGUgb2Zmc2V0IGNhbiB0YWtlLiBUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoaXMgYGNzdW1fb2Zmc2V0YCB0byBvbmx5IGtub3duIGFuZCBzcGVjaWZpYyB2YWx1ZXMuIEdvb2QuIFRoYXQgc2hvdWxkIHByZXZlbnQgdGhlIHBvc3NpYmlsaXR5IG9mIHRob3NlIGtpbmRzIG9mIHVuaW50ZW5kZWQgcmVhZHMuCgpJ4oCZbSBnb2luZyB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgYW5kIGRvdWJsZS1jaGVjayBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHRvIHNlZSBob3cgdGhvc2UgY2hlY2tzIGFyZSBlbmZvcmNlZCBhbmQgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdGRlZmF1bHQ6XG4xMTUxOlx0XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XG4xMTUyOlx0XHRcdGdvdG8gZXJyO1xuMTE1MzpcdFx0fVxuMTE1NDpcdFxuMTE1NTpcdFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgJiM0MzsgcHJpdi1cdTAwM2Vjc3VtX29mZnNldDtcbjExNTY6XHRcdG9mZnNldCAmIzQzOz0gcHJpdi1cdTAwM2VvZmZzZXQ7XG4xMTU3Olx0XG4xMTU4Olx0XHRpZiAoKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIFx1MDAyNlx1MDAyNlxuMTE1OTpcdFx0ICAgICgocHJpdi1cdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVIgXHUwMDI2XHUwMDI2XG4xMTYwOlx0XHQgICAgICBwcml2LVx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKSB8fFxuMTE2MTpcdFx0ICAgICBza2ItXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpKSB7XG4xMTYyOlx0XHRcdGlmIChvZmZzZXQgJiM0MzsgcHJpdi1cdTAwM2VsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4xMTYzOlx0XHRcdFx0Z290byBlcnI7XG4xMTY0Olx0XG4xMTY1Olx0XHRcdGZzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHByaXYtXHUwMDNlbGVuLCAwKTtcbjExNjY6XHRcdFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXHUwMDNlbGVuLCAwKTtcbjExNjc6XHRcbjExNjg6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcdTAwMjZcdTAwMjZcbjExNjk6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbjExNzA6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuMTE3MTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzIFx1MDAyNlx1MDAyNlxuMTE3NDpcdFx0XHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXHUwMDNjIDApXG4xMTc1Olx0XHRcdFx0Z290byBlcnI7XG4xMTc2Olx0XHR9XG4xMTc3Olx0XG4xMTc4Olx0XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG1heChvZmZzZXQgJiM0MzsgcHJpdi1cdTAwM2VsZW4sIDApKSB8fFxuMTE3OTpcdFx0ICAgIHNrYl9zdG9yZV9iaXRzKHNrYiwgb2Zmc2V0LCBzcmMsIHByaXYtXHUwMDNlbGVuKSBcdTAwM2MgMClcbjExODA6XHRcdFx0Z290byBlcnI7XG4xMTgxOlx0XG4xMTgyOlx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9TQ1RQIFx1MDAyNlx1MDAyNlxuMTE4MzpcdFx0ICAgIHBrdC1cdTAwM2V0cHJvdCA9PSBJUFBST1RPX1NDVFAgXHUwMDI2XHUwMDI2XG4xMTg0Olx0XHQgICAgc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4xMTg1Olx0XHRcdGlmIChwa3QtXHUwMDNlZnJhZ29mZiA9PSAwIFx1MDAyNlx1MDAyNlxuMTE4NjpcdFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxuMTE4NzpcdFx0XHRcdGdvdG8gZXJyO1xuMTE4ODpcdFx0fVxuMTE4OTpcdFxuMTE5MDpcdFx0cmV0dXJuO1xuMTE5MTpcdGVycjpcbjExOTI6XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHRzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4xMTk2Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4xMTk3Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbjExOTg6XHR7XG4xMTk5Olx0XHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA3CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDU1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBuZXRmaWx0ZXIgcGF0Y2ggYW5kIHdoeSBJJiMzOTttIHNldHRpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1vZGlmaWVzIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgaW50cm9kdWNlcyBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgaW4gYG5mdF9wYXlsb2FkLmNgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGBjc3VtX29mZnNldGAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB0cmFuc3BvcnQgaGVhZGVyIChgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmApLCB0byBrbm93biwgc2FmZSBvZmZzZXRzIHdpdGhpbiB0aGUgdHJhbnNwb3J0IGhlYWRlcnMgKGxpa2UgYHRjcGhkcmAsIGB1ZHBoZHJgLCBhbmQgYGljbXA2aGRyYCkuCgpUaGUgYWRkZWQgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIGlzIGEgcnVudGltZSBjaGVjayB3aXRoaW4gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBjaGVja3N1bXMgYXJlIHdyaXR0ZW4gYW5kIHVwZGF0ZWQgaW4gdGhlIG5ldGZpbHRlciBwcm9jZXNzLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHByZXZlbnRpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJiMzOTtyZSBtYW5nbGluZyB0cmFuc3BvcnQgaGVhZGVycy4KClRoZSBjcml0aWNhbCBpc3N1ZSB0aGlzIGFkZHJlc3NlcyBpcyBwcmV2ZW50aW5nIGFuIGF0dGFja2VyIGZyb20gdXNpbmcgYSBjcmFmdGVkLCBib2d1cyBgY3N1bV9vZmZzZXRgIHRvIHdyaXRlIHRoZSBjaGVja3N1bSB0byBhbiBhcmJpdHJhcnksIG91dC1vZi1ib3VuZHMgb2Zmc2V0IHdpdGhpbiB0aGUgcGFja2V0JiMzOTtzIGRhdGEgYnVmZmVyICh0aGUgYHNrYmApLiBUaGlzIGlzIGEgY2xlYXIgbWVtb3J5IGNvcnJ1cHRpb24gLyBvdXQtb2YtYm91bmRzIHdyaXRlIHZ1bG5lcmFiaWxpdHkuIEhvd2V2ZXIsIGl0JiMzOTtzICpub3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gS0FTQU4gd291bGQgbGlrZWx5IGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlcyBpZiB0aGV5IGdvIGJleW9uZCB0aGUgYHNrYmAgYnVmZmVyLCBidXQgaWYgdGhlIHdyaXRlIGlzIHdpdGhpbiB0aGUgYnVmZmVyIGl0c2VsZiwgaXQgcmVzdWx0cyBpbiBwYWNrZXQgY29ycnVwdGlvbiDigJMgc29tZXRoaW5nIEtNU0FOIGlzbiYjMzk7dCBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZSBwYXRjaCBpcyBmaXhpbmcgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgb2xkIGNvZGUgbWlnaHQgaGF2ZSBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIG92ZXJ3cml0ZSBkYXRhIHdpdGhpbiBhIHBhY2tldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvcnJlY3QsIGJlY2F1c2UgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0IGNvdWxkIGhhdmUgYSB2ZXJ5IGxvdyBpbXBhY3Qgb24gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzIHBhdGNoJiMzOTtzIGJlaGF2aW91ci4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGlzIHVzZWQgZHVyaW5nIHJ1bGUgY29uZmlndXJhdGlvbiwgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCBpcyB1c2VkIGR1cmluZyBwYWNrZXQgZXZhbHVhdGlvbi4KCkFmdGVyIGEgZG91YmxlLWNoZWNrLCBpdCYjMzk7cyBjbGVhciB0aGUgcHJvYmxlbSBpcyB0aGUgcG90ZW50aWFsIGNvcnJ1cHRpb24gb2YgTDQgb3IgcGF5bG9hZCBoZWFkZXJzIGR1ZSB0byBhIGJvZ3VzIGBjc3VtX29mZnNldGAuIFRoZSBjb21tZW50IGFsc28gbWVudGlvbnMgdGhlIG9sZCBjb2RlIGNvdWxkIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBoZWFkZXJzLiBUaGlzIGlzbiYjMzk7dCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGFueSBjb250cm9sIGZsb3cgaXNzdWVzLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU4gPSBmYWxzZWAgaXMgdGhlIGFwcHJvcHJpYXRlIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgYGNzdW1fb2Zmc2V0YCBhdHRyaWJ1dGUgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIHRvIHByZXZlbnQgYXJiaXRyYXJ5IG9mZnNldHMgZnJvbSBiZWluZyB1c2VkIHdoZW4gdXBkYXRpbmcgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMuIFRoZSBwcmV2aW91cyBiZWhhdmlvciBhbGxvd2VkIGJvZ3VzIG9mZnNldHMgd2hpY2ggY291bGQgbGVhZCB0byBwYWNrZXQgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBjYXVzZWQgYnkgaW52YWxpZCBvZmZzZXRzLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdCBoZXJlIHNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGNvbnN1bWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgdGhlIGBjc3VtX29mZnNldGAgYXR0cmlidXRlIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBtYW5nbGluZyB0byBwcmV2ZW50IGFyYml0cmFyeSBvZmZzZXRzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHVwZGF0aW5nIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGUgcHJldmlvdXMgYmVoYXZpb3IgYWxsb3dlZCBib2d1cyBvZmZzZXRzIHdoaWNoIGNvdWxkIGxlYWQgdG8gcGFja2V0IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgY2F1c2VkIGJ5IGludmFsaWQgb2Zmc2V0cywgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQgaGVyZSBzaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBjb25zdW1lZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjowNy45NzM1MjE2NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4NDMxMDYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgdGhlIGBjc3VtX29mZnNldGAgYXR0cmlidXRlIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBtYW5nbGluZyB0byBwcmV2ZW50IGFyYml0cmFyeSBvZmZzZXRzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHVwZGF0aW5nIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGUgcHJldmlvdXMgYmVoYXZpb3IgYWxsb3dlZCBib2d1cyBvZmZzZXRzIHdoaWNoIGNvdWxkIGxlYWQgdG8gcGFja2V0IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgY2F1c2VkIGJ5IGludmFsaWQgb2Zmc2V0cywgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQgaGVyZSBzaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBjb25zdW1lZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlcidzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MDcuOTczNTI3MDY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEwOTczMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMWFiOGZiMTI3ZjA1N2ExM2JkMWFmNmYzNmUzNDc4NmI4YWU3MmVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDIzOjEyOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTEwMDgsMTEgKzEwMDgsMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXFxuLVxcdFxcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXFxuLVxcdFxcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5AQCAtMTA0Niw2ICsxMDQ4LDI1IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4re1xcbitcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbitcXHRjYXNlIElQUFJPVE9fVENQOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbitcXHRjYXNlIElQUFJPVE9fVURQOlxcbitcXHRjYXNlIElQUFJPVE9fVURQTElURTpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcXG4rXFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuIHtcXG5AQCAtMTA1NSw5ICsxMDc2LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuIFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4rXFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuLVxcdFxcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxcbi1cXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuK1xcdFxcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXFxuK1xcdFxcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjA4LjQ2NTMxMjI4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3OTUwMzE3NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlcidzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjFhYjhmYjEyN2YwNTdhMTNiZDFhZjZmMzZlMzQ3ODZiOGFlNzJlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDIzOjEyOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi43MGY3MGE2NWUzMjdmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0xMDA4LDExICsxMDA4LDEzIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwicmUtdXBkYXRlXCIgb2YgTDQgY2hlY2tzdW0gKi9cbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4tXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4tXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXG4rXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgKzEwNDgsMjUgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbit7XG4rXHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuK1x0Y2FzZSBJUFBST1RPX1RDUDpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuK1x0Y2FzZSBJUFBST1RPX1VEUDpcbitcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4ge1xuQEAgLTEwNTUsOSArMTA3NiwxMCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbiBcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbitcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuLVx0XHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcbi1cdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuK1x0XHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxuK1x0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjA4LjQ2NTMxMzU5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDg3Njc5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ2hlY2tzdW0gT2Zmc2V0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGhhbmRsaW5nIGNoZWNrc3VtIG9mZnNldHMsIHdoaWNoIG1lYW5zIHdlJ3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgZmlsdGVyaW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB2YWxpZGF0aW5nIHRoZSBgY3N1bV9vZmZzZXRgIHdoZW4gd3JpdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy5cblxuSSBzZWUgdGhhdCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBzdWdnZXN0cyBpdCBkZWFscyB3aXRoIHRoZSBnZW5lcmFsIG9rYXktbmVzcyBvZiBjaGVja3N1bSB3cml0ZXMuXG5cblRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIGlzIGhlbHBmdWwgdG8ga25vdy4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlc2UuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRgIG1vZHVsZSBhbmQgdGhlIGJyb2FkZXIgbmV0ZmlsdGVyIGZyYW1ld29yay4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIHNlbnNlIG9mIGhvdyB0aGlzIHZhbGlkYXRpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSXQncyBsaWtlbHkgdGhpcyB2YWxpZGF0aW9uIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQvb3IgcGVyZm9ybWFuY2UsIGdpdmVuIGl0cyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MTMuMTE0MDg0NTc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODI2OTk2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTg1PXN0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5MzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5NC1cXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTE5NT1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1My1cXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MTUuNjk2Nzg5Mjg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NjE4Njg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTkZUIFBheWxvYWQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAuIEl0IHNlZW1zIGxpa2UgdGhlIGZpcnN0IHRoaW5nIGl0J3MgZG9pbmcgaXMgY2FsbGluZyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiwgd2hpY2ggaXMgY29tbW9uIGluIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcuIEl0J3MgbGlrZWx5IGVuc3VyaW5nIGEgdmFsaWQgY29uZmlndXJhdGlvbiBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb24gb3IgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cbk5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSBoZXJlPyBMZXQncyBzZWUuLi4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBjaGVja3N1bSB2YWxpZGF0aW9uIGFuZCBtb2RpZmljYXRpb24gd2l0aGluIGEgcGFja2V0IGNvbnRleHQsIGEgbmF0dXJhbCBuZXh0IHBvaW50IHRvIGludmVzdGlnYXRlIGlzIHRoZSBjaGVja3N1bSB3cml0ZSBvcGVyYXRpb24uIEkgYmV0IGl0J3MgcmVsZXZhbnQgdG8gaG93IHRoZSBzeXN0ZW0gKmFsbG93cyogY2hhbmdlcyB0byBiZSBtYWRlLiBUaGF0IG1lYW5zLCB0aGUgbmV4dCBwaWVjZSB0byByZWFsbHkgbG9vayBhdCBpcyBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIExldCdzIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjoxOS4wNTI5NzkwNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTg3NTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUxPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDcwOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzEtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTAzPXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTY4LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNjk6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcwLVxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MjEuNDE4ODYxMDYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODQ5ODY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyB0aGUgbmZ0X3BheWxvYWQgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIGNhbGxpbmcgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUaGF0IG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBJdCBzZWVtcyB0aG9zZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCByaWdodD8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbm9uLXN0YXRpYy4gTGV0IG1lIGp1bXAgaW50byBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBhbmQgY29uZmlybSB0aGF0IHRvIGJlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgbW9yZSBpbXBvcnRhbnQuIEl0J3MgYWx3YXlzIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjI0LjY1NzM2NDY0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMzczNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTAzPXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTk1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5Ni1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyOTktXFx0LmV2YWxcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAwOlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwMS1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjI2LjgwODc0NDE5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTExNDQ2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGZ1bmN0aW9ucy4gVGhleSdyZSB0ZWNobmljYWxseSAqKnN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aGUgYG5mdF9leHByX29wc2AgcmVnaXN0cmF0aW9uIGlzIGhvdyB0aGV5J3JlIGV4cG9zZWQqKi4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcmlnaHQgbm93IEkgYW0gaW50ZXJlc3RlZCBpbiBob3cgdGhlIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBmaXRzIGluIHRvIHRoaXMgd2hvbGUgcGljdHVyZS4gVGltZSB0byBjaGVjayB3aGVyZSBgbmZ0X3BheWxvYWRfc2V0X29wc2AgaXMgdXNlZCBhbmQgc2VlIHdoYXQgY29tZXMgb2YgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjozMC4xOTk4OTIxOTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDg4NTQ1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfc2V0X29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3Nj1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI5NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMzA1PW5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzMwLVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzMxOlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjMyLjYwODgxMTU0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQyNjM1Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgUGF5bG9hZCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBgbmZ0X3BheWxvYWRfc2VsZWN0X29wc2AgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBgbmZ0X3BheWxvYWRfc2V0X29wc2Agc3RydWN0dXJlLiBUaGF04oCZcyB0aGUga2V5IHBpZWNlLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCAqb3BzKiBzdHJvbmdseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMgcmVsYXRlZCB0byBwYXlsb2FkIGhhbmRsaW5nLiBTZWVtcyBsaWtlIHdlJ3JlIGR5bmFtaWNhbGx5IHNlbGVjdGluZyB0aGUgb3BlcmF0aW9uIHNldC4gVG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGhhcHBlbmluZywgSSBuZWVkIHRvIGdldCBpbnNpZGUgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2VsZWN0aW9uIGxvZ2ljLiBXaGF0IGZhY3RvcnMgYXJlIGRyaXZpbmcgdGhlIGNob2ljZSBvZiB3aGljaCBvcGVyYXRpb25zIHNldCBpcyByZXR1cm5lZD8gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbnRlcm5hbHMgb2YgdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIHRvIHRydWx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTI6MzYuMTUxNDUwNTEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQzMzI1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX3NlbGVjdF9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgKlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA1Om5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNi1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTM1Mj1zdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTMtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJwYXlsb2FkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NDpcXHQuc2VsZWN0X29wc1xcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1NS1cXHQuaW5uZXJfb3BzXFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfaW5uZXJfb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjozOC40OTQ3ODA3MDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4ODU1NDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyJ3MgYG5mdF9wYXlsb2FkYCBmb3IgRW50cnkgUG9pbnQgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgbmZ0X3BheWxvYWRfc2VsZWN0X29wc2AgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZF90eXBlYCBzdHJ1Y3R1cmUuIFRoZSBnb2FsIGlzIHRvIG9wdGltaXplIGJ5IHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhlIHByb21wdCBjbGVhcmx5IHN0YXRlcyB0aGlzIHByZWZlcmVuY2Ugb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuVGhlIHBhdGNoIEknbSByZXZpZXdpbmcgdG91Y2hlcyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgYm90aCBwYXJ0IG9mIHRoZSBgbmZ0X3BheWxvYWRgIGV4cHJlc3Npb24gaW4gbmV0ZmlsdGVyLiBUaGUgaW5pdGlhbCBlbnRyeSBwb2ludHMgSSBjb25zaWRlcmVkIGFyZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLiBIb3dldmVyLCB0aG9zZSBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLCBhbmQgdGhpcyBpcyB3aGVyZSB0aGUgZGlsZW1tYSBzdGFydHMuIFRoZSBwcm9tcHQgc3VnZ2VzdHMgYXZvaWRpbmcgdGhlc2UsIGJ1dCBzaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzZWQsIHRoZXkncmUgbGlrZWx5IG5vdCBpbmxpbmVkIGRlc3BpdGUgYmVpbmcgc3RhdGljLCB3aGljaCBpcyB0aGUga2V5IGRpc3RpbmN0aW9uLiBUaGV5ICpoYXZlKiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Ob3cgSSdtIGJhY2sgdG8gc3F1YXJlIG9uZSwgY2hlY2tpbmcgaWYgdGhlIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyDigJMgYW5kIGl0IGlzLiBTbywgbXkgaHVudCBjb250aW51ZXMuIEknbGwgbmVlZCB0byBkaWcgdGhyb3VnaCBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBhZ2FpbiwgaG9waW5nIHRvIHVuY292ZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZSB0aGF0IGNvdWxkIGJlIHVzZWQgaW5zdGVhZC4gVGhlIHRhc2sgaXMgdG8gaWRlbnRpZnkgYW5kIHByZWZlciB0aG9zZSBvdmVyIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSB0aGUgb25lcyBjdXJyZW50bHkgaW4gdXNlLCBhcyBsb25nIGFzIHRoZXkgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzEwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEyOjQ0LjQ4MzMzODA1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTU1NTkwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlteIFxcXFx0XS4qIG5mdF9wYXlsb2FkX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD0xMz1leHRlcm4gc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2J5dGVvcmRlcl90eXBlO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE0OmV4dGVybiBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE1LWV4dGVybiBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZHluc2V0X3R5cGU7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD03ND1zdHJ1Y3QgbmZ0X3BheWxvYWQge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjc1OlxcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXNcXHRiYXNlOjg7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtNzYtXFx0dTE2XFx0XFx0XFx0b2Zmc2V0O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtODAtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg6ODE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHM7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtODItXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaD0xMzY9dm9pZCBuZnRfbG9va3VwX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzNy1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncywgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjEzODp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzOS1cXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oPTE2ND1zdHJ1Y3QgbmZ0X2lubmVyX3R1bl9jdHgge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgtMTc1LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE3NjppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNzc6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE3OC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTc3OT1lbnVtIG5mdF9keW5zZXRfYXR0cmlidXRlcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgwMi0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgwMzplbnVtIG5mdF9wYXlsb2FkX2Jhc2VzIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgwNC1cXHRORlRfUEFZTE9BRF9MTF9IRUFERVIsXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgxNy0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgxODplbnVtIG5mdF9wYXlsb2FkX2NzdW1fdHlwZXMge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODE5LVxcdE5GVF9QQVlMT0FEX0NTVU1fTk9ORSxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODIzLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODI0OmVudW0gbmZ0X3BheWxvYWRfY3N1bV9mbGFncyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC04MjUtXFx0TkZUX1BBWUxPQURfTDRDU1VNX1BTRVVET0hEUiA9ICgxIFxcdTAwM2NcXHUwMDNjIDApLFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaD04NDM9ZW51bSBuZnRfaW5uZXJfYXR0cmlidXRlcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2NS0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjg2NjplbnVtIG5mdF9wYXlsb2FkX2F0dHJpYnV0ZXMge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY3LVxcdE5GVEFfUEFZTE9BRF9VTlNQRUMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdHJhY2VfdmVyZGljdChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0NDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9mYXN0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyMTg6XFx0WChlLCBuZnRfcGF5bG9hZF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjE5LVxcdFgoZSwgbmZ0X2NtcF9ldmFsKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTExND11bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMTktXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTIwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX24yaCh1bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSAqZGF0YSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMjEtXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICp2YWwsIHUzMiBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjctXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1hY19vZmYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NzQ9c3RhdGljIGludCBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldChzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzOTppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ4OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQ5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE1OTp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjAtXFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ni1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzc6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3OC1cXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX2NvcHlfdmxhbihkZXN0LCBza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTkzLVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxOTQ6XFx0XFx0b2Zmc2V0ID0gbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5NS1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTAtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3BheWxvYWRfcG9saWN5W05GVEFfUEFZTE9BRF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjEyLVxcdFtORlRBX1BBWUxPQURfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0NC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBib29sIHJlc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDMzLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzc6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3Aoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDczLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEwOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMzLVxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM2LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ3LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ4LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTA6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MTpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTU6Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU2LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU3LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTk6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MDpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjQ6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjE1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfaW5uZXJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjQ5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfaW5uZXJfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTEtXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTItXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTM6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2lubmVyX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NDpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU1OlxcdC8qIGRpcmVjdCBjYWxsIHRvIG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKS4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjU2LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NjU4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfY3N1bV9yZXBsYWNlKF9fc3VtMTYgKnN1bSwgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY2NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjY1OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY2Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NzY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3MTg6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MTktXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU1OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiAqc3JjLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTYtXFx0XFx0XFx0XFx0IF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSwgaW50IGNzdW1fb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3MC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzcxOnN0cnVjdCBuZnRfcGF5bG9hZF9zZXQge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlc1xcdGJhc2U6ODtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzczLVxcdHUxNlxcdFxcdFxcdG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODEtLyogVGhpcyBpcyBub3Qgc3RydWN0IHZsYW5faGRyLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODI6c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzgzLVxcdF9fYmUxNlxcdFxcdFxcdGhfdmxhbl9wcm90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz03ODg9bmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTAte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3OTE6XFx0c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICp2bGFuaDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkyLVxcdF9fYmUxNiB2bGFuX3Byb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNS1cXHRcXHR9IGVsc2UgaWYgKGxlbiA9PSA0KSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgwNjpcXHRcXHRcXHR2bGFuaCA9IChzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKilzcmM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNy1cXHRcXHRcXHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbmgtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04MzY9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODM3OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgzOC1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04ODI9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODgzOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTg4NC1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkwNDpzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYXJwKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTIzPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjUtXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk0NTpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDYtXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTYyPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTYzOlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NjQtXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4NT1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzAtICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwMzE6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMyLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDUxOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1Mi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA2OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDcxOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzYtXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3NzpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc4LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3OTpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwOTI9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDkzOlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDk0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTAyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTAzOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNC1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDYte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTA3OlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVxcdGNvbnN0IHUzMiAqc3JjID0gXFx1MDAyNnJlZ3MtXFx1MDAzZWRhdGFbcHJpdi1cXHUwMDNlc3JlZ107XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExOC1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTE5OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTIwLVxcdFxcdFxcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0NS1cXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE0NjpcXHRcXHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0Ny1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTY4LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNjk6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTcwOlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MS1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzQ6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NS1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTg1LVxcdFxcdGlmIChwa3QtXFx1MDAzZWZyYWdvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTg2OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3NjdHAoc2tiLCBuZnRfdGhvZmYocGt0KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExODctXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE5NTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTYtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTktXFx0dTMyIGNzdW1fb2Zmc2V0LCBvZmZzZXQsIGNzdW1fdHlwZSA9IE5GVF9QQVlMT0FEX0NTVU1fTk9ORTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTIwMDpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTIwMS1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc3LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3OC17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzk6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI5NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjk3LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI5ODpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjk5OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDE6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzAyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwNT1uZnRfcGF5bG9hZF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNy17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDg6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlcyBiYXNlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA5LVxcdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUyOnN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9wYXlsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My1cXHQubmFtZVxcdFxcdD0gXFxcInBheWxvYWRcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU0OlxcdC5zZWxlY3Rfb3BzXFx0PSBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVxcdC5pbm5lcl9vcHNcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTY6XFx0LnBvbGljeVxcdFxcdD0gbmZ0X3BheWxvYWRfcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU3LVxcdC5tYXhhdHRyXFx0PSBORlRBX1BBWUxPQURfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMjo1OC42OTg5MDQ3MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2OTE2MjcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXlsb2FkIEFQSSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmaW5kIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGUgcGF5bG9hZCBmdW5jdGlvbmFsaXR5IGluIE5ldGZpbHRlci4gSSBzZWUgdGhhdCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBgbmZ0X3BheWxvYWRfc2V0X29wc2AuIFRoaXMgYG5mdF9wYXlsb2FkX3NldF9vcHNgIHN0cnVjdHVyZSBpcyB0aGVuIHNlbGVjdGVkIGJ5IGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYCwgd2hpY2ggaXRzZWxmIGlzIHJlZ2lzdGVyZWQgd2l0aGluIGBuZnRfcGF5bG9hZF90eXBlYC4gQW5kIGZpbmFsbHksIGBuZnRfcGF5bG9hZF90eXBlYCBnZXRzIHJlZ2lzdGVyZWQgaW4gYG5mX3RhYmxlc19jb3JlLmNgIG9yIGEgc2ltaWxhciBjb3JlIGZpbGUuXG5cbk15IGZpcnN0IGltcHJlc3Npb24gd2FzIHRvIGxvb2sgZm9yIHRoZSBrZXkgZW50cnkgcG9pbnRzIHRoYXQgYXJlICpub3QqIHN0YXRpYywgc2luY2UgSSBrbm93IHRob3NlIGFyZSB0aGUgb25lcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYXMgZXh0ZXJuYWwgQVBJIGVudHJ5IHBvaW50cy4gSSBub3RpY2VkIGBuZnRfcGF5bG9hZF9ldmFsYCBpcyBub3Qgc3RhdGljIChpdCdzIGRlY2xhcmVkIGluIGBuZl90YWJsZXNfY29yZS5oYCwgYW5kIGRlZmluZWQgaW4gYG5mdF9wYXlsb2FkLmNgKS4gQWhhLCBidXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCAqaXMqIHN0YXRpYyEgSG1tLiBTbywgYG5mdF9wYXlsb2FkX2V2YWxgIG11c3QgYmUgZm9yIHJlYWRpbmcgcGF5bG9hZCBkYXRhLiBBbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBmb3Igd3JpdGluZyBwYXlsb2FkIGRhdGEuXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCBzaW5jZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIHRoZSBvbmUgdGhhdCdzIGluZGlyZWN0bHkgYmVpbmcgbW9kaWZpZWQsIEkgc2hvdWxkIGFsc28gbGlzdCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIG9yIG1heWJlIGBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzYC5cblxuVGhlbiBpdCBoaXRzIG1lOiBUaGUgcHJvbXB0IHN0cmVzc2VzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQuIFRoZSBmYWN0IHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgcmVnaXN0ZXJlZCBpbiBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5IGFyZSAqbm90KiBpbmxpbmVkLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuIFNvLCBsaXN0aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBjb21wbGV0ZWx5IHZhbGlkLCBkZXNwaXRlIHRoZSBzdGF0aWMga2V5d29yZC5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFRoZSBjb2RlIGlzIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzowNS41NjgwNzEzMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTU3OTA2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWQub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XFx0XFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cXHRcXHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yNDM9c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNTk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYwLVxcdFxcdFxcdFxcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBFVEhfQUxFTikpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4Ni1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9kZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBFVEhfQUxFTikpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk4LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5OTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDAtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwNi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwNzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgKyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzIzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyNC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgdmxhbl9oZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU0OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM2MzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MDM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNC1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDExLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDMzLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzc6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3Aoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDU0OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDc0OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDgyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDg4LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00OTAtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTAyOnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90aChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwOS1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTA6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTExLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTItXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMC1cXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTMxOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMyLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzMtXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mzc6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90aChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDY6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDctXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1MS1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NTU9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwNT1uZnRfcGF5bG9hZF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM0OC1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNDk6XFx0XFx0cmV0dXJuIFxcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzowOC43MjM4Njc0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUwNjgzMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBgTkZfVEFCTEVTYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQncyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLiBNeSBleHBlcnRpc2UgaXMgc3VjaCB0aGF0IEkga25vdyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIHN0cnVjdHVyZSBwcmV0dHkgd2VsbCwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyLCB3aGljaCBpcyBjbGVhcmx5IHdoYXQgYE5GX1RBQkxFU2AgYWxsdWRlcyB0by4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIG9wdGlvbiB0byBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgaXRzIGltcGxpY2F0aW9ucyBvbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzoxMy4xNzQ1NTM5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODI1NDQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNS0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2Om1lbnVjb25maWcgTkZfVEFCTEVTX0JSSURHRVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNy1cXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVIgXFx1MDAyNlxcdTAwMjYgTkZfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1pZiBORl9UQUJMRVNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozNTpjb25maWcgTkZfVEFCTEVTX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJJUHY0IG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NjI9ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTYzLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjY0OmNvbmZpZyBORl9UQUJMRVNfQVJQXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiQVJQIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9Mjk9aWYgTkZfVEFCTEVTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzAtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MzE6Y29uZmlnIE5GX1RBQkxFU19JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NiBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cXHRkZXBlbmRzIG9uIElQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjE1Ljg5MjgxNTgyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM4MjAyNzM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIG5ldGZpbHRlciBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSByZWxldmFudCBjb25maWcgZm9yIHRoaXMgaXMgYE5GX1RBQkxFU2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblJpZ2h0LCBsb29raW5nIHRocm91Z2ggdGhlIGNvZGUsIGl0IHNlZW1zIGxpa2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuIFRoZXkncmUgbWFya2VkIGFzIGBzdGF0aWNgLCBidXQgdGhleSdyZSAqcmVnaXN0ZXJlZCogd2l0aGluIGBuZnRfcGF5bG9hZF9zZXRfb3BzYC4gVGhhdCBtZWFucyB0aGV5ICphcmVuJ3QqIGlubGluZWQsIGFuZCB0aGVyZWZvcmUgYXJlIHZhbGlkIGVudHJ5cG9pbnRzIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zIEkgcmVjZWl2ZWQuIE5vdywgYG5mdF9wYXlsb2FkX3NlbGVjdF9vcHNgIGlzIHN0YXRpYyBidXQgcmVnaXN0ZXJlZCB3aXRoaW4gYG5mdF9wYXlsb2FkX3R5cGVgLiBgbmZ0X3BheWxvYWRfdHlwZWAgaXRzZWxmIGlzIG5vbi1zdGF0aWMuIFRoZW4gYG5mdF9wYXlsb2FkX2V2YWxgIGFuZCBgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbGAgYXJlIGFsc28gbm9uLXN0YXRpYywgYnV0IHRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAuIE9rYXksIHNvIEknbGwgYmUgbGlzdGluZyB0aG9zZTogYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YC5cblxuV2FpdCwgdGhlIHByb21wdCBzdGF0ZWQgXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXCIgU2luY2UgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAqYXJlbid0KiBpbmxpbmVkLCBldmVuIHRob3VnaCB0aGV5J3JlIG1hcmtlZCBgc3RhdGljYCwgdGhleSdyZSBwZXJmZWN0bHkgZmluZSBjYW5kaWRhdGVzLlxuXG5Ob3csIGxldCdzIGFjdHVhbGx5IHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggKmRvZXMqLiBJdCdzIGFib3V0IHZhbGlkYXRpbmcgdGhlIGBjc3VtX29mZnNldGAgd2hlbiB3cml0aW5nIHRvIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaG93IGNoZWNrc3VtcyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhhdCBpdCdzIG5ldGZpbHRlciwgYW5kIHRoZXJlZm9yZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKG5mdGFibGVzKSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uZmlndXJhdGlvbiB3aWxsIGJlIGBORl9UQUJMRVNgLCBhbmQgdGhlIGZ1bmN0aW9ucyBJJ2xsIGJlIGZvY3VzaW5nIG9uIGZvciBmdXp6aW5nIGFyZSwgYXMgZGVjaWRlZCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3NldF9pbml0YC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRpbWUuLi5JIHdhbnQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1aXRhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgYXJlYS4gV2hhdCBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YD8gVGhleSBhcmUgc3RhdGljIGFuZCBpbmxpbmVkLCBzbyB0aGF0IHNvbGlkaWZpZXMgbXkgZWFybGllciBjaG9pY2UuXG5cbk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBjb25maWd1cmF0aW9uLXdpc2UgSSBzaG91bGQgY29uc2lkZXI/IGBORl9UQUJMRVNgIHNlZW1zIHRvIGJlIHRoZSBtYWluIG9uZSwgYW5kIEkgKnRoaW5rKiBJIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgYE5GX1RBQkxFU2AgYWxzbyBpbXBsaWNpdGx5IGluY2x1ZGVzIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX05FVExJTktgLCBnaXZlbiB0aGUgZGVwZW5kZW5jeSBhbmQgc2VsZWN0aW9uIHJlbGF0aW9uc2hpcHMuIFllcCwgYE5GX1RBQkxFU2AgaXMgdGhlIG9ubHkgb25lIEkgbmVlZC5cblxuT2theSwgSSdtIHJlYWR5IHRvIHdyaXRlIHVwIHRoZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NTksIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjI2LjI3NDg0NTIxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDc3OTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyJ3MgbmZ0X3BheWxvYWQgbW9kdWxlIHRvIGFkZCB2YWxpZGF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMgd2hlbiBtYW5nbGluZyBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlcidzIG5mdF9wYXlsb2FkIG1vZHVsZSB0byBhZGQgdmFsaWRhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXRzIHdoZW4gbWFuZ2xpbmcgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTM6MjYuNDE1NjM1MzA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQwMDk3ODcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjI2LjQxNzQ4MDI1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDM5OTEyODkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBgY3N1bV9vZmZzZXRgIGF0dHJpYnV0ZSBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgbWFuZ2xpbmcgdG8gcHJldmVudCBhcmJpdHJhcnkgb2Zmc2V0cyBmcm9tIGJlaW5nIHVzZWQgd2hlbiB1cGRhdGluZyB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIGFsbG93ZWQgYm9ndXMgb2Zmc2V0cyB3aGljaCBjb3VsZCBsZWFkIHRvIHBhY2tldCBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhay4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGNhdXNlZCBieSBpbnZhbGlkIG9mZnNldHMsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0IGhlcmUgc2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgY29uc3VtZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMWFiOGZiMTI3ZjA1N2ExM2JkMWFmNmYzNmUzNDc4NmI4YWU3MmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMjM6MTI6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjcwZjcwYTY1ZTMyN2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTEwMDgsMTEgKzEwMDgsMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCJyZS11cGRhdGVcIiBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuQEAgLTEwNDYsNiArMTA0OCwyNSBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiB7XG5AQCAtMTA1NSw5ICsxMDc2LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4rXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTM6MjYuNDE3NDgxNjc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDA1ODk3NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgYGNzdW1fb2Zmc2V0YCB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIGZ1bmN0aW9ucy4gVGhlIGludGVudGlvbiBpcyB0byBsaW1pdCB0aGVzZSBvZmZzZXRzIHRvIGxlZ2l0aW1hdGUgY2hlY2tzdW0gZmllbGRzIHdpdGhpbiBgdGNwaGRyYCwgYHVkcGhkcmAsIGFuZCBgaWNtcDZoZHJgIHN0cnVjdHVyZXMuIFRoaXMgbWFrZXMgc2Vuc2U7IHByZXZlbnRpbmcgYXJiaXRyYXJ5IG9mZnNldHMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaGVhZGVyIG1hbmlwdWxhdGlvbiBhdHRhY2tzLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHN0ZW1taW5nIGZyb20gdGhlc2UgY2hhbmdlcy4gVGhlIHByaW9yIGNvZGUgbWlnaHQgaGF2ZSBhbGxvd2VkIHdyaXRlcyB0byBhbnl3aGVyZSB3aXRoaW4gdGhlIHBhY2tldCwgYW5kICptYXliZSogZXZlbiByZWFkcy4gV2FpdCwgbm8sIGBuZnRfcGF5bG9hZF9zZXRgIGlzIHNwZWNpZmljYWxseSBmb3Igd3JpdGluZywgc28gdGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gcHJldmVudGluZyBhcmJpdHJhcnkgd3JpdGVzLlxuXG5UaGUgcGF0Y2ggZm9jdXNlcyBvbiB2YWxpZGF0aW9uIGZvciBjaGVja3N1bSB3cml0aW5nLiBTbywgaXQncyBhYm91dCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gaG93IGNoZWNrc3VtcyBhcmUgd3JpdHRlbiBvciBwYXlsb2FkIGRhdGEgaXMgbWFuaXB1bGF0ZWQuIFRoaW5raW5nIGFib3V0IHRoaXMsIHdyaXRpbmcgdG8gYSBwYWNrZXQgdXN1YWxseSAqZG9lc24ndCogaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodD9cblxuU3RpbGwsIEkgd2FudCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGFueSBwb3RlbnRpYWwgZm9yIHJlYWRzLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZWJhc2UgZm9yIHVzYWdlcyBvZiBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBzbyBJIGNhbiBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbiBhYm91dCByZWFkLXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTM6MzYuODIzMzgzNjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDI0MzUxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA1MT1zdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA2OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcxLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTEwMz1zdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE2OC1cXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTY5OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MC1cXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjM5LjIyNTgyNzcxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk0NzQ4NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENoZWNrc3VtIE9mZnNldCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBuZnRfcGF5bG9hZC5jYCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIGFzIHdlbGwuIFJpZ2h0LCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHZhbGlkYXRlIHRoZSBvZmZzZXQgd2hlbiB3ZSdyZSB0d2Vha2luZyBwYWNrZXQgcGF5bG9hZHMgd2l0aGluIG5ldGZpbHRlciwgcGFydGljdWxhcmx5IGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgaGFyZGVuaW5nIHRoZSBzeXN0ZW0gYnkgbGltaXRpbmcgdGhlIGBjc3VtX29mZnNldGAgdG8gb25seSAqa25vd24qIGFuZCBzYWZlIGxvY2F0aW9ucywgbGlrZSB3aGVyZSB0aGUgVENQIGhlYWRlciBjaGVja3N1bSByZXNpZGVzIChgb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spYCkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZ29vZCBwcmFjdGljZS4gUHJldmVudGluZyBhcmJpdHJhcnkgb2Zmc2V0cyBpcyBjcnVjaWFsLiBJdOKAmXMgYSBjbGFzc2ljIGRlZmVuc2UgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyB3cml0ZXMgb3IgY29ycnVwdGluZyBjcml0aWNhbCBwYWNrZXQgaGVhZGVyIGluZm9ybWF0aW9uLiBUaGUgbWFpbiByaXNrIGhlcmUgaXNuJ3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBlciBzZS4gVGhlIHRocmVhdCBpcyBhYm91dCBwcmV2ZW50aW5nIGEgbWFsaWNpb3VzIHVzZXIgb3IgYSBidWdneSBydWxlIGZyb20gb3ZlcndyaXRpbmcgdml0YWwgZGF0YSB3aXRoaW4gdGhlIHBhY2tldCBidWZmZXIgKGBza2JgKS4gS0FTQU4gd291bGQgbGlrZWx5IGNhdGNoIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpZiBpdCBoYXBwZW5zLCBhbmQgYSBjb3JydXB0ZWQgcGFja2V0LCBhbHRob3VnaCBub3QgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBhbiBpc3N1ZSBieSBzYW5pdGl6ZXJzLCB3b3VsZCBpbmRpY2F0ZSB0aGF0IGEgbG9naWMgYnVnIGlzIGF0IHBsYXkuIEl0J3MgYWJvdXQgbWVtb3J5IGNvcnJ1cHRpb24sIG5vdCBkaXJlY3RseSBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5XYWl0LCB0aG91Z2jigKYgY291bGQgYW4gKmludmFsaWQqIG9mZnNldCBpbmFkdmVydGVudGx5IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGNoZWNrc3VtIHVwZGF0ZSBsb2dpYyAqcmVhZHMqIHRoZSBvbGQgdmFsdWUgYmVmb3JlICp3cml0aW5nKiB0aGUgbmV3IG9uZS4gSWYgdGhlIG9mZnNldCBpcyBzb21laG93IG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgdmFsaWQgZGF0YSB3aXRoaW4gdGhlIGBza2JgLCBpdOKAmXMgKnBvc3NpYmxlKiBpdCBtaWdodCB0cnkgdG8gcmVhZCBzb21ldGhpbmcgdGhhdCdzIG5vdCBiZWVuIGluaXRpYWxpemVkLiBJdOKAmXMgbGVzcyBsaWtlbHksIHRob3VnaCwgc2luY2UgdGhlIHNrYiBkYXRhIGl0c2VsZiBpcywgaW4gZ2VuZXJhbCwgcG9wdWxhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgbmV0d29yayBzdGFjayBvciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucy5cblxuQnV0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIHZhbHVlcyB0aGUgb2Zmc2V0IGNhbiB0YWtlLiBUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoaXMgYGNzdW1fb2Zmc2V0YCB0byBvbmx5IGtub3duIGFuZCBzcGVjaWZpYyB2YWx1ZXMuIEdvb2QuIFRoYXQgc2hvdWxkIHByZXZlbnQgdGhlIHBvc3NpYmlsaXR5IG9mIHRob3NlIGtpbmRzIG9mIHVuaW50ZW5kZWQgcmVhZHMuXG5cbknigJltIGdvaW5nIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlLCBhbmQgZG91YmxlLWNoZWNrIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgdG8gc2VlIGhvdyB0aG9zZSBjaGVja3MgYXJlIGVuZm9yY2VkIGFuZCBpbnRlZ3JhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIzOjEzOjUxLjE3MzMxNDU4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0ZGVmYXVsdDpcXG4xMTUxOlxcdFxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XFxuMTE1MjpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTUzOlxcdFxcdH1cXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgKyBwcml2LVxcdTAwM2Vjc3VtX29mZnNldDtcXG4xMTU2OlxcdFxcdG9mZnNldCArPSBwcml2LVxcdTAwM2VvZmZzZXQ7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdGlmICgocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjExNTk6XFx0XFx0ICAgICgocHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFxcdTAwMjZcXHUwMDI2XFxuMTE2MDpcXHRcXHQgICAgICBwcml2LVxcdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcXG4xMTYxOlxcdFxcdCAgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcXG4xMTYyOlxcdFxcdFxcdGlmIChvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMTYzOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNjQ6XFx0XFxuMTE2NTpcXHRcXHRcXHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNjY6XFx0XFx0XFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXFx1MDAzZWxlbiwgMCk7XFxuMTE2NzpcXHRcXG4xMTY4OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMTE2OTpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxuMTE3MDpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuMTE3MTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTcyOlxcdFxcbjExNzM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG4xMTc0OlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxuMTE3NTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuLCAwKSkgfHxcXG4xMTc5OlxcdFxcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVxcdTAwM2VsZW4pIFxcdTAwM2MgMClcXG4xMTgwOlxcdFxcdFxcdGdvdG8gZXJyO1xcbjExODE6XFx0XFxuMTE4MjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODM6XFx0XFx0ICAgIHBrdC1cXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFxcdTAwMjZcXHUwMDI2XFxuMTE4NDpcXHRcXHQgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjExODU6XFx0XFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE4NjpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbjExODc6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE4ODpcXHRcXHR9XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHJldHVybjtcXG4xMTkxOlxcdGVycjpcXG4xMTkyOlxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbjExOTY6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbjExOTc6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuMTE5ODpcXHR7XFxuMTE5OTpcXHRcXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMzoxMzo1MS4xNzM0MjE0NTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NDMxNTQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBuZXRmaWx0ZXIgcGF0Y2ggYW5kIHdoeSBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbW9kaWZpZXMgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGFuZCBpbnRyb2R1Y2VzIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCBpbiBgbmZ0X3BheWxvYWQuY2AuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgYGNzdW1fb2Zmc2V0YCB2YWx1ZXMsIHNwZWNpZmljYWxseSBmb3IgdGhlIHRyYW5zcG9ydCBoZWFkZXIgKGBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSYCksIHRvIGtub3duLCBzYWZlIG9mZnNldHMgd2l0aGluIHRoZSB0cmFuc3BvcnQgaGVhZGVycyAobGlrZSBgdGNwaGRyYCwgYHVkcGhkcmAsIGFuZCBgaWNtcDZoZHJgKS5cblxuVGhlIGFkZGVkIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCBpcyBhIHJ1bnRpbWUgY2hlY2sgd2l0aGluIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGl0J3MgYWxsIGFib3V0IGhvdyBjaGVja3N1bXMgYXJlIHdyaXR0ZW4gYW5kIHVwZGF0ZWQgaW4gdGhlIG5ldGZpbHRlciBwcm9jZXNzLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHByZXZlbnRpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJ3JlIG1hbmdsaW5nIHRyYW5zcG9ydCBoZWFkZXJzLlxuXG5UaGUgY3JpdGljYWwgaXNzdWUgdGhpcyBhZGRyZXNzZXMgaXMgcHJldmVudGluZyBhbiBhdHRhY2tlciBmcm9tIHVzaW5nIGEgY3JhZnRlZCwgYm9ndXMgYGNzdW1fb2Zmc2V0YCB0byB3cml0ZSB0aGUgY2hlY2tzdW0gdG8gYW4gYXJiaXRyYXJ5LCBvdXQtb2YtYm91bmRzIG9mZnNldCB3aXRoaW4gdGhlIHBhY2tldCdzIGRhdGEgYnVmZmVyICh0aGUgYHNrYmApLiBUaGlzIGlzIGEgY2xlYXIgbWVtb3J5IGNvcnJ1cHRpb24gLyBvdXQtb2YtYm91bmRzIHdyaXRlIHZ1bG5lcmFiaWxpdHkuIEhvd2V2ZXIsIGl0J3MgKm5vdCogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBLQVNBTiB3b3VsZCBsaWtlbHkgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGVzIGlmIHRoZXkgZ28gYmV5b25kIHRoZSBgc2tiYCBidWZmZXIsIGJ1dCBpZiB0aGUgd3JpdGUgaXMgd2l0aGluIHRoZSBidWZmZXIgaXRzZWxmLCBpdCByZXN1bHRzIGluIHBhY2tldCBjb3JydXB0aW9uIOKAkyBzb21ldGhpbmcgS01TQU4gaXNuJ3QgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcGF0Y2ggaXMgZml4aW5nIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIG9sZCBjb2RlIG1pZ2h0IGhhdmUgYWxsb3dlZCBhbiBhdHRhY2tlciB0byBvdmVyd3JpdGUgZGF0YSB3aXRoaW4gYSBwYWNrZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBjb3JyZWN0LCBiZWNhdXNlIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCBjb3VsZCBoYXZlIGEgdmVyeSBsb3cgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbkkndmUgY29uZmlybWVkIHRoaXMgcGF0Y2gncyBiZWhhdmlvdXIuIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBpcyB1c2VkIGR1cmluZyBydWxlIGNvbmZpZ3VyYXRpb24sIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgaXMgdXNlZCBkdXJpbmcgcGFja2V0IGV2YWx1YXRpb24uXG5cbkFmdGVyIGEgZG91YmxlLWNoZWNrLCBpdCdzIGNsZWFyIHRoZSBwcm9ibGVtIGlzIHRoZSBwb3RlbnRpYWwgY29ycnVwdGlvbiBvZiBMNCBvciBwYXlsb2FkIGhlYWRlcnMgZHVlIHRvIGEgYm9ndXMgYGNzdW1fb2Zmc2V0YC4gVGhlIGNvbW1lbnQgYWxzbyBtZW50aW9ucyB0aGUgb2xkIGNvZGUgY291bGQgY29ycnVwdCBMNCBvciBwYXlsb2FkIGhlYWRlcnMuIFRoaXMgaXNuJ3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBvciBhbnkgY29udHJvbCBmbG93IGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU4gPSBmYWxzZWAgaXMgdGhlIGFwcHJvcHJpYXRlIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDcsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjM6MTQ6MDYuODE2NTc5MjE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgdGhlIGBjc3VtX29mZnNldGAgYXR0cmlidXRlIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBtYW5nbGluZyB0byBwcmV2ZW50IGFyYml0cmFyeSBvZmZzZXRzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHVwZGF0aW5nIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zLiBUaGUgcHJldmlvdXMgYmVoYXZpb3IgYWxsb3dlZCBib2d1cyBvZmZzZXRzIHdoaWNoIGNvdWxkIGxlYWQgdG8gcGFja2V0IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgY2F1c2VkIGJ5IGludmFsaWQgb2Zmc2V0cywgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQgaGVyZSBzaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBjb25zdW1lZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgYGNzdW1fb2Zmc2V0YCBhdHRyaWJ1dGUgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG1hbmdsaW5nIHRvIHByZXZlbnQgYXJiaXRyYXJ5IG9mZnNldHMgZnJvbSBiZWluZyB1c2VkIHdoZW4gdXBkYXRpbmcgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMuIFRoZSBwcmV2aW91cyBiZWhhdmlvciBhbGxvd2VkIGJvZ3VzIG9mZnNldHMgd2hpY2ggY291bGQgbGVhZCB0byBwYWNrZXQgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBjYXVzZWQgYnkgaW52YWxpZCBvZmZzZXRzLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdCBoZXJlIHNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGNvbnN1bWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[1] Phase: Succeeded StartedAt: 2026-08-24 23:14:18 +0000 UTC FinishedAt: 2026-08-24 23:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 23:14:18 +0000 UTC FinishedAt: 2026-08-24 23:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2] Phase: Succeeded StartedAt: 2026-08-24 23:14:18 +0000 UTC FinishedAt: 2026-08-25 02:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-24 23:14:18 +0000 UTC FinishedAt: 2026-08-25 02:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 23:14:18 +0000 UTC FinishedAt: 2026-08-24 23:14:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 23:14:18 +0000 UTC FinishedAt: 2026-08-24 23:14:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9fddn/series-workflow9fddn-convert-artifact-1738034002/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 23:14:30 +0000 UTC FinishedAt: 2026-08-24 23:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 23:14:30 +0000 UTC FinishedAt: 2026-08-24 23:34:12 +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:*dedc2d25-e07f-4695-955b-ee5b8a635e26,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-workflow9fddn/series-workflow9fddn-convert-artifact-1738034002/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": "e90044b8-7374-4342-b09d-86fe3f3d60ad", "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-workflow9fddn/series-workflow9fddn-build-action-1656209360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 23:14:30 +0000 UTC FinishedAt: 2026-08-24 23:34:02 +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:*dedc2d25-e07f-4695-955b-ee5b8a635e26,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-workflow9fddn/series-workflow9fddn-convert-artifact-1738034002/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": "e90044b8-7374-4342-b09d-86fe3f3d60ad", "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-workflow9fddn/series-workflow9fddn-build-action-1656209360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 23:34:12 +0000 UTC FinishedAt: 2026-08-24 23:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 23:34:12 +0000 UTC FinishedAt: 2026-08-24 23:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 23:34:12 +0000 UTC FinishedAt: 2026-08-24 23:34:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 23:34:12 +0000 UTC FinishedAt: 2026-08-24 23:34:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9fddn/series-workflow9fddn-convert-artifact-3008675949/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 23:34:23 +0000 UTC FinishedAt: 2026-08-24 23:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 23:34:23 +0000 UTC FinishedAt: 2026-08-24 23:36:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e90044b8-7374-4342-b09d-86fe3f3d60ad,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-workflow9fddn/series-workflow9fddn-build-action-1656209360/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-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 23:36:18 +0000 UTC FinishedAt: 2026-08-24 23:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 23:36:18 +0000 UTC FinishedAt: 2026-08-24 23:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 23:36:18 +0000 UTC FinishedAt: 2026-08-24 23:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 23:36:18 +0000 UTC FinishedAt: 2026-08-24 23:56:08 +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:*dedc2d25-e07f-4695-955b-ee5b8a635e26,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-workflow9fddn/series-workflow9fddn-convert-artifact-3008675949/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": "9fd37d55-f745-4f6d-9e9f-6d4f4bdbcee5", "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-workflow9fddn/series-workflow9fddn-build-action-129724873/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 23:36:18 +0000 UTC FinishedAt: 2026-08-24 23:55:58 +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:*dedc2d25-e07f-4695-955b-ee5b8a635e26,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-workflow9fddn/series-workflow9fddn-convert-artifact-3008675949/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": "9fd37d55-f745-4f6d-9e9f-6d4f4bdbcee5", "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-workflow9fddn/series-workflow9fddn-build-action-129724873/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 23:56:08 +0000 UTC FinishedAt: 2026-08-24 23:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 23:56:08 +0000 UTC FinishedAt: 2026-08-24 23:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 23:56:08 +0000 UTC FinishedAt: 2026-08-24 23:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 23:56:08 +0000 UTC FinishedAt: 2026-08-24 23:58:38 +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:*9fd37d55-f745-4f6d-9e9f-6d4f4bdbcee5,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-workflow9fddn/series-workflow9fddn-build-action-129724873/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-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-08-24 23:58:47 +0000 UTC FinishedAt: 2026-08-25 02:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-08-24 23:58:47 +0000 UTC FinishedAt: 2026-08-25 02:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"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:*e90044b8-7374-4342-b09d-86fe3f3d60ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9fd37d55-f745-4f6d-9e9f-6d4f4bdbcee5,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-workflow9fddn/series-workflow9fddn-build-action-1656209360/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-workflow9fddn/series-workflow9fddn-build-action-129724873/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 23:58:47 +0000 UTC FinishedAt: 2026-08-24 23:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 23:58:47 +0000 UTC FinishedAt: 2026-08-24 23:58:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"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-workflow9fddn/series-workflow9fddn-convert-artifact-6628562/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 23:58:47 +0000 UTC FinishedAt: 2026-08-24 23:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 23:58:47 +0000 UTC FinishedAt: 2026-08-24 23:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 23:58:47 +0000 UTC FinishedAt: 2026-08-24 23:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-08-24 23:58:57 +0000 UTC FinishedAt: 2026-08-25 02:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9fddn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_eval","nft_payload_set_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"d06b49db-031b-4c0b-a5e5-fac54445e898","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-08-24 23:58:57 +0000 UTC FinishedAt: 2026-08-25 02:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e90044b8-7374-4342-b09d-86fe3f3d60ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9fd37d55-f745-4f6d-9e9f-6d4f4bdbcee5,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-workflow9fddn/series-workflow9fddn-build-action-1656209360/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-workflow9fddn/series-workflow9fddn-build-action-129724873/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-workflow9fddn/series-workflow9fddn-convert-artifact-6628562/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil