Name: series-workflowflfdn Phase: Succeeded StartedAt: 2026-08-18 13:03:54 +0000 UTC FinishedAt: 2026-08-18 17:36:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[0] Phase: Succeeded StartedAt: 2026-08-18 13:03:54 +0000 UTC FinishedAt: 2026-08-18 13:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 13:03:54 +0000 UTC FinishedAt: 2026-08-18 13:56:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "dc1d569a-dd80-4070-8717-641f9dba0434" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_do_migrate_state", "xfrm_set_default" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgdG8gdGFrZSB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGluc3RlYWQgb2YgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gaG9sZCBpdC4gVGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nIGFuZCBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gUkNVLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGUuZy4sIFJDVSB3YXJuaW5ncywgZGVhZGxvY2tzKSBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlNDFhZWUyNTNiMDU0MzdkNmVlY2U5ODBjY2UxODA1NzRhMTNhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMzo1MDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4xZjY4MzUxNmYyYjUyIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTYyMiwzMSAmIzQzOzE2MjIsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiB9XG4gXG4gLyogQSB3cmFwcGVyIGZvciBubG1zZ19tdWx0aWNhc3QoKSBjaGVja2luZyB0aGF0IG5sc2sgaXMgc3RpbGwgYXZhaWxhYmxlLlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay5cbiYjNDM7ICogVGFrZXMgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBhcm91bmQgdGhlIG11bHRpY2FzdC5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKVxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqbmxzaztcbiBcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2V4ZnJtLm5sc2spO1xuIFx0aWYgKCFubHNrKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRVBJUEU7XG4gXHR9XG4tXG4gXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4gXHRpZiAoeHRyKSB7XG4tXHRcdGludCBlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuJiM0MztcdFx0ZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbiBcdFx0eGZybV9wdXRfdHJhbnNsYXRvcih4dHIpO1xuIFx0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbi1cbi1cdHJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRlcnIgPSBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKVxuQEAgLTI1MzYsOSAmIzQzOzI1NDAsNyBAQCBzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgdXNlLWFmdGVyLWZyZWUvd2FybmluZyBpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGJ5IG1vdmluZyB0aGUgYHJjdV9yZWFkX2xvY2soKWAgaW50ZXJuYWxseS4gUHJldmlvdXNseSwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBleHBlY3RlZCB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIFJDVSByZWFkIGxvY2ssIGJ1dCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCAoYSBuZXRsaW5rIGhhbmRsZXIgZm9yIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCkgY2FsbGVkIGl0IHZpYSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgZXhwbGljaXQgYHJjdV9yZWFkX2xvY2soKWAgZnJvbSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgKGNhbGxlZCBieSBgeGZybV9zZXRfZGVmYXVsdGApIHNpbmNlIGl0IGlzIG5vdyBoYW5kbGVkIGludGVybmFsbHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZml4IGEgYnVnLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U0MWFlZTI1M2IwNTQzN2Q2ZWVjZTk4MGNjZTE4MDU3NGExM2E2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEzOjUwOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCBkNmRiNjMzMDRiYTZiLi4xZjY4MzUxNmYyYjUyIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMTYyMiwzMSAmIzQzOzE2MjIsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIH0KIAogLyogQSB3cmFwcGVyIGZvciBubG1zZ19tdWx0aWNhc3QoKSBjaGVja2luZyB0aGF0IG5sc2sgaXMgc3RpbGwgYXZhaWxhYmxlLgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLgomIzQzOyAqIFRha2VzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgYXJvdW5kIHRoZSBtdWx0aWNhc3QuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKQomIzQzOwkJCQkgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApCiB7Ci0Jc3RydWN0IHNvY2sgKm5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LSZndDt4ZnJtLm5sc2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqbmxzazsKIAlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7CiYjNDM7CWludCBlcnI7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0mZ3Q7eGZybS5ubHNrKTsKIAlpZiAoIW5sc2spIHsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FUElQRTsKIAl9Ci0KIAl4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7CiAJaWYgKHh0cikgewotCQlpbnQgZXJyID0geHRyLSZndDthbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7Ci0KJiM0MzsJCWVyciA9IHh0ci0mZ3Q7YWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpOwogCQl4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7CiAJCWlmIChlcnIpIHsKJiM0MzsJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQotCXJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTsKJiM0MzsJZXJyID0gbmxtc2dfbXVsdGljYXN0KG5sc2ssIHNrYiwgcGlkLCBncm91cCwgR0ZQX0FUT01JQyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKQpAQCAtMjUzNiw5ICYjNDM7MjU0MCw3IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpCiAKIAlubG1zZ19lbmQoc2tiLCBubGgpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4ZnJtX3VzZXIuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgbWFkZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBoYW5kbGVzIHRoZSBSQ1UgcmVhZCBsb2NrLiBQcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgbG9jaywgYnV0IG5vdyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGdvaW5nIHRvIHRha2UgaXQgaW50ZXJuYWxseS4gVGhhdCYjMzk7cyBhIHByZXR0eSBiaWcgc2hpZnQsIGNoYW5naW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBjb250cmFjdCBsaWtlIHRoYXQuCgpUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gVGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgY2FsbHMgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYmVjYXVzZSB0aGUgZnVuY3Rpb24gbm93IG1hbmFnZXMgdGhlIGxvY2sgaXRzZWxmLiBUaGlzIGlzIGFsbCBnb29kIGFuZCBleHBlY3RlZC4KCkhvd2V2ZXIsIGEgY2hhbmdlIGxpa2UgdGhpcyBhbHdheXMgcmFpc2VzIHF1ZXN0aW9ucyBpbiBteSBtaW5kLiBUaGUgaW1tZWRpYXRlIHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXM6IHdoYXQgb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSBjYWxsIGB4ZnJtX25sbXNnX211bHRpY2FzdGA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgKmFsbCogY2FsbCBzaXRlcyBhcmUgdXBkYXRlZCBhY2NvcmRpbmdseS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIGJlY2F1c2Ugbm93IHdlJiMzOTtyZSBtb3ZpbmcgdGhlIHJlc3BvbnNpYmlsaXR5LiBUaW1lIHRvIHNjYW4gdGhlIG90aGVyIGZpbGVzIGFuZCBkb3VibGUtY2hlY2ssIGxvb2tpbmcgZm9yIGFueSBvdGhlciBjYWxsZXJzIHRoYXQgbWlnaHQgc3RpbGwgYmUgZXhwZWN0aW5nIHRoZSBsb2NrIHRvIGJlIGhlbGQgZXh0ZXJuYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25sbXNnX211bHRpY2FzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0xNTk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyNi0gKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mjc6c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyOC1cdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNTE4PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjU0Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDM6XHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTQ0LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDI6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDMtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2MzA9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NDc6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDgtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5ODI9c3RhdGljIGludCB4ZnJtX2V4cF9zdGF0ZV9ub3RpZnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk1LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5NjpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk3LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTk5PXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTI6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BRVZFTlRTKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTMtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMTU9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMzg6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDM5LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDk5PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2Eoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUwLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDE1MTpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNTItXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUwLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MTpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0FDUVVJUkUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDI1Mi19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDM2MD1zdGF0aWMgaW50IHhmcm1fZXhwX3BvbGljeV9ub3RpZnkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzItXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MzczOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfRVhQSVJFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNzY9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3koc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0MzktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDQwOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NDEtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0Nz1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0Njg6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2OS1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NTI3PXN0YXRpYyBpbnQgeGZybV9zZW5kX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1MzktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTQwOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUkVQT1JUKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1NzU9c3RhdGljIGludCB4ZnJtX3NlbmRfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTk0LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDU5NTpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDU5Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAqKgoKT2theSwgc28gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBnZXRzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIFRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpbmdzIGJ5IGhhdmluZyBpdCBhY3F1aXJlIGFuIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgKmNhbGxpbmcqIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jaywgd2hpY2ggbWVhbnMgSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgZGV0ZXJtaW5lIGlmIHRoYXQmIzM5O3Mgc3RpbGwgdmFsaWQgbm93LgoKTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB3ZXJlICphbGwqIHRoZSBjYWxsZXJzIGFjdHVhbGx5IGhvbGRpbmcgdGhhdCBsb2NrPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjb2RlLiBMZXQgbWUgcXVpY2tseSBjaGVjayBhbm90aGVyIGNhbGxlciwgZm9yIGV4YW1wbGUsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIG90aGVyIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zZW5kX21pZ3JhdGVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMxMT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjQ6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI1LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MDgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTA5Olx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbWlncmF0aW9uIGxvZ2ljIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3RhdGUgdHJhbnNpdGlvbiwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGtleWluZyBtYXRlcmlhbHMsIHNlcXVlbmNlIG51bWJlcnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgbWlncmF0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGdsYXJpbmdseSBvYnZpb3VzIHRoYXQgbWlnaHQgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IsIHdvcnNlLCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGVzcGVjaWFsbHkgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YgdHVubmVscyBhbmQgdHJhbnNwb3J0IHByb3RvY29scyBpbiBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgcGF0dGVybnMgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjYW4gYmUgc2ltcGxpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMyND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ0LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUyNi0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyNzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MDpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTWlncmF0aW9uIFN0YXRlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGEgbmV0bGluayBkb2l0IGhhbmRsZXIuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIOKAkyBpdCBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IGluaGVyaXQgdGhlIFJDVSByZWFkIGxvY2sgbGlrZSBzb21lIG90aGVyIHBhcnRzIG9mIHRoZSBYRlJNIGNvZGUuIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGltcGxlbWVudGF0aW9uLiBHb3R0YSB0cmFjZSB0aGUgcGF0aCwgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgKmFjdHVhbGx5KiB1c2luZyB0aGUgc3RhdGUgZGF0YS4gVGhpcyBpcyBjcnVjaWFsOyBhbnkgcmFjZSBjb25kaXRpb25zIGFyb3VuZCBzdGF0ZSBtb2RpZmljYXRpb24gY291bGQgYmUgdmVyeSBuYXN0eS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGVkIHRoZSBsb2NraW5nIGluIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCBpZiB0aGV5JiMzOTt2ZSB0YWtlbiB0aGUgbmVjZXNzYXJ5IHByZWNhdXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzI0Olx0c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4zMzI1Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxuMzMyNjpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcbjMzMjc6XHRcdFx0XHRcdCAgIHU4IGRpciwgdTMyIHBvcnRpZCwgdTMyIHNlcSlcbjMzMjg6XHR7XG4zMzI5Olx0XHRpbnQgZXJyO1xuMzMzMDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjMzMzE6XHRcbjMzMzI6XHRcdHNrYiA9IG5sbXNnX25ldyh4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShtLCBkaXIpLCBHRlBfQVRPTUlDKTtcbjMzMzM6XHRcdGlmICghc2tiKVxuMzMzNDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMzMzU6XHRcbjMzMzY6XHRcdGVyciA9IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc2tiLCB1bSwgbSwgZGlyLCBwb3J0aWQsIHNlcSk7XG4zMzM3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zMzM4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMzMzOTpcdFx0XHRyZXR1cm4gZXJyO1xuMzM0MDpcdFx0fVxuMzM0MTpcdFxuMzM0MjpcdFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4zMzQzOlx0fVxuMzM0NDpcdFxuMzM0NTpcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMzM0NjpcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzM0NzpcdHtcbjMzNDg6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUkNVIFJlYWQgTG9jayBJc3N1ZSoqCgpPa2F5LCBzbyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgaG9sZGluZyBgcmN1X3JlYWRfbG9jaygpYC4gV2FpdCBhIG1pbnV0ZSwgaWYgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCAqdXNlZCogdG8gcmVxdWlyZSB0aGF0IGxvY2ssIHRoZW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3YXMgcG90ZW50aWFsbHkgY2FsbGluZyBpdCB3aXRob3V0IHRoZSBsb2NrPyBUaGF0JiMzOTtzIGEgc2VyaW91cyBidWcgd2FpdGluZyB0byBoYXBwZW4uIExldCYjMzk7cyBkaWcgaW4uIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYmVoYXZlZCAqYmVmb3JlKiB0aGlzIHBhdGNoLgoKUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYgc2F5czoKCmBgYGMKIC8qIEEgd3JhcHBlciBmb3Igbmxtc2dfbXVsdGljYXN0KCkgY2hlY2tpbmcgdGhhdCBubHNrIGlzIHN0aWxsIGF2YWlsYWJsZS4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay4KJiM0MzsgKiBUYWtlcyB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFyb3VuZCB0aGUgbXVsdGljYXN0LgogICovCiBzdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cCkKJiM0MzsJCQkJICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKQogewotCXN0cnVjdCBzb2NrICpubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0mZ3Q7eGZybS5ubHNrKTsKJiM0MzsJc3RydWN0IHNvY2sgKm5sc2s7CiAJc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyOwomIzQzOwlpbnQgZXJyOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O3hmcm0ubmxzayk7CmBgYAoKT2theSwgc28gYmVmb3JlIHRoZSBwYXRjaCwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3YXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O3hmcm0ubmxzaylgLi4uIG1lYW5pbmcgaXQgKmRpZCogcmVxdWlyZSB0aGUgbG9jayBleHRlcm5hbGx5LCBvdGhlcndpc2Ugd2UmIzM5O2Qgc2VlIGFuIFJDVSB3YXJuaW5nLiBOb3csIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd2FzICp1c2VkKiBiZWZvcmUgdGhlIHBhdGNoLiBMZXQmIzM5O3MgbG9vayBhdCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQ6CgpgYGBjCi0JcmN1X3JlYWRfbG9jaygpOwogCWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKYGBgCgpBaCwgZ29vZCwgaXQgd2FzIGhvbGRpbmcgdGhlIGxvY2sgYXMgaXQgc2hvdWxkLiBTbyB0aGF0IHVzZSB3YXMgc2FmZS4gQnV0IHdoYXQgYWJvdXQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYD8gV2FzICppdCogaG9sZGluZyB0aGUgUkNVIGxvY2sgd2hlbiBpdCBjYWxsZWQgdGhlIHByb2JsZW1hdGljIGZ1bmN0aW9uPyBOb3cgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGNhbGxzIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIHNwZWNpZmljYWxseSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCwgdG8gc2VlIGlmIHRoZSBsb2NrIHdhcyBiZWluZyBoZWxkLiBMZXQmIzM5O3MgZ28uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ5MDpcdFxuMzQ5MTpcdFx0ZXJyID0geGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwoeCwgeGMsIFx1MDAyNm0sIGV4dGFjayk7XG4zNDkyOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zNDkzOlx0XHRcdC8qXG4zNDk0Olx0XHRcdCAqIFNob3VsZCBub3Qgb2NjdXI6IHByZS1jaGVjayBhYm92ZSBlbnN1cmVzIHRoZSBuZXcgdHVwbGUgaXNcbjM0OTU6XHRcdFx0ICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lcztcbjM0OTY6XHRcdFx0ICogcmVzdG9yaW5nIHggd291bGQgcmlzayBTTi9JViByZXVzZS5cbjM0OTc6XHRcdFx0ICovXG4zNDk4Olx0XHRcdGdvdG8gb3V0O1xuMzQ5OTpcdFx0fVxuMzUwMDpcdFxuMzUwMTpcdFx0LyogUmVzdG9yZSBlbmNhcCBjbGVhcmVkIGJ5IHNlbnRpbmVsICh0eXBlPTApIGR1cmluZyBtaWdyYXRpb24uICovXG4zNTAyOlx0XHRpZiAoYXR0cnNbWEZSTUFfRU5DQVBdKVxuMzUwMzpcdFx0XHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcbjM1MDQ6XHRcbjM1MDU6XHRcdG0ubmV3X3NlbCA9IFx1MDAyNnhjLVx1MDAzZXNlbDtcbjM1MDY6XHRcdG0ubWFwcGluZ19tYXhhZ2UgPSB4Yy1cdTAwM2VtYXBwaW5nX21heGFnZTtcbjM1MDc6XHRcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG4zNTA4Olx0XG4zNTA5Olx0XHRlcnIgPSB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShuZXQsIHVtLCBcdTAwMjZtLCB4Yy1cdTAwM2VkaXIsXG4zNTEwOlx0XHRcdFx0XHQgICAgICBubGgtXHUwMDNlbmxtc2dfcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxKTtcbjM1MTE6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjM1MTI6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCBtaWdyYXRpb24gbm90aWZpY2F0aW9uXCYjMzQ7KTtcbjM1MTM6XHRcdFx0ZXJyID0gMDtcbjM1MTQ6XHRcdH1cbjM1MTU6XHRcbjM1MTY6XHRvdXQ6XG4zNTE3Olx0XHR4ZnJtX3N0YXRlX3B1dCh4KTtcbjM1MTg6XHRcdHJldHVybiBlcnI7XG4zNTE5Olx0b3V0X3hjOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgZm9yIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMgd2l0aCBSQ1UgaW4geGZybV9zZW5kX21pZ3JhdGUqKgoKUmlnaHQsIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQgaGVyZS4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHhmcm1fc2VuZF9taWdyYXRlYCwgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGNvcnJlY3RseSBoYW5kbGluZyBSQ1UgcmVhZHMuIFRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gSWYgaXQgd2VyZSwgaXQgd291bGQgYmUgYSBjcml0aWNhbCBvdmVyc2lnaHQuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZWAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gc2NydXRpbml6ZSBpdHMgaW1wbGVtZW50YXRpb24g4oCTIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGVyZSBSQ1UgcmVhZCBsb2NrcyBtaWdodCBiZSBtaXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBhY2Nlc3NpbmcgZGF0YSB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGJlaW5nIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgd2luZG93cyB3aGVyZSBhIHdyaXRlIG9wZXJhdGlvbiBjb3VsZCBpbnRlcmZlcmUgd2l0aCBhIHJlYWQgb3BlcmF0aW9uIGlmIHRoZXJlJiMzOTtzIG5vIHN5bmNocm9uaXphdGlvbiBpbiBwbGFjZS4gSSBoYXZlIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGByY3VfcmVhZF9sb2NrKClgIChvciBlcXVpdmFsZW50IFJDVSByZWFkIHByaW1pdGl2ZXMpIGFuZCwgZXF1YWxseSBpbXBvcnRhbnRseSwgd2hlcmUgdGhlIGNvcnJlc3BvbmRpbmcgYHJjdV9yZWFkX3VubG9jaygpYCBpcyBiZWluZyBjYWxsZWQgdG8gcHJvdGVjdCB0aGVzZSByZWFkcy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2MzA6XHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcbjM2MzE6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIGludCBudW1fbWlncmF0ZSxcbjM2MzI6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2ttYWRkcmVzcyAqaywgc3RydWN0IG5ldCAqbmV0LFxuMzYzMzpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXG4zNjM0Olx0e1xuMzYzNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjM2MzY6XHRcdGludCBlcnI7XG4zNjM3Olx0XG4zNjM4Olx0XHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX21zZ3NpemUobnVtX21pZ3JhdGUsICEhaywgISFlbmNhcCksXG4zNjM5Olx0XHRcdFx0R0ZQX0FUT01JQyk7XG4zNjQwOlx0XHRpZiAoc2tiID09IE5VTEwpXG4zNjQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzY0MjpcdFxuMzY0MzpcdFx0LyogYnVpbGQgbWlncmF0ZSAqL1xuMzY0NDpcdFx0ZXJyID0gYnVpbGRfbWlncmF0ZShza2IsIG0sIG51bV9taWdyYXRlLCBrLCBzZWwsIGVuY2FwLCBkaXIsIHR5cGUpO1xuMzY0NTpcdFx0QlVHX09OKGVyciBcdTAwM2MgMCk7XG4zNjQ2Olx0XG4zNjQ3Olx0XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbjM2NDg6XHR9XG4zNjQ5Olx0I2Vsc2VcbjM2NTA6XHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcbjM2NTE6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIGludCBudW1fbWlncmF0ZSxcbjM2NTI6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2ttYWRkcmVzcyAqaywgc3RydWN0IG5ldCAqbmV0LFxuMzY1MzpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXG4zNjU0Olx0e1xuMzY1NTpcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbjM2NTY6XHR9XG4zNjU3Olx0I2VuZGlmXG4zNjU4Olx0XG4zNjU5Olx0I2RlZmluZSBYTVNHU0laRSh0eXBlKSBzaXplb2Yoc3RydWN0IHR5cGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pZ3JhdGlvbiBvZiBYRlJNIFRyYWZmaWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIHBhY2tldCBtaWdyYXRpb24gcHJvY2VzcyB3aXRoaW4gWEZSTSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcG9saWN5IGNoYW5nZXMuIEkgcmVjYWxsIHNlZWluZyBgeGZybV9zZW5kX21pZ3JhdGVgIG1lbnRpb25lZCBhbmQgbm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgY29udHJvbCBmbG93LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIG1vdmluZyB0cmFmZmljIHRvIHRoZSBuZXcgcG9saWN5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgY29uZmlybWluZyBpdHMgY2FsbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgaW5kZWVkIGNhbGxlZCBmcm9tIHdpdGhpbiBgeGZybV9taWdyYXRlYC4gUXVpY2tseSwgSSYjMzk7bGwganVtcCBpbnRvIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBhbmQgbWFrZSBhIHF1aWNrIGNvZGUgaW5zcGVjdGlvbiB0byB2ZXJpZnkgdGhpcyBjYWxsIGNoYWluLCBgeGZybV9taWdyYXRlYCAtJmd0OyBgeGZybV9zZW5kX21pZ3JhdGVgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zZW5kX21pZ3JhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMxMT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjQ6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI1LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MDgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTA5Olx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1ODM9c3RhdGljIGludCBidWlsZF9taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzYyOS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2MzA6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjMxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDktI2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NTA6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDM9c3RhdGljIHN0cnVjdCB4ZnJtX21nciBuZXRsaW5rX21nciA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA4LVx0LnJlcG9ydFx0XHQ9IHhmcm1fc2VuZF9yZXBvcnQsXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjA5Olx0Lm1pZ3JhdGVcdD0geGZybV9zZW5kX21pZ3JhdGUsXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjEwLVx0Lm5ld19tYXBwaW5nXHQ9IHhmcm1fc2VuZF9tYXBwaW5nLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRlJNIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBgeGZybV9zZW5kX21pZ3JhdGVgIGlzIGhvb2tlZCB1cCB1bmRlciB0aGUgYG5ldGxpbmtfbWdyYCBhcyB0aGUgbWlncmF0aW9uIGhhbmRsZXIsIHNwZWNpZmljYWxseSBuYW1lZCBgbWlncmF0ZWAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyBvZiBga21fbWlncmF0ZWAuIEtub3dpbmcgd2hlcmUgYW5kIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgWEZSTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttX21pZ3JhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjU2PWludCB4ZnJtX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDcxOS1cdC8qIFN0YWdlIDUgLSBhbm5vdW5jZSAqL1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NzIwOlx0a21fbWlncmF0ZShzZWwsIGRpciwgdHlwZSwgbSwgbnVtX21pZ3JhdGUsIGssIG5ldCwgZW5jYXApO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzIxLVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yODg0PUVYUE9SVF9TWU1CT0woa21fcG9saWN5X2V4cGlyZWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODg2LSNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjg4NzppbnQga21fbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg4OC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBpbnQgbnVtX21pZ3JhdGUsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MDctfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5MDg6RVhQT1JUX1NZTUJPTChrbV9taWdyYXRlKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTA5LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQyMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqWEZSTSBTdGF0ZSBNaWdyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG1pZ3JhdGlvbiBvZiBYRlJNIHN0YXRlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgYGttX21pZ3JhdGVgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgWEZSTSBzdGF0ZSB0cmFuc2l0aW9ucyBvY2N1ciwgc28gaXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB3aGF0IGNvdWxkIGJlIGdvaW5nIHdyb25nIGFuZCBwaW5wb2ludGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaG9sZHMgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4ODc6XHRpbnQga21fbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4yODg4Olx0XHQgICAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuMjg4OTpcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2ttYWRkcmVzcyAqaywgc3RydWN0IG5ldCAqbmV0LFxuMjg5MDpcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgKmVuY2FwKVxuMjg5MTpcdHtcbjI4OTI6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuMjg5MzpcdFx0aW50IHJldDtcbjI4OTQ6XHRcdHN0cnVjdCB4ZnJtX21nciAqa207XG4yODk1Olx0XG4yODk2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yODk3Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrbSwgXHUwMDI2eGZybV9rbV9saXN0LCBsaXN0KSB7XG4yODk4Olx0XHRcdGlmIChrbS1cdTAwM2VtaWdyYXRlKSB7XG4yODk5Olx0XHRcdFx0cmV0ID0ga20tXHUwMDNlbWlncmF0ZShzZWwsIGRpciwgdHlwZSwgbSwgbnVtX21pZ3JhdGUsIGssXG4yOTAwOlx0XHRcdFx0XHRcdCAgbmV0LCBlbmNhcCk7XG4yOTAxOlx0XHRcdFx0aWYgKCFyZXQpXG4yOTAyOlx0XHRcdFx0XHRlcnIgPSByZXQ7XG4yOTAzOlx0XHRcdH1cbjI5MDQ6XHRcdH1cbjI5MDU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjkwNjpcdFx0cmV0dXJuIGVycjtcbjI5MDc6XHR9XG4yOTA4Olx0RVhQT1JUX1NZTUJPTChrbV9taWdyYXRlKTtcbjI5MDk6XHQjZW5kaWZcbjI5MTA6XHRcbjI5MTE6XHRpbnQga21fcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHhmcm1fYWRkcmVzc190ICphZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqUkNVIExvY2sgU2hlbmFuaWdhbnMgaW4gdGhlIFhGUk0gTWlncmF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtaWdyYXRpb24gY29kZS4gVGhlIGtleSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBrbV9taWdyYXRlYCDigJMgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSB0cmFja2luZyDigJMgKmhvbGRzKiB0aGUgYHJjdV9yZWFkX2xvY2soKWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IGNvbnRleHQuCgpOb3csIGB4ZnJtX3NlbmRfbWlncmF0ZWAgaXRzZWxmLCB3aGljaCwgaWYgSSYjMzk7bSByZWNhbGxpbmcgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSB0aGUgYGttLSZndDttaWdyYXRlYCBmdW5jdGlvbiBwb2ludGVyLCBnZXRzIGNhbGxlZCB3aXRoIHRoYXQgUkNVIHJlYWQgbG9jayBhbHJlYWR5IGVzdGFibGlzaGVkLiBTbyBmYXIsIHNvIGdvb2QsIHRoaXMgYWxpZ25zIHdpdGggbXkgZ2VuZXJhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXMgYXJlIG1lYW50IHRvIGJlIHVzZWQuIEkgd29uZGVyIHdoYXQgd2Ugc2VlIGFib3V0IGl0cyBjb3VzaW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYD8gQWgsIHllcywgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgcmV2aXNpdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGV0aWVzIHRoZXJlIHdpdGggcmVzcGVjdCB0byBSQ1UgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0OTA6XHRcbjM0OTE6XHRcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcdTAwMjZtLCBleHRhY2spO1xuMzQ5MjpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMzQ5MzpcdFx0XHQvKlxuMzQ5NDpcdFx0XHQgKiBTaG91bGQgbm90IG9jY3VyOiBwcmUtY2hlY2sgYWJvdmUgZW5zdXJlcyB0aGUgbmV3IHR1cGxlIGlzXG4zNDk1Olx0XHRcdCAqIGZyZWUgdW5kZXIgeGZybV9jZmdfbXV0ZXguIEJvdGggU0FzIGFyZSBnb25lIGlmIGl0IGRvZXM7XG4zNDk2Olx0XHRcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXG4zNDk3Olx0XHRcdCAqL1xuMzQ5ODpcdFx0XHRnb3RvIG91dDtcbjM0OTk6XHRcdH1cbjM1MDA6XHRcbjM1MDE6XHRcdC8qIFJlc3RvcmUgZW5jYXAgY2xlYXJlZCBieSBzZW50aW5lbCAodHlwZT0wKSBkdXJpbmcgbWlncmF0aW9uLiAqL1xuMzUwMjpcdFx0aWYgKGF0dHJzW1hGUk1BX0VOQ0FQXSlcbjM1MDM6XHRcdFx0bS5lbmNhcCA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX0VOQ0FQXSk7XG4zNTA0Olx0XG4zNTA1Olx0XHRtLm5ld19zZWwgPSBcdTAwMjZ4Yy1cdTAwM2VzZWw7XG4zNTA2Olx0XHRtLm1hcHBpbmdfbWF4YWdlID0geGMtXHUwMDNlbWFwcGluZ19tYXhhZ2U7XG4zNTA3Olx0XHRtLm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSB4Yy1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xuMzUwODpcdFxuMzUwOTpcdFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxuMzUxMDpcdFx0XHRcdFx0ICAgICAgbmxoLVx1MDAzZW5sbXNnX3BpZCwgbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4zNTExOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zNTEyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIHNlbmQgbWlncmF0aW9uIG5vdGlmaWNhdGlvblwmIzM0Oyk7XG4zNTEzOlx0XHRcdGVyciA9IDA7XG4zNTE0Olx0XHR9XG4zNTE1Olx0XG4zNTE2Olx0b3V0OlxuMzUxNzpcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4zNTE4Olx0XHRyZXR1cm4gZXJyO1xuMzUxOTpcdG91dF94YzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSQ1UgTG9jayBpbiBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBuZWVkIHRvIGNsYXJpZnk6IGRvZXMgaXQgaG9sZCBhbiBSQ1UgcmVhZCBsb2NrPyBJdCYjMzk7cyBhIG5ldGxpbmsgYGRvaXRgIGhhbmRsZXIsIGFuZCB0aG9zZSBnZW5lcmFsbHkgKmRvbiYjMzk7dCogaG9sZCBSQ1UgcmVhZCBsb2NrcyBieSBkZWZhdWx0LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWchIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3YXMgY2FsbGluZyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhvdXQgdGhlIG5lY2Vzc2FyeSBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBhIHByb2JsZW0uCgpBbmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB1c2VzIGByY3VfZGVyZWZlcmVuY2UobmV0LSZndDt4ZnJtLm5sc2spYC4gVGhhdCBtZWFucyBgeGZybV9kb19taWdyYXRlX3N0YXRlYCB3YXMgbGlrZWx5IHRyaWdnZXJpbmcgYW4gUkNVIHdhcm5pbmcgb3IgYSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzLCBvYnZpb3VzbHksIG5vdCBpZGVhbC4KClNvIHRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHNoaWZ0aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjYWxsIGludG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpdHNlbGYsIHdoaWNoIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBOb3cgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlmIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgbm93IHRha2luZyB0aGUgbG9jayBpbnRlcm5hbGx5LCB3aGF0IGFib3V0IHRoZSBjYWxsZXJzIHRoYXQgKmFscmVhZHkqIGhvbGQgYW4gUkNVIHJlYWQgbG9jaz8gQnV0IHdhaXQsIFJDVSByZWFkIGxvY2tzIGNhbiBiZSBuZXN0ZWQsIHNvIHRoYXQmIzM5O3MgcGVyZmVjdGx5IGZpbmUuIENyaXNpcyBhdmVydGVkLCBzb3J0IG9mLgoKTm93IEkgbmVlZCB0byBjaGVjay4gQXJlIHRoZXJlIG90aGVyIGNhbGxlcnMgb2YgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0aGF0ICpkaWRuJiMzOTt0KiBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrIGJlZm9yZSB0aGlzIGNoYW5nZT8gVGhlIHBhdGNoIGFsc28gbW9kaWZpZWQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIGJ5IHJlbW92aW5nIGFuIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgLiBPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHVuZGVyc3RhbmQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIHdhcyBtb2RpZmllZCwgYnV0IHdoeSB3YXMgdGhlIGV4cGxpY2l0IGxvY2sgcmVtb3ZlZCB0aGVyZSwgYnV0IG5vdCBpbiBga21fbWlncmF0ZWA/CgpBaCwgcmlnaHQsIGBrbV9taWdyYXRlYCBpdGVyYXRlcyBvdmVyIGB4ZnJtX2ttX2xpc3RgIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAuIFRoZSBSQ1UgcmVhZCBsb2NrIGlzIG5lY2Vzc2FyeSBmb3IgdGhhdCBsaXN0IGl0ZXJhdGlvbiBpdHNlbGYsIG5vdCBqdXN0IGZvciB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLiBHb3QgaXQuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MTg6XHRzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuMjUxOTpcdHtcbjI1MjA6XHRcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXA7XG4yNTIxOlx0XHRpbnQgbGVuID0gTkxNU0dfQUxJR04oc2l6ZW9mKCp1cCkpO1xuMjUyMjpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4yNTIzOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMjUyNDpcdFx0aW50IGVycjtcbjI1MjU6XHRcbjI1MjY6XHRcdHNrYiA9IG5sbXNnX25ldyhsZW4sIEdGUF9BVE9NSUMpO1xuMjUyNzpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuMjUyODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI1Mjk6XHRcbjI1MzA6XHRcdG5saCA9IG5sbXNnX3B1dChza2IsIDAsIDAsIFhGUk1fTVNHX0dFVERFRkFVTFQsIHNpemVvZigqdXApLCAwKTtcbjI1MzE6XHRcdGlmIChubGggPT0gTlVMTCkge1xuMjUzMjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjI1MzM6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjI1MzQ6XHRcdH1cbjI1MzU6XHRcbjI1MzY6XHRcdHVwID0gbmxtc2dfZGF0YShubGgpO1xuMjUzNzpcdFx0dXAtXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dKTtcbjI1Mzg6XHRcdHVwLVx1MDAzZWZ3ZCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcbjI1Mzk6XHRcdHVwLVx1MDAzZW91dCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdKTtcbjI1NDA6XHRcbjI1NDE6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG4yNTQyOlx0XG4yNTQzOlx0XHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG4yNTQ0Olx0XG4yNTQ1Olx0XHRyZXR1cm4gZXJyO1xuMjU0NjpcdH1cbjI1NDc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBDYWxsIGZyb20gYHhmcm1fc2V0X2RlZmF1bHRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHBvbGljeSB1cGRhdGVzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyB3aGVyZSB3ZSYjMzk7cmUgZXN0YWJsaXNoaW5nIHRoZSAqaW5pdGlhbCogZGVmYXVsdCBwb2xpY3kgZm9yIGEgc2VjdXJpdHkgYXNzb2NpYXRpb24gb3IgYSBzcGVjaWZpYyBhZGRyZXNzIGZhbWlseSwgYW5kIHdlIG5lZWQgdG8gY29tbXVuaWNhdGUgdGhpcyB0byB0aGUgdXNlcnNwYWNlIHNvbWVob3cuCgpUaGUgY2FsbCB0byBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgZnJvbSAqd2l0aGluKiBgeGZybV9zZXRfZGVmYXVsdGAgaXMgdGVsbGluZyBtZSB0aGF0LCB3aGVuZXZlciBhIGRlZmF1bHQgcG9saWN5IGlzIHNldCwgd2UmIzM5O3JlIGltbWVkaWF0ZWx5IG5vdGlmeWluZyBhbnkgdXNlci1zcGFjZSBwcm9jZXNzZXMgKHByZXN1bWFibHkgdGhvc2UgcmVnaXN0ZXJlZCBmb3IgcG9saWN5IGNoYW5nZSBub3RpZmljYXRpb25zIHZpYSBuZXRsaW5rIG9yIHNpbWlsYXIgbWVjaGFuaXNtcykuIFRoaXMgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIGJlY2F1c2UgdXNlcnNwYWNlIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHRoZSAqY3VycmVudCogZWZmZWN0aXZlIHBvbGljeSwgZXNwZWNpYWxseSB3aGVuIGl0JiMzOTtzIHRoZSAqZGVmYXVsdCouIE90aGVyd2lzZSwgeW91JiMzOTtkIGVuZCB1cCB3aXRoIHVucHJlZGljdGFibGUgYmVoYXZpb3IuCgpJJiMzOTttIGNoZWNraW5nIHRoYXQgdGhpcyBjYWxsIGlzIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gYnVpbGQgdGhlIHByb3BlciBuZXRsaW5rIG1lc3NhZ2UsIGFuZCB0aGF0IGFueSBwb3RlbnRpYWwgZXJyb3JzIChsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIG9yIGlzc3VlcyB3aXRoIHRoZSBuZXRsaW5rIHNvY2tldCkgYXJlIHByb3Blcmx5IGhhbmRsZWQgb3IgZ3JhY2VmdWxseSBkZWdyYWRlZC4gSWRlYWxseSwgaXQmIzM5O3MgZWZmaWNpZW50LCB1c2luZyBvbmx5IHRoZSBuZWNlc3NhcnkgZGF0YSB0byBjb252ZXkgdGhlIHBvbGljeSBjaGFuZ2VzIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb3BpZXMuIFRoZSB0aW1pbmcgaXMgYWxzbyBpbXBvcnRhbnQ7IGl0IG5lZWRzIHRvIGJlICphZnRlciogdGhlIHBvbGljeSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IGludGVybmFsbHksIGJ1dCAqYmVmb3JlKiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQuIEEgbWlzc2VkIG5vdGlmaWNhdGlvbiBjb3VsZCBjcmVhdGUgYSB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eSBvciBhbiBpbmNvcnJlY3QgZXhwZWN0YXRpb24uCgpJJiMzOTttIGFsc28gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBoZXJlLiBDb3VsZCBhIG5vdGlmaWNhdGlvbiBhcnJpdmUgYmVmb3JlIHRoZSBwb2xpY3kgaXMgY29tcGxldGVseSBlZmZlY3RpdmUsIG9yIHZpY2UtdmVyc2E/IEkmIzM5O2xsIHByb2JhYmx5IGludmVzdGlnYXRlIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbm90aWZ5X3VzZXJwb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MjQ5Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fcG9saWN5X25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTE3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MjUxODpzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV91c2VyLmMtMjUxOS17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjU1ND1zdGF0aWMgaW50IHhmcm1fc2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjU3MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NzE6XHR4ZnJtX25vdGlmeV91c2VycG9saWN5KG5ldCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTcyLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8geGZybV9ubG1zZ19tdWx0aWNhc3QgYW5kIFBvdGVudGlhbCBSQ1UgSXNzdWVzKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBhZ2Fpbi4gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCByaXNrIG9mIGRhdGEgcmFjZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIHRoYXQgKmRvbiYjMzk7dCogYWxyZWFkeSBoYXZlIGFuIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgcmVhZCBsb2NrIGhlbGQuIFRoYXQgd291bGQgYmUgYSB2dWxuZXJhYmlsaXR5IHRvIGNvbnNpZGVyLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24sIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIHdoZXJlIGB4ZnJtX3NlbmRfYWNxdWlyZWAgaXMgaW52b2tlZC4gSXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBpbXBvcnRhbnQgZm9yIHZlcmlmeWluZyBkYXRhIGludGVncml0eSBhbmQgcG90ZW50aWFsIFJDVS1yZWxhdGVkIHByb2JsZW1zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3NlbmRfYWNxdWlyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz00MTkzPXN0YXRpYyBpbnQgYnVpbGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjM2LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDIzNzpzdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyMzgtXHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDM9c3RhdGljIHN0cnVjdCB4ZnJtX21nciBuZXRsaW5rX21nciA9IHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MDQtXHQubm90aWZ5XHRcdD0geGZybV9zZW5kX3N0YXRlX25vdGlmeSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MDU6XHQuYWNxdWlyZVx0PSB4ZnJtX3NlbmRfYWNxdWlyZSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MDYtXHQuY29tcGlsZV9wb2xpY3lcdD0geGZybV9jb21waWxlX3BvbGljeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBLZXkgTWFuYWdlbWVudCBQcm9jZXNzKioKCk9rYXksIHNvIGB4ZnJtX3NlbmRfYWNxdWlyZWAgaXMgcmVnaXN0ZXJlZCBhcyBhIG5ldGxpbmsgbWFuYWdlciBhY3F1aXNpdGlvbiBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgYG5ldGxpbmtfbWdyLmFjcXVpcmVgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcga2V5aW5nIG1hdGVyaWFsLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgbmFtZS4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhY3R1YWxseSAqZ2V0cyogdGhlIGtleXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBrbV9xdWVyeWAgd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIHByb2JhYmx5IGF0IHRoZSBoZWFydCBvZiB0aGUga2V5IG1hbmFnZW1lbnQgcXVlcnlpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IGFza2luZyBmb3IgdGhlIGtleSBkYXRhLCBhbmQgd2hpY2ggcHJvY2Vzc2VzIG9yIGZ1bmN0aW9ucyBpdCBpcyBjYWxsaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBrbV9xdWVyeWAgZnVuY3Rpb24gd2lsbCBjb250YWluIHRoZSBsb2dpYyBmb3Igc2VuZGluZyByZXF1ZXN0cyBhbmQgbWFuYWdpbmcgdGhlIGtleSBhY3F1aXNpdGlvbiBsaWZlY3ljbGUsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBrZXkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSBhbmQgbWF5YmUgdGFsa2luZyB0byBzb21lIHVzZXIgc3BhY2UgZGFlbW9uLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgZXhwbG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbV9xdWVyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MjMwPWludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMzEtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjMyOmludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMy1zdGF0aWMgYm9vbCBrbV9pc19hbGl2ZShjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzU2PXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2Ni0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTY3Olx0XHRpZiAoa21fcXVlcnkoeCwgdG1wbCwgcG9sKSA9PSAwKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2OC1cdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjgxOT1FWFBPUlRfU1lNQk9MKGttX3N0YXRlX2V4cGlyZWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODIzLSovXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjgyNDppbnQga21fcXVlcnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3RtcGwgKnQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4MjUte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODM3LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyODM4OkVYUE9SVF9TWU1CT0woa21fcXVlcnkpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4MzktXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzA0ND1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzEwMC1cdFx0dC1cdTAwM2VjYWxnb3MgPSB1YS1cdTAwM2VjYWxnb3M7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTAxOlx0XHRlcnIgPSBrbV9xdWVyeSh4LCB0LCB4cCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBga21fcXVlcnlgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIHNjcnV0aW5pemUgdGhlIGBrbV9xdWVyeWAgaW1wbGVtZW50YXRpb24uJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBJIGtub3cgdGhlIHByaW5jaXBsZXMgb2Yga25vd2xlZGdlIG1hbmFnZW1lbnQsIGFuZCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCBpcyBlZmZpY2llbnRseSBoYW5kbGluZyB0aGUgcmVxdWlyZWQgZGF0YSByZXRyaWV2YWwuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtub3dsZWRnZSBiYXNlLCB3aGV0aGVyIGl0JiMzOTtzIGluZGV4aW5nIGNvcnJlY3RseSwgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBoYW5kbGVzIHF1ZXJ5IHBhcnNpbmcgYW5kIG9wdGltaXphdGlvbi4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGVkZ2UgY2FzZSBoYW5kbGluZywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGluIGEgaGlnaC1sb2FkIHNjZW5hcmlvLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbuKAlHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBxdWVyeSBsYW5ndWFnZSwgdGhlIGNhY2hpbmcgc3RyYXRlZ3nigJRhbGwgbmVlZCBhIGNsb3NlIGV4YW1pbmF0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIG9uIGl0cyB1dGlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgyNDpcdGludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpXG4yODI1Olx0e1xuMjgyNjpcdFx0aW50IGVyciA9IC1FSU5WQUwsIGFjcXJldDtcbjI4Mjc6XHRcdHN0cnVjdCB4ZnJtX21nciAqa207XG4yODI4Olx0XG4yODI5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yODMwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrbSwgXHUwMDI2eGZybV9rbV9saXN0LCBsaXN0KSB7XG4yODMxOlx0XHRcdGFjcXJldCA9IGttLVx1MDAzZWFjcXVpcmUoeCwgdCwgcG9sKTtcbjI4MzI6XHRcdFx0aWYgKCFhY3FyZXQpXG4yODMzOlx0XHRcdFx0ZXJyID0gYWNxcmV0O1xuMjgzNDpcdFx0fVxuMjgzNTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yODM2Olx0XHRyZXR1cm4gZXJyO1xuMjgzNzpcdH1cbjI4Mzg6XHRFWFBPUlRfU1lNQk9MKGttX3F1ZXJ5KTtcbjI4Mzk6XHRcbjI4NDA6XHRzdGF0aWMgaW50IF9fa21fbmV3X21hcHBpbmcoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsIF9fYmUxNiBzcG9ydClcbjI4NDE6XHR7XG4yODQyOlx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjI4NDM6XHRcdHN0cnVjdCB4ZnJtX21nciAqa207XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTY1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJDVSBMb2NrIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBga21fcXVlcnlgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBob2xkaW5nIGFuIGByY3VfcmVhZF9sb2NrKClgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gQWxsIHRob3NlIGBrbV8qYCBmdW5jdGlvbnMgd2l0aGluIGB4ZnJtX3N0YXRlLmNgIGFyZSBncmFiYmluZyB0aGF0IGxvY2sgYmVjYXVzZSB0aGV5JiMzOTtyZSBpdGVyYXRpbmcgb3ZlciB0aGUgYHhmcm1fa21fbGlzdGAuIFNlZW1zIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoaXMgY29kZSBiYXNlLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhbHNvIGdldHRpbmcgY2FsbGVkIGZyb20gYG5ldGxpbmtfbWdyYCBjYWxsYmFja3MuIEFuZCB0aGVzZSBjYWxsYmFja3MgYXJlIGJlaW5nIGludm9rZWQgaW4gYSBjb3VwbGUgb2Ygd2F5cyDigJMgZGlyZWN0bHkgb3IgZnJvbSBuZXRsaW5rIGBkb2l0YCBoYW5kbGVycy4gRm9yIGluc3RhbmNlLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBjYWxscyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGRpcmVjdGx5LiBOb3csIHdhaXQgYSBtaW51dGUuLi4gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgdGhlbiBjYWxscyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBvbmx5IGJlaW5nIGNhbGxlZCBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgPyBMZXQmIzM5O3MgY2hlY2sgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTMzMTE9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzI0OnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyNS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0NT1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUwOTpcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFx1MDAyNm0sIHhjLVx1MDAzZWRpcixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXHRcdFx0XHQgICAgICBubGgtXHUwMDNlbmxtc2dfcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaGEsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCwgd2hpY2ggaXRzZWxmIGlzIGEgbmV0bGluayBkb2l0IGhhbmRsZXIuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiAgQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgaG9sZCBgcmN1X3JlYWRfbG9jaygpYC4KClRoZXJlZm9yZSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgY2FsbGluZyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgICp3aXRob3V0KiB0aGF0IGNydWNpYWwgcmVhZCBsb2NrIGluIHBsYWNlLiBCaW5nbyDigJMgYSByYWNlIGNvbmRpdGlvbiB3YWl0aW5nIHRvIGhhcHBlbi4gVGhlIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHRoaXMgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXRzZWxmLiBUaGF0IG1ha2VzIHNlbnNlLCBjZW50cmFsaXppbmcgdGhlIGxvY2tpbmcgcmVzcG9uc2liaWxpdHkgd2hlcmUgaXQmIzM5O3MgbmVlZGVkLgoKQnV0IG5vdyBteSBleHBlcnQgY3VyaW9zaXR5IGtpY2tzIGluLiBIYXMgdGhpcyBzYW1lIG1pc3Rha2UgYmVlbiBtYWRlIGVsc2V3aGVyZT8gVGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRoYXQgZG9uJiMzOTt0IGFscmVhZHkgaGF2ZSBhbiBSQ1UgcmVhZCBsb2NrPyBMZXQmIzM5O3MgY2hlY2sgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLiBJbnRlcmVzdGluZy4gSXQgKmV4cGxpY2l0bHkqIGhlbGQgYHJjdV9yZWFkX2xvY2soKWAgYmVmb3JlIHRoZSBwYXRjaCB3YXMgYXBwbGllZCwgYW5kIG5vdyB0aGF0IHRoZSBwYXRjaCBoYXMgbGFuZGVkLCBpdCBkb2VzbiYjMzk7dC4gVGhhdCYjMzk7cyBnb29kOyB0aGUgcGF0Y2ggaXMgY2xlYW5lciBub3cuIE9uZSBsZXNzIGxvY2sgdG8gbWFuYWdlLiBXaGF0IGFib3V0IGB4ZnJtX3NlbmRfcmVwb3J0YD8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzdGFjayB0aGVyZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3NlbmRfcmVwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTQ1MDE9c3RhdGljIGludCBidWlsZF9yZXBvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1Mjc6c3RhdGljIGludCB4ZnJtX3NlbmRfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTI4LVx0XHRcdCAgICBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjAzPXN0YXRpYyBzdHJ1Y3QgeGZybV9tZ3IgbmV0bGlua19tZ3IgPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNy1cdC5ub3RpZnlfcG9saWN5XHQ9IHhmcm1fc2VuZF9wb2xpY3lfbm90aWZ5LFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwODpcdC5yZXBvcnRcdFx0PSB4ZnJtX3NlbmRfcmVwb3J0LFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwOS1cdC5taWdyYXRlXHQ9IHhmcm1fc2VuZF9taWdyYXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JrIHNlY3VyaXR5IGV4cGVydDoKCioqSW50ZXJuYWwgTmV0d29yayBTZWN1cml0eSBSZXBvcnRpbmcgUHJvY2VzcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgc2V0IHVwIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgc2VlIHRoYXQgYHhmcm1fc2VuZF9yZXBvcnRgIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0bGlua19tZ3JgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHVuZGVyIHRoZSBuYW1lICYjMzQ7cmVwb3J0LiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCBtZWFucyBhbnl0aW1lIGEgcmVwb3J0IG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBhbmQgc2VudCBvdXQgdXNpbmcgTmV0bGluaywgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZC4gVGhlIGNydWNpYWwgZGV0YWlsIEkmIzM5O20gbG9va2luZyBhdCwgaXMgd2hlcmUgdGhpcyBgeGZybV9zZW5kX3JlcG9ydGAgaXMgdHJpZ2dlcmVkLCBhbmQgSSYjMzk7dmUgc3BvdHRlZCB0aGF0IGl0JiMzOTtzIGludm9rZWQgYnkgYGttX3JlcG9ydGAuIFNvLCBga21fcmVwb3J0YCBpcyBlc3NlbnRpYWxseSB0aGUga2VybmVsIG1vZHVsZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgcmVwb3J0IGdlbmVyYXRpb24sIGFuZCB0aGF0IGNhbGwgaXMgZ29pbmcgdG8gdHJpZ2dlciBzZW5kaW5nIHRoZSBkYXRhIHRvIHVzZXItc3BhY2UgdGhyb3VnaCBgeGZybV9zZW5kX3JlcG9ydGAuIFRoaXMgbWFrZXMgc2Vuc2UsIGl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gcmVwb3J0IGV2ZW50cyBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSB0aHJvdWdoIGEgTmV0bGluayBzb2NrZXQuIFRoaXMgaXMgbGlrZWx5IGhvdyB3ZSBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgWEZSTSBwb2xpY2llcywgU0FzLCBhbmQgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBmb3IgYXVkaXRpbmcsIG1vbml0b3JpbmcsIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttX3JlcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MjkwOD1FWFBPUlRfU1lNQk9MKGttX21pZ3JhdGUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTEwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5MTE6aW50IGttX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTEyLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkyNy19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjkyODpFWFBPUlRfU1lNQk9MKGttX3JlcG9ydCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wb3J0YW5jZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBga21fcmVwb3J0YCBoYXMgYW4gYHJjdV9yZWFkX2xvY2soKWAgaGVsZCwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBtaXNzaW5nIGByY3VfcmVhZF9sb2NrKClgIGluIHRoYXQgc3BlY2lmaWMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgLSZndDsgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCAtJmd0OyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHBhdGguIFRoZSBxdWVzdGlvbiwgb2YgY291cnNlLCBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UganVzdGlmaWVzIGZ1enppbmcgZWZmb3J0LgoKV2VsbCwgdGhpcyBhY3R1YWxseSBmaXhlcyBhbiBSQ1UgdXNlLWFmdGVyLWZyZWUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBSQ1Ugd2FybmluZywgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIE5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBmb3IgYSBtb21lbnQgYW5kIGNvbnNpZGVyIHRoZSBjb250ZXh0LiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgcmVsZXZhbnQuIFdhcyB0aGlzIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBzb21ldGhpbmcgcmVsYXRpdmVseSBuZXc/IE5vLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gYXJvdW5kLiBBbHJpZ2h0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGluZGVlZCByZWFjaGFibGUuIFNpbmNlIGl0JiMzOTtzIGEgbmV0bGluayBoYW5kbGVyLCBpdCYjMzk7cyBpbmhlcmVudGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cywgc28geWVzLiBUaGlzIGZpeCBleHBsaWNpdGx5IHByZXZlbnRzIGFuIFJDVSB3YXJuaW5nIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgZml4ZXMgYSBidWcgd2l0aGluIGEgcmVhY2hhYmxlIG5ldGxpbmsgaGFuZGxlciwgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIHdoYXQgYWJvdXQgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byBjaGVjayB0byBzZWUgd2hhdCBjb25maWdzIGFyZSByZXF1aXJlZC4gYENPTkZJR19YRlJNX1VTRVJgIGlzIG5lZWRlZCwgbG9va2luZyBhdCBgbmV0L3hmcm0veGZybV91c2VyLmNgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEJlc3QgdG8gY29uZmlybSB0aGF0IGluIGBuZXQveGZybS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODc2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBwcm9jZXNzLCB3aXRoIHRoZSBhc3N1bXB0aW9uIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQga2VybmVsIGludGVybmFsczoKCioqSW52ZXN0aWdhdGluZyB0aGUgTmVlZCBmb3IgYFhGUk1fTUlHUkFURWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYFhGUk1fTUlHUkFURWAgaXMgdHJ1bHkgbmVjZXNzYXJ5IGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IGl0IG1pZ2h0IGJlLCBidXQgSSBhbHdheXMgd2FudCB0byBjb25maXJtLiBUaGUgd2hvbGUgcG9pbnQgb2YgdGhlc2UgZmxhZ3MgaXMgdG8gb3B0aW1pemUgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLCBzbyBza2VwdGljaXNtIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KClRvIHJlYWxseSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgYWN0dWFsIG1pZ3JhdGlvbiBsb2dpYyBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCAqZG9lcyosIHVuZGVyIHdoaWNoIGNpcmN1bXN0YW5jZXMgaXQmIzM5O3MgY2FsbGVkLCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBoYXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdCwgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIChpZiBhbnkpIGFyZSBhdmFpbGFibGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBgWEZSTV9NSUdSQVRFYCBwbGF5cyBhIHJvbGUgaW4gdGhlIGZ1bmN0aW9uLCBhbmQgaWYgSSBjYW4gYXZvaWQgaXQgaW4gdGhlIGN1cnJlbnQgc2V0dGluZy4gT25seSBieSBkaXNzZWN0aW5nIHRoZSBhY3R1YWwgY29kZSBjYW4gSSBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdGhpcyBmbGFnIGlzIHRydWx5IGNyaXRpY2FsIG9yIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBlZmZpY2llbnQgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0NC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDU6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjYtI2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1Mjc6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LVx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzktXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODA6XHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgJiMzOTtzIENvbmRpdGlvbmFsIExvZ2ljKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24sIGFuZCBJJiMzOTt2ZSBoaXQgYW4gYCNlbHNlYCBibG9jay4gSW5zdGluY3RpdmVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCAqYXJlbiYjMzk7dCogYmVpbmcgbWV0IHRvIHRyaWdnZXIgdGhpcyBgZWxzZWAgcGF0aC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkgaGVyZT8gVGhpcyBgI2Vsc2VgIGlzIGEgY3JpdGljYWwgYnJhbmNoIHBvaW50LCBwb3RlbnRpYWxseSBoYW5kbGluZyBzb21lIHVudXN1YWwgb3IgZXJyb3ItcHJvbmUgc2NlbmFyaW8gcmVsYXRlZCB0byBzdGF0ZSBtaWdyYXRpb24sIGFuZCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRoLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBndWFyZHMgYW5kIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgdXBzdHJlYW0uIFdoYXQmIzM5O3MgKm5vdCogaGFwcGVuaW5nIHRoYXQgbGVhZHMgdXMgaGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0aG9yb3VnaGx5IGJlZm9yZSBJIHByb2NlZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNDA6XHRcdH1cbjMzNDE6XHRcbjMzNDI6XHRcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuMzM0MzpcdH1cbjMzNDQ6XHRcbjMzNDU6XHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjMzNDY6XHRcdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjMzNDc6XHR7XG4zMzQ4Olx0XHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xuMzM0OTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjMzNTA6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcbjMzNTE6XHRcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xuMzM1MjpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xuMzM1MzpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4zMzU0Olx0XHRpbnQgZXJyO1xuMzM1NTpcdFxuMzM1NjpcdFx0aWYgKCF1bS1cdTAwM2VpZC5zcGkpIHtcbjMzNTc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIFNQSSAweDBcJiMzNDspO1xuMzM1ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMzkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czoKCioqV2hlcmUmIzM5O3MgVGhhdCBQcmVwcm9jZXNzb3IgTWFnaWM/KioKCldhaXQgYSBtaW51dGUsIEkmIzM5O20gc3RhcmluZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyBmZWVscy4uLm9mZi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgY2VydGFpbiBjb25zdHJ1Y3QgaGVyZSwgc29tZXRoaW5nIEkmIzM5O20gdXNlZCB0byB1c2luZyB0byBtYWludGFpbiBkaWZmZXJlbnQgYnVpbGRzLCBhbmQgaXQmIzM5O3Mgc2ltcGx5ICpub3QqIHRoZXJlLiBXaGVyZSYjMzk7cyB0aGUgYCNpZmRlZmA/IFdoZXJlIGFyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcz8gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMsIGJ1dCBpdCYjMzk7cyBub3QgaGVyZS4uLkRpZCBzb21lb25lIHJlbW92ZSBpdD8gSXMgaXQgZGVmaW5lZCBlbHNld2hlcmU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgd2VudCwgb3IgKmlzKiBoYXBwZW5pbmcuIEJlY2F1c2UsIGxldCYjMzk7cyBmYWNlIGl0LCB3aXRob3V0IGl0IHRoaW5ncyBhcmUgZ29pbmcgdG8gZ2V0IHByb2JsZW1hdGljLCBxdWlja2x5LiBOb3csIGlzIHRoZSBwcmVwcm9jZXNzb3IgYmVpbmcgdXNlZCBlZmZlY3RpdmVseSBhdCBhbGwsIG9yIGhhcyBzb21lb25lIGNoYW5nZWQgdGhlIGNvbXBpbGF0aW9uIHN0cmF0ZWd5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzAwOlx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzMwMTpcdFx0fVxuMzMwMjpcdFxuMzMwMzpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbjMzMDQ6XHRcdHJldHVybiAwO1xuMzMwNTpcdFxuMzMwNjpcdG91dF9jYW5jZWw6XG4zMzA3Olx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuMzMwODpcdFx0cmV0dXJuIGVycjtcbjMzMDk6XHR9XG4zMzEwOlx0XG4zMzExOlx0c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuMzMxMjpcdFx0XHRcdFx0XHQgICAgICAgdTggZGlyKVxuMzMxMzpcdHtcbjMzMTQ6XHRcdHJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSkgJiM0MztcbjMzMTU6XHRcdFx0KG0tXHUwMDNlZW5jYXAgPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fZW5jYXBfdG1wbCkpIDogMCkgJiM0MztcbjMzMTY6XHRcdFx0KG0tXHUwMDNleHVvID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCkpIDogMCkgJiM0MztcbjMzMTc6XHRcdFx0KG0tXHUwMDNlbmV3X21hcmsgPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpIDogMCkgJiM0MztcbjMzMTg6XHRcdFx0KChtLVx1MDAzZXNtYXJrLnYgfCBtLVx1MDAzZXNtYXJrLm0pID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICogMiA6IDApICYjNDM7XG4zMzE5Olx0XHRcdChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgJiM0MztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludGVyYWN0cyB3aXRoIHNvbWUgc29ydCBvZiBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBYRlJNIHN1YnN5c3RlbSwgaXMgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSB0aGF0IGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGlmIGl0cyBiZWhhdmlvciBjaGFuZ2VzIGJhc2VkIG9uIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBrZXJuZWwgdmVyc2lvbnMsIG9yIGVuYWJsZWQgZmVhdHVyZXMuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWMgc2NlbmFyaW9zIGxpa2UgbWlncmF0aW9uIG1pZ2h0IGJlIHRvZ2dsZWQgYnkgYSBjb25maWcgb3B0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyB0aG9zZSB0b2dnbGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgcG90ZW50aWFsIHVzZSBjYXNlcyBhbmQgaW1wYWN0IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkuIFRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmYCBhbHNvIHRlbGxzIG1lIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGNvcnJlc3BvbmRpbmcgYCNlbmRpZmAgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byB0cmFjZSB0aHJvdWdoIGRpZmZlcmVudCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjE0OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xOTg1PXN0YXRpYyBpbnQgdmVyaWZ5X3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTg4LVx0Y2FzZSBYRlJNX1BPTElDWV9UWVBFX01BSU46XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTg5OiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTkwLVx0Y2FzZSBYRlJNX1BPTElDWV9UWVBFX1NVQjpcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzgxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4Mi17XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzgzOiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg0LVx0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X3R5cGUpKTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg5LVxubmV0L3hmcm0veGZybV91c2VyLmM6MjM5MDojaWZkZWYgQ09ORklHX1hGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5MS1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMwNDQ9c3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTE5OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTIwLXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzUzND1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0MTojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0Mi1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODc2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZW06CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFhGUk0gTWlncmF0aW9uKioKClJpZ2h0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSByZXF1aXJlbWVudCBoZXJlLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGBYRlJNX01JR1JBVEVgIHRvIGVuc3VyZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGlzIHNvdW5kIGFuZCBhZGRyZXNzZXMgdGhpcyBwYXJ0aWN1bGFyIHJlcXVpcmVtZW50IHByb3Blcmx5LiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fTUlHUkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBYRlJNIE1vZHVsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBYRlJNX01JR1JBVEVgIGFuZCBgWEZSTV9VU0VSYCBhcmUgZW5hYmxlZC4gQnV0IGhhbmcgb24sIGBYRlJNX1VTRVJgIGlzIGEgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY291bGQgYmUgYSBtb2R1bGUuIEhvd2V2ZXIsIGZvciB0aG9yb3VnaCBmdXp6aW5nLCBJJiMzOTtkIHJhdGhlciBoYXZlIGl0IGJ1aWx0LWluLiBUaGF0JiMzOTtzIHRoZSBzYWZlc3Qgb3B0aW9uLgoKTm93LCBhbSBJIG1pc3NpbmcgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEFoYSEgVGhlIHBhdGNoIGFsdGVycyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIGludGVybmFsbHkgYWNxdWlyZSB0aGUgYHJjdV9yZWFkX2xvY2soKWAuIFRoYXQmIzM5O3MgZ29pbmcgdG8gYWZmZWN0ICphbGwqIG9mIGl0cyBjYWxsZXJzLgoKQWgsIHJpZ2h0LiBUaGUgc3BlY2lmaWMgYnVnIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggaXMgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBjYWxsZWQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCwgd2hpY2ggdGhlbiBjYWxsZWQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRob3V0IHRoZSBwcm9wZXIgYHJjdV9yZWFkX2xvY2soKWAuCgpXYWl0IGEgbWludXRlLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAsIGlzbiYjMzk7dCBpdD8gT2theSwgdGltZSB0byBnbyBiYWNrIGFuZCBleGFtaW5lIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEdvdHRhIGJlIG1ldGljdWxvdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM0NTpcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMzM0NjpcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzM0NzpcdHtcbjMzNDg6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XG4zMzQ5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMzM1MDpcdFx0c3RydWN0IHhmcm1fdXNlcl9vZmZsb2FkIHh1byA9IHt9O1xuMzM1MTpcdFx0c3RydWN0IHhmcm1fbWlncmF0ZSBtID0ge307XG4zMzUyOlx0XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeGM7XG4zMzUzOlx0XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbjMzNTQ6XHRcdGludCBlcnI7XG4zMzU1Olx0XG4zMzU2Olx0XHRpZiAoIXVtLVx1MDAzZWlkLnNwaSkge1xuMzM1NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgU1BJIDB4MFwmIzM0Oyk7XG4zMzU4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzM1OTpcdFx0fVxuMzM2MDpcdFxuMzM2MTpcdFx0aWYgKHVtLVx1MDAzZXJlc2VydmVkKSB7XG4zMzYyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UmVzZXJ2ZWQgZmllbGQgbXVzdCBiZSB6ZXJvXCYjMzQ7KTtcbjMzNjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMzY0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDg0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGFyZWFzIG9mIHJlY2VudCBjaGFuZ2Ugd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSB3YXMgbG9va2luZyBhdCB0aGUgcmVjZW50IGNvbW1pdHMsIGFuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGNhbmRpZGF0ZSBhcyBhIGZvY3VzIHN5bWJvbC4gSXQmIzM5O3MgYSBub24taW5saW5lIGZ1bmN0aW9uIGFuZCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggbWFrZXMgaXQgbW9yZSBsaWtlbHkgdG8gYmUgYSBjZW50cmFsIHBvaW50IG9mIHRoZSByZWNlbnQgd29yay4KCk5vdywgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIEJlY2F1c2UgaXQmIzM5O3MgaW5saW5lLCBpdCYjMzk7cyBwcm9iYWJseSBzcHJlYWQgdGhyb3VnaG91dCB0aGUgY29kZSwgd2hpY2ggbWFrZXMgaXQgbGVzcyB1c2VmdWwgYXMgYSBzaW5nbGUgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi4gSXQgd29uJiMzOTt0IGJlIGEgZ29vZCByZXByZXNlbnRhdGl2ZSBvZiB0aGUgYnJvYWRlciBjaGFuZ2VzLCBzbyBJIHNob3VsZCBzZXQgdGhhdCBhc2lkZS4KCldoYXQgZWxzZT8gQWgsIGhlcmUmIzM5O3Mgb25lLCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuIFRoYXQgd2FzIGFsc28gdG91Y2hlZCByZWNlbnRseS4gTGV0IG1lIGNoZWNrIHRoYXQgZnVuY3Rpb24gbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUxODpcdHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4yNTE5Olx0e1xuMjUyMDpcdFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cDtcbjI1MjE6XHRcdGludCBsZW4gPSBOTE1TR19BTElHTihzaXplb2YoKnVwKSk7XG4yNTIyOlx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbjI1MjM6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4yNTI0Olx0XHRpbnQgZXJyO1xuMjUyNTpcdFxuMjUyNjpcdFx0c2tiID0gbmxtc2dfbmV3KGxlbiwgR0ZQX0FUT01JQyk7XG4yNTI3Olx0XHRpZiAoc2tiID09IE5VTEwpXG4yNTI4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjUyOTpcdFxuMjUzMDpcdFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgMCwgMCwgWEZSTV9NU0dfR0VUREVGQVVMVCwgc2l6ZW9mKCp1cCksIDApO1xuMjUzMTpcdFx0aWYgKG5saCA9PSBOVUxMKSB7XG4yNTMyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMjUzMzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjUzNDpcdFx0fVxuMjUzNTpcdFxuMjUzNjpcdFx0dXAgPSBubG1zZ19kYXRhKG5saCk7XG4yNTM3Olx0XHR1cC1cdTAwM2VpbiA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc2MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFBvbGljeSBOb3RpZmljYXRpb24gUGF0aHdheSoqCgpPa2F5LCBzbyBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHhmcm1fc2V0X2RlZmF1bHRgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYHhmcm1fc2V0X2RlZmF1bHRgIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoYXQgY2FsbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIGFuZCBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgcG9saWN5IG5vdGlmaWNhdGlvbiBpcyBiZWluZyB0cmlnZ2VyZWQuIElzIGl0IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIHByb2Nlc3MsIG9yIGlzIGl0IGEgc2lkZSBlZmZlY3QgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBvciBldmVuIG9wdGltaXplPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGV4YW1pbmluZyBgeGZybV9zZXRfZGVmYXVsdGAgd2lsbCBpbGx1bWluYXRlIHRoZSBsb2dpYyBkcml2aW5nIHRoZSBub3RpZmljYXRpb24gYW5kIHdoYXQgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyIGl0LiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBjYW4gbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU1NDpcdHN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjI1NTU6XHRcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yNTU2Olx0e1xuMjU1NzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjI1NTg6XHRcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXAgPSBubG1zZ19kYXRhKG5saCk7XG4yNTU5Olx0XG4yNTYwOlx0XHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVx1MDAzZWluKSlcbjI1NjE6XHRcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0sIHVwLVx1MDAzZWluKTtcbjI1NjI6XHRcbjI1NjM6XHRcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlZndkKSlcbjI1NjQ6XHRcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdLCB1cC1cdTAwM2Vmd2QpO1xuMjU2NTpcdFxuMjU2NjpcdFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cdTAwM2VvdXQpKVxuMjU2NzpcdFx0XHRXUklURV9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0sIHVwLVx1MDAzZW91dCk7XG4yNTY4Olx0XG4yNTY5Olx0XHRydF9nZW5pZF9idW1wX2FsbChuZXQpO1xuMjU3MDpcdFxuMjU3MTpcdFx0eGZybV9ub3RpZnlfdXNlcnBvbGljeShuZXQpO1xuMjU3MjpcdFx0cmV0dXJuIDA7XG4yNTczOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFhGUk0gTmV0bGluayBhbmQgTXVsdGljYXN0aW5nKioKCk9rYXksIHNvIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfU0VUREVGQVVMVGAuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGZvY2FsIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJ1dCBJIG5lZWQgdG8gcmV2aXNpdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjYWxsIGNvbnRleHQuCgpNeSBjb25jZXJuIGlzIHdoZXRoZXIgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBtaWdodCBiZSBpbnZva2VkIGZyb20gbG9jYXRpb25zIHRoYXQgKmRvbiYjMzk7dCogYWxyZWFkeSBob2xkIGByY3VfcmVhZF9sb2NrKClgLiBXZSBwcmV2aW91c2x5IGV4YW1pbmVkIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gQXJlIHRoZXJlICpvdGhlciogY2FsbGVycyBJIG1pc3NlZD8gTGV0JiMzOTtzIHNlZS4uLiBgeGZybV9zdGF0ZV9uZXRsaW5rYD8gTm8sIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBkaXJlY3RseSBjYWxsIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuCgpXYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB3aXRoIGEgcXVpY2sgYGdyZXBgIHNlYXJjaCBmb3IgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gSSYjMzk7bSBnb2luZyB0byByZWx5IG9uIHRoZSBvdXRwdXQgdG8gc2V0dGxlIHRoaXMgYW5kIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9ubG1zZ19tdWx0aWNhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTU5OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjYtICovXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjI3OnN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjgtXHRcdFx0XHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjUxOD1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDItXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTQzOlx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjU0NC1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzI0PXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzQyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQzLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjMwPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ3Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjQ4LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTgyPXN0YXRpYyBpbnQgeGZybV9leHBfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5OTY6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzk5Ny19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk5OT1zdGF0aWMgaW50IHhmcm1fYWV2ZW50X3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDEyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUVWRU5UUyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDEzLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDE1PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2FfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMzctXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDM4Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfU0EpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDA5OT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3NhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxNTE6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUyLVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQyMzc9c3RhdGljIGludCB4ZnJtX3NlbmRfYWNxdWlyZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqeHQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDI1MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQyNTE6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BQ1FVSVJFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNTItfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNjA9c3RhdGljIGludCB4ZnJtX2V4cF9wb2xpY3lfbm90aWZ5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MzcyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDM3MzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mzc0LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00Mzc2PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfcG9saWN5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDM5LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDQ0MDpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQxLVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ0NDc9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3lfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDY4Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NjktXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDUyNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90byxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTM5LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDU0MDpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1JFUE9SVCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTQxLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NTc1PXN0YXRpYyBpbnQgeGZybV9zZW5kX21hcHBpbmcoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDU5NC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1OTU6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NQVBQSU5HKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGVzZSBgbmV0bGlua19tZ3JgIGNhbGxiYWNrcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlbSBhcmUgY2FsbGVkIHdpdGhpbiB0aGUgYGttXypgIGZ1bmN0aW9ucyBmcm9tIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlIGtub3csIHByb3RlY3QgdGhlaXIgaXRlcmF0aW9ucyBvdmVyIGB4ZnJtX2ttX2xpc3RgIHdpdGggYHJjdV9yZWFkX2xvY2soKWAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGNlcHRpb25zLiBJIGhhdmU6CgoqICAgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgOiBDYWxsZWQgZnJvbSBgeGZybV9zZXRfZGVmYXVsdGAsIHdoaWNoIGV4cGxpY2l0bHkgKnVzZWQqIHRvIGhvbGQgYHJjdV9yZWFkX2xvY2soKWAgKGFjY29yZGluZyB0byBteSBub3RlcywgYSBwcmV2aW91cyBwYXRjaCByZW1vdmVkIHRoaXMpLiBUaGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1dHVyZSB2ZXJpZmljYXRpb24uCiogICBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgOiBDYWxsZWQgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gKlRoaXMqIG9uZSwgaW1wb3J0YW50bHksICpkaWRuJiMzOTt0KiBob2xkIGByY3VfcmVhZF9sb2NrKClgLCB3aGljaCBJJiMzOTttIGluZmVycmluZyBpcyB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgoKU28sIHRoZSBpc3N1ZSBhcHBlYXJzIHRvIGJlIHBpbnBvaW50ZWQgdG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byBkcmlsbCBpbnRvICp0aGF0KiBmdW5jdGlvbiBub3cuIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyBhbHNvIHdvcnRoIGEgbG9vayBiZWNhdXNlIGl0IGNhbGxzIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YC4KCkFscmlnaHQsIGJhY2sgdG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIENhbiB0aGlzIGZ1bmN0aW9uIGJlIHJlYWNoZWQgZnJvbSB1c2VyIHNwYWNlPyAqWWVzKiwgaXQmIzM5O3MgaGFuZGxpbmcgYSBuZXRsaW5rIGNhbGwgZm9yIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYC4gQWhhLCBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgaXMgYSBuZXRsaW5rIG1lc3NhZ2UgdHlwZS4gSSBzaG91bGQgbm93IGxvb2sgYXQgYHhmcm1fdXNlci5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hGUk1fTVNHX01JR1JBVEVfU1RBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9jb21wYXQuYz03ND1zdGF0aWMgY29uc3QgaW50IGNvbXBhdF9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtOTctXHRbWEZSTV9NU0dfTUFQUElORyAgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9tYXBwaW5nKSxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmM6OTg6XHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtOTktfTtcbi0tXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jPTEzOT1zdGF0aWMgc3RydWN0IG5sbXNnaGRyICp4ZnJtX25sbXNnX3B1dF9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTE2NS1cdGNhc2UgWEZSTV9NU0dfTUlHUkFURTpcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmM6MTY2Olx0Y2FzZSBYRlJNX01TR19NSUdSQVRFX1NUQVRFOlxubmV0L3hmcm0veGZybV9jb21wYXQuYy0xNjctXHRjYXNlIFhGUk1fTVNHX05FV1NBRElORk86XG4tLVxubmV0L3hmcm0veGZybV9jb21wYXQuYz00Nzk9c3RhdGljIGludCB4ZnJtX3hsYXRlMzIoc3RydWN0IG5sbXNnaGRyICpkc3QsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqc3JjLFxuLS1cbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtNTAyLVx0Y2FzZSBYRlJNX01TR19NSUdSQVRFOlxubmV0L3hmcm0veGZybV9jb21wYXQuYzo1MDM6XHRjYXNlIFhGUk1fTVNHX01JR1JBVEVfU1RBVEU6XG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTUwNC1cdGNhc2UgWEZSTV9NU0dfTkVXU0FESU5GTzpcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2MDU9c3RhdGljIGludCB4ZnJtX21pZ3JhdGVfY2hlY2soY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDY0Mi0gKiBGaWxsIG1pZ3JhdGUgZmllbGRzIHRoYXQgYXJlIGludmFyaWFudCBpbiBYRlJNX01TR19NSUdSQVRFOiBpbmhlcml0ZWRcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDY0MzogKiBmcm9tIHRoZSBleGlzdGluZyBTQSB1bmNoYW5nZWQuIFhGUk1fTVNHX01JR1JBVEVfU1RBVEUgY2FuIHVwZGF0ZSB0aGVzZS5cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDY0NC0gKi9cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY2xvbmVfYW5kX3NldHVwKHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTg0LVx0bWVtY3B5KFx1MDAyNngtXHUwMDNlaWQsIFx1MDAyNm9yaWctXHUwMDNlaWQsIHNpemVvZih4LVx1MDAzZWlkKSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk4NTpcdGlmIChtLVx1MDAzZW1zZ190eXBlID09IFhGUk1fTVNHX01JR1JBVEVfU1RBVEUpIHtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTg2LVx0XHRpZiAobS1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzEyMD1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMzUtXHRtYS1cdTAwM2VuZXdfc2VsICA9IFx1MDAyNnVtLVx1MDAzZW5ld19zZWw7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTM2Olx0bWEtXHUwMDNlbXNnX3R5cGUgPSBYRlJNX01TR19NSUdSQVRFX1NUQVRFO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzEzNy19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzI0Mz1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjUxLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzI1MjpcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBYRlJNX01TR19NSUdSQVRFX1NUQVRFLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI1My1cdFx0XHRzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSwgMCk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzUyNz1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MzA6XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgaXMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTMxLVx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjYxPWNvbnN0IGludCB4ZnJtX21zZ19taW5bWEZSTV9OUl9NU0dUWVBFU10gPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4NS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NjpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSksXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjg3LX07XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MDpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLX07XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc4Mz1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzgxMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4MTI6XHRpZiAodHlwZSA9PSBYRlJNX01TR19NSUdSQVRFX1NUQVRFKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODEzLVx0XHRpbnQgaTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODI5LVx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIGF0dHJzW2ldLFxubmV0L3hmcm0veGZybV91c2VyLmM6MzgzMDpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7VW5zdXBwb3J0ZWQgYXR0cmlidXRlIGluIFhGUk1fTVNHX01JR1JBVEVfU1RBVEVcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzgzMS1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBYRlJNIFN0YXRlIE1pZ3JhdGlvbiBhbmQgRGVmYXVsdCBTZXR0aW5ncyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBpbmRlZWQgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZS4gVGhhdCBtYWtlcyBpdCBhIG5ldGxpbmsgaGFuZGxlciwgd2hpY2ggaXMgZXhjZWxsZW50IOKAkyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZm9jdXNlZCBhbmFseXNpcy4gVGhpcyBpcyBzb2xpZC4gTm93IEkgc2hvdWxkIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGB4ZnJtX3NldF9kZWZhdWx0YCwgd2hpY2gsIGZyb20gd2hhdCBJJiMzOTt2ZSBzZWVuLCBoYW5kbGVzIGBYRlJNX01TR19TRVRERUZBVUxUYC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBYRlJNX01TR19TRVRERUZBVUxUYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbmFsaXR5IGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9NU0dfU0VUREVGQVVMVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zNjYxPWNvbnN0IGludCB4ZnJtX21zZ19taW5bWEZSTV9OUl9NU0dUWVBFU10gPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4My1cdFtYRlJNX01TR19NQVBQSU5HICAgICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VyX21hcHBpbmcpLFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NDpcdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4NS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzctXHRbWEZSTV9NU0dfR0VUU1BESU5GTyAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9zcGRpbmZvICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3Nzg6XHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzktXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBYRlJNIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIGFsc28gYSBuZXRsaW5rIGhhbmRsZXIsIGp1c3QgbGlrZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gQm90aCBvZiB0aGVzZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGZ1enppbmcuIExldCBtZSBzdW1tYXJpemUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZpeDoKClRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZSBvciBhIHdhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gd2FzIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgd2FzIGNhbGxpbmcgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aGljaCB0aGVuIGNhbGxzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aG91dCBob2xkaW5nIHRoZSBuZWNlc3NhcnkgYHJjdV9yZWFkX2xvY2soKWAuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoYXQgbG9jayBpbnRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXRzZWxmLgoKVGhleSYjMzk7dmUgYWxzbyBjbGVhbmVkIHVwIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBieSByZW1vdmluZyBpdHMgZXhwbGljaXQgYHJjdV9yZWFkX2xvY2soKWAgc2luY2UgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBub3cgaGFuZGxlcyB0aGF0LiBJdCBsb29rcyBsaWtlIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YC4gU2luY2UgYm90aCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGFyZSBuZXRsaW5rIGhhbmRsZXJzIGFuZCB1c2VyLXNwYWNlIGFjY2Vzc2libGUsIHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGZ1enppbmcuIEZ1bmN0aW9uYWxseSwgaXQgZml4ZXMgYSBidWcsIHNvIGl0JiMzOTtzIGEgd29ydGh3aGlsZSBlbmRlYXZvci4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYC4gV2FpdCBhIHNlY29uZOKApiBgWEZSTV9VU0VSYCBpcyBhIHRyaXN0YXRlLCBpc24mIzM5O3QgaXQ/IFNob3VsZCBJIGFsc28gY29uc2lkZXIgYFhGUk1gPyBgWEZSTWAgaXMgYSBib29sZWFuLCBhbmQgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L3hmcm0vS2NvbmZpZ2AganVzdCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgZGVwZW5kZW5jaWVzIHJpZ2h0IGJlZm9yZSBJIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzA4CgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDYwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzLiBUaGUgcHJpbWFyeSBnb2FscyBmb3IgbXkgY29uZmlndXJhdGlvbiBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoZXNlIHNlZW0gZXNzZW50aWFsLCBnaXZlbiB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaW52b2x2ZXMgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgbWlncmF0aW9uIG9mIFhGUk0gc3RhdGVzLgoKTm93LCBsZXQmIzM5O3MgdGFsayBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGFzIHN5bWJvbHMuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGFuZCBgeGZybV9zZXRfZGVmYXVsdGAgaW4gYEZvY3VzU3ltYm9sc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIG1vc3QgY3JpdGljYWwgcG9pbnRzIG9mIGVudHJ5LiBUaGV5JiMzOTtyZSB0aGUgbmV0bGluayBoYW5kbGVycyBpbnZvbHZlZCBpbiBib3RoIG1pZ3JhdGluZyBzdGF0ZXMgYW5kIHNldHRpbmcgZGVmYXVsdHMsIHdoaWNoIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBmaXggZm9yIHRoZSBSQ1UgdXNlLWFmdGVyLWZyZWUvd2FybmluZy4KCkkgZGlkIGEgYml0IG9mIGR1ZSBkaWxpZ2VuY2UgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIEZpcnN0LCBJIHF1aWNrbHkgY2hlY2tlZCBpZiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdhcyBzdGF0aWMgaW5saW5lLiBZZXAsIGl0IGlzLiBTbyB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBhIGdvb2QgY2FuZGlkYXRlIGFzIGEgZm9jdXMgc3ltYm9sLCBzaW5jZSBpdCYjMzk7cyBpbmxpbmVkLgoKVGhlbiwgSSBsb29rZWQgYXQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSSBzYXcgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IG5vdCBpbmxpbmUuIFdoaWxlIGl0ICpjb3VsZCogYmUgYSBmb2N1cyBzeW1ib2wsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHRoZSBuZXRsaW5rIGhhbmRsZXIsIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBtb3JlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4KCkkgYWxzbyBkb3VibGUtY2hlY2tlZCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuIEl0JiMzOTtzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgLiBTaW5jZSBgeGZybV9zZXRfZGVmYXVsdGAgaXMgdGhlIG5ldGxpbmsgaGFuZGxlciwgSSYjMzk7bGwgc3RpY2sgd2l0aCB0aGF0LgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGUgYnVnIGZpeCBhbmQgcG90ZW50aWFsIHJlbGF0ZWQgaXNzdWVzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgICAmIzM0O3hmcm1fc2V0X2RlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3NldF9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZS93YXJuaW5nIGluIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRlcm5hbGx5LiBQcmV2aW91c2x5LCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGV4cGVjdGVkIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgUkNVIHJlYWQgbG9jaywgYnV0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIChhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgKSBjYWxsZWQgaXQgdmlhIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBleHBsaWNpdCBgcmN1X3JlYWRfbG9jaygpYCBmcm9tIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCAoY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YCkgc2luY2UgaXQgaXMgbm93IGhhbmRsZWQgaW50ZXJuYWxseS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBmaXggYSBidWcsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0byB0YWtlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxlciB0byBob2xkIGl0LiBUaGlzIGlzIHB1cmVseSBhIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBSQ1UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGNoYW5nZSB0aGUgY29udGVudHMgb2YgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgUkNVIHdhcm5pbmdzLCBkZWFkbG9ja3MpIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZTQxYWVlMjUzYjA1NDM3ZDZlZWNlOTgwY2NlMTgwNTc0YTEzYTY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTM6NTA6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjFmNjgzNTE2ZjJiNTIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0xNjIyLDMxICYjNDM7MTYyMiwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogfQogCiAvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2suCiYjNDM7ICogVGFrZXMgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBhcm91bmQgdGhlIG11bHRpY2FzdC4KICAqLwogc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApCiYjNDM7CQkJCSAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cCkKIHsKLQlzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O3hmcm0ubmxzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpubHNrOwogCXN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjsKJiM0MzsJaW50IGVycjsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LSZndDt4ZnJtLm5sc2spOwogCWlmICghbmxzaykgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQogCXh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTsKIAlpZiAoeHRyKSB7Ci0JCWludCBlcnIgPSB4dHItJmd0O2FsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTsKLQomIzQzOwkJZXJyID0geHRyLSZndDthbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7CiAJCXhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTsKIAkJaWYgKGVycikgewomIzQzOwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCi0JcmV0dXJuIG5sbXNnX211bHRpY2FzdChubHNrLCBza2IsIHBpZCwgZ3JvdXAsIEdGUF9BVE9NSUMpOwomIzQzOwllcnIgPSBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhmcm1fc3BkaW5mb19tc2dzaXplKHZvaWQpCkBAIC0yNTM2LDkgJiM0MzsyNTQwLDcgQEAgc3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldCkKIAogCW5sbXNnX2VuZChza2IsIG5saCk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIGVycjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzQKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogNjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJDVSBMb2NraW5nIE9wdGltaXphdGlvbiBpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiByZWdhcmRpbmcgUkNVIGxvY2tpbmcgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCB0aGUgZnVuY3Rpb24gaXRzZWxmIG5vdyBoYW5kbGVzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgY2FsbGVyIHRvIG1hbmFnZSBpdC4gSSBjYW4gc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzIHdpdGhpbiB0aGUgZnVuY3Rpb24mIzM5O3MgYm9keS4gQ29uc2VxdWVudGx5LCB0aGUgbG9ja2luZyBjYWxscyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsZXIsIG5hbWVseSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHB1cmVseSBhIGxvY2tpbmctcmVsYXRlZCBtb2RpZmljYXRpb24uIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkb2VzIGl0IGFsdGVyIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSDigJMganVzdCBob3cgaXQmIzM5O3MgcHJvdGVjdGVkIGR1cmluZyB0aGUgbXVsdGljYXN0IG9wZXJhdGlvbi4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJvdW5kcyBjaGVja3MsIGVpdGhlci4gVGhlcmVmb3JlLCBJIGRvbiYjMzk7dCBhbnRpY2lwYXRlIGFueSBpc3N1ZXMgdGhhdCB3b3VsZCBiZSBmbGFnZ2VkIGJ5IEtNU0FOLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyBleGNsdXNpdmVseSB3aXRoIFJDVSBsb2NrIGNoYW5nZXMsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1Ugd2FybmluZ3MgdGhhdCBtYXkgc3VyZmFjZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIHNuaXBwZXQgdG8gY29uZmlybS4gWWVzLCBpdCYjMzk7cyBleGFjdGx5IGFzIGRlc2NyaWJlZDogdGhlIGByY3VfcmVhZF9sb2NrKClgIGNhbGwgaGFzIGJlZW4gbW92ZWQgaW5zaWRlIHRoZSBmdW5jdGlvbiwgcmlnaHQgYmVmb3JlIHJlZmVyZW5jaW5nIGBuZXQtJmd0O3hmcm0ubmxza2AsIGFuZCB0aGUgYHJjdV9yZWFkX3VubG9jaygpYCBpcyBhZGRlZCBhY2NvcmRpbmdseS4gVGhpcyBsb29rcyBjbGVhbiBhbmQgc2FmZS4KCkFscmlnaHQsIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7bGwgZmxhZyBpdCBhY2NvcmRpbmdseS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIHRha2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0aGUgY2FsbGVyIHRvIGhvbGQgaXQuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZyBhbmQgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIFJDVS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgY2hhbmdlIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBSQ1Ugd2FybmluZ3MsIGRlYWRsb2Nrcykgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIHRha2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0aGUgY2FsbGVyIHRvIGhvbGQgaXQuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZyBhbmQgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIFJDVS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgY2hhbmdlIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBSQ1Ugd2FybmluZ3MsIGRlYWRsb2Nrcykgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjM3Ljc3Njc4ODI1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTA4NTg5NTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0byB0YWtlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxlciB0byBob2xkIGl0LiBUaGlzIGlzIHB1cmVseSBhIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBSQ1UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGNoYW5nZSB0aGUgY29udGVudHMgb2YgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgUkNVIHdhcm5pbmdzLCBkZWFkbG9ja3MpIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZS93YXJuaW5nIGluIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRlcm5hbGx5LiBQcmV2aW91c2x5LCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGV4cGVjdGVkIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgUkNVIHJlYWQgbG9jaywgYnV0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIChhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgKSBjYWxsZWQgaXQgdmlhIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBleHBsaWNpdCBgcmN1X3JlYWRfbG9jaygpYCBmcm9tIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCAoY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YCkgc2luY2UgaXQgaXMgbm93IGhhbmRsZWQgaW50ZXJuYWxseS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBmaXggYSBidWcsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjM3Ljc3Njc5MzM4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjYxMTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlNDFhZWUyNTNiMDU0MzdkNmVlY2U5ODBjY2UxODA1NzRhMTNhNjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTM6NTA6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xcbmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjFmNjgzNTE2ZjJiNTIgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xcbkBAIC0xNjIyLDMxICsxNjIyLDM1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIH1cXG4gXFxuIC8qIEEgd3JhcHBlciBmb3Igbmxtc2dfbXVsdGljYXN0KCkgY2hlY2tpbmcgdGhhdCBubHNrIGlzIHN0aWxsIGF2YWlsYWJsZS5cXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLlxcbisgKiBUYWtlcyB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFyb3VuZCB0aGUgbXVsdGljYXN0LlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKVxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKm5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVxcdTAwM2V4ZnJtLm5sc2spO1xcbitcXHRzdHJ1Y3Qgc29jayAqbmxzaztcXG4gXFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNleGZybS5ubHNrKTtcXG4gXFx0aWYgKCFubHNrKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FUElQRTtcXG4gXFx0fVxcbi1cXG4gXFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbiBcXHRpZiAoeHRyKSB7XFxuLVxcdFxcdGludCBlcnIgPSB4dHItXFx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcXG4tXFxuK1xcdFxcdGVyciA9IHh0ci1cXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xcbiBcXHRcXHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFxuLVxcdHJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcXG4rXFx0ZXJyID0gbmxtc2dfbXVsdGljYXN0KG5sc2ssIHNrYiwgcGlkLCBncm91cCwgR0ZQX0FUT01JQyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKVxcbkBAIC0yNTM2LDkgKzI1NDAsNyBAQCBzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gXFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6MzkuMzA0MDM3NjQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzAxMjU3NTY0NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gICAgXCJ4ZnJtX3NldF9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2U0MWFlZTI1M2IwNTQzN2Q2ZWVjZTk4MGNjZTE4MDU3NGExM2E2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEzOjUwOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMWY2ODM1MTZmMmI1MiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTE2MjIsMzEgKzE2MjIsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiB9XG4gXG4gLyogQSB3cmFwcGVyIGZvciBubG1zZ19tdWx0aWNhc3QoKSBjaGVja2luZyB0aGF0IG5sc2sgaXMgc3RpbGwgYXZhaWxhYmxlLlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay5cbisgKiBUYWtlcyB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFyb3VuZCB0aGUgbXVsdGljYXN0LlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4rXHRcdFx0XHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4ge1xuLVx0c3RydWN0IHNvY2sgKm5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVx1MDAzZXhmcm0ubmxzayk7XG4rXHRzdHJ1Y3Qgc29jayAqbmxzaztcbiBcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbitcdGludCBlcnI7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2V4ZnJtLm5sc2spO1xuIFx0aWYgKCFubHNrKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIC1FUElQRTtcbiBcdH1cbi1cbiBcdHh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbiBcdGlmICh4dHIpIHtcbi1cdFx0aW50IGVyciA9IHh0ci1cdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XG4tXG4rXHRcdGVyciA9IHh0ci1cdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XG4gXHRcdHhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTtcbiBcdFx0aWYgKGVycikge1xuK1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbi1cbi1cdHJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcbitcdGVyciA9IG5sbXNnX211bHRpY2FzdChubHNrLCBza2IsIHBpZCwgZ3JvdXAsIEdGUF9BVE9NSUMpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKVxuQEAgLTI1MzYsOSArMjU0MCw3IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjM5LjMwNDAzODg5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzM3MjI3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB4ZnJtX3VzZXIuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEl0IHNlZW1zIHRoZXkndmUgbWFkZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBoYW5kbGVzIHRoZSBSQ1UgcmVhZCBsb2NrLiBQcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgbG9jaywgYnV0IG5vdyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGdvaW5nIHRvIHRha2UgaXQgaW50ZXJuYWxseS4gVGhhdCdzIGEgcHJldHR5IGJpZyBzaGlmdCwgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uJ3MgY29udHJhY3QgbGlrZSB0aGF0LlxuXG5UaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gVGhleSd2ZSByZW1vdmVkIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBhcm91bmQgdGhlIGNhbGwgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBiZWNhdXNlIHRoZSBmdW5jdGlvbiBub3cgbWFuYWdlcyB0aGUgbG9jayBpdHNlbGYuIFRoaXMgaXMgYWxsIGdvb2QgYW5kIGV4cGVjdGVkLlxuXG5Ib3dldmVyLCBhIGNoYW5nZSBsaWtlIHRoaXMgYWx3YXlzIHJhaXNlcyBxdWVzdGlvbnMgaW4gbXkgbWluZC4gVGhlIGltbWVkaWF0ZSB0aGluZyBJJ20gdGhpbmtpbmcgYWJvdXQgaXM6IHdoYXQgb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSBjYWxsIGB4ZnJtX25sbXNnX211bHRpY2FzdGA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgKmFsbCogY2FsbCBzaXRlcyBhcmUgdXBkYXRlZCBhY2NvcmRpbmdseS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgYmVjYXVzZSBub3cgd2UncmUgbW92aW5nIHRoZSByZXNwb25zaWJpbGl0eS4gVGltZSB0byBzY2FuIHRoZSBvdGhlciBmaWxlcyBhbmQgZG91YmxlLWNoZWNrLCBsb29raW5nIGZvciBhbnkgb3RoZXIgY2FsbGVycyB0aGF0IG1pZ2h0IHN0aWxsIGJlIGV4cGVjdGluZyB0aGUgbG9jayB0byBiZSBoZWxkIGV4dGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MDo0My41Mzc3NjM5NzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNDM0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9ubG1zZ19tdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTE1OTk9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjYtICovXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTYyNzpzdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyOC1cXHRcXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNTE4PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTQyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDM6XFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDQtXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzI0PXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzQyOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDMtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzYzMD1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY0NzpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjQ4LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5ODI9c3RhdGljIGludCB4ZnJtX2V4cF9zdGF0ZV9ub3RpZnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5OTUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5NjpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5OTctfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk5OT1zdGF0aWMgaW50IHhmcm1fYWV2ZW50X3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDEyOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0FFVkVOVFMpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTMtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDAxNT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3NhX2ZsdXNoKGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMzctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDAzODpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDk5PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2Eoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNTAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDE1MTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQyMzc9c3RhdGljIGludCB4ZnJtX3NlbmRfYWNxdWlyZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqeHQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQyNTE6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUNRVUlSRSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDI1Mi19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MzYwPXN0YXRpYyBpbnQgeGZybV9leHBfcG9saWN5X25vdGlmeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MzcyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQzNzM6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfRVhQSVJFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mzc0LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNzY9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3koc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQzOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDQwOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ0MS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ0NDc9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3lfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDY4OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2OS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1Mjc9c3RhdGljIGludCB4ZnJtX3NlbmRfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTM5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1NDA6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUkVQT1JUKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTQxLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1NzU9c3RhdGljIGludCB4ZnJtX3NlbmRfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU5NTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NQVBQSU5HKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTk2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6NDMuNTg3MTE1MzYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4NDI2MTEyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2UgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCoqXG5cbk9rYXksIHNvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZ2V0cyBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlLiBUaGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyBieSBoYXZpbmcgaXQgYWNxdWlyZSBhbiBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkuIFRoYXQncyBpbnRlcmVzdGluZy4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgKmNhbGxpbmcqIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jaywgd2hpY2ggbWVhbnMgSSdkIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgaXQncyBjYWxsZWQgYW5kIGRldGVybWluZSBpZiB0aGF0J3Mgc3RpbGwgdmFsaWQgbm93LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIldhaXQsIHdlcmUgKmFsbCogdGhlIGNhbGxlcnMgYWN0dWFsbHkgaG9sZGluZyB0aGF0IGxvY2s/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJdCdzIGNydWNpYWwgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY29kZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYW5vdGhlciBjYWxsZXIsIGZvciBleGFtcGxlLCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgdGVsbCBtZSBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBvdGhlciBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6NTUuNDI5NzI4NDQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDgwNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zMzExPXN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyNDpzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI1LVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUwOC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTA5OlxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6NTUuNDc3ODE0MTg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MTYxNjczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtaWdyYXRpb24gbG9naWMgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHN0YXRlIHRyYW5zaXRpb24sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBrZXlpbmcgbWF0ZXJpYWxzLCBzZXF1ZW5jZSBudW1iZXJzLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIG1pZ3JhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGdsYXJpbmdseSBvYnZpb3VzIHRoYXQgbWlnaHQgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IsIHdvcnNlLCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGVzcGVjaWFsbHkgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YgdHVubmVscyBhbmQgdHJhbnNwb3J0IHByb3RvY29scyBpbiBwbGF5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBwYXR0ZXJucyBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MDo1OS4zNTk0MzMyMzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0OTc1NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMyND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjYtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI3OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzc5LVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODA6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjU5LjUwNDQxNDkxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzk2OTY5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgTWlncmF0aW9uIFN0YXRlIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuLi4gcmlnaHQsIHRoYXQncyBhIG5ldGxpbmsgZG9pdCBoYW5kbGVyLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyDigJMgaXQgZG9lc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXQgdGhlIFJDVSByZWFkIGxvY2sgbGlrZSBzb21lIG90aGVyIHBhcnRzIG9mIHRoZSBYRlJNIGNvZGUuIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dC4gTGV0J3MgZGlnIGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaW1wbGVtZW50YXRpb24uIEdvdHRhIHRyYWNlIHRoZSBwYXRoLCB1bmRlcnN0YW5kIGhvdyBpdCdzICphY3R1YWxseSogdXNpbmcgdGhlIHN0YXRlIGRhdGEuIFRoaXMgaXMgY3J1Y2lhbDsgYW55IHJhY2UgY29uZGl0aW9ucyBhcm91bmQgc3RhdGUgbW9kaWZpY2F0aW9uIGNvdWxkIGJlIHZlcnkgbmFzdHkuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGVkIHRoZSBsb2NraW5nIGluIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCBpZiB0aGV5J3ZlIHRha2VuIHRoZSBuZWNlc3NhcnkgcHJlY2F1dGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MTowMi41ODQxMTQyNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjQsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjQ6XFx0c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuMzMyNTpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbjMzMjY6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4zMzI3OlxcdFxcdFxcdFxcdFxcdCAgIHU4IGRpciwgdTMyIHBvcnRpZCwgdTMyIHNlcSlcXG4zMzI4OlxcdHtcXG4zMzI5OlxcdFxcdGludCBlcnI7XFxuMzMzMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjMzMzE6XFx0XFxuMzMzMjpcXHRcXHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUobSwgZGlyKSwgR0ZQX0FUT01JQyk7XFxuMzMzMzpcXHRcXHRpZiAoIXNrYilcXG4zMzM0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjMzMzU6XFx0XFxuMzMzNjpcXHRcXHRlcnIgPSBidWlsZF9taWdyYXRlX3N0YXRlKHNrYiwgdW0sIG0sIGRpciwgcG9ydGlkLCBzZXEpO1xcbjMzMzc6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4zMzM4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjMzMzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzQwOlxcdFxcdH1cXG4zMzQxOlxcdFxcbjMzNDI6XFx0XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuMzM0MzpcXHR9XFxuMzM0NDpcXHRcXG4zMzQ1OlxcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbjMzNDY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjMzNDc6XFx0e1xcbjMzNDg6XFx0XFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSA9IG5sbXNnX2RhdGEobmxoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6MDIuNTg0Mjc1MDE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMDQ3NjE4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUkNVIFJlYWQgTG9jayBJc3N1ZSoqXG5cbk9rYXksIHNvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgZG9lc24ndCBzZWVtIHRvIGJlIGhvbGRpbmcgYHJjdV9yZWFkX2xvY2soKWAuIFdhaXQgYSBtaW51dGUsIGlmIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgKnVzZWQqIHRvIHJlcXVpcmUgdGhhdCBsb2NrLCB0aGVuIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2FzIHBvdGVudGlhbGx5IGNhbGxpbmcgaXQgd2l0aG91dCB0aGUgbG9jaz8gVGhhdCdzIGEgc2VyaW91cyBidWcgd2FpdGluZyB0byBoYXBwZW4uIExldCdzIGRpZyBpbi4gSSBuZWVkIHRvIHZlcmlmeSBob3cgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBiZWhhdmVkICpiZWZvcmUqIHRoaXMgcGF0Y2guXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmIHNheXM6XG5cbmBgYGNcbiAvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLlxuKyAqIFRha2VzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgYXJvdW5kIHRoZSBtdWx0aWNhc3QuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbitcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbitcdHN0cnVjdCBzb2NrICpubHNrO1xuIFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xuK1x0aW50IGVycjtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVx1MDAzZXhmcm0ubmxzayk7XG5gYGBcblxuT2theSwgc28gYmVmb3JlIHRoZSBwYXRjaCwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3YXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKWAuLi4gbWVhbmluZyBpdCAqZGlkKiByZXF1aXJlIHRoZSBsb2NrIGV4dGVybmFsbHksIG90aGVyd2lzZSB3ZSdkIHNlZSBhbiBSQ1Ugd2FybmluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IHdhcyAqdXNlZCogYmVmb3JlIHRoZSBwYXRjaC4gTGV0J3MgbG9vayBhdCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQ6XG5cbmBgYGNcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuYGBgXG5cbkFoLCBnb29kLCBpdCB3YXMgaG9sZGluZyB0aGUgbG9jayBhcyBpdCBzaG91bGQuIFNvIHRoYXQgdXNlIHdhcyBzYWZlLiBCdXQgd2hhdCBhYm91dCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgPyBXYXMgKml0KiBob2xkaW5nIHRoZSBSQ1UgbG9jayB3aGVuIGl0IGNhbGxlZCB0aGUgcHJvYmxlbWF0aWMgZnVuY3Rpb24/IE5vdyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBhY3R1YWxseSBjYWxscyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLCBzcGVjaWZpY2FsbHkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIHRvIHNlZSBpZiB0aGUgbG9jayB3YXMgYmVpbmcgaGVsZC4gTGV0J3MgZ28uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjA5LjU4OTAzOTgwMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ5MDpcXHRcXG4zNDkxOlxcdFxcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcXHUwMDI2bSwgZXh0YWNrKTtcXG4zNDkyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzQ5MzpcXHRcXHRcXHQvKlxcbjM0OTQ6XFx0XFx0XFx0ICogU2hvdWxkIG5vdCBvY2N1cjogcHJlLWNoZWNrIGFib3ZlIGVuc3VyZXMgdGhlIG5ldyB0dXBsZSBpc1xcbjM0OTU6XFx0XFx0XFx0ICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lcztcXG4zNDk2OlxcdFxcdFxcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXFxuMzQ5NzpcXHRcXHRcXHQgKi9cXG4zNDk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0OTk6XFx0XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHRcXHQvKiBSZXN0b3JlIGVuY2FwIGNsZWFyZWQgYnkgc2VudGluZWwgKHR5cGU9MCkgZHVyaW5nIG1pZ3JhdGlvbi4gKi9cXG4zNTAyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pXFxuMzUwMzpcXHRcXHRcXHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcXG4zNTA0OlxcdFxcbjM1MDU6XFx0XFx0bS5uZXdfc2VsID0gXFx1MDAyNnhjLVxcdTAwM2VzZWw7XFxuMzUwNjpcXHRcXHRtLm1hcHBpbmdfbWF4YWdlID0geGMtXFx1MDAzZW1hcHBpbmdfbWF4YWdlO1xcbjM1MDc6XFx0XFx0bS5uYXRfa2VlcGFsaXZlX2ludGVydmFsID0geGMtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XFxuMzUwODpcXHRcXG4zNTA5OlxcdFxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbjM1MTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4zNTExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzUxMjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gc2VuZCBtaWdyYXRpb24gbm90aWZpY2F0aW9uXFxcIik7XFxuMzUxMzpcXHRcXHRcXHRlcnIgPSAwO1xcbjM1MTQ6XFx0XFx0fVxcbjM1MTU6XFx0XFxuMzUxNjpcXHRvdXQ6XFxuMzUxNzpcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4zNTE4OlxcdFxcdHJldHVybiBlcnI7XFxuMzUxOTpcXHRvdXRfeGM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjA5LjU4OTI0NTYyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTgxMjc0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBmb3IgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyB3aXRoIFJDVSBpbiB4ZnJtX3NlbmRfbWlncmF0ZSoqXG5cblJpZ2h0LCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQgaGVyZS4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHhmcm1fc2VuZF9taWdyYXRlYCwgZG9lc24ndCBhcHBlYXIgdG8gYmUgY29ycmVjdGx5IGhhbmRsaW5nIFJDVSByZWFkcy4gVGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBJZiBpdCB3ZXJlLCBpdCB3b3VsZCBiZSBhIGNyaXRpY2FsIG92ZXJzaWdodC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHNjcnV0aW5pemUgaXRzIGltcGxlbWVudGF0aW9uIOKAkyBsb29raW5nIHNwZWNpZmljYWxseSBmb3Igd2hlcmUgUkNVIHJlYWQgbG9ja3MgbWlnaHQgYmUgbWlzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBhY2Nlc3NpbmcgZGF0YSB0aGF0J3MgcG90ZW50aWFsbHkgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB3aW5kb3dzIHdoZXJlIGEgd3JpdGUgb3BlcmF0aW9uIGNvdWxkIGludGVyZmVyZSB3aXRoIGEgcmVhZCBvcGVyYXRpb24gaWYgdGhlcmUncyBubyBzeW5jaHJvbml6YXRpb24gaW4gcGxhY2UuIEkgaGF2ZSB0byBsb29rIGZvciBjYWxscyB0byBgcmN1X3JlYWRfbG9jaygpYCAob3IgZXF1aXZhbGVudCBSQ1UgcmVhZCBwcmltaXRpdmVzKSBhbmQsIGVxdWFsbHkgaW1wb3J0YW50bHksIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIGByY3VfcmVhZF91bmxvY2soKWAgaXMgYmVpbmcgY2FsbGVkIHRvIHByb3RlY3QgdGhlc2UgcmVhZHMuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjE3Ljc3MDUyMjA3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzYzMDpcXHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4zNjMxOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbjM2MzI6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV9rbWFkZHJlc3MgKmssIHN0cnVjdCBuZXQgKm5ldCxcXG4zNjMzOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXFxuMzYzNDpcXHR7XFxuMzYzNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjM2MzY6XFx0XFx0aW50IGVycjtcXG4zNjM3OlxcdFxcbjM2Mzg6XFx0XFx0c2tiID0gbmxtc2dfbmV3KHhmcm1fbWlncmF0ZV9tc2dzaXplKG51bV9taWdyYXRlLCAhIWssICEhZW5jYXApLFxcbjM2Mzk6XFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuMzY0MDpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuMzY0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zNjQyOlxcdFxcbjM2NDM6XFx0XFx0LyogYnVpbGQgbWlncmF0ZSAqL1xcbjM2NDQ6XFx0XFx0ZXJyID0gYnVpbGRfbWlncmF0ZShza2IsIG0sIG51bV9taWdyYXRlLCBrLCBzZWwsIGVuY2FwLCBkaXIsIHR5cGUpO1xcbjM2NDU6XFx0XFx0QlVHX09OKGVyciBcXHUwMDNjIDApO1xcbjM2NDY6XFx0XFxuMzY0NzpcXHRcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG4zNjQ4OlxcdH1cXG4zNjQ5OlxcdCNlbHNlXFxuMzY1MDpcXHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4zNjUxOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbjM2NTI6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV9rbWFkZHJlc3MgKmssIHN0cnVjdCBuZXQgKm5ldCxcXG4zNjUzOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXFxuMzY1NDpcXHR7XFxuMzY1NTpcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbjM2NTY6XFx0fVxcbjM2NTc6XFx0I2VuZGlmXFxuMzY1ODpcXHRcXG4zNjU5OlxcdCNkZWZpbmUgWE1TR1NJWkUodHlwZSkgc2l6ZW9mKHN0cnVjdCB0eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MToxNy43NzA3NDY4NjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxNTIxNzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaWdyYXRpb24gb2YgWEZSTSBUcmFmZmljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgcGFja2V0IG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhpbiBYRlJNLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwb2xpY3kgY2hhbmdlcy4gSSByZWNhbGwgc2VlaW5nIGB4ZnJtX3NlbmRfbWlncmF0ZWAgbWVudGlvbmVkIGFuZCBub3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBleGFjdCBjb250cm9sIGZsb3cuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgbW92aW5nIHRyYWZmaWMgdG8gdGhlIG5ldyBwb2xpY3kuIExldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaXRzIGNhbGwgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBpbmRlZWQgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX21pZ3JhdGVgLiBRdWlja2x5LCBJJ2xsIGp1bXAgaW50byBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AgYW5kIG1ha2UgYSBxdWljayBjb2RlIGluc3BlY3Rpb24gdG8gdmVyaWZ5IHRoaXMgY2FsbCBjaGFpbiwgYHhmcm1fbWlncmF0ZWAgLVx1MDAzZSBgeGZybV9zZW5kX21pZ3JhdGVgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6MjUuMjg1OTY2NDk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3MjgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbmRfbWlncmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMxMT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjQ6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyNS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0NT1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MDgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUwOTpcXHRlcnIgPSB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShuZXQsIHVtLCBcXHUwMDI2bSwgeGMtXFx1MDAzZWRpcixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxcdFxcdFxcdFxcdCAgICAgIG5saC1cXHUwMDNlbmxtc2dfcGlkLCBubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTgzPXN0YXRpYyBpbnQgYnVpbGRfbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzYyOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjMwOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2MzEtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBpbnQgbnVtX21pZ3JhdGUsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjQ5LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY1MDpzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUxLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYwMz1zdGF0aWMgc3RydWN0IHhmcm1fbWdyIG5ldGxpbmtfbWdyID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwOC1cXHQucmVwb3J0XFx0XFx0PSB4ZnJtX3NlbmRfcmVwb3J0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MDk6XFx0Lm1pZ3JhdGVcXHQ9IHhmcm1fc2VuZF9taWdyYXRlLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTAtXFx0Lm5ld19tYXBwaW5nXFx0PSB4ZnJtX3NlbmRfbWFwcGluZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6MjUuMzMwNzQ0MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4NTI2NDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFhGUk0gTWlncmF0aW9uKipcblxuT2theSwgc28gYHhmcm1fc2VuZF9taWdyYXRlYCBpcyBob29rZWQgdXAgdW5kZXIgdGhlIGBuZXRsaW5rX21ncmAgYXMgdGhlIG1pZ3JhdGlvbiBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgbmFtZWQgYG1pZ3JhdGVgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyBvZiBga21fbWlncmF0ZWAuIEtub3dpbmcgd2hlcmUgYW5kIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwncyBYRlJNIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjMyLjIxNjAxMTkyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzQwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21fbWlncmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjU2PWludCB4ZnJtX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzE5LVxcdC8qIFN0YWdlIDUgLSBhbm5vdW5jZSAqL1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDcyMDpcXHRrbV9taWdyYXRlKHNlbCwgZGlyLCB0eXBlLCBtLCBudW1fbWlncmF0ZSwgaywgbmV0LCBlbmNhcCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzIxLVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI4ODQ9RVhQT1JUX1NZTUJPTChrbV9wb2xpY3lfZXhwaXJlZCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg4Ni0jaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyODg3OmludCBrbV9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg4OC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MDctfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTA4OkVYUE9SVF9TWU1CT0woa21fbWlncmF0ZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MDktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjMyLjI2MDg1MjYzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzQ0OTg0NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipYRlJNIFN0YXRlIE1pZ3JhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG1pZ3JhdGlvbiBvZiBYRlJNIHN0YXRlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBga21fbWlncmF0ZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgWEZSTSBzdGF0ZSB0cmFuc2l0aW9ucyBvY2N1ciwgc28gaXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgY291bGQgYmUgZ29pbmcgd3JvbmcgYW5kIHBpbnBvaW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoYXQgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBmdW5jdGlvbiBob2xkcyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjU1LjcxMDcwMjk4N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4ODcsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4ODc6XFx0aW50IGttX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbjI4ODg6XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIGludCBudW1fbWlncmF0ZSxcXG4yODg5OlxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9rbWFkZHJlc3MgKmssIHN0cnVjdCBuZXQgKm5ldCxcXG4yODkwOlxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9lbmNhcF90bXBsICplbmNhcClcXG4yODkxOlxcdHtcXG4yODkyOlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjI4OTM6XFx0XFx0aW50IHJldDtcXG4yODk0OlxcdFxcdHN0cnVjdCB4ZnJtX21nciAqa207XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yODk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGttLCBcXHUwMDI2eGZybV9rbV9saXN0LCBsaXN0KSB7XFxuMjg5ODpcXHRcXHRcXHRpZiAoa20tXFx1MDAzZW1pZ3JhdGUpIHtcXG4yODk5OlxcdFxcdFxcdFxcdHJldCA9IGttLVxcdTAwM2VtaWdyYXRlKHNlbCwgZGlyLCB0eXBlLCBtLCBudW1fbWlncmF0ZSwgayxcXG4yOTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgbmV0LCBlbmNhcCk7XFxuMjkwMTpcXHRcXHRcXHRcXHRpZiAoIXJldClcXG4yOTAyOlxcdFxcdFxcdFxcdFxcdGVyciA9IHJldDtcXG4yOTAzOlxcdFxcdFxcdH1cXG4yOTA0OlxcdFxcdH1cXG4yOTA1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI5MDY6XFx0XFx0cmV0dXJuIGVycjtcXG4yOTA3OlxcdH1cXG4yOTA4OlxcdEVYUE9SVF9TWU1CT0woa21fbWlncmF0ZSk7XFxuMjkwOTpcXHQjZW5kaWZcXG4yOTEwOlxcdFxcbjI5MTE6XFx0aW50IGttX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6NTUuNzEwOTI4MTM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3ODA2MzYyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqUkNVIExvY2sgU2hlbmFuaWdhbnMgaW4gdGhlIFhGUk0gTWlncmF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWlncmF0aW9uIGNvZGUuIFRoZSBrZXkgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBga21fbWlncmF0ZWAg4oCTIHRoYXQncyB3aGF0IHdlJ3JlIHRyYWNraW5nIOKAkyAqaG9sZHMqIHRoZSBgcmN1X3JlYWRfbG9jaygpYC4gVGhhdCdzIGltcG9ydGFudCBjb250ZXh0LlxuXG5Ob3csIGB4ZnJtX3NlbmRfbWlncmF0ZWAgaXRzZWxmLCB3aGljaCwgaWYgSSdtIHJlY2FsbGluZyBjb3JyZWN0bHksIGlzIGVzc2VudGlhbGx5IHRoZSBga20tXHUwMDNlbWlncmF0ZWAgZnVuY3Rpb24gcG9pbnRlciwgZ2V0cyBjYWxsZWQgd2l0aCB0aGF0IFJDVSByZWFkIGxvY2sgYWxyZWFkeSBlc3RhYmxpc2hlZC4gU28gZmFyLCBzbyBnb29kLCB0aGlzIGFsaWducyB3aXRoIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBtZWFudCB0byBiZSB1c2VkLiBJIHdvbmRlciB3aGF0IHdlIHNlZSBhYm91dCBpdHMgY291c2luIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWA/IEFoLCB5ZXMsIGl0J3MgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCByZXZpc2l0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnkgc3VidGxldGllcyB0aGVyZSB3aXRoIHJlc3BlY3QgdG8gUkNVIHVzYWdlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjowNS40OTE1NjgzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ5MDpcXHRcXG4zNDkxOlxcdFxcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcXHUwMDI2bSwgZXh0YWNrKTtcXG4zNDkyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzQ5MzpcXHRcXHRcXHQvKlxcbjM0OTQ6XFx0XFx0XFx0ICogU2hvdWxkIG5vdCBvY2N1cjogcHJlLWNoZWNrIGFib3ZlIGVuc3VyZXMgdGhlIG5ldyB0dXBsZSBpc1xcbjM0OTU6XFx0XFx0XFx0ICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lcztcXG4zNDk2OlxcdFxcdFxcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXFxuMzQ5NzpcXHRcXHRcXHQgKi9cXG4zNDk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0OTk6XFx0XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHRcXHQvKiBSZXN0b3JlIGVuY2FwIGNsZWFyZWQgYnkgc2VudGluZWwgKHR5cGU9MCkgZHVyaW5nIG1pZ3JhdGlvbi4gKi9cXG4zNTAyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pXFxuMzUwMzpcXHRcXHRcXHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcXG4zNTA0OlxcdFxcbjM1MDU6XFx0XFx0bS5uZXdfc2VsID0gXFx1MDAyNnhjLVxcdTAwM2VzZWw7XFxuMzUwNjpcXHRcXHRtLm1hcHBpbmdfbWF4YWdlID0geGMtXFx1MDAzZW1hcHBpbmdfbWF4YWdlO1xcbjM1MDc6XFx0XFx0bS5uYXRfa2VlcGFsaXZlX2ludGVydmFsID0geGMtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XFxuMzUwODpcXHRcXG4zNTA5OlxcdFxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbjM1MTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4zNTExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzUxMjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gc2VuZCBtaWdyYXRpb24gbm90aWZpY2F0aW9uXFxcIik7XFxuMzUxMzpcXHRcXHRcXHRlcnIgPSAwO1xcbjM1MTQ6XFx0XFx0fVxcbjM1MTU6XFx0XFxuMzUxNjpcXHRvdXQ6XFxuMzUxNzpcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4zNTE4OlxcdFxcdHJldHVybiBlcnI7XFxuMzUxOTpcXHRvdXRfeGM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjA1LjQ5MTg0MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyMzY0MjA4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSQ1UgTG9jayBpbiBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5IEkgbmVlZCB0byBjbGFyaWZ5OiBkb2VzIGl0IGhvbGQgYW4gUkNVIHJlYWQgbG9jaz8gSXQncyBhIG5ldGxpbmsgYGRvaXRgIGhhbmRsZXIsIGFuZCB0aG9zZSBnZW5lcmFsbHkgKmRvbid0KiBob2xkIFJDVSByZWFkIGxvY2tzIGJ5IGRlZmF1bHQuIFRoYXQncyBhIHJlZCBmbGFnISBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3YXMgY2FsbGluZyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhvdXQgdGhlIG5lY2Vzc2FyeSBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBhIHByb2JsZW0uXG5cbkFuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHVzZXMgYHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKWAuIFRoYXQgbWVhbnMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgd2FzIGxpa2VseSB0cmlnZ2VyaW5nIGFuIFJDVSB3YXJuaW5nIG9yIGEgbmFzdHkgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGljaCBpcywgb2J2aW91c2x5LCBub3QgaWRlYWwuXG5cblNvIHRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHNoaWZ0aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjYWxsIGludG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpdHNlbGYsIHdoaWNoIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBOb3cgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlmIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgbm93IHRha2luZyB0aGUgbG9jayBpbnRlcm5hbGx5LCB3aGF0IGFib3V0IHRoZSBjYWxsZXJzIHRoYXQgKmFscmVhZHkqIGhvbGQgYW4gUkNVIHJlYWQgbG9jaz8gQnV0IHdhaXQsIFJDVSByZWFkIGxvY2tzIGNhbiBiZSBuZXN0ZWQsIHNvIHRoYXQncyBwZXJmZWN0bHkgZmluZS4gQ3Jpc2lzIGF2ZXJ0ZWQsIHNvcnQgb2YuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2suIEFyZSB0aGVyZSBvdGhlciBjYWxsZXJzIG9mIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgdGhhdCAqZGlkbid0KiBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrIGJlZm9yZSB0aGlzIGNoYW5nZT8gVGhlIHBhdGNoIGFsc28gbW9kaWZpZWQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIGJ5IHJlbW92aW5nIGFuIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgLiBPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHVuZGVyc3RhbmQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIHdhcyBtb2RpZmllZCwgYnV0IHdoeSB3YXMgdGhlIGV4cGxpY2l0IGxvY2sgcmVtb3ZlZCB0aGVyZSwgYnV0IG5vdCBpbiBga21fbWlncmF0ZWA/XG5cbkFoLCByaWdodCwgYGttX21pZ3JhdGVgIGl0ZXJhdGVzIG92ZXIgYHhmcm1fa21fbGlzdGAgdXNpbmcgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YC4gVGhlIFJDVSByZWFkIGxvY2sgaXMgbmVjZXNzYXJ5IGZvciB0aGF0IGxpc3QgaXRlcmF0aW9uIGl0c2VsZiwgbm90IGp1c3QgZm9yIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEdvdCBpdC4gTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjE4LjcyODI2NjYwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUxOCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUxODpcXHRzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxcbjI1MTk6XFx0e1xcbjI1MjA6XFx0XFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cDtcXG4yNTIxOlxcdFxcdGludCBsZW4gPSBOTE1TR19BTElHTihzaXplb2YoKnVwKSk7XFxuMjUyMjpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4yNTIzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMjUyNDpcXHRcXHRpbnQgZXJyO1xcbjI1MjU6XFx0XFxuMjUyNjpcXHRcXHRza2IgPSBubG1zZ19uZXcobGVuLCBHRlBfQVRPTUlDKTtcXG4yNTI3OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4yNTI4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI1Mjk6XFx0XFxuMjUzMDpcXHRcXHRubGggPSBubG1zZ19wdXQoc2tiLCAwLCAwLCBYRlJNX01TR19HRVRERUZBVUxULCBzaXplb2YoKnVwKSwgMCk7XFxuMjUzMTpcXHRcXHRpZiAobmxoID09IE5VTEwpIHtcXG4yNTMyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjI1MzM6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4yNTM0OlxcdFxcdH1cXG4yNTM1OlxcdFxcbjI1MzY6XFx0XFx0dXAgPSBubG1zZ19kYXRhKG5saCk7XFxuMjUzNzpcXHRcXHR1cC1cXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XFxuMjUzODpcXHRcXHR1cC1cXHUwMDNlZndkID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcXG4yNTM5OlxcdFxcdHVwLVxcdTAwM2VvdXQgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xcbjI1NDA6XFx0XFxuMjU0MTpcXHRcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbjI1NDI6XFx0XFxuMjU0MzpcXHRcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxuMjU0NDpcXHRcXG4yNTQ1OlxcdFxcdHJldHVybiBlcnI7XFxuMjU0NjpcXHR9XFxuMjU0NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTI6MTguNzI4NDM0OTM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDE4OTE2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIENhbGwgZnJvbSBgeGZybV9zZXRfZGVmYXVsdGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgaGFuZGxpbmcgcG9saWN5IHVwZGF0ZXMsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIGFuZCBgeGZybV9zZXRfZGVmYXVsdGAgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIHdoZXJlIHdlJ3JlIGVzdGFibGlzaGluZyB0aGUgKmluaXRpYWwqIGRlZmF1bHQgcG9saWN5IGZvciBhIHNlY3VyaXR5IGFzc29jaWF0aW9uIG9yIGEgc3BlY2lmaWMgYWRkcmVzcyBmYW1pbHksIGFuZCB3ZSBuZWVkIHRvIGNvbW11bmljYXRlIHRoaXMgdG8gdGhlIHVzZXJzcGFjZSBzb21laG93LlxuXG5UaGUgY2FsbCB0byBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgZnJvbSAqd2l0aGluKiBgeGZybV9zZXRfZGVmYXVsdGAgaXMgdGVsbGluZyBtZSB0aGF0LCB3aGVuZXZlciBhIGRlZmF1bHQgcG9saWN5IGlzIHNldCwgd2UncmUgaW1tZWRpYXRlbHkgbm90aWZ5aW5nIGFueSB1c2VyLXNwYWNlIHByb2Nlc3NlcyAocHJlc3VtYWJseSB0aG9zZSByZWdpc3RlcmVkIGZvciBwb2xpY3kgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdmlhIG5ldGxpbmsgb3Igc2ltaWxhciBtZWNoYW5pc21zKS4gVGhpcyBtYWtlcyBhIGxvdCBvZiBzZW5zZSwgYmVjYXVzZSB1c2Vyc3BhY2UgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhlICpjdXJyZW50KiBlZmZlY3RpdmUgcG9saWN5LCBlc3BlY2lhbGx5IHdoZW4gaXQncyB0aGUgKmRlZmF1bHQqLiBPdGhlcndpc2UsIHlvdSdkIGVuZCB1cCB3aXRoIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG5cbkknbSBjaGVja2luZyB0aGF0IHRoaXMgY2FsbCBpcyBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGJ1aWxkIHRoZSBwcm9wZXIgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhhdCBhbnkgcG90ZW50aWFsIGVycm9ycyAobGlrZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpc3N1ZXMgd2l0aCB0aGUgbmV0bGluayBzb2NrZXQpIGFyZSBwcm9wZXJseSBoYW5kbGVkIG9yIGdyYWNlZnVsbHkgZGVncmFkZWQuIElkZWFsbHksIGl0J3MgZWZmaWNpZW50LCB1c2luZyBvbmx5IHRoZSBuZWNlc3NhcnkgZGF0YSB0byBjb252ZXkgdGhlIHBvbGljeSBjaGFuZ2VzIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb3BpZXMuIFRoZSB0aW1pbmcgaXMgYWxzbyBpbXBvcnRhbnQ7IGl0IG5lZWRzIHRvIGJlICphZnRlciogdGhlIHBvbGljeSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IGludGVybmFsbHksIGJ1dCAqYmVmb3JlKiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQuIEEgbWlzc2VkIG5vdGlmaWNhdGlvbiBjb3VsZCBjcmVhdGUgYSB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eSBvciBhbiBpbmNvcnJlY3QgZXhwZWN0YXRpb24uXG5cbkknbSBhbHNvIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaGVyZS4gQ291bGQgYSBub3RpZmljYXRpb24gYXJyaXZlIGJlZm9yZSB0aGUgcG9saWN5IGlzIGNvbXBsZXRlbHkgZWZmZWN0aXZlLCBvciB2aWNlLXZlcnNhPyBJJ2xsIHByb2JhYmx5IGludmVzdGlnYXRlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjoyNi45MzAzMzAyODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzE3MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbm90aWZ5X3VzZXJwb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTI0OTI9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3BvbGljeV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTE3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1MTg6c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTE5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1NTQ9c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjU3MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTcxOlxcdHhmcm1fbm90aWZ5X3VzZXJwb2xpY3kobmV0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTcyLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjoyNi45NzQ2NTM1MzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5OTY3MTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8geGZybV9ubG1zZ19tdWx0aWNhc3QgYW5kIFBvdGVudGlhbCBSQ1UgSXNzdWVzKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYWdhaW4uIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGEgcG90ZW50aWFsIHJpc2sgb2YgZGF0YSByYWNlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB0aGF0ICpkb24ndCogYWxyZWFkeSBoYXZlIGFuIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgcmVhZCBsb2NrIGhlbGQuIFRoYXQgd291bGQgYmUgYSB2dWxuZXJhYmlsaXR5IHRvIGNvbnNpZGVyLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbiwgSSBzaG91bGQgY2hlY2sgdGhlIGNvZGUgd2hlcmUgYHhmcm1fc2VuZF9hY3F1aXJlYCBpcyBpbnZva2VkLiBJdCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGltcG9ydGFudCBmb3IgdmVyaWZ5aW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwb3RlbnRpYWwgUkNVLXJlbGF0ZWQgcHJvYmxlbXMuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjozMS4yNzQzMjczNzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTE4OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9hY3F1aXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz00MTkzPXN0YXRpYyBpbnQgYnVpbGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyMzYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDIzNzpzdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjM4LVxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fcG9saWN5ICp4cClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDM9c3RhdGljIHN0cnVjdCB4ZnJtX21nciBuZXRsaW5rX21nciA9IHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA0LVxcdC5ub3RpZnlcXHRcXHQ9IHhmcm1fc2VuZF9zdGF0ZV9ub3RpZnksXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwNTpcXHQuYWNxdWlyZVxcdD0geGZybV9zZW5kX2FjcXVpcmUsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNi1cXHQuY29tcGlsZV9wb2xpY3lcXHQ9IHhmcm1fY29tcGlsZV9wb2xpY3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjMxLjMyMjg1MTA0NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjkxNjMyMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBLZXkgTWFuYWdlbWVudCBQcm9jZXNzKipcblxuT2theSwgc28gYHhmcm1fc2VuZF9hY3F1aXJlYCBpcyByZWdpc3RlcmVkIGFzIGEgbmV0bGluayBtYW5hZ2VyIGFjcXVpc2l0aW9uIGhhbmRsZXIsIHNwZWNpZmljYWxseSBgbmV0bGlua19tZ3IuYWNxdWlyZWAuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGZldGNoaW5nIGtleWluZyBtYXRlcmlhbCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hbWUuIE5vdywgbGV0J3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhY3R1YWxseSAqZ2V0cyogdGhlIGtleXMuIEknbSBnb2luZyB0byBqdW1wIGludG8gYGttX3F1ZXJ5YCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIFRoYXQgZnVuY3Rpb24ncyBwcm9iYWJseSBhdCB0aGUgaGVhcnQgb2YgdGhlIGtleSBtYW5hZ2VtZW50IHF1ZXJ5aW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBhc2tpbmcgZm9yIHRoZSBrZXkgZGF0YSwgYW5kIHdoaWNoIHByb2Nlc3NlcyBvciBmdW5jdGlvbnMgaXQgaXMgY2FsbGluZy4gSSdtIGV4cGVjdGluZyB0aGlzIGBrbV9xdWVyeWAgZnVuY3Rpb24gd2lsbCBjb250YWluIHRoZSBsb2dpYyBmb3Igc2VuZGluZyByZXF1ZXN0cyBhbmQgbWFuYWdpbmcgdGhlIGtleSBhY3F1aXNpdGlvbiBsaWZlY3ljbGUsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlIGFuZCBtYXliZSB0YWxraW5nIHRvIHNvbWUgdXNlciBzcGFjZSBkYWVtb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBleHBsb3JpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTI6MzYuNjE0NDg1NDQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzNTkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbV9xdWVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTIzMD1pbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjMyOmludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMzMtc3RhdGljIGJvb2wga21faXNfYWxpdmUoY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzU2PXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTY2LSNlbmRpZlxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTY3OlxcdFxcdGlmIChrbV9xdWVyeSh4LCB0bXBsLCBwb2wpID09IDApIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2OC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI4MTk9RVhQT1JUX1NZTUJPTChrbV9zdGF0ZV9leHBpcmVkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODIzLSovXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4MjQ6aW50IGttX3F1ZXJ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjgyNS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjgzNy19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4Mzg6RVhQT1JUX1NZTUJPTChrbV9xdWVyeSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4MzktXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQ0PXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMDAtXFx0XFx0dC1cXHUwMDNlY2FsZ29zID0gdWEtXFx1MDAzZWNhbGdvcztcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTAxOlxcdFxcdGVyciA9IGttX3F1ZXJ5KHgsIHQsIHhwKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjozNi42NjIzMjY3NzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3OTY4OTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBrbV9xdWVyeWAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHNjcnV0aW5pemUgdGhlIGBrbV9xdWVyeWAgaW1wbGVtZW50YXRpb24uXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBJIGtub3cgdGhlIHByaW5jaXBsZXMgb2Yga25vd2xlZGdlIG1hbmFnZW1lbnQsIGFuZCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCBpcyBlZmZpY2llbnRseSBoYW5kbGluZyB0aGUgcmVxdWlyZWQgZGF0YSByZXRyaWV2YWwuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga25vd2xlZGdlIGJhc2UsIHdoZXRoZXIgaXQncyBpbmRleGluZyBjb3JyZWN0bHksIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgaGFuZGxlcyBxdWVyeSBwYXJzaW5nIGFuZCBvcHRpbWl6YXRpb24uIEknbGwgYmUgZm9jdXNlZCBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGVkZ2UgY2FzZSBoYW5kbGluZywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGluIGEgaGlnaC1sb2FkIHNjZW5hcmlvLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbuKAlHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBxdWVyeSBsYW5ndWFnZSwgdGhlIGNhY2hpbmcgc3RyYXRlZ3nigJRhbGwgbmVlZCBhIGNsb3NlIGV4YW1pbmF0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIG9uIGl0cyB1dGlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjQwLjI0MjAxOTAwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MjQ6XFx0aW50IGttX3F1ZXJ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbClcXG4yODI1OlxcdHtcXG4yODI2OlxcdFxcdGludCBlcnIgPSAtRUlOVkFMLCBhY3FyZXQ7XFxuMjgyNzpcXHRcXHRzdHJ1Y3QgeGZybV9tZ3IgKmttO1xcbjI4Mjg6XFx0XFxuMjgyOTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjgzMDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrbSwgXFx1MDAyNnhmcm1fa21fbGlzdCwgbGlzdCkge1xcbjI4MzE6XFx0XFx0XFx0YWNxcmV0ID0ga20tXFx1MDAzZWFjcXVpcmUoeCwgdCwgcG9sKTtcXG4yODMyOlxcdFxcdFxcdGlmICghYWNxcmV0KVxcbjI4MzM6XFx0XFx0XFx0XFx0ZXJyID0gYWNxcmV0O1xcbjI4MzQ6XFx0XFx0fVxcbjI4MzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjgzNjpcXHRcXHRyZXR1cm4gZXJyO1xcbjI4Mzc6XFx0fVxcbjI4Mzg6XFx0RVhQT1JUX1NZTUJPTChrbV9xdWVyeSk7XFxuMjgzOTpcXHRcXG4yODQwOlxcdHN0YXRpYyBpbnQgX19rbV9uZXdfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkciwgX19iZTE2IHNwb3J0KVxcbjI4NDE6XFx0e1xcbjI4NDI6XFx0XFx0aW50IGVyciA9IC1FSU5WQUw7XFxuMjg0MzpcXHRcXHRzdHJ1Y3QgeGZybV9tZ3IgKmttO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1Mjo0MC4yNDIxODI5NDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MDM4NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSQ1UgTG9jayBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBrbV9xdWVyeWAgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgaG9sZGluZyBhbiBgcmN1X3JlYWRfbG9jaygpYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEFsbCB0aG9zZSBga21fKmAgZnVuY3Rpb25zIHdpdGhpbiBgeGZybV9zdGF0ZS5jYCBhcmUgZ3JhYmJpbmcgdGhhdCBsb2NrIGJlY2F1c2UgdGhleSdyZSBpdGVyYXRpbmcgb3ZlciB0aGUgYHhmcm1fa21fbGlzdGAuIFNlZW1zIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoaXMgY29kZSBiYXNlLlxuXG5CdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgYWxzbyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBuZXRsaW5rX21ncmAgY2FsbGJhY2tzLiBBbmQgdGhlc2UgY2FsbGJhY2tzIGFyZSBiZWluZyBpbnZva2VkIGluIGEgY291cGxlIG9mIHdheXMg4oCTIGRpcmVjdGx5IG9yIGZyb20gbmV0bGluayBgZG9pdGAgaGFuZGxlcnMuIEZvciBpbnN0YW5jZSwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgY2FsbHMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBkaXJlY3RseS4gTm93LCB3YWl0IGEgbWludXRlLi4uIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHRoZW4gY2FsbHMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBvbmx5IGJlaW5nIGNhbGxlZCBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgPyBMZXQncyBjaGVjayB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjQ4LjU4MjU3MzI3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MjczMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zZW5kX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMTE9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzI0OnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDU9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MDk6XFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXFx1MDAyNm0sIHhjLVxcdTAwM2VkaXIsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cXHRcXHRcXHRcXHQgICAgICBubGgtXFx1MDAzZW5sbXNnX3BpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1Mjo0OC42MjkwMDUyMDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NjM2OTEwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWhhLCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGlzIG9ubHkgY2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIHdoaWNoIGl0c2VsZiBpcyBhIG5ldGxpbmsgZG9pdCBoYW5kbGVyLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBkb2Vzbid0IGV4cGxpY2l0bHkgaG9sZCBgcmN1X3JlYWRfbG9jaygpYC5cblxuVGhlcmVmb3JlLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBjYWxsaW5nIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgKndpdGhvdXQqIHRoYXQgY3J1Y2lhbCByZWFkIGxvY2sgaW4gcGxhY2UuIEJpbmdvIOKAkyBhIHJhY2UgY29uZGl0aW9uIHdhaXRpbmcgdG8gaGFwcGVuLiBUaGUgcGF0Y2ggY2xlYXJseSBhZGRyZXNzZXMgdGhpcyBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpdHNlbGYuIFRoYXQgbWFrZXMgc2Vuc2UsIGNlbnRyYWxpemluZyB0aGUgbG9ja2luZyByZXNwb25zaWJpbGl0eSB3aGVyZSBpdCdzIG5lZWRlZC5cblxuQnV0IG5vdyBteSBleHBlcnQgY3VyaW9zaXR5IGtpY2tzIGluLiBIYXMgdGhpcyBzYW1lIG1pc3Rha2UgYmVlbiBtYWRlIGVsc2V3aGVyZT8gVGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIFJDVSByZWFkIGxvY2s/IExldCdzIGNoZWNrIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YC4gSW50ZXJlc3RpbmcuIEl0ICpleHBsaWNpdGx5KiBoZWxkIGByY3VfcmVhZF9sb2NrKClgIGJlZm9yZSB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQsIGFuZCBub3cgdGhhdCB0aGUgcGF0Y2ggaGFzIGxhbmRlZCwgaXQgZG9lc24ndC4gVGhhdCdzIGdvb2Q7IHRoZSBwYXRjaCBpcyBjbGVhbmVyIG5vdy4gT25lIGxlc3MgbG9jayB0byBtYW5hZ2UuIFdoYXQgYWJvdXQgYHhmcm1fc2VuZF9yZXBvcnRgPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc3RhY2sgdGhlcmUgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MDEuMjkyNjk4NTY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAzMDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbmRfcmVwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz00NTAxPXN0YXRpYyBpbnQgYnVpbGRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHByb3RvLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTI3OnN0YXRpYyBpbnQgeGZybV9zZW5kX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1MjgtXFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHhmcm1fYWRkcmVzc190ICphZGRyKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYwMz1zdGF0aWMgc3RydWN0IHhmcm1fbWdyIG5ldGxpbmtfbWdyID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNy1cXHQubm90aWZ5X3BvbGljeVxcdD0geGZybV9zZW5kX3BvbGljeV9ub3RpZnksXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwODpcXHQucmVwb3J0XFx0XFx0PSB4ZnJtX3NlbmRfcmVwb3J0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MDktXFx0Lm1pZ3JhdGVcXHQ9IHhmcm1fc2VuZF9taWdyYXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MzowMS4zMzc3MzE1NTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU2ODUxOTUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JrIHNlY3VyaXR5IGV4cGVydDpcblxuKipJbnRlcm5hbCBOZXR3b3JrIFNlY3VyaXR5IFJlcG9ydGluZyBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgc2V0IHVwIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgc2VlIHRoYXQgYHhmcm1fc2VuZF9yZXBvcnRgIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0bGlua19tZ3JgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHVuZGVyIHRoZSBuYW1lIFwicmVwb3J0LlwiIFRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIGFueXRpbWUgYSByZXBvcnQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGFuZCBzZW50IG91dCB1c2luZyBOZXRsaW5rLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkLiBUaGUgY3J1Y2lhbCBkZXRhaWwgSSdtIGxvb2tpbmcgYXQsIGlzIHdoZXJlIHRoaXMgYHhmcm1fc2VuZF9yZXBvcnRgIGlzIHRyaWdnZXJlZCwgYW5kIEkndmUgc3BvdHRlZCB0aGF0IGl0J3MgaW52b2tlZCBieSBga21fcmVwb3J0YC4gU28sIGBrbV9yZXBvcnRgIGlzIGVzc2VudGlhbGx5IHRoZSBrZXJuZWwgbW9kdWxlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiwgYW5kIHRoYXQgY2FsbCBpcyBnb2luZyB0byB0cmlnZ2VyIHNlbmRpbmcgdGhlIGRhdGEgdG8gdXNlci1zcGFjZSB0aHJvdWdoIGB4ZnJtX3NlbmRfcmVwb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSwgaXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHJlcG9ydCBldmVudHMgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgdGhyb3VnaCBhIE5ldGxpbmsgc29ja2V0LiBUaGlzIGlzIGxpa2VseSBob3cgd2UgZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIFhGUk0gcG9saWNpZXMsIFNBcywgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZm9yIGF1ZGl0aW5nLCBtb25pdG9yaW5nLCBhbmQgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU2NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjEwLjkwNjI1Mzc0NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MzY4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21fcmVwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9MjkwOD1FWFBPUlRfU1lNQk9MKGttX21pZ3JhdGUpO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MTAtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5MTE6aW50IGttX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkxMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkyNy19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5Mjg6RVhQT1JUX1NZTUJPTChrbV9yZXBvcnQpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MzoxMC45NTAxOTY1MzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI0OTU4Mzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcG9ydGFuY2UgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBga21fcmVwb3J0YCBoYXMgYW4gYHJjdV9yZWFkX2xvY2soKWAgaGVsZCwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBtaXNzaW5nIGByY3VfcmVhZF9sb2NrKClgIGluIHRoYXQgc3BlY2lmaWMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgLVx1MDAzZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIC1cdTAwM2UgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBwYXRoLiBUaGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGp1c3RpZmllcyBmdXp6aW5nIGVmZm9ydC5cblxuV2VsbCwgdGhpcyBhY3R1YWxseSBmaXhlcyBhbiBSQ1UgdXNlLWFmdGVyLWZyZWUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBSQ1Ugd2FybmluZywgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIE5vdywgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudCBhbmQgY29uc2lkZXIgdGhlIGNvbnRleHQuIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSByZWxldmFudC4gV2FzIHRoaXMgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIHNvbWV0aGluZyByZWxhdGl2ZWx5IG5ldz8gTm8sIGl0IGxvb2tzIGxpa2UgaXQncyBiZWVuIGFyb3VuZC4gQWxyaWdodC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gU2luY2UgaXQncyBhIG5ldGxpbmsgaGFuZGxlciwgaXQncyBpbmhlcmVudGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cywgc28geWVzLiBUaGlzIGZpeCBleHBsaWNpdGx5IHByZXZlbnRzIGFuIFJDVSB3YXJuaW5nIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgZml4ZXMgYSBidWcgd2l0aGluIGEgcmVhY2hhYmxlIG5ldGxpbmsgaGFuZGxlciwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTm93LCB3aGF0IGFib3V0IGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gY2hlY2sgdG8gc2VlIHdoYXQgY29uZmlncyBhcmUgcmVxdWlyZWQuIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBuZWVkZWQsIGxvb2tpbmcgYXQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgc28gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEJlc3QgdG8gY29uZmlybSB0aGF0IGluIGBuZXQveGZybS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjIwLjE5OTc4MzIxM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MzQ2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fVVNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjIwLjI0MzIyMDg3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAzNDk4NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBwcm9jZXNzLCB3aXRoIHRoZSBhc3N1bXB0aW9uIEknbSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5lZWQgZm9yIGBYRlJNX01JR1JBVEVgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gd29uZGVyaW5nIGlmIGBYRlJNX01JR1JBVEVgIGlzIHRydWx5IG5lY2Vzc2FyeSBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBtaWdodCBiZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gY29uZmlybS4gVGhlIHdob2xlIHBvaW50IG9mIHRoZXNlIGZsYWdzIGlzIHRvIG9wdGltaXplIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZCwgc28gc2tlcHRpY2lzbSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblRvIHJlYWxseSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJJ20gZ29pbmcgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGFjdHVhbCBtaWdyYXRpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmRvZXMqLCB1bmRlciB3aGljaCBjaXJjdW1zdGFuY2VzIGl0J3MgY2FsbGVkLCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBoYXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdCwgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIChpZiBhbnkpIGFyZSBhdmFpbGFibGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGBYRlJNX01JR1JBVEVgIHBsYXlzIGEgcm9sZSBpbiB0aGUgZnVuY3Rpb24sIGFuZCBpZiBJIGNhbiBhdm9pZCBpdCBpbiB0aGUgY3VycmVudCBzZXR0aW5nLiBPbmx5IGJ5IGRpc3NlY3RpbmcgdGhlIGFjdHVhbCBjb2RlIGNhbiBJIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgd2hldGhlciB0aGlzIGZsYWcgaXMgdHJ1bHkgY3JpdGljYWwgb3IgaWYgdGhlcmUncyBhIG1vcmUgZWZmaWNpZW50IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MjUuNzQ2NzIxODUzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgxMzM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDU6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0Ni1cXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI2LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyNzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgwOlxcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MzoyNS43OTI1MzgxNDZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODk3Mzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAncyBDb25kaXRpb25hbCBMb2dpYyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCBhbmQgSSd2ZSBoaXQgYW4gYCNlbHNlYCBibG9jay4gSW5zdGluY3RpdmVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCAqYXJlbid0KiBiZWluZyBtZXQgdG8gdHJpZ2dlciB0aGlzIGBlbHNlYCBwYXRoLiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5IGhlcmU/IFRoaXMgYCNlbHNlYCBpcyBhIGNyaXRpY2FsIGJyYW5jaCBwb2ludCwgcG90ZW50aWFsbHkgaGFuZGxpbmcgc29tZSB1bnVzdWFsIG9yIGVycm9yLXByb25lIHNjZW5hcmlvIHJlbGF0ZWQgdG8gc3RhdGUgbWlncmF0aW9uLCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGF0aC4gSXQncyB0aW1lIHRvIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBndWFyZHMgYW5kIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgdXBzdHJlYW0uIFdoYXQncyAqbm90KiBoYXBwZW5pbmcgdGhhdCBsZWFkcyB1cyBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlIHRob3JvdWdobHkgYmVmb3JlIEkgcHJvY2VlZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYyOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjI5LjUwMTUxNDYwM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM0MDpcXHRcXHR9XFxuMzM0MTpcXHRcXG4zMzQyOlxcdFxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbjMzNDM6XFx0fVxcbjMzNDQ6XFx0XFxuMzM0NTpcXHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4zMzQ2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zMzQ3OlxcdHtcXG4zMzQ4OlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XFxuMzM0OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4zMzUwOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcXG4zMzUxOlxcdFxcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xcbjMzNTI6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xcbjMzNTM6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuMzM1NDpcXHRcXHRpbnQgZXJyO1xcbjMzNTU6XFx0XFxuMzM1NjpcXHRcXHRpZiAoIXVtLVxcdTAwM2VpZC5zcGkpIHtcXG4zMzU3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgU1BJIDB4MFxcXCIpO1xcbjMzNTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzM1OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjI5LjUwMTcwODA3M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzUwMDgwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOlxuXG4qKldoZXJlJ3MgVGhhdCBQcmVwcm9jZXNzb3IgTWFnaWM/KipcblxuV2FpdCBhIG1pbnV0ZSwgSSdtIHN0YXJpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMuLi5vZmYuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgY2VydGFpbiBjb25zdHJ1Y3QgaGVyZSwgc29tZXRoaW5nIEknbSB1c2VkIHRvIHVzaW5nIHRvIG1haW50YWluIGRpZmZlcmVudCBidWlsZHMsIGFuZCBpdCdzIHNpbXBseSAqbm90KiB0aGVyZS4gV2hlcmUncyB0aGUgYCNpZmRlZmA/IFdoZXJlIGFyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcz8gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMsIGJ1dCBpdCdzIG5vdCBoZXJlLi4uRGlkIHNvbWVvbmUgcmVtb3ZlIGl0PyBJcyBpdCBkZWZpbmVkIGVsc2V3aGVyZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB3ZW50LCBvciAqaXMqIGhhcHBlbmluZy4gQmVjYXVzZSwgbGV0J3MgZmFjZSBpdCwgd2l0aG91dCBpdCB0aGluZ3MgYXJlIGdvaW5nIHRvIGdldCBwcm9ibGVtYXRpYywgcXVpY2tseS4gTm93LCBpcyB0aGUgcHJlcHJvY2Vzc29yIGJlaW5nIHVzZWQgZWZmZWN0aXZlbHkgYXQgYWxsLCBvciBoYXMgc29tZW9uZSBjaGFuZ2VkIHRoZSBjb21waWxhdGlvbiBzdHJhdGVneT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MzQuODUxNzkxNTY1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzAwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4zMzAxOlxcdFxcdH1cXG4zMzAyOlxcdFxcbjMzMDM6XFx0XFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4zMzA0OlxcdFxcdHJldHVybiAwO1xcbjMzMDU6XFx0XFxuMzMwNjpcXHRvdXRfY2FuY2VsOlxcbjMzMDc6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4zMzA4OlxcdFxcdHJldHVybiBlcnI7XFxuMzMwOTpcXHR9XFxuMzMxMDpcXHRcXG4zMzExOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4zMzEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1OCBkaXIpXFxuMzMxMzpcXHR7XFxuMzMxNDpcXHRcXHRyZXR1cm4gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSkpICtcXG4zMzE1OlxcdFxcdFxcdChtLVxcdTAwM2VlbmNhcCA/IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9lbmNhcF90bXBsKSkgOiAwKSArXFxuMzMxNjpcXHRcXHRcXHQobS1cXHUwMDNleHVvID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCkpIDogMCkgK1xcbjMzMTc6XFx0XFx0XFx0KG0tXFx1MDAzZW5ld19tYXJrID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspKSA6IDApICtcXG4zMzE4OlxcdFxcdFxcdCgobS1cXHUwMDNlc21hcmsudiB8IG0tXFx1MDAzZXNtYXJrLm0pID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICogMiA6IDApICtcXG4zMzE5OlxcdFxcdFxcdChtLVxcdTAwM2VtYXBwaW5nX21heGFnZSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MzQuODUyMDEwNjM1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDMzMjA1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmFjdHMgd2l0aCBzb21lIHNvcnQgb2Ygc3RhdGUgbWFuYWdlbWVudCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIGlzIHRvIGNoZWNrIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSB0aGF0IGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGlmIGl0cyBiZWhhdmlvciBjaGFuZ2VzIGJhc2VkIG9uIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBrZXJuZWwgdmVyc2lvbnMsIG9yIGVuYWJsZWQgZmVhdHVyZXMuIEknbSB0aGlua2luZyBzcGVjaWZpYyBzY2VuYXJpb3MgbGlrZSBtaWdyYXRpb24gbWlnaHQgYmUgdG9nZ2xlZCBieSBhIGNvbmZpZyBvcHRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIHRob3NlIHRvZ2dsZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBpbXBhY3Qgb2YgdGhlIGZ1bmN0aW9uJ3MgcHJlc2VuY2UgKG9yIGFic2VuY2UpLiBUaGUgcHJlc2VuY2Ugb2YgYCNpZmRlZmAgYWxzbyB0ZWxscyBtZSBJIHNob3VsZCBiZSBsb29raW5nIGZvciBjb3JyZXNwb25kaW5nIGAjZW5kaWZgIGFuZCBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gdHJhY2UgdGhyb3VnaCBkaWZmZXJlbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjQ0Ljg4NTIxODgxOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNjM3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE5ODU9c3RhdGljIGludCB2ZXJpZnlfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk4OC1cXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfTUFJTjpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTg5OiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk5MC1cXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfU1VCOlxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjM4MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1c2VycG9saWN5X3R5cGVfYXR0cnNpemUodm9pZClcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgyLXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzgzOiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4NC1cXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4OS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzkwOiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5MS1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzA0ND1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTE4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMTk6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTIwLXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTM0PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTQxOiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0Mi1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjQ0LjkzNDU5MDgwNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ2NDc0MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZW06XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgWEZSTSBNaWdyYXRpb24qKlxuXG5SaWdodCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSByZXF1aXJlbWVudCBoZXJlLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGBYRlJNX01JR1JBVEVgIHRvIGVuc3VyZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGlzIHNvdW5kIGFuZCBhZGRyZXNzZXMgdGhpcyBwYXJ0aWN1bGFyIHJlcXVpcmVtZW50IHByb3Blcmx5LiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1Mzo0OS45ODEwNjgyODhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDIwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX01JR1JBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjUwLjAyNjQ5NTcyMloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjI0MjY4NzMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgWEZSTSBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBYRlJNX01JR1JBVEVgIGFuZCBgWEZSTV9VU0VSYCBhcmUgZW5hYmxlZC4gQnV0IGhhbmcgb24sIGBYRlJNX1VTRVJgIGlzIGEgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY291bGQgYmUgYSBtb2R1bGUuIEhvd2V2ZXIsIGZvciB0aG9yb3VnaCBmdXp6aW5nLCBJJ2QgcmF0aGVyIGhhdmUgaXQgYnVpbHQtaW4uIFRoYXQncyB0aGUgc2FmZXN0IG9wdGlvbi5cblxuTm93LCBhbSBJIG1pc3NpbmcgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEFoYSEgVGhlIHBhdGNoIGFsdGVycyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIGludGVybmFsbHkgYWNxdWlyZSB0aGUgYHJjdV9yZWFkX2xvY2soKWAuIFRoYXQncyBnb2luZyB0byBhZmZlY3QgKmFsbCogb2YgaXRzIGNhbGxlcnMuXG5cbkFoLCByaWdodC4gVGhlIHNwZWNpZmljIGJ1ZyBmaXhlZCBieSB0aGlzIHBhdGNoIGlzIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgY2FsbGVkIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIHdoaWNoIHRoZW4gY2FsbGVkIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aG91dCB0aGUgcHJvcGVyIGByY3VfcmVhZF9sb2NrKClgLlxuXG5XYWl0IGEgbWludXRlLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAsIGlzbid0IGl0PyBPa2F5LCB0aW1lIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gR290dGEgYmUgbWV0aWN1bG91cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDowNi4yNjkxODU4MzRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNDU6XFx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMzM0NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzM0NzpcXHR7XFxuMzM0ODpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xcbjMzNDk6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMzM1MDpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgeHVvID0ge307XFxuMzM1MTpcXHRcXHRzdHJ1Y3QgeGZybV9taWdyYXRlIG0gPSB7fTtcXG4zMzUyOlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4YztcXG4zMzUzOlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbjMzNTQ6XFx0XFx0aW50IGVycjtcXG4zMzU1OlxcdFxcbjMzNTY6XFx0XFx0aWYgKCF1bS1cXHUwMDNlaWQuc3BpKSB7XFxuMzM1NzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIFNQSSAweDBcXFwiKTtcXG4zMzU4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNTk6XFx0XFx0fVxcbjMzNjA6XFx0XFxuMzM2MTpcXHRcXHRpZiAodW0tXFx1MDAzZXJlc2VydmVkKSB7XFxuMzM2MjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXNlcnZlZCBmaWVsZCBtdXN0IGJlIHplcm9cXFwiKTtcXG4zMzYzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNjQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDowNi4yNjkzNjk2NzRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MDU0NzQ3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBYRlJNIFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgb2YgcmVjZW50IGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhcyBsb29raW5nIGF0IHRoZSByZWNlbnQgY29tbWl0cywgYW5kIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgY2FuZGlkYXRlIGFzIGEgZm9jdXMgc3ltYm9sLiBJdCdzIGEgbm9uLWlubGluZSBmdW5jdGlvbiBhbmQgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIGl0IG1vcmUgbGlrZWx5IHRvIGJlIGEgY2VudHJhbCBwb2ludCBvZiB0aGUgcmVjZW50IHdvcmsuXG5cbk5vdywgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIEJlY2F1c2UgaXQncyBpbmxpbmUsIGl0J3MgcHJvYmFibHkgc3ByZWFkIHRocm91Z2hvdXQgdGhlIGNvZGUsIHdoaWNoIG1ha2VzIGl0IGxlc3MgdXNlZnVsIGFzIGEgc2luZ2xlIHBvaW50IG9mIGludmVzdGlnYXRpb24uIEl0IHdvbid0IGJlIGEgZ29vZCByZXByZXNlbnRhdGl2ZSBvZiB0aGUgYnJvYWRlciBjaGFuZ2VzLCBzbyBJIHNob3VsZCBzZXQgdGhhdCBhc2lkZS5cblxuV2hhdCBlbHNlPyBBaCwgaGVyZSdzIG9uZSwgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLiBUaGF0IHdhcyBhbHNvIHRvdWNoZWQgcmVjZW50bHkuIExldCBtZSBjaGVjayB0aGF0IGZ1bmN0aW9uIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDg0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDoyMy42NzQ4NDcxMThaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1MTg6XFx0c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG4yNTE5OlxcdHtcXG4yNTIwOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXA7XFxuMjUyMTpcXHRcXHRpbnQgbGVuID0gTkxNU0dfQUxJR04oc2l6ZW9mKCp1cCkpO1xcbjI1MjI6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuMjUyMzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjI1MjQ6XFx0XFx0aW50IGVycjtcXG4yNTI1OlxcdFxcbjI1MjY6XFx0XFx0c2tiID0gbmxtc2dfbmV3KGxlbiwgR0ZQX0FUT01JQyk7XFxuMjUyNzpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuMjUyODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yNTI5OlxcdFxcbjI1MzA6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgMCwgMCwgWEZSTV9NU0dfR0VUREVGQVVMVCwgc2l6ZW9mKCp1cCksIDApO1xcbjI1MzE6XFx0XFx0aWYgKG5saCA9PSBOVUxMKSB7XFxuMjUzMjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4yNTMzOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjUzNDpcXHRcXHR9XFxuMjUzNTpcXHRcXG4yNTM2OlxcdFxcdHVwID0gbmxtc2dfZGF0YShubGgpO1xcbjI1Mzc6XFx0XFx0dXAtXFx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDoyMy42NzUwMjU1NzhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE1ODQyMjk1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBvbGljeSBOb3RpZmljYXRpb24gUGF0aHdheSoqXG5cbk9rYXksIHNvIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgeGZybV9zZXRfZGVmYXVsdGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBgeGZybV9zZXRfZGVmYXVsdGAgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhhdCBjYWxsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGggYW5kIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBwb2xpY3kgbm90aWZpY2F0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZC4gSXMgaXQgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIGRlZmF1bHQgcG9saWN5IHNldHRpbmcgcHJvY2Vzcywgb3IgaXMgaXQgYSBzaWRlIGVmZmVjdCB0aGF0IG1pZ2h0IGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIG9yIGV2ZW4gb3B0aW1pemU/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBleGFtaW5pbmcgYHhmcm1fc2V0X2RlZmF1bHRgIHdpbGwgaWxsdW1pbmF0ZSB0aGUgbG9naWMgZHJpdmluZyB0aGUgbm90aWZpY2F0aW9uIGFuZCB3aGF0IHN0YXRlIGNoYW5nZXMgdHJpZ2dlciBpdC4gRnJvbSBoZXJlIEknbGwgc2VlIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBjYW4gbGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU0OjQ1LjI1OTI1Nzk2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTU0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTU0OlxcdHN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4yNTU1OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yNTU2OlxcdHtcXG4yNTU3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1NTg6XFx0XFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cCA9IG5sbXNnX2RhdGEobmxoKTtcXG4yNTU5OlxcdFxcbjI1NjA6XFx0XFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cXHUwMDNlaW4pKVxcbjI1NjE6XFx0XFx0XFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dLCB1cC1cXHUwMDNlaW4pO1xcbjI1NjI6XFx0XFxuMjU2MzpcXHRcXHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVxcdTAwM2Vmd2QpKVxcbjI1NjQ6XFx0XFx0XFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtXFx1MDAzZWZ3ZCk7XFxuMjU2NTpcXHRcXG4yNTY2OlxcdFxcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXFx1MDAzZW91dCkpXFxuMjU2NzpcXHRcXHRcXHRXUklURV9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdLCB1cC1cXHUwMDNlb3V0KTtcXG4yNTY4OlxcdFxcbjI1Njk6XFx0XFx0cnRfZ2VuaWRfYnVtcF9hbGwobmV0KTtcXG4yNTcwOlxcdFxcbjI1NzE6XFx0XFx0eGZybV9ub3RpZnlfdXNlcnBvbGljeShuZXQpO1xcbjI1NzI6XFx0XFx0cmV0dXJuIDA7XFxuMjU3MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU0OjQ1LjI1OTU2OTJaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU4MTAzOTk2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBYRlJNIE5ldGxpbmsgYW5kIE11bHRpY2FzdGluZyoqXG5cbk9rYXksIHNvIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfU0VUREVGQVVMVGAuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGZvY2FsIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJ1dCBJIG5lZWQgdG8gcmV2aXNpdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjYWxsIGNvbnRleHQuXG5cbk15IGNvbmNlcm4gaXMgd2hldGhlciBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIG1pZ2h0IGJlIGludm9rZWQgZnJvbSBsb2NhdGlvbnMgdGhhdCAqZG9uJ3QqIGFscmVhZHkgaG9sZCBgcmN1X3JlYWRfbG9jaygpYC4gV2UgcHJldmlvdXNseSBleGFtaW5lZCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEFyZSB0aGVyZSAqb3RoZXIqIGNhbGxlcnMgSSBtaXNzZWQ/IExldCdzIHNlZS4uLiBgeGZybV9zdGF0ZV9uZXRsaW5rYD8gTm8sIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGRpcmVjdGx5IGNhbGwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC5cblxuV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgd2l0aCBhIHF1aWNrIGBncmVwYCBzZWFyY2ggZm9yIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEknbSBnb2luZyB0byByZWx5IG9uIHRoZSBvdXRwdXQgdG8gc2V0dGxlIHRoaXMgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzODMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTowMS4wNjk5NzE1ODNaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODI4MTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25sbXNnX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MTU5OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyNi0gKi9cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjI3OnN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjI4LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1MTg9c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjU0MzpcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjU0NC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDI6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0My19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjMwPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0Ni1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ3OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDgtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk4Mj1zdGF0aWMgaW50IHhmcm1fZXhwX3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTk2OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5Ny19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTk5PXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDExLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTI6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUVWRU5UUyk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMy19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDE1PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2FfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDM4OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDM5LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwOTk9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MTUxOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUyLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNTAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BQ1FVSVJFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUyLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNjA9c3RhdGljIGludCB4ZnJtX2V4cF9wb2xpY3lfbm90aWZ5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzItXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDM3MzpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDM3Nj1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDM5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NDA6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQxLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0Nz1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDY3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0Njg6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDY5LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDUyNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90byxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1MzktXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU0MDpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9SRVBPUlQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDU3NT1zdGF0aWMgaW50IHhmcm1fc2VuZF9tYXBwaW5nKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB4ZnJtX2FkZHJlc3NfdCAqaXBhZGRyLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU5NC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTk1OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTowMS4yMDgyNjA0NTZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1ODQwNjYyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBCdWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZXNlIGBuZXRsaW5rX21ncmAgY2FsbGJhY2tzLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGVtIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBga21fKmAgZnVuY3Rpb25zIGZyb20gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIFRoZXNlIGZ1bmN0aW9ucywgYXMgd2Uga25vdywgcHJvdGVjdCB0aGVpciBpdGVyYXRpb25zIG92ZXIgYHhmcm1fa21fbGlzdGAgd2l0aCBgcmN1X3JlYWRfbG9jaygpYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGV4Y2VwdGlvbnMuIEkgaGF2ZTpcblxuKiAgIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YDogQ2FsbGVkIGZyb20gYHhmcm1fc2V0X2RlZmF1bHRgLCB3aGljaCBleHBsaWNpdGx5ICp1c2VkKiB0byBob2xkIGByY3VfcmVhZF9sb2NrKClgIChhY2NvcmRpbmcgdG8gbXkgbm90ZXMsIGEgcHJldmlvdXMgcGF0Y2ggcmVtb3ZlZCB0aGlzKS4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1dHVyZSB2ZXJpZmljYXRpb24uXG4qICAgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYDogQ2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuICpUaGlzKiBvbmUsIGltcG9ydGFudGx5LCAqZGlkbid0KiBob2xkIGByY3VfcmVhZF9sb2NrKClgLCB3aGljaCBJJ20gaW5mZXJyaW5nIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0uXG5cblNvLCB0aGUgaXNzdWUgYXBwZWFycyB0byBiZSBwaW5wb2ludGVkIHRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gZHJpbGwgaW50byAqdGhhdCogZnVuY3Rpb24gbm93LiBgeGZybV9zZXRfZGVmYXVsdGAgaXMgYWxzbyB3b3J0aCBhIGxvb2sgYmVjYXVzZSBpdCBjYWxscyBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuXG5cbkFscmlnaHQsIGJhY2sgdG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIENhbiB0aGlzIGZ1bmN0aW9uIGJlIHJlYWNoZWQgZnJvbSB1c2VyIHNwYWNlPyAqWWVzKiwgaXQncyBoYW5kbGluZyBhIG5ldGxpbmsgY2FsbCBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBBaGEsIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBpcyBhIG5ldGxpbmsgbWVzc2FnZSB0eXBlLiBJIHNob3VsZCBub3cgbG9vayBhdCBgeGZybV91c2VyLmNgIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NToxMS43OTIzMzA1NjhaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTU1MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fTVNHX01JR1JBVEVfU1RBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fY29tcGF0LmM9NzQ9c3RhdGljIGNvbnN0IGludCBjb21wYXRfbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtOTctXFx0W1hGUk1fTVNHX01BUFBJTkcgICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJfbWFwcGluZyksXFxubmV0L3hmcm0veGZybV9jb21wYXQuYzo5ODpcXHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSxcXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTk5LX07XFxuLS1cXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jPTEzOT1zdGF0aWMgc3RydWN0IG5sbXNnaGRyICp4ZnJtX25sbXNnX3B1dF9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtMTY1LVxcdGNhc2UgWEZSTV9NU0dfTUlHUkFURTpcXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jOjE2NjpcXHRjYXNlIFhGUk1fTVNHX01JR1JBVEVfU1RBVEU6XFxubmV0L3hmcm0veGZybV9jb21wYXQuYy0xNjctXFx0Y2FzZSBYRlJNX01TR19ORVdTQURJTkZPOlxcbi0tXFxubmV0L3hmcm0veGZybV9jb21wYXQuYz00Nzk9c3RhdGljIGludCB4ZnJtX3hsYXRlMzIoc3RydWN0IG5sbXNnaGRyICpkc3QsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqc3JjLFxcbi0tXFxubmV0L3hmcm0veGZybV9jb21wYXQuYy01MDItXFx0Y2FzZSBYRlJNX01TR19NSUdSQVRFOlxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmM6NTAzOlxcdGNhc2UgWEZSTV9NU0dfTUlHUkFURV9TVEFURTpcXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTUwNC1cXHRjYXNlIFhGUk1fTVNHX05FV1NBRElORk86XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2MDU9c3RhdGljIGludCB4ZnJtX21pZ3JhdGVfY2hlY2soY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQyLSAqIEZpbGwgbWlncmF0ZSBmaWVsZHMgdGhhdCBhcmUgaW52YXJpYW50IGluIFhGUk1fTVNHX01JR1JBVEU6IGluaGVyaXRlZFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDY0MzogKiBmcm9tIHRoZSBleGlzdGluZyBTQSB1bmNoYW5nZWQuIFhGUk1fTVNHX01JR1JBVEVfU1RBVEUgY2FuIHVwZGF0ZSB0aGVzZS5cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2NDQtICovXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY2xvbmVfYW5kX3NldHVwKHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5ODQtXFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VpZCwgXFx1MDAyNm9yaWctXFx1MDAzZWlkLCBzaXplb2YoeC1cXHUwMDNlaWQpKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk4NTpcXHRpZiAobS1cXHUwMDNlbXNnX3R5cGUgPT0gWEZSTV9NU0dfTUlHUkFURV9TVEFURSkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTg2LVxcdFxcdGlmIChtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzEyMD1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzEzNS1cXHRtYS1cXHUwMDNlbmV3X3NlbCAgPSBcXHUwMDI2dW0tXFx1MDAzZW5ld19zZWw7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzEzNjpcXHRtYS1cXHUwMDNlbXNnX3R5cGUgPSBYRlJNX01TR19NSUdSQVRFX1NUQVRFO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMzctfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzI0Mz1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyNTEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzI1MjpcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgWEZSTV9NU0dfTUlHUkFURV9TVEFURSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjUzLVxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUpLCAwKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1Mjc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTMwOlxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlhGUk1fTVNHX01JR1JBVEVfU1RBVEUgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzEtXFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2NjE9Y29uc3QgaW50IHhmcm1fbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtXFx0W1hGUk1fTVNHX0dFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCksXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NjpcXHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VyX21pZ3JhdGVfc3RhdGUpLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODctfTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgwOlxcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS19O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc4Mz1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODExLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4MTI6XFx0aWYgKHR5cGUgPT0gWEZSTV9NU0dfTUlHUkFURV9TVEFURSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MTMtXFx0XFx0aW50IGk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODI5LVxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCBhdHRyc1tpXSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiVW5zdXBwb3J0ZWQgYXR0cmlidXRlIGluIFhGUk1fTVNHX01JR1JBVEVfU1RBVEVcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODMxLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NToxMS44MzcyOTA4NDNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NjYxNTU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFhGUk0gU3RhdGUgTWlncmF0aW9uIGFuZCBEZWZhdWx0IFNldHRpbmdzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBpbmRlZWQgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCwgYW5kIGl0J3MgcmVhY2hhYmxlLiBUaGF0IG1ha2VzIGl0IGEgbmV0bGluayBoYW5kbGVyLCB3aGljaCBpcyBleGNlbGxlbnQg4oCTIGl0J3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYW5hbHlzaXMuIFRoaXMgaXMgc29saWQuIE5vdyBJIHNob3VsZCB0dXJuIG15IGF0dGVudGlvbiB0byBgeGZybV9zZXRfZGVmYXVsdGAsIHdoaWNoLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBoYW5kbGVzIGBYRlJNX01TR19TRVRERUZBVUxUYC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYFhGUk1fTVNHX1NFVERFRkFVTFRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU1OjIzLjUwMzQ0ODc2MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMDE1NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9NU0dfU0VUREVGQVVMVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzY2MT1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4My1cXHRbWEZSTV9NU0dfTUFQUElORyAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9tYXBwaW5nKSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjg0OlxcdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtXFx0W1hGUk1fTVNHX0dFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCksXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzctXFx0W1hGUk1fTVNHX0dFVFNQRElORk8gIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfc3BkaW5mbyAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc3ODpcXHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzc5LVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NToyMy41NDc2NTY0NTVaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExNzI0MjIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFhGUk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGB4ZnJtX3NldF9kZWZhdWx0YCBpcyBhbHNvIGEgbmV0bGluayBoYW5kbGVyLCBqdXN0IGxpa2UgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEJvdGggb2YgdGhlc2UgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLiBMZXQgbWUgc3VtbWFyaXplIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaXg6XG5cblRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZSBvciBhIHdhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gd2FzIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgd2FzIGNhbGxpbmcgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aGljaCB0aGVuIGNhbGxzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aG91dCBob2xkaW5nIHRoZSBuZWNlc3NhcnkgYHJjdV9yZWFkX2xvY2soKWAuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoYXQgbG9jayBpbnRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXRzZWxmLlxuXG5UaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgYnkgcmVtb3ZpbmcgaXRzIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIHNpbmNlIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgbm93IGhhbmRsZXMgdGhhdC4gSXQgbG9va3MgbGlrZSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgeGZybV9zZXRfZGVmYXVsdGAuIFNpbmNlIGJvdGggYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgYW5kIGB4ZnJtX3NldF9kZWZhdWx0YCBhcmUgbmV0bGluayBoYW5kbGVycyBhbmQgdXNlci1zcGFjZSBhY2Nlc3NpYmxlLCB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgZGVmaW5pdGVseSBiZSBmdXp6aW5nLiBGdW5jdGlvbmFsbHksIGl0IGZpeGVzIGEgYnVnLCBzbyBpdCdzIGEgd29ydGh3aGlsZSBlbmRlYXZvci5cblxuVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFhGUk1fVVNFUmAgYW5kIGBYRlJNX01JR1JBVEVgLiBXYWl0IGEgc2Vjb25k4oCmIGBYRlJNX1VTRVJgIGlzIGEgdHJpc3RhdGUsIGlzbid0IGl0PyBTaG91bGQgSSBhbHNvIGNvbnNpZGVyIGBYRlJNYD8gYFhGUk1gIGlzIGEgYm9vbGVhbiwgYW5kIGBYRlJNX1VTRVJgIGRlcGVuZHMgb24gYElORVRgLiBPa2F5LCBJJ2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L3hmcm0vS2NvbmZpZ2AganVzdCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQgYmVmb3JlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzE5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU1OjMwLjY2NDkwMTM3MloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MDM0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTozMC43MTA4MTAyMzZaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc2NDcxNTE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBoZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGlzLiBUaGUgcHJpbWFyeSBnb2FscyBmb3IgbXkgY29uZmlndXJhdGlvbiBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdtIGdvaW5nIHRvIGluY2x1ZGUgYFhGUk1fVVNFUmAgYW5kIGBYRlJNX01JR1JBVEVgIGluIGBFbmFibGVDb25maWdzYC4gVGhlc2Ugc2VlbSBlc3NlbnRpYWwsIGdpdmVuIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBtaWdyYXRpb24gb2YgWEZSTSBzdGF0ZXMuXG5cbk5vdywgbGV0J3MgdGFsayBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYXMgc3ltYm9scy4gSSdtIGdvaW5nIHRvIGFkZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGluIGBGb2N1c1N5bWJvbHNgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBlbnRyeS4gVGhleSdyZSB0aGUgbmV0bGluayBoYW5kbGVycyBpbnZvbHZlZCBpbiBib3RoIG1pZ3JhdGluZyBzdGF0ZXMgYW5kIHNldHRpbmcgZGVmYXVsdHMsIHdoaWNoIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBmaXggZm9yIHRoZSBSQ1UgdXNlLWFmdGVyLWZyZWUvd2FybmluZy5cblxuSSBkaWQgYSBiaXQgb2YgZHVlIGRpbGlnZW5jZSB0byBtYWtlIHN1cmUgSSB3YXNuJ3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBGaXJzdCwgSSBxdWlja2x5IGNoZWNrZWQgaWYgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3YXMgc3RhdGljIGlubGluZS4gWWVwLCBpdCBpcy4gU28gdGhhdCdzIG5vdCBnb2luZyB0byBiZSBhIGdvb2QgY2FuZGlkYXRlIGFzIGEgZm9jdXMgc3ltYm9sLCBzaW5jZSBpdCdzIGlubGluZWQuXG5cblRoZW4sIEkgbG9va2VkIGF0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIEkgc2F3IHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IG5vdCBpbmxpbmUuIFdoaWxlIGl0ICpjb3VsZCogYmUgYSBmb2N1cyBzeW1ib2wsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHRoZSBuZXRsaW5rIGhhbmRsZXIsIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBtb3JlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy5cblxuSSBhbHNvIGRvdWJsZS1jaGVja2VkIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YC4gSXQncyBhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YC4gU2luY2UgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIHRoZSBuZXRsaW5rIGhhbmRsZXIsIEknbGwgc3RpY2sgd2l0aCB0aGF0LlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgYW5kIGB4ZnJtX3NldF9kZWZhdWx0YCBhcmUgdGhlIGJlc3QgZm9jdXMgc3ltYm9scyB0byBlZmZlY3RpdmVseSB0YXJnZXQgdGhlIGJ1ZyBmaXggYW5kIHBvdGVudGlhbCByZWxhdGVkIGlzc3Vlcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMwOCwiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTU6NDAuNDc1NTI4Mjk2WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNjk0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gICAgXCJ4ZnJtX3NldF9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZS93YXJuaW5nIGluIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRlcm5hbGx5LiBQcmV2aW91c2x5LCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGV4cGVjdGVkIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgUkNVIHJlYWQgbG9jaywgYnV0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIChhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgKSBjYWxsZWQgaXQgdmlhIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBleHBsaWNpdCBgcmN1X3JlYWRfbG9jaygpYCBmcm9tIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCAoY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YCkgc2luY2UgaXQgaXMgbm93IGhhbmRsZWQgaW50ZXJuYWxseS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBmaXggYSBidWcsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU1OjQwLjU2MTYwNjU0NFoiLCJTZXEiOjY3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzMDEwNjc1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTo0MC41NjIyNjMxNTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYzMDA0MDY5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgdG8gdGFrZSB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGluc3RlYWQgb2YgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gaG9sZCBpdC4gVGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nIGFuZCBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gUkNVLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGUuZy4sIFJDVSB3YXJuaW5ncywgZGVhZGxvY2tzKSBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTQxYWVlMjUzYjA1NDM3ZDZlZWNlOTgwY2NlMTgwNTc0YTEzYTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTM6NTA6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4xZjY4MzUxNmYyYjUyIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTYyMiwzMSArMTYyMiwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIH1cbiBcbiAvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLlxuKyAqIFRha2VzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgYXJvdW5kIHRoZSBtdWx0aWNhc3QuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbitcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbitcdHN0cnVjdCBzb2NrICpubHNrO1xuIFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xuK1x0aW50IGVycjtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVx1MDAzZXhmcm0ubmxzayk7XG4gXHRpZiAoIW5sc2spIHtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gLUVQSVBFO1xuIFx0fVxuLVxuIFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuIFx0aWYgKHh0cikge1xuLVx0XHRpbnQgZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbi1cbitcdFx0ZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbiBcdFx0eGZybV9wdXRfdHJhbnNsYXRvcih4dHIpO1xuIFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuLVxuLVx0cmV0dXJuIG5sbXNnX211bHRpY2FzdChubHNrLCBza2IsIHBpZCwgZ3JvdXAsIEdGUF9BVE9NSUMpO1xuK1x0ZXJyID0gbmxtc2dfbXVsdGljYXN0KG5sc2ssIHNrYiwgcGlkLCBncm91cCwgR0ZQX0FUT01JQyk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhmcm1fc3BkaW5mb19tc2dzaXplKHZvaWQpXG5AQCAtMjUzNiw5ICsyNTQwLDcgQEAgc3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdG5sbXNnX2VuZChza2IsIG5saCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTU6NDAuNTYyMjY0MTA0WiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzAwMzgzMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJDVSBMb2NraW5nIE9wdGltaXphdGlvbiBpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIHJlZ2FyZGluZyBSQ1UgbG9ja2luZyBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpdHNlbGYgbm93IGhhbmRsZXMgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBjYWxsZXIgdG8gbWFuYWdlIGl0LiBJIGNhbiBzZWUgdGhleSd2ZSBhZGRlZCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3MgYm9keS4gQ29uc2VxdWVudGx5LCB0aGUgbG9ja2luZyBjYWxscyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsZXIsIG5hbWVseSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZy1yZWxhdGVkIG1vZGlmaWNhdGlvbi4gSXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBub3IgZG9lcyBpdCBhbHRlciB0aGUgY29udGVudCBvZiB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ug4oCTIGp1c3QgaG93IGl0J3MgcHJvdGVjdGVkIGR1cmluZyB0aGUgbXVsdGljYXN0IG9wZXJhdGlvbi4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJvdW5kcyBjaGVja3MsIGVpdGhlci4gVGhlcmVmb3JlLCBJIGRvbid0IGFudGljaXBhdGUgYW55IGlzc3VlcyB0aGF0IHdvdWxkIGJlIGZsYWdnZWQgYnkgS01TQU4uIFNpbmNlIHdlJ3JlIGRlYWxpbmcgZXhjbHVzaXZlbHkgd2l0aCBSQ1UgbG9jayBjaGFuZ2VzLCBLQVNBTiBhbmQgTE9DS0RFUCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHByb2JsZW1zIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHdhcm5pbmdzIHRoYXQgbWF5IHN1cmZhY2UuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIHNuaXBwZXQgdG8gY29uZmlybS4gWWVzLCBpdCdzIGV4YWN0bHkgYXMgZGVzY3JpYmVkOiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uLCByaWdodCBiZWZvcmUgcmVmZXJlbmNpbmcgYG5ldC1cdTAwM2V4ZnJtLm5sc2tgLCBhbmQgdGhlIGByY3VfcmVhZF91bmxvY2soKWAgaXMgYWRkZWQgYWNjb3JkaW5nbHkuIFRoaXMgbG9va3MgY2xlYW4gYW5kIHNhZmUuXG5cbkFscmlnaHQsIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCBuZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guIEknbGwgZmxhZyBpdCBhY2NvcmRpbmdseS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzQsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTY6MTYuODYyNjUwMzYzWiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIHRha2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0aGUgY2FsbGVyIHRvIGhvbGQgaXQuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZyBhbmQgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIFJDVS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgY2hhbmdlIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBSQ1Ugd2FybmluZ3MsIGRlYWRsb2Nrcykgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0byB0YWtlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxlciB0byBob2xkIGl0LiBUaGlzIGlzIHB1cmVseSBhIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBSQ1UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGNoYW5nZSB0aGUgY29udGVudHMgb2YgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgUkNVIHdhcm5pbmdzLCBkZWFkbG9ja3MpIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 13:03:54 +0000 UTC FinishedAt: 2026-08-18 13:56:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "dc1d569a-dd80-4070-8717-641f9dba0434" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_do_migrate_state", "xfrm_set_default" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgdG8gdGFrZSB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGluc3RlYWQgb2YgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gaG9sZCBpdC4gVGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nIGFuZCBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gUkNVLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGUuZy4sIFJDVSB3YXJuaW5ncywgZGVhZGxvY2tzKSBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlNDFhZWUyNTNiMDU0MzdkNmVlY2U5ODBjY2UxODA1NzRhMTNhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMzo1MDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4xZjY4MzUxNmYyYjUyIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTYyMiwzMSAmIzQzOzE2MjIsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiB9XG4gXG4gLyogQSB3cmFwcGVyIGZvciBubG1zZ19tdWx0aWNhc3QoKSBjaGVja2luZyB0aGF0IG5sc2sgaXMgc3RpbGwgYXZhaWxhYmxlLlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay5cbiYjNDM7ICogVGFrZXMgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBhcm91bmQgdGhlIG11bHRpY2FzdC5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKVxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqbmxzaztcbiBcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2V4ZnJtLm5sc2spO1xuIFx0aWYgKCFubHNrKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRVBJUEU7XG4gXHR9XG4tXG4gXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4gXHRpZiAoeHRyKSB7XG4tXHRcdGludCBlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuJiM0MztcdFx0ZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbiBcdFx0eGZybV9wdXRfdHJhbnNsYXRvcih4dHIpO1xuIFx0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbi1cbi1cdHJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRlcnIgPSBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKVxuQEAgLTI1MzYsOSAmIzQzOzI1NDAsNyBAQCBzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgdXNlLWFmdGVyLWZyZWUvd2FybmluZyBpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGJ5IG1vdmluZyB0aGUgYHJjdV9yZWFkX2xvY2soKWAgaW50ZXJuYWxseS4gUHJldmlvdXNseSwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBleHBlY3RlZCB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIFJDVSByZWFkIGxvY2ssIGJ1dCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCAoYSBuZXRsaW5rIGhhbmRsZXIgZm9yIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCkgY2FsbGVkIGl0IHZpYSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgZXhwbGljaXQgYHJjdV9yZWFkX2xvY2soKWAgZnJvbSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgKGNhbGxlZCBieSBgeGZybV9zZXRfZGVmYXVsdGApIHNpbmNlIGl0IGlzIG5vdyBoYW5kbGVkIGludGVybmFsbHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZml4IGEgYnVnLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U0MWFlZTI1M2IwNTQzN2Q2ZWVjZTk4MGNjZTE4MDU3NGExM2E2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEzOjUwOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCBkNmRiNjMzMDRiYTZiLi4xZjY4MzUxNmYyYjUyIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMTYyMiwzMSAmIzQzOzE2MjIsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIH0KIAogLyogQSB3cmFwcGVyIGZvciBubG1zZ19tdWx0aWNhc3QoKSBjaGVja2luZyB0aGF0IG5sc2sgaXMgc3RpbGwgYXZhaWxhYmxlLgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLgomIzQzOyAqIFRha2VzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgYXJvdW5kIHRoZSBtdWx0aWNhc3QuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKQomIzQzOwkJCQkgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApCiB7Ci0Jc3RydWN0IHNvY2sgKm5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LSZndDt4ZnJtLm5sc2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqbmxzazsKIAlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7CiYjNDM7CWludCBlcnI7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0mZ3Q7eGZybS5ubHNrKTsKIAlpZiAoIW5sc2spIHsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FUElQRTsKIAl9Ci0KIAl4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7CiAJaWYgKHh0cikgewotCQlpbnQgZXJyID0geHRyLSZndDthbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7Ci0KJiM0MzsJCWVyciA9IHh0ci0mZ3Q7YWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpOwogCQl4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7CiAJCWlmIChlcnIpIHsKJiM0MzsJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQotCXJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTsKJiM0MzsJZXJyID0gbmxtc2dfbXVsdGljYXN0KG5sc2ssIHNrYiwgcGlkLCBncm91cCwgR0ZQX0FUT01JQyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKQpAQCAtMjUzNiw5ICYjNDM7MjU0MCw3IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpCiAKIAlubG1zZ19lbmQoc2tiLCBubGgpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4ZnJtX3VzZXIuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgbWFkZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBoYW5kbGVzIHRoZSBSQ1UgcmVhZCBsb2NrLiBQcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgbG9jaywgYnV0IG5vdyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGdvaW5nIHRvIHRha2UgaXQgaW50ZXJuYWxseS4gVGhhdCYjMzk7cyBhIHByZXR0eSBiaWcgc2hpZnQsIGNoYW5naW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBjb250cmFjdCBsaWtlIHRoYXQuCgpUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gVGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgY2FsbHMgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYmVjYXVzZSB0aGUgZnVuY3Rpb24gbm93IG1hbmFnZXMgdGhlIGxvY2sgaXRzZWxmLiBUaGlzIGlzIGFsbCBnb29kIGFuZCBleHBlY3RlZC4KCkhvd2V2ZXIsIGEgY2hhbmdlIGxpa2UgdGhpcyBhbHdheXMgcmFpc2VzIHF1ZXN0aW9ucyBpbiBteSBtaW5kLiBUaGUgaW1tZWRpYXRlIHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXM6IHdoYXQgb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSBjYWxsIGB4ZnJtX25sbXNnX211bHRpY2FzdGA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgKmFsbCogY2FsbCBzaXRlcyBhcmUgdXBkYXRlZCBhY2NvcmRpbmdseS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIGJlY2F1c2Ugbm93IHdlJiMzOTtyZSBtb3ZpbmcgdGhlIHJlc3BvbnNpYmlsaXR5LiBUaW1lIHRvIHNjYW4gdGhlIG90aGVyIGZpbGVzIGFuZCBkb3VibGUtY2hlY2ssIGxvb2tpbmcgZm9yIGFueSBvdGhlciBjYWxsZXJzIHRoYXQgbWlnaHQgc3RpbGwgYmUgZXhwZWN0aW5nIHRoZSBsb2NrIHRvIGJlIGhlbGQgZXh0ZXJuYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25sbXNnX211bHRpY2FzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0xNTk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyNi0gKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mjc6c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyOC1cdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNTE4PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjU0Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDM6XHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTQ0LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDI6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDMtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2MzA9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NDc6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDgtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5ODI9c3RhdGljIGludCB4ZnJtX2V4cF9zdGF0ZV9ub3RpZnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk1LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5NjpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk3LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTk5PXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTI6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BRVZFTlRTKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTMtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMTU9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMzg6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDM5LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDk5PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2Eoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUwLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDE1MTpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNTItXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUwLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MTpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0FDUVVJUkUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDI1Mi19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDM2MD1zdGF0aWMgaW50IHhmcm1fZXhwX3BvbGljeV9ub3RpZnkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzItXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MzczOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfRVhQSVJFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNzY9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3koc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0MzktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDQwOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NDEtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0Nz1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0Njg6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2OS1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NTI3PXN0YXRpYyBpbnQgeGZybV9zZW5kX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1MzktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTQwOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUkVQT1JUKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1NzU9c3RhdGljIGludCB4ZnJtX3NlbmRfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTk0LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDU5NTpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDU5Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAqKgoKT2theSwgc28gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBnZXRzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIFRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpbmdzIGJ5IGhhdmluZyBpdCBhY3F1aXJlIGFuIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgKmNhbGxpbmcqIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jaywgd2hpY2ggbWVhbnMgSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgZGV0ZXJtaW5lIGlmIHRoYXQmIzM5O3Mgc3RpbGwgdmFsaWQgbm93LgoKTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB3ZXJlICphbGwqIHRoZSBjYWxsZXJzIGFjdHVhbGx5IGhvbGRpbmcgdGhhdCBsb2NrPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjb2RlLiBMZXQgbWUgcXVpY2tseSBjaGVjayBhbm90aGVyIGNhbGxlciwgZm9yIGV4YW1wbGUsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIG90aGVyIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zZW5kX21pZ3JhdGVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMxMT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjQ6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI1LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MDgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTA5Olx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbWlncmF0aW9uIGxvZ2ljIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3RhdGUgdHJhbnNpdGlvbiwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGtleWluZyBtYXRlcmlhbHMsIHNlcXVlbmNlIG51bWJlcnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgbWlncmF0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGdsYXJpbmdseSBvYnZpb3VzIHRoYXQgbWlnaHQgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IsIHdvcnNlLCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGVzcGVjaWFsbHkgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YgdHVubmVscyBhbmQgdHJhbnNwb3J0IHByb3RvY29scyBpbiBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgcGF0dGVybnMgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjYW4gYmUgc2ltcGxpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMyND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ0LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUyNi0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyNzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MDpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTWlncmF0aW9uIFN0YXRlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGEgbmV0bGluayBkb2l0IGhhbmRsZXIuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIOKAkyBpdCBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IGluaGVyaXQgdGhlIFJDVSByZWFkIGxvY2sgbGlrZSBzb21lIG90aGVyIHBhcnRzIG9mIHRoZSBYRlJNIGNvZGUuIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGltcGxlbWVudGF0aW9uLiBHb3R0YSB0cmFjZSB0aGUgcGF0aCwgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgKmFjdHVhbGx5KiB1c2luZyB0aGUgc3RhdGUgZGF0YS4gVGhpcyBpcyBjcnVjaWFsOyBhbnkgcmFjZSBjb25kaXRpb25zIGFyb3VuZCBzdGF0ZSBtb2RpZmljYXRpb24gY291bGQgYmUgdmVyeSBuYXN0eS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGVkIHRoZSBsb2NraW5nIGluIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCBpZiB0aGV5JiMzOTt2ZSB0YWtlbiB0aGUgbmVjZXNzYXJ5IHByZWNhdXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzI0Olx0c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4zMzI1Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxuMzMyNjpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcbjMzMjc6XHRcdFx0XHRcdCAgIHU4IGRpciwgdTMyIHBvcnRpZCwgdTMyIHNlcSlcbjMzMjg6XHR7XG4zMzI5Olx0XHRpbnQgZXJyO1xuMzMzMDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjMzMzE6XHRcbjMzMzI6XHRcdHNrYiA9IG5sbXNnX25ldyh4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShtLCBkaXIpLCBHRlBfQVRPTUlDKTtcbjMzMzM6XHRcdGlmICghc2tiKVxuMzMzNDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMzMzU6XHRcbjMzMzY6XHRcdGVyciA9IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc2tiLCB1bSwgbSwgZGlyLCBwb3J0aWQsIHNlcSk7XG4zMzM3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zMzM4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMzMzOTpcdFx0XHRyZXR1cm4gZXJyO1xuMzM0MDpcdFx0fVxuMzM0MTpcdFxuMzM0MjpcdFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4zMzQzOlx0fVxuMzM0NDpcdFxuMzM0NTpcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMzM0NjpcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzM0NzpcdHtcbjMzNDg6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUkNVIFJlYWQgTG9jayBJc3N1ZSoqCgpPa2F5LCBzbyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgaG9sZGluZyBgcmN1X3JlYWRfbG9jaygpYC4gV2FpdCBhIG1pbnV0ZSwgaWYgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCAqdXNlZCogdG8gcmVxdWlyZSB0aGF0IGxvY2ssIHRoZW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3YXMgcG90ZW50aWFsbHkgY2FsbGluZyBpdCB3aXRob3V0IHRoZSBsb2NrPyBUaGF0JiMzOTtzIGEgc2VyaW91cyBidWcgd2FpdGluZyB0byBoYXBwZW4uIExldCYjMzk7cyBkaWcgaW4uIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYmVoYXZlZCAqYmVmb3JlKiB0aGlzIHBhdGNoLgoKUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYgc2F5czoKCmBgYGMKIC8qIEEgd3JhcHBlciBmb3Igbmxtc2dfbXVsdGljYXN0KCkgY2hlY2tpbmcgdGhhdCBubHNrIGlzIHN0aWxsIGF2YWlsYWJsZS4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay4KJiM0MzsgKiBUYWtlcyB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFyb3VuZCB0aGUgbXVsdGljYXN0LgogICovCiBzdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cCkKJiM0MzsJCQkJICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKQogewotCXN0cnVjdCBzb2NrICpubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0mZ3Q7eGZybS5ubHNrKTsKJiM0MzsJc3RydWN0IHNvY2sgKm5sc2s7CiAJc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyOwomIzQzOwlpbnQgZXJyOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O3hmcm0ubmxzayk7CmBgYAoKT2theSwgc28gYmVmb3JlIHRoZSBwYXRjaCwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3YXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O3hmcm0ubmxzaylgLi4uIG1lYW5pbmcgaXQgKmRpZCogcmVxdWlyZSB0aGUgbG9jayBleHRlcm5hbGx5LCBvdGhlcndpc2Ugd2UmIzM5O2Qgc2VlIGFuIFJDVSB3YXJuaW5nLiBOb3csIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd2FzICp1c2VkKiBiZWZvcmUgdGhlIHBhdGNoLiBMZXQmIzM5O3MgbG9vayBhdCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQ6CgpgYGBjCi0JcmN1X3JlYWRfbG9jaygpOwogCWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKYGBgCgpBaCwgZ29vZCwgaXQgd2FzIGhvbGRpbmcgdGhlIGxvY2sgYXMgaXQgc2hvdWxkLiBTbyB0aGF0IHVzZSB3YXMgc2FmZS4gQnV0IHdoYXQgYWJvdXQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYD8gV2FzICppdCogaG9sZGluZyB0aGUgUkNVIGxvY2sgd2hlbiBpdCBjYWxsZWQgdGhlIHByb2JsZW1hdGljIGZ1bmN0aW9uPyBOb3cgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGNhbGxzIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIHNwZWNpZmljYWxseSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCwgdG8gc2VlIGlmIHRoZSBsb2NrIHdhcyBiZWluZyBoZWxkLiBMZXQmIzM5O3MgZ28uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ5MDpcdFxuMzQ5MTpcdFx0ZXJyID0geGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwoeCwgeGMsIFx1MDAyNm0sIGV4dGFjayk7XG4zNDkyOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zNDkzOlx0XHRcdC8qXG4zNDk0Olx0XHRcdCAqIFNob3VsZCBub3Qgb2NjdXI6IHByZS1jaGVjayBhYm92ZSBlbnN1cmVzIHRoZSBuZXcgdHVwbGUgaXNcbjM0OTU6XHRcdFx0ICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lcztcbjM0OTY6XHRcdFx0ICogcmVzdG9yaW5nIHggd291bGQgcmlzayBTTi9JViByZXVzZS5cbjM0OTc6XHRcdFx0ICovXG4zNDk4Olx0XHRcdGdvdG8gb3V0O1xuMzQ5OTpcdFx0fVxuMzUwMDpcdFxuMzUwMTpcdFx0LyogUmVzdG9yZSBlbmNhcCBjbGVhcmVkIGJ5IHNlbnRpbmVsICh0eXBlPTApIGR1cmluZyBtaWdyYXRpb24uICovXG4zNTAyOlx0XHRpZiAoYXR0cnNbWEZSTUFfRU5DQVBdKVxuMzUwMzpcdFx0XHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcbjM1MDQ6XHRcbjM1MDU6XHRcdG0ubmV3X3NlbCA9IFx1MDAyNnhjLVx1MDAzZXNlbDtcbjM1MDY6XHRcdG0ubWFwcGluZ19tYXhhZ2UgPSB4Yy1cdTAwM2VtYXBwaW5nX21heGFnZTtcbjM1MDc6XHRcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG4zNTA4Olx0XG4zNTA5Olx0XHRlcnIgPSB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShuZXQsIHVtLCBcdTAwMjZtLCB4Yy1cdTAwM2VkaXIsXG4zNTEwOlx0XHRcdFx0XHQgICAgICBubGgtXHUwMDNlbmxtc2dfcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxKTtcbjM1MTE6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjM1MTI6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCBtaWdyYXRpb24gbm90aWZpY2F0aW9uXCYjMzQ7KTtcbjM1MTM6XHRcdFx0ZXJyID0gMDtcbjM1MTQ6XHRcdH1cbjM1MTU6XHRcbjM1MTY6XHRvdXQ6XG4zNTE3Olx0XHR4ZnJtX3N0YXRlX3B1dCh4KTtcbjM1MTg6XHRcdHJldHVybiBlcnI7XG4zNTE5Olx0b3V0X3hjOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgZm9yIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMgd2l0aCBSQ1UgaW4geGZybV9zZW5kX21pZ3JhdGUqKgoKUmlnaHQsIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQgaGVyZS4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHhmcm1fc2VuZF9taWdyYXRlYCwgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGNvcnJlY3RseSBoYW5kbGluZyBSQ1UgcmVhZHMuIFRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gSWYgaXQgd2VyZSwgaXQgd291bGQgYmUgYSBjcml0aWNhbCBvdmVyc2lnaHQuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZWAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gc2NydXRpbml6ZSBpdHMgaW1wbGVtZW50YXRpb24g4oCTIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGVyZSBSQ1UgcmVhZCBsb2NrcyBtaWdodCBiZSBtaXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBhY2Nlc3NpbmcgZGF0YSB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGJlaW5nIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgd2luZG93cyB3aGVyZSBhIHdyaXRlIG9wZXJhdGlvbiBjb3VsZCBpbnRlcmZlcmUgd2l0aCBhIHJlYWQgb3BlcmF0aW9uIGlmIHRoZXJlJiMzOTtzIG5vIHN5bmNocm9uaXphdGlvbiBpbiBwbGFjZS4gSSBoYXZlIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGByY3VfcmVhZF9sb2NrKClgIChvciBlcXVpdmFsZW50IFJDVSByZWFkIHByaW1pdGl2ZXMpIGFuZCwgZXF1YWxseSBpbXBvcnRhbnRseSwgd2hlcmUgdGhlIGNvcnJlc3BvbmRpbmcgYHJjdV9yZWFkX3VubG9jaygpYCBpcyBiZWluZyBjYWxsZWQgdG8gcHJvdGVjdCB0aGVzZSByZWFkcy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2MzA6XHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcbjM2MzE6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIGludCBudW1fbWlncmF0ZSxcbjM2MzI6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2ttYWRkcmVzcyAqaywgc3RydWN0IG5ldCAqbmV0LFxuMzYzMzpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXG4zNjM0Olx0e1xuMzYzNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjM2MzY6XHRcdGludCBlcnI7XG4zNjM3Olx0XG4zNjM4Olx0XHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX21zZ3NpemUobnVtX21pZ3JhdGUsICEhaywgISFlbmNhcCksXG4zNjM5Olx0XHRcdFx0R0ZQX0FUT01JQyk7XG4zNjQwOlx0XHRpZiAoc2tiID09IE5VTEwpXG4zNjQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzY0MjpcdFxuMzY0MzpcdFx0LyogYnVpbGQgbWlncmF0ZSAqL1xuMzY0NDpcdFx0ZXJyID0gYnVpbGRfbWlncmF0ZShza2IsIG0sIG51bV9taWdyYXRlLCBrLCBzZWwsIGVuY2FwLCBkaXIsIHR5cGUpO1xuMzY0NTpcdFx0QlVHX09OKGVyciBcdTAwM2MgMCk7XG4zNjQ2Olx0XG4zNjQ3Olx0XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbjM2NDg6XHR9XG4zNjQ5Olx0I2Vsc2VcbjM2NTA6XHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcbjM2NTE6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIGludCBudW1fbWlncmF0ZSxcbjM2NTI6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2ttYWRkcmVzcyAqaywgc3RydWN0IG5ldCAqbmV0LFxuMzY1MzpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXG4zNjU0Olx0e1xuMzY1NTpcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbjM2NTY6XHR9XG4zNjU3Olx0I2VuZGlmXG4zNjU4Olx0XG4zNjU5Olx0I2RlZmluZSBYTVNHU0laRSh0eXBlKSBzaXplb2Yoc3RydWN0IHR5cGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pZ3JhdGlvbiBvZiBYRlJNIFRyYWZmaWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIHBhY2tldCBtaWdyYXRpb24gcHJvY2VzcyB3aXRoaW4gWEZSTSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcG9saWN5IGNoYW5nZXMuIEkgcmVjYWxsIHNlZWluZyBgeGZybV9zZW5kX21pZ3JhdGVgIG1lbnRpb25lZCBhbmQgbm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgY29udHJvbCBmbG93LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIG1vdmluZyB0cmFmZmljIHRvIHRoZSBuZXcgcG9saWN5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgY29uZmlybWluZyBpdHMgY2FsbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgaW5kZWVkIGNhbGxlZCBmcm9tIHdpdGhpbiBgeGZybV9taWdyYXRlYC4gUXVpY2tseSwgSSYjMzk7bGwganVtcCBpbnRvIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBhbmQgbWFrZSBhIHF1aWNrIGNvZGUgaW5zcGVjdGlvbiB0byB2ZXJpZnkgdGhpcyBjYWxsIGNoYWluLCBgeGZybV9taWdyYXRlYCAtJmd0OyBgeGZybV9zZW5kX21pZ3JhdGVgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zZW5kX21pZ3JhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMxMT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjQ6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI1LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MDgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTA5Olx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1ODM9c3RhdGljIGludCBidWlsZF9taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzYyOS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2MzA6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjMxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDktI2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NTA6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDM9c3RhdGljIHN0cnVjdCB4ZnJtX21nciBuZXRsaW5rX21nciA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA4LVx0LnJlcG9ydFx0XHQ9IHhmcm1fc2VuZF9yZXBvcnQsXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjA5Olx0Lm1pZ3JhdGVcdD0geGZybV9zZW5kX21pZ3JhdGUsXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjEwLVx0Lm5ld19tYXBwaW5nXHQ9IHhmcm1fc2VuZF9tYXBwaW5nLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRlJNIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBgeGZybV9zZW5kX21pZ3JhdGVgIGlzIGhvb2tlZCB1cCB1bmRlciB0aGUgYG5ldGxpbmtfbWdyYCBhcyB0aGUgbWlncmF0aW9uIGhhbmRsZXIsIHNwZWNpZmljYWxseSBuYW1lZCBgbWlncmF0ZWAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyBvZiBga21fbWlncmF0ZWAuIEtub3dpbmcgd2hlcmUgYW5kIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgWEZSTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttX21pZ3JhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjU2PWludCB4ZnJtX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDcxOS1cdC8qIFN0YWdlIDUgLSBhbm5vdW5jZSAqL1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NzIwOlx0a21fbWlncmF0ZShzZWwsIGRpciwgdHlwZSwgbSwgbnVtX21pZ3JhdGUsIGssIG5ldCwgZW5jYXApO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzIxLVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yODg0PUVYUE9SVF9TWU1CT0woa21fcG9saWN5X2V4cGlyZWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODg2LSNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjg4NzppbnQga21fbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg4OC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBpbnQgbnVtX21pZ3JhdGUsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MDctfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5MDg6RVhQT1JUX1NZTUJPTChrbV9taWdyYXRlKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTA5LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQyMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqWEZSTSBTdGF0ZSBNaWdyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG1pZ3JhdGlvbiBvZiBYRlJNIHN0YXRlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgYGttX21pZ3JhdGVgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgWEZSTSBzdGF0ZSB0cmFuc2l0aW9ucyBvY2N1ciwgc28gaXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB3aGF0IGNvdWxkIGJlIGdvaW5nIHdyb25nIGFuZCBwaW5wb2ludGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaG9sZHMgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4ODc6XHRpbnQga21fbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4yODg4Olx0XHQgICAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuMjg4OTpcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2ttYWRkcmVzcyAqaywgc3RydWN0IG5ldCAqbmV0LFxuMjg5MDpcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgKmVuY2FwKVxuMjg5MTpcdHtcbjI4OTI6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuMjg5MzpcdFx0aW50IHJldDtcbjI4OTQ6XHRcdHN0cnVjdCB4ZnJtX21nciAqa207XG4yODk1Olx0XG4yODk2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yODk3Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrbSwgXHUwMDI2eGZybV9rbV9saXN0LCBsaXN0KSB7XG4yODk4Olx0XHRcdGlmIChrbS1cdTAwM2VtaWdyYXRlKSB7XG4yODk5Olx0XHRcdFx0cmV0ID0ga20tXHUwMDNlbWlncmF0ZShzZWwsIGRpciwgdHlwZSwgbSwgbnVtX21pZ3JhdGUsIGssXG4yOTAwOlx0XHRcdFx0XHRcdCAgbmV0LCBlbmNhcCk7XG4yOTAxOlx0XHRcdFx0aWYgKCFyZXQpXG4yOTAyOlx0XHRcdFx0XHRlcnIgPSByZXQ7XG4yOTAzOlx0XHRcdH1cbjI5MDQ6XHRcdH1cbjI5MDU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjkwNjpcdFx0cmV0dXJuIGVycjtcbjI5MDc6XHR9XG4yOTA4Olx0RVhQT1JUX1NZTUJPTChrbV9taWdyYXRlKTtcbjI5MDk6XHQjZW5kaWZcbjI5MTA6XHRcbjI5MTE6XHRpbnQga21fcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHhmcm1fYWRkcmVzc190ICphZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqUkNVIExvY2sgU2hlbmFuaWdhbnMgaW4gdGhlIFhGUk0gTWlncmF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtaWdyYXRpb24gY29kZS4gVGhlIGtleSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBrbV9taWdyYXRlYCDigJMgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSB0cmFja2luZyDigJMgKmhvbGRzKiB0aGUgYHJjdV9yZWFkX2xvY2soKWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IGNvbnRleHQuCgpOb3csIGB4ZnJtX3NlbmRfbWlncmF0ZWAgaXRzZWxmLCB3aGljaCwgaWYgSSYjMzk7bSByZWNhbGxpbmcgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSB0aGUgYGttLSZndDttaWdyYXRlYCBmdW5jdGlvbiBwb2ludGVyLCBnZXRzIGNhbGxlZCB3aXRoIHRoYXQgUkNVIHJlYWQgbG9jayBhbHJlYWR5IGVzdGFibGlzaGVkLiBTbyBmYXIsIHNvIGdvb2QsIHRoaXMgYWxpZ25zIHdpdGggbXkgZ2VuZXJhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXMgYXJlIG1lYW50IHRvIGJlIHVzZWQuIEkgd29uZGVyIHdoYXQgd2Ugc2VlIGFib3V0IGl0cyBjb3VzaW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYD8gQWgsIHllcywgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgcmV2aXNpdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGV0aWVzIHRoZXJlIHdpdGggcmVzcGVjdCB0byBSQ1UgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0OTA6XHRcbjM0OTE6XHRcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcdTAwMjZtLCBleHRhY2spO1xuMzQ5MjpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMzQ5MzpcdFx0XHQvKlxuMzQ5NDpcdFx0XHQgKiBTaG91bGQgbm90IG9jY3VyOiBwcmUtY2hlY2sgYWJvdmUgZW5zdXJlcyB0aGUgbmV3IHR1cGxlIGlzXG4zNDk1Olx0XHRcdCAqIGZyZWUgdW5kZXIgeGZybV9jZmdfbXV0ZXguIEJvdGggU0FzIGFyZSBnb25lIGlmIGl0IGRvZXM7XG4zNDk2Olx0XHRcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXG4zNDk3Olx0XHRcdCAqL1xuMzQ5ODpcdFx0XHRnb3RvIG91dDtcbjM0OTk6XHRcdH1cbjM1MDA6XHRcbjM1MDE6XHRcdC8qIFJlc3RvcmUgZW5jYXAgY2xlYXJlZCBieSBzZW50aW5lbCAodHlwZT0wKSBkdXJpbmcgbWlncmF0aW9uLiAqL1xuMzUwMjpcdFx0aWYgKGF0dHJzW1hGUk1BX0VOQ0FQXSlcbjM1MDM6XHRcdFx0bS5lbmNhcCA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX0VOQ0FQXSk7XG4zNTA0Olx0XG4zNTA1Olx0XHRtLm5ld19zZWwgPSBcdTAwMjZ4Yy1cdTAwM2VzZWw7XG4zNTA2Olx0XHRtLm1hcHBpbmdfbWF4YWdlID0geGMtXHUwMDNlbWFwcGluZ19tYXhhZ2U7XG4zNTA3Olx0XHRtLm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSB4Yy1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xuMzUwODpcdFxuMzUwOTpcdFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxuMzUxMDpcdFx0XHRcdFx0ICAgICAgbmxoLVx1MDAzZW5sbXNnX3BpZCwgbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4zNTExOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zNTEyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIHNlbmQgbWlncmF0aW9uIG5vdGlmaWNhdGlvblwmIzM0Oyk7XG4zNTEzOlx0XHRcdGVyciA9IDA7XG4zNTE0Olx0XHR9XG4zNTE1Olx0XG4zNTE2Olx0b3V0OlxuMzUxNzpcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4zNTE4Olx0XHRyZXR1cm4gZXJyO1xuMzUxOTpcdG91dF94YzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSQ1UgTG9jayBpbiBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBuZWVkIHRvIGNsYXJpZnk6IGRvZXMgaXQgaG9sZCBhbiBSQ1UgcmVhZCBsb2NrPyBJdCYjMzk7cyBhIG5ldGxpbmsgYGRvaXRgIGhhbmRsZXIsIGFuZCB0aG9zZSBnZW5lcmFsbHkgKmRvbiYjMzk7dCogaG9sZCBSQ1UgcmVhZCBsb2NrcyBieSBkZWZhdWx0LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWchIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3YXMgY2FsbGluZyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhvdXQgdGhlIG5lY2Vzc2FyeSBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBhIHByb2JsZW0uCgpBbmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB1c2VzIGByY3VfZGVyZWZlcmVuY2UobmV0LSZndDt4ZnJtLm5sc2spYC4gVGhhdCBtZWFucyBgeGZybV9kb19taWdyYXRlX3N0YXRlYCB3YXMgbGlrZWx5IHRyaWdnZXJpbmcgYW4gUkNVIHdhcm5pbmcgb3IgYSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzLCBvYnZpb3VzbHksIG5vdCBpZGVhbC4KClNvIHRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHNoaWZ0aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjYWxsIGludG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpdHNlbGYsIHdoaWNoIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBOb3cgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlmIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgbm93IHRha2luZyB0aGUgbG9jayBpbnRlcm5hbGx5LCB3aGF0IGFib3V0IHRoZSBjYWxsZXJzIHRoYXQgKmFscmVhZHkqIGhvbGQgYW4gUkNVIHJlYWQgbG9jaz8gQnV0IHdhaXQsIFJDVSByZWFkIGxvY2tzIGNhbiBiZSBuZXN0ZWQsIHNvIHRoYXQmIzM5O3MgcGVyZmVjdGx5IGZpbmUuIENyaXNpcyBhdmVydGVkLCBzb3J0IG9mLgoKTm93IEkgbmVlZCB0byBjaGVjay4gQXJlIHRoZXJlIG90aGVyIGNhbGxlcnMgb2YgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0aGF0ICpkaWRuJiMzOTt0KiBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrIGJlZm9yZSB0aGlzIGNoYW5nZT8gVGhlIHBhdGNoIGFsc28gbW9kaWZpZWQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIGJ5IHJlbW92aW5nIGFuIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgLiBPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHVuZGVyc3RhbmQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIHdhcyBtb2RpZmllZCwgYnV0IHdoeSB3YXMgdGhlIGV4cGxpY2l0IGxvY2sgcmVtb3ZlZCB0aGVyZSwgYnV0IG5vdCBpbiBga21fbWlncmF0ZWA/CgpBaCwgcmlnaHQsIGBrbV9taWdyYXRlYCBpdGVyYXRlcyBvdmVyIGB4ZnJtX2ttX2xpc3RgIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAuIFRoZSBSQ1UgcmVhZCBsb2NrIGlzIG5lY2Vzc2FyeSBmb3IgdGhhdCBsaXN0IGl0ZXJhdGlvbiBpdHNlbGYsIG5vdCBqdXN0IGZvciB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLiBHb3QgaXQuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MTg6XHRzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuMjUxOTpcdHtcbjI1MjA6XHRcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXA7XG4yNTIxOlx0XHRpbnQgbGVuID0gTkxNU0dfQUxJR04oc2l6ZW9mKCp1cCkpO1xuMjUyMjpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4yNTIzOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMjUyNDpcdFx0aW50IGVycjtcbjI1MjU6XHRcbjI1MjY6XHRcdHNrYiA9IG5sbXNnX25ldyhsZW4sIEdGUF9BVE9NSUMpO1xuMjUyNzpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuMjUyODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI1Mjk6XHRcbjI1MzA6XHRcdG5saCA9IG5sbXNnX3B1dChza2IsIDAsIDAsIFhGUk1fTVNHX0dFVERFRkFVTFQsIHNpemVvZigqdXApLCAwKTtcbjI1MzE6XHRcdGlmIChubGggPT0gTlVMTCkge1xuMjUzMjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjI1MzM6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjI1MzQ6XHRcdH1cbjI1MzU6XHRcbjI1MzY6XHRcdHVwID0gbmxtc2dfZGF0YShubGgpO1xuMjUzNzpcdFx0dXAtXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dKTtcbjI1Mzg6XHRcdHVwLVx1MDAzZWZ3ZCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcbjI1Mzk6XHRcdHVwLVx1MDAzZW91dCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdKTtcbjI1NDA6XHRcbjI1NDE6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG4yNTQyOlx0XG4yNTQzOlx0XHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG4yNTQ0Olx0XG4yNTQ1Olx0XHRyZXR1cm4gZXJyO1xuMjU0NjpcdH1cbjI1NDc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBDYWxsIGZyb20gYHhmcm1fc2V0X2RlZmF1bHRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHBvbGljeSB1cGRhdGVzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyB3aGVyZSB3ZSYjMzk7cmUgZXN0YWJsaXNoaW5nIHRoZSAqaW5pdGlhbCogZGVmYXVsdCBwb2xpY3kgZm9yIGEgc2VjdXJpdHkgYXNzb2NpYXRpb24gb3IgYSBzcGVjaWZpYyBhZGRyZXNzIGZhbWlseSwgYW5kIHdlIG5lZWQgdG8gY29tbXVuaWNhdGUgdGhpcyB0byB0aGUgdXNlcnNwYWNlIHNvbWVob3cuCgpUaGUgY2FsbCB0byBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgZnJvbSAqd2l0aGluKiBgeGZybV9zZXRfZGVmYXVsdGAgaXMgdGVsbGluZyBtZSB0aGF0LCB3aGVuZXZlciBhIGRlZmF1bHQgcG9saWN5IGlzIHNldCwgd2UmIzM5O3JlIGltbWVkaWF0ZWx5IG5vdGlmeWluZyBhbnkgdXNlci1zcGFjZSBwcm9jZXNzZXMgKHByZXN1bWFibHkgdGhvc2UgcmVnaXN0ZXJlZCBmb3IgcG9saWN5IGNoYW5nZSBub3RpZmljYXRpb25zIHZpYSBuZXRsaW5rIG9yIHNpbWlsYXIgbWVjaGFuaXNtcykuIFRoaXMgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIGJlY2F1c2UgdXNlcnNwYWNlIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHRoZSAqY3VycmVudCogZWZmZWN0aXZlIHBvbGljeSwgZXNwZWNpYWxseSB3aGVuIGl0JiMzOTtzIHRoZSAqZGVmYXVsdCouIE90aGVyd2lzZSwgeW91JiMzOTtkIGVuZCB1cCB3aXRoIHVucHJlZGljdGFibGUgYmVoYXZpb3IuCgpJJiMzOTttIGNoZWNraW5nIHRoYXQgdGhpcyBjYWxsIGlzIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gYnVpbGQgdGhlIHByb3BlciBuZXRsaW5rIG1lc3NhZ2UsIGFuZCB0aGF0IGFueSBwb3RlbnRpYWwgZXJyb3JzIChsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIG9yIGlzc3VlcyB3aXRoIHRoZSBuZXRsaW5rIHNvY2tldCkgYXJlIHByb3Blcmx5IGhhbmRsZWQgb3IgZ3JhY2VmdWxseSBkZWdyYWRlZC4gSWRlYWxseSwgaXQmIzM5O3MgZWZmaWNpZW50LCB1c2luZyBvbmx5IHRoZSBuZWNlc3NhcnkgZGF0YSB0byBjb252ZXkgdGhlIHBvbGljeSBjaGFuZ2VzIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb3BpZXMuIFRoZSB0aW1pbmcgaXMgYWxzbyBpbXBvcnRhbnQ7IGl0IG5lZWRzIHRvIGJlICphZnRlciogdGhlIHBvbGljeSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IGludGVybmFsbHksIGJ1dCAqYmVmb3JlKiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQuIEEgbWlzc2VkIG5vdGlmaWNhdGlvbiBjb3VsZCBjcmVhdGUgYSB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eSBvciBhbiBpbmNvcnJlY3QgZXhwZWN0YXRpb24uCgpJJiMzOTttIGFsc28gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBoZXJlLiBDb3VsZCBhIG5vdGlmaWNhdGlvbiBhcnJpdmUgYmVmb3JlIHRoZSBwb2xpY3kgaXMgY29tcGxldGVseSBlZmZlY3RpdmUsIG9yIHZpY2UtdmVyc2E/IEkmIzM5O2xsIHByb2JhYmx5IGludmVzdGlnYXRlIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbm90aWZ5X3VzZXJwb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MjQ5Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fcG9saWN5X25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTE3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MjUxODpzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV91c2VyLmMtMjUxOS17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjU1ND1zdGF0aWMgaW50IHhmcm1fc2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjU3MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NzE6XHR4ZnJtX25vdGlmeV91c2VycG9saWN5KG5ldCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTcyLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8geGZybV9ubG1zZ19tdWx0aWNhc3QgYW5kIFBvdGVudGlhbCBSQ1UgSXNzdWVzKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBhZ2Fpbi4gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCByaXNrIG9mIGRhdGEgcmFjZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIHRoYXQgKmRvbiYjMzk7dCogYWxyZWFkeSBoYXZlIGFuIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgcmVhZCBsb2NrIGhlbGQuIFRoYXQgd291bGQgYmUgYSB2dWxuZXJhYmlsaXR5IHRvIGNvbnNpZGVyLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24sIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIHdoZXJlIGB4ZnJtX3NlbmRfYWNxdWlyZWAgaXMgaW52b2tlZC4gSXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBpbXBvcnRhbnQgZm9yIHZlcmlmeWluZyBkYXRhIGludGVncml0eSBhbmQgcG90ZW50aWFsIFJDVS1yZWxhdGVkIHByb2JsZW1zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3NlbmRfYWNxdWlyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz00MTkzPXN0YXRpYyBpbnQgYnVpbGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjM2LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDIzNzpzdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyMzgtXHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDM9c3RhdGljIHN0cnVjdCB4ZnJtX21nciBuZXRsaW5rX21nciA9IHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MDQtXHQubm90aWZ5XHRcdD0geGZybV9zZW5kX3N0YXRlX25vdGlmeSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MDU6XHQuYWNxdWlyZVx0PSB4ZnJtX3NlbmRfYWNxdWlyZSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MDYtXHQuY29tcGlsZV9wb2xpY3lcdD0geGZybV9jb21waWxlX3BvbGljeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBLZXkgTWFuYWdlbWVudCBQcm9jZXNzKioKCk9rYXksIHNvIGB4ZnJtX3NlbmRfYWNxdWlyZWAgaXMgcmVnaXN0ZXJlZCBhcyBhIG5ldGxpbmsgbWFuYWdlciBhY3F1aXNpdGlvbiBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgYG5ldGxpbmtfbWdyLmFjcXVpcmVgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcga2V5aW5nIG1hdGVyaWFsLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgbmFtZS4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhY3R1YWxseSAqZ2V0cyogdGhlIGtleXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBrbV9xdWVyeWAgd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIHByb2JhYmx5IGF0IHRoZSBoZWFydCBvZiB0aGUga2V5IG1hbmFnZW1lbnQgcXVlcnlpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IGFza2luZyBmb3IgdGhlIGtleSBkYXRhLCBhbmQgd2hpY2ggcHJvY2Vzc2VzIG9yIGZ1bmN0aW9ucyBpdCBpcyBjYWxsaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBrbV9xdWVyeWAgZnVuY3Rpb24gd2lsbCBjb250YWluIHRoZSBsb2dpYyBmb3Igc2VuZGluZyByZXF1ZXN0cyBhbmQgbWFuYWdpbmcgdGhlIGtleSBhY3F1aXNpdGlvbiBsaWZlY3ljbGUsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBrZXkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSBhbmQgbWF5YmUgdGFsa2luZyB0byBzb21lIHVzZXIgc3BhY2UgZGFlbW9uLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgZXhwbG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbV9xdWVyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MjMwPWludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMzEtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjMyOmludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMy1zdGF0aWMgYm9vbCBrbV9pc19hbGl2ZShjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzU2PXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2Ni0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTY3Olx0XHRpZiAoa21fcXVlcnkoeCwgdG1wbCwgcG9sKSA9PSAwKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2OC1cdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjgxOT1FWFBPUlRfU1lNQk9MKGttX3N0YXRlX2V4cGlyZWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODIzLSovXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjgyNDppbnQga21fcXVlcnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3RtcGwgKnQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4MjUte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODM3LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyODM4OkVYUE9SVF9TWU1CT0woa21fcXVlcnkpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4MzktXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzA0ND1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzEwMC1cdFx0dC1cdTAwM2VjYWxnb3MgPSB1YS1cdTAwM2VjYWxnb3M7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTAxOlx0XHRlcnIgPSBrbV9xdWVyeSh4LCB0LCB4cCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBga21fcXVlcnlgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIHNjcnV0aW5pemUgdGhlIGBrbV9xdWVyeWAgaW1wbGVtZW50YXRpb24uJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBJIGtub3cgdGhlIHByaW5jaXBsZXMgb2Yga25vd2xlZGdlIG1hbmFnZW1lbnQsIGFuZCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCBpcyBlZmZpY2llbnRseSBoYW5kbGluZyB0aGUgcmVxdWlyZWQgZGF0YSByZXRyaWV2YWwuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtub3dsZWRnZSBiYXNlLCB3aGV0aGVyIGl0JiMzOTtzIGluZGV4aW5nIGNvcnJlY3RseSwgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBoYW5kbGVzIHF1ZXJ5IHBhcnNpbmcgYW5kIG9wdGltaXphdGlvbi4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGVkZ2UgY2FzZSBoYW5kbGluZywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGluIGEgaGlnaC1sb2FkIHNjZW5hcmlvLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbuKAlHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBxdWVyeSBsYW5ndWFnZSwgdGhlIGNhY2hpbmcgc3RyYXRlZ3nigJRhbGwgbmVlZCBhIGNsb3NlIGV4YW1pbmF0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIG9uIGl0cyB1dGlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgyNDpcdGludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpXG4yODI1Olx0e1xuMjgyNjpcdFx0aW50IGVyciA9IC1FSU5WQUwsIGFjcXJldDtcbjI4Mjc6XHRcdHN0cnVjdCB4ZnJtX21nciAqa207XG4yODI4Olx0XG4yODI5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yODMwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrbSwgXHUwMDI2eGZybV9rbV9saXN0LCBsaXN0KSB7XG4yODMxOlx0XHRcdGFjcXJldCA9IGttLVx1MDAzZWFjcXVpcmUoeCwgdCwgcG9sKTtcbjI4MzI6XHRcdFx0aWYgKCFhY3FyZXQpXG4yODMzOlx0XHRcdFx0ZXJyID0gYWNxcmV0O1xuMjgzNDpcdFx0fVxuMjgzNTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yODM2Olx0XHRyZXR1cm4gZXJyO1xuMjgzNzpcdH1cbjI4Mzg6XHRFWFBPUlRfU1lNQk9MKGttX3F1ZXJ5KTtcbjI4Mzk6XHRcbjI4NDA6XHRzdGF0aWMgaW50IF9fa21fbmV3X21hcHBpbmcoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsIF9fYmUxNiBzcG9ydClcbjI4NDE6XHR7XG4yODQyOlx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjI4NDM6XHRcdHN0cnVjdCB4ZnJtX21nciAqa207XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTY1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJDVSBMb2NrIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBga21fcXVlcnlgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBob2xkaW5nIGFuIGByY3VfcmVhZF9sb2NrKClgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gQWxsIHRob3NlIGBrbV8qYCBmdW5jdGlvbnMgd2l0aGluIGB4ZnJtX3N0YXRlLmNgIGFyZSBncmFiYmluZyB0aGF0IGxvY2sgYmVjYXVzZSB0aGV5JiMzOTtyZSBpdGVyYXRpbmcgb3ZlciB0aGUgYHhmcm1fa21fbGlzdGAuIFNlZW1zIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoaXMgY29kZSBiYXNlLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhbHNvIGdldHRpbmcgY2FsbGVkIGZyb20gYG5ldGxpbmtfbWdyYCBjYWxsYmFja3MuIEFuZCB0aGVzZSBjYWxsYmFja3MgYXJlIGJlaW5nIGludm9rZWQgaW4gYSBjb3VwbGUgb2Ygd2F5cyDigJMgZGlyZWN0bHkgb3IgZnJvbSBuZXRsaW5rIGBkb2l0YCBoYW5kbGVycy4gRm9yIGluc3RhbmNlLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBjYWxscyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGRpcmVjdGx5LiBOb3csIHdhaXQgYSBtaW51dGUuLi4gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgdGhlbiBjYWxscyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBvbmx5IGJlaW5nIGNhbGxlZCBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgPyBMZXQmIzM5O3MgY2hlY2sgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTMzMTE9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzI0OnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyNS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0NT1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUwOTpcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFx1MDAyNm0sIHhjLVx1MDAzZWRpcixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXHRcdFx0XHQgICAgICBubGgtXHUwMDNlbmxtc2dfcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaGEsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCwgd2hpY2ggaXRzZWxmIGlzIGEgbmV0bGluayBkb2l0IGhhbmRsZXIuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiAgQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgaG9sZCBgcmN1X3JlYWRfbG9jaygpYC4KClRoZXJlZm9yZSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgY2FsbGluZyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgICp3aXRob3V0KiB0aGF0IGNydWNpYWwgcmVhZCBsb2NrIGluIHBsYWNlLiBCaW5nbyDigJMgYSByYWNlIGNvbmRpdGlvbiB3YWl0aW5nIHRvIGhhcHBlbi4gVGhlIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHRoaXMgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXRzZWxmLiBUaGF0IG1ha2VzIHNlbnNlLCBjZW50cmFsaXppbmcgdGhlIGxvY2tpbmcgcmVzcG9uc2liaWxpdHkgd2hlcmUgaXQmIzM5O3MgbmVlZGVkLgoKQnV0IG5vdyBteSBleHBlcnQgY3VyaW9zaXR5IGtpY2tzIGluLiBIYXMgdGhpcyBzYW1lIG1pc3Rha2UgYmVlbiBtYWRlIGVsc2V3aGVyZT8gVGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRoYXQgZG9uJiMzOTt0IGFscmVhZHkgaGF2ZSBhbiBSQ1UgcmVhZCBsb2NrPyBMZXQmIzM5O3MgY2hlY2sgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLiBJbnRlcmVzdGluZy4gSXQgKmV4cGxpY2l0bHkqIGhlbGQgYHJjdV9yZWFkX2xvY2soKWAgYmVmb3JlIHRoZSBwYXRjaCB3YXMgYXBwbGllZCwgYW5kIG5vdyB0aGF0IHRoZSBwYXRjaCBoYXMgbGFuZGVkLCBpdCBkb2VzbiYjMzk7dC4gVGhhdCYjMzk7cyBnb29kOyB0aGUgcGF0Y2ggaXMgY2xlYW5lciBub3cuIE9uZSBsZXNzIGxvY2sgdG8gbWFuYWdlLiBXaGF0IGFib3V0IGB4ZnJtX3NlbmRfcmVwb3J0YD8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzdGFjayB0aGVyZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3NlbmRfcmVwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTQ1MDE9c3RhdGljIGludCBidWlsZF9yZXBvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1Mjc6c3RhdGljIGludCB4ZnJtX3NlbmRfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTI4LVx0XHRcdCAgICBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjAzPXN0YXRpYyBzdHJ1Y3QgeGZybV9tZ3IgbmV0bGlua19tZ3IgPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNy1cdC5ub3RpZnlfcG9saWN5XHQ9IHhmcm1fc2VuZF9wb2xpY3lfbm90aWZ5LFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwODpcdC5yZXBvcnRcdFx0PSB4ZnJtX3NlbmRfcmVwb3J0LFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwOS1cdC5taWdyYXRlXHQ9IHhmcm1fc2VuZF9taWdyYXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JrIHNlY3VyaXR5IGV4cGVydDoKCioqSW50ZXJuYWwgTmV0d29yayBTZWN1cml0eSBSZXBvcnRpbmcgUHJvY2VzcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgc2V0IHVwIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgc2VlIHRoYXQgYHhmcm1fc2VuZF9yZXBvcnRgIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0bGlua19tZ3JgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHVuZGVyIHRoZSBuYW1lICYjMzQ7cmVwb3J0LiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCBtZWFucyBhbnl0aW1lIGEgcmVwb3J0IG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBhbmQgc2VudCBvdXQgdXNpbmcgTmV0bGluaywgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZC4gVGhlIGNydWNpYWwgZGV0YWlsIEkmIzM5O20gbG9va2luZyBhdCwgaXMgd2hlcmUgdGhpcyBgeGZybV9zZW5kX3JlcG9ydGAgaXMgdHJpZ2dlcmVkLCBhbmQgSSYjMzk7dmUgc3BvdHRlZCB0aGF0IGl0JiMzOTtzIGludm9rZWQgYnkgYGttX3JlcG9ydGAuIFNvLCBga21fcmVwb3J0YCBpcyBlc3NlbnRpYWxseSB0aGUga2VybmVsIG1vZHVsZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgcmVwb3J0IGdlbmVyYXRpb24sIGFuZCB0aGF0IGNhbGwgaXMgZ29pbmcgdG8gdHJpZ2dlciBzZW5kaW5nIHRoZSBkYXRhIHRvIHVzZXItc3BhY2UgdGhyb3VnaCBgeGZybV9zZW5kX3JlcG9ydGAuIFRoaXMgbWFrZXMgc2Vuc2UsIGl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gcmVwb3J0IGV2ZW50cyBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSB0aHJvdWdoIGEgTmV0bGluayBzb2NrZXQuIFRoaXMgaXMgbGlrZWx5IGhvdyB3ZSBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgWEZSTSBwb2xpY2llcywgU0FzLCBhbmQgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBmb3IgYXVkaXRpbmcsIG1vbml0b3JpbmcsIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttX3JlcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MjkwOD1FWFBPUlRfU1lNQk9MKGttX21pZ3JhdGUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTEwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5MTE6aW50IGttX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTEyLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkyNy19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjkyODpFWFBPUlRfU1lNQk9MKGttX3JlcG9ydCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wb3J0YW5jZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBga21fcmVwb3J0YCBoYXMgYW4gYHJjdV9yZWFkX2xvY2soKWAgaGVsZCwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBtaXNzaW5nIGByY3VfcmVhZF9sb2NrKClgIGluIHRoYXQgc3BlY2lmaWMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgLSZndDsgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCAtJmd0OyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHBhdGguIFRoZSBxdWVzdGlvbiwgb2YgY291cnNlLCBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UganVzdGlmaWVzIGZ1enppbmcgZWZmb3J0LgoKV2VsbCwgdGhpcyBhY3R1YWxseSBmaXhlcyBhbiBSQ1UgdXNlLWFmdGVyLWZyZWUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBSQ1Ugd2FybmluZywgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIE5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBmb3IgYSBtb21lbnQgYW5kIGNvbnNpZGVyIHRoZSBjb250ZXh0LiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgcmVsZXZhbnQuIFdhcyB0aGlzIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBzb21ldGhpbmcgcmVsYXRpdmVseSBuZXc/IE5vLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gYXJvdW5kLiBBbHJpZ2h0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGluZGVlZCByZWFjaGFibGUuIFNpbmNlIGl0JiMzOTtzIGEgbmV0bGluayBoYW5kbGVyLCBpdCYjMzk7cyBpbmhlcmVudGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cywgc28geWVzLiBUaGlzIGZpeCBleHBsaWNpdGx5IHByZXZlbnRzIGFuIFJDVSB3YXJuaW5nIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgZml4ZXMgYSBidWcgd2l0aGluIGEgcmVhY2hhYmxlIG5ldGxpbmsgaGFuZGxlciwgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIHdoYXQgYWJvdXQgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byBjaGVjayB0byBzZWUgd2hhdCBjb25maWdzIGFyZSByZXF1aXJlZC4gYENPTkZJR19YRlJNX1VTRVJgIGlzIG5lZWRlZCwgbG9va2luZyBhdCBgbmV0L3hmcm0veGZybV91c2VyLmNgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEJlc3QgdG8gY29uZmlybSB0aGF0IGluIGBuZXQveGZybS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODc2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBwcm9jZXNzLCB3aXRoIHRoZSBhc3N1bXB0aW9uIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQga2VybmVsIGludGVybmFsczoKCioqSW52ZXN0aWdhdGluZyB0aGUgTmVlZCBmb3IgYFhGUk1fTUlHUkFURWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYFhGUk1fTUlHUkFURWAgaXMgdHJ1bHkgbmVjZXNzYXJ5IGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IGl0IG1pZ2h0IGJlLCBidXQgSSBhbHdheXMgd2FudCB0byBjb25maXJtLiBUaGUgd2hvbGUgcG9pbnQgb2YgdGhlc2UgZmxhZ3MgaXMgdG8gb3B0aW1pemUgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLCBzbyBza2VwdGljaXNtIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KClRvIHJlYWxseSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgYWN0dWFsIG1pZ3JhdGlvbiBsb2dpYyBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCAqZG9lcyosIHVuZGVyIHdoaWNoIGNpcmN1bXN0YW5jZXMgaXQmIzM5O3MgY2FsbGVkLCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBoYXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdCwgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIChpZiBhbnkpIGFyZSBhdmFpbGFibGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBgWEZSTV9NSUdSQVRFYCBwbGF5cyBhIHJvbGUgaW4gdGhlIGZ1bmN0aW9uLCBhbmQgaWYgSSBjYW4gYXZvaWQgaXQgaW4gdGhlIGN1cnJlbnQgc2V0dGluZy4gT25seSBieSBkaXNzZWN0aW5nIHRoZSBhY3R1YWwgY29kZSBjYW4gSSBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdGhpcyBmbGFnIGlzIHRydWx5IGNyaXRpY2FsIG9yIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBlZmZpY2llbnQgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0NC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDU6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjYtI2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1Mjc6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LVx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzktXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODA6XHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgJiMzOTtzIENvbmRpdGlvbmFsIExvZ2ljKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24sIGFuZCBJJiMzOTt2ZSBoaXQgYW4gYCNlbHNlYCBibG9jay4gSW5zdGluY3RpdmVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCAqYXJlbiYjMzk7dCogYmVpbmcgbWV0IHRvIHRyaWdnZXIgdGhpcyBgZWxzZWAgcGF0aC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkgaGVyZT8gVGhpcyBgI2Vsc2VgIGlzIGEgY3JpdGljYWwgYnJhbmNoIHBvaW50LCBwb3RlbnRpYWxseSBoYW5kbGluZyBzb21lIHVudXN1YWwgb3IgZXJyb3ItcHJvbmUgc2NlbmFyaW8gcmVsYXRlZCB0byBzdGF0ZSBtaWdyYXRpb24sIGFuZCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRoLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBndWFyZHMgYW5kIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgdXBzdHJlYW0uIFdoYXQmIzM5O3MgKm5vdCogaGFwcGVuaW5nIHRoYXQgbGVhZHMgdXMgaGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0aG9yb3VnaGx5IGJlZm9yZSBJIHByb2NlZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNDA6XHRcdH1cbjMzNDE6XHRcbjMzNDI6XHRcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuMzM0MzpcdH1cbjMzNDQ6XHRcbjMzNDU6XHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjMzNDY6XHRcdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjMzNDc6XHR7XG4zMzQ4Olx0XHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xuMzM0OTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjMzNTA6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcbjMzNTE6XHRcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xuMzM1MjpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xuMzM1MzpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4zMzU0Olx0XHRpbnQgZXJyO1xuMzM1NTpcdFxuMzM1NjpcdFx0aWYgKCF1bS1cdTAwM2VpZC5zcGkpIHtcbjMzNTc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIFNQSSAweDBcJiMzNDspO1xuMzM1ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMzkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czoKCioqV2hlcmUmIzM5O3MgVGhhdCBQcmVwcm9jZXNzb3IgTWFnaWM/KioKCldhaXQgYSBtaW51dGUsIEkmIzM5O20gc3RhcmluZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyBmZWVscy4uLm9mZi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgY2VydGFpbiBjb25zdHJ1Y3QgaGVyZSwgc29tZXRoaW5nIEkmIzM5O20gdXNlZCB0byB1c2luZyB0byBtYWludGFpbiBkaWZmZXJlbnQgYnVpbGRzLCBhbmQgaXQmIzM5O3Mgc2ltcGx5ICpub3QqIHRoZXJlLiBXaGVyZSYjMzk7cyB0aGUgYCNpZmRlZmA/IFdoZXJlIGFyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcz8gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMsIGJ1dCBpdCYjMzk7cyBub3QgaGVyZS4uLkRpZCBzb21lb25lIHJlbW92ZSBpdD8gSXMgaXQgZGVmaW5lZCBlbHNld2hlcmU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgd2VudCwgb3IgKmlzKiBoYXBwZW5pbmcuIEJlY2F1c2UsIGxldCYjMzk7cyBmYWNlIGl0LCB3aXRob3V0IGl0IHRoaW5ncyBhcmUgZ29pbmcgdG8gZ2V0IHByb2JsZW1hdGljLCBxdWlja2x5LiBOb3csIGlzIHRoZSBwcmVwcm9jZXNzb3IgYmVpbmcgdXNlZCBlZmZlY3RpdmVseSBhdCBhbGwsIG9yIGhhcyBzb21lb25lIGNoYW5nZWQgdGhlIGNvbXBpbGF0aW9uIHN0cmF0ZWd5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzAwOlx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzMwMTpcdFx0fVxuMzMwMjpcdFxuMzMwMzpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbjMzMDQ6XHRcdHJldHVybiAwO1xuMzMwNTpcdFxuMzMwNjpcdG91dF9jYW5jZWw6XG4zMzA3Olx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuMzMwODpcdFx0cmV0dXJuIGVycjtcbjMzMDk6XHR9XG4zMzEwOlx0XG4zMzExOlx0c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuMzMxMjpcdFx0XHRcdFx0XHQgICAgICAgdTggZGlyKVxuMzMxMzpcdHtcbjMzMTQ6XHRcdHJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSkgJiM0MztcbjMzMTU6XHRcdFx0KG0tXHUwMDNlZW5jYXAgPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fZW5jYXBfdG1wbCkpIDogMCkgJiM0MztcbjMzMTY6XHRcdFx0KG0tXHUwMDNleHVvID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCkpIDogMCkgJiM0MztcbjMzMTc6XHRcdFx0KG0tXHUwMDNlbmV3X21hcmsgPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpIDogMCkgJiM0MztcbjMzMTg6XHRcdFx0KChtLVx1MDAzZXNtYXJrLnYgfCBtLVx1MDAzZXNtYXJrLm0pID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICogMiA6IDApICYjNDM7XG4zMzE5Olx0XHRcdChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgJiM0MztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludGVyYWN0cyB3aXRoIHNvbWUgc29ydCBvZiBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBYRlJNIHN1YnN5c3RlbSwgaXMgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSB0aGF0IGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGlmIGl0cyBiZWhhdmlvciBjaGFuZ2VzIGJhc2VkIG9uIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBrZXJuZWwgdmVyc2lvbnMsIG9yIGVuYWJsZWQgZmVhdHVyZXMuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWMgc2NlbmFyaW9zIGxpa2UgbWlncmF0aW9uIG1pZ2h0IGJlIHRvZ2dsZWQgYnkgYSBjb25maWcgb3B0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyB0aG9zZSB0b2dnbGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgcG90ZW50aWFsIHVzZSBjYXNlcyBhbmQgaW1wYWN0IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkuIFRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmYCBhbHNvIHRlbGxzIG1lIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGNvcnJlc3BvbmRpbmcgYCNlbmRpZmAgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byB0cmFjZSB0aHJvdWdoIGRpZmZlcmVudCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjE0OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xOTg1PXN0YXRpYyBpbnQgdmVyaWZ5X3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTg4LVx0Y2FzZSBYRlJNX1BPTElDWV9UWVBFX01BSU46XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTg5OiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTkwLVx0Y2FzZSBYRlJNX1BPTElDWV9UWVBFX1NVQjpcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzgxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4Mi17XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzgzOiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg0LVx0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X3R5cGUpKTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg5LVxubmV0L3hmcm0veGZybV91c2VyLmM6MjM5MDojaWZkZWYgQ09ORklHX1hGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5MS1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMwNDQ9c3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTE5OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTIwLXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzUzND1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0MTojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0Mi1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODc2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZW06CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFhGUk0gTWlncmF0aW9uKioKClJpZ2h0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSByZXF1aXJlbWVudCBoZXJlLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGBYRlJNX01JR1JBVEVgIHRvIGVuc3VyZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGlzIHNvdW5kIGFuZCBhZGRyZXNzZXMgdGhpcyBwYXJ0aWN1bGFyIHJlcXVpcmVtZW50IHByb3Blcmx5LiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fTUlHUkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBYRlJNIE1vZHVsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBYRlJNX01JR1JBVEVgIGFuZCBgWEZSTV9VU0VSYCBhcmUgZW5hYmxlZC4gQnV0IGhhbmcgb24sIGBYRlJNX1VTRVJgIGlzIGEgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY291bGQgYmUgYSBtb2R1bGUuIEhvd2V2ZXIsIGZvciB0aG9yb3VnaCBmdXp6aW5nLCBJJiMzOTtkIHJhdGhlciBoYXZlIGl0IGJ1aWx0LWluLiBUaGF0JiMzOTtzIHRoZSBzYWZlc3Qgb3B0aW9uLgoKTm93LCBhbSBJIG1pc3NpbmcgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEFoYSEgVGhlIHBhdGNoIGFsdGVycyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIGludGVybmFsbHkgYWNxdWlyZSB0aGUgYHJjdV9yZWFkX2xvY2soKWAuIFRoYXQmIzM5O3MgZ29pbmcgdG8gYWZmZWN0ICphbGwqIG9mIGl0cyBjYWxsZXJzLgoKQWgsIHJpZ2h0LiBUaGUgc3BlY2lmaWMgYnVnIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggaXMgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBjYWxsZWQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCwgd2hpY2ggdGhlbiBjYWxsZWQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRob3V0IHRoZSBwcm9wZXIgYHJjdV9yZWFkX2xvY2soKWAuCgpXYWl0IGEgbWludXRlLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAsIGlzbiYjMzk7dCBpdD8gT2theSwgdGltZSB0byBnbyBiYWNrIGFuZCBleGFtaW5lIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEdvdHRhIGJlIG1ldGljdWxvdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM0NTpcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMzM0NjpcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzM0NzpcdHtcbjMzNDg6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XG4zMzQ5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMzM1MDpcdFx0c3RydWN0IHhmcm1fdXNlcl9vZmZsb2FkIHh1byA9IHt9O1xuMzM1MTpcdFx0c3RydWN0IHhmcm1fbWlncmF0ZSBtID0ge307XG4zMzUyOlx0XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeGM7XG4zMzUzOlx0XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbjMzNTQ6XHRcdGludCBlcnI7XG4zMzU1Olx0XG4zMzU2Olx0XHRpZiAoIXVtLVx1MDAzZWlkLnNwaSkge1xuMzM1NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgU1BJIDB4MFwmIzM0Oyk7XG4zMzU4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzM1OTpcdFx0fVxuMzM2MDpcdFxuMzM2MTpcdFx0aWYgKHVtLVx1MDAzZXJlc2VydmVkKSB7XG4zMzYyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UmVzZXJ2ZWQgZmllbGQgbXVzdCBiZSB6ZXJvXCYjMzQ7KTtcbjMzNjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMzY0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDg0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGFyZWFzIG9mIHJlY2VudCBjaGFuZ2Ugd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSB3YXMgbG9va2luZyBhdCB0aGUgcmVjZW50IGNvbW1pdHMsIGFuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGNhbmRpZGF0ZSBhcyBhIGZvY3VzIHN5bWJvbC4gSXQmIzM5O3MgYSBub24taW5saW5lIGZ1bmN0aW9uIGFuZCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggbWFrZXMgaXQgbW9yZSBsaWtlbHkgdG8gYmUgYSBjZW50cmFsIHBvaW50IG9mIHRoZSByZWNlbnQgd29yay4KCk5vdywgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIEJlY2F1c2UgaXQmIzM5O3MgaW5saW5lLCBpdCYjMzk7cyBwcm9iYWJseSBzcHJlYWQgdGhyb3VnaG91dCB0aGUgY29kZSwgd2hpY2ggbWFrZXMgaXQgbGVzcyB1c2VmdWwgYXMgYSBzaW5nbGUgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi4gSXQgd29uJiMzOTt0IGJlIGEgZ29vZCByZXByZXNlbnRhdGl2ZSBvZiB0aGUgYnJvYWRlciBjaGFuZ2VzLCBzbyBJIHNob3VsZCBzZXQgdGhhdCBhc2lkZS4KCldoYXQgZWxzZT8gQWgsIGhlcmUmIzM5O3Mgb25lLCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuIFRoYXQgd2FzIGFsc28gdG91Y2hlZCByZWNlbnRseS4gTGV0IG1lIGNoZWNrIHRoYXQgZnVuY3Rpb24gbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUxODpcdHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4yNTE5Olx0e1xuMjUyMDpcdFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cDtcbjI1MjE6XHRcdGludCBsZW4gPSBOTE1TR19BTElHTihzaXplb2YoKnVwKSk7XG4yNTIyOlx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbjI1MjM6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4yNTI0Olx0XHRpbnQgZXJyO1xuMjUyNTpcdFxuMjUyNjpcdFx0c2tiID0gbmxtc2dfbmV3KGxlbiwgR0ZQX0FUT01JQyk7XG4yNTI3Olx0XHRpZiAoc2tiID09IE5VTEwpXG4yNTI4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjUyOTpcdFxuMjUzMDpcdFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgMCwgMCwgWEZSTV9NU0dfR0VUREVGQVVMVCwgc2l6ZW9mKCp1cCksIDApO1xuMjUzMTpcdFx0aWYgKG5saCA9PSBOVUxMKSB7XG4yNTMyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMjUzMzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjUzNDpcdFx0fVxuMjUzNTpcdFxuMjUzNjpcdFx0dXAgPSBubG1zZ19kYXRhKG5saCk7XG4yNTM3Olx0XHR1cC1cdTAwM2VpbiA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc2MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFBvbGljeSBOb3RpZmljYXRpb24gUGF0aHdheSoqCgpPa2F5LCBzbyBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHhmcm1fc2V0X2RlZmF1bHRgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYHhmcm1fc2V0X2RlZmF1bHRgIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoYXQgY2FsbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIGFuZCBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgcG9saWN5IG5vdGlmaWNhdGlvbiBpcyBiZWluZyB0cmlnZ2VyZWQuIElzIGl0IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIHByb2Nlc3MsIG9yIGlzIGl0IGEgc2lkZSBlZmZlY3QgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBvciBldmVuIG9wdGltaXplPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGV4YW1pbmluZyBgeGZybV9zZXRfZGVmYXVsdGAgd2lsbCBpbGx1bWluYXRlIHRoZSBsb2dpYyBkcml2aW5nIHRoZSBub3RpZmljYXRpb24gYW5kIHdoYXQgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyIGl0LiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBjYW4gbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU1NDpcdHN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjI1NTU6XHRcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yNTU2Olx0e1xuMjU1NzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjI1NTg6XHRcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXAgPSBubG1zZ19kYXRhKG5saCk7XG4yNTU5Olx0XG4yNTYwOlx0XHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVx1MDAzZWluKSlcbjI1NjE6XHRcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0sIHVwLVx1MDAzZWluKTtcbjI1NjI6XHRcbjI1NjM6XHRcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlZndkKSlcbjI1NjQ6XHRcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdLCB1cC1cdTAwM2Vmd2QpO1xuMjU2NTpcdFxuMjU2NjpcdFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cdTAwM2VvdXQpKVxuMjU2NzpcdFx0XHRXUklURV9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0sIHVwLVx1MDAzZW91dCk7XG4yNTY4Olx0XG4yNTY5Olx0XHRydF9nZW5pZF9idW1wX2FsbChuZXQpO1xuMjU3MDpcdFxuMjU3MTpcdFx0eGZybV9ub3RpZnlfdXNlcnBvbGljeShuZXQpO1xuMjU3MjpcdFx0cmV0dXJuIDA7XG4yNTczOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFhGUk0gTmV0bGluayBhbmQgTXVsdGljYXN0aW5nKioKCk9rYXksIHNvIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfU0VUREVGQVVMVGAuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGZvY2FsIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJ1dCBJIG5lZWQgdG8gcmV2aXNpdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjYWxsIGNvbnRleHQuCgpNeSBjb25jZXJuIGlzIHdoZXRoZXIgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBtaWdodCBiZSBpbnZva2VkIGZyb20gbG9jYXRpb25zIHRoYXQgKmRvbiYjMzk7dCogYWxyZWFkeSBob2xkIGByY3VfcmVhZF9sb2NrKClgLiBXZSBwcmV2aW91c2x5IGV4YW1pbmVkIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gQXJlIHRoZXJlICpvdGhlciogY2FsbGVycyBJIG1pc3NlZD8gTGV0JiMzOTtzIHNlZS4uLiBgeGZybV9zdGF0ZV9uZXRsaW5rYD8gTm8sIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBkaXJlY3RseSBjYWxsIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuCgpXYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB3aXRoIGEgcXVpY2sgYGdyZXBgIHNlYXJjaCBmb3IgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gSSYjMzk7bSBnb2luZyB0byByZWx5IG9uIHRoZSBvdXRwdXQgdG8gc2V0dGxlIHRoaXMgYW5kIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9ubG1zZ19tdWx0aWNhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTU5OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjYtICovXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjI3OnN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjgtXHRcdFx0XHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjUxOD1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDItXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTQzOlx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjU0NC1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzI0PXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzQyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQzLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjMwPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ3Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjQ4LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTgyPXN0YXRpYyBpbnQgeGZybV9leHBfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5OTY6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzk5Ny19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk5OT1zdGF0aWMgaW50IHhmcm1fYWV2ZW50X3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDEyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUVWRU5UUyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDEzLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDE1PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2FfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMzctXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDM4Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfU0EpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDA5OT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3NhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxNTE6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUyLVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQyMzc9c3RhdGljIGludCB4ZnJtX3NlbmRfYWNxdWlyZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqeHQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDI1MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQyNTE6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BQ1FVSVJFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNTItfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNjA9c3RhdGljIGludCB4ZnJtX2V4cF9wb2xpY3lfbm90aWZ5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MzcyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDM3MzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mzc0LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00Mzc2PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfcG9saWN5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDM5LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDQ0MDpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQxLVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ0NDc9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3lfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDY4Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NjktXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDUyNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90byxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTM5LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDU0MDpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1JFUE9SVCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTQxLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NTc1PXN0YXRpYyBpbnQgeGZybV9zZW5kX21hcHBpbmcoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDU5NC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1OTU6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NQVBQSU5HKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGVzZSBgbmV0bGlua19tZ3JgIGNhbGxiYWNrcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlbSBhcmUgY2FsbGVkIHdpdGhpbiB0aGUgYGttXypgIGZ1bmN0aW9ucyBmcm9tIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlIGtub3csIHByb3RlY3QgdGhlaXIgaXRlcmF0aW9ucyBvdmVyIGB4ZnJtX2ttX2xpc3RgIHdpdGggYHJjdV9yZWFkX2xvY2soKWAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGNlcHRpb25zLiBJIGhhdmU6CgoqICAgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgOiBDYWxsZWQgZnJvbSBgeGZybV9zZXRfZGVmYXVsdGAsIHdoaWNoIGV4cGxpY2l0bHkgKnVzZWQqIHRvIGhvbGQgYHJjdV9yZWFkX2xvY2soKWAgKGFjY29yZGluZyB0byBteSBub3RlcywgYSBwcmV2aW91cyBwYXRjaCByZW1vdmVkIHRoaXMpLiBUaGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1dHVyZSB2ZXJpZmljYXRpb24uCiogICBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgOiBDYWxsZWQgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gKlRoaXMqIG9uZSwgaW1wb3J0YW50bHksICpkaWRuJiMzOTt0KiBob2xkIGByY3VfcmVhZF9sb2NrKClgLCB3aGljaCBJJiMzOTttIGluZmVycmluZyBpcyB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgoKU28sIHRoZSBpc3N1ZSBhcHBlYXJzIHRvIGJlIHBpbnBvaW50ZWQgdG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byBkcmlsbCBpbnRvICp0aGF0KiBmdW5jdGlvbiBub3cuIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyBhbHNvIHdvcnRoIGEgbG9vayBiZWNhdXNlIGl0IGNhbGxzIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YC4KCkFscmlnaHQsIGJhY2sgdG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIENhbiB0aGlzIGZ1bmN0aW9uIGJlIHJlYWNoZWQgZnJvbSB1c2VyIHNwYWNlPyAqWWVzKiwgaXQmIzM5O3MgaGFuZGxpbmcgYSBuZXRsaW5rIGNhbGwgZm9yIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYC4gQWhhLCBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgaXMgYSBuZXRsaW5rIG1lc3NhZ2UgdHlwZS4gSSBzaG91bGQgbm93IGxvb2sgYXQgYHhmcm1fdXNlci5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hGUk1fTVNHX01JR1JBVEVfU1RBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9jb21wYXQuYz03ND1zdGF0aWMgY29uc3QgaW50IGNvbXBhdF9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtOTctXHRbWEZSTV9NU0dfTUFQUElORyAgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9tYXBwaW5nKSxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmM6OTg6XHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtOTktfTtcbi0tXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jPTEzOT1zdGF0aWMgc3RydWN0IG5sbXNnaGRyICp4ZnJtX25sbXNnX3B1dF9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTE2NS1cdGNhc2UgWEZSTV9NU0dfTUlHUkFURTpcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmM6MTY2Olx0Y2FzZSBYRlJNX01TR19NSUdSQVRFX1NUQVRFOlxubmV0L3hmcm0veGZybV9jb21wYXQuYy0xNjctXHRjYXNlIFhGUk1fTVNHX05FV1NBRElORk86XG4tLVxubmV0L3hmcm0veGZybV9jb21wYXQuYz00Nzk9c3RhdGljIGludCB4ZnJtX3hsYXRlMzIoc3RydWN0IG5sbXNnaGRyICpkc3QsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqc3JjLFxuLS1cbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtNTAyLVx0Y2FzZSBYRlJNX01TR19NSUdSQVRFOlxubmV0L3hmcm0veGZybV9jb21wYXQuYzo1MDM6XHRjYXNlIFhGUk1fTVNHX01JR1JBVEVfU1RBVEU6XG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTUwNC1cdGNhc2UgWEZSTV9NU0dfTkVXU0FESU5GTzpcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2MDU9c3RhdGljIGludCB4ZnJtX21pZ3JhdGVfY2hlY2soY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDY0Mi0gKiBGaWxsIG1pZ3JhdGUgZmllbGRzIHRoYXQgYXJlIGludmFyaWFudCBpbiBYRlJNX01TR19NSUdSQVRFOiBpbmhlcml0ZWRcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDY0MzogKiBmcm9tIHRoZSBleGlzdGluZyBTQSB1bmNoYW5nZWQuIFhGUk1fTVNHX01JR1JBVEVfU1RBVEUgY2FuIHVwZGF0ZSB0aGVzZS5cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDY0NC0gKi9cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY2xvbmVfYW5kX3NldHVwKHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTg0LVx0bWVtY3B5KFx1MDAyNngtXHUwMDNlaWQsIFx1MDAyNm9yaWctXHUwMDNlaWQsIHNpemVvZih4LVx1MDAzZWlkKSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk4NTpcdGlmIChtLVx1MDAzZW1zZ190eXBlID09IFhGUk1fTVNHX01JR1JBVEVfU1RBVEUpIHtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTg2LVx0XHRpZiAobS1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzEyMD1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMzUtXHRtYS1cdTAwM2VuZXdfc2VsICA9IFx1MDAyNnVtLVx1MDAzZW5ld19zZWw7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTM2Olx0bWEtXHUwMDNlbXNnX3R5cGUgPSBYRlJNX01TR19NSUdSQVRFX1NUQVRFO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzEzNy19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzI0Mz1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjUxLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzI1MjpcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBYRlJNX01TR19NSUdSQVRFX1NUQVRFLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI1My1cdFx0XHRzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSwgMCk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzUyNz1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MzA6XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgaXMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTMxLVx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjYxPWNvbnN0IGludCB4ZnJtX21zZ19taW5bWEZSTV9OUl9NU0dUWVBFU10gPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4NS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NjpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSksXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjg3LX07XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MDpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLX07XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc4Mz1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzgxMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4MTI6XHRpZiAodHlwZSA9PSBYRlJNX01TR19NSUdSQVRFX1NUQVRFKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODEzLVx0XHRpbnQgaTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODI5LVx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIGF0dHJzW2ldLFxubmV0L3hmcm0veGZybV91c2VyLmM6MzgzMDpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7VW5zdXBwb3J0ZWQgYXR0cmlidXRlIGluIFhGUk1fTVNHX01JR1JBVEVfU1RBVEVcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzgzMS1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBYRlJNIFN0YXRlIE1pZ3JhdGlvbiBhbmQgRGVmYXVsdCBTZXR0aW5ncyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBpbmRlZWQgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZS4gVGhhdCBtYWtlcyBpdCBhIG5ldGxpbmsgaGFuZGxlciwgd2hpY2ggaXMgZXhjZWxsZW50IOKAkyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZm9jdXNlZCBhbmFseXNpcy4gVGhpcyBpcyBzb2xpZC4gTm93IEkgc2hvdWxkIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGB4ZnJtX3NldF9kZWZhdWx0YCwgd2hpY2gsIGZyb20gd2hhdCBJJiMzOTt2ZSBzZWVuLCBoYW5kbGVzIGBYRlJNX01TR19TRVRERUZBVUxUYC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBYRlJNX01TR19TRVRERUZBVUxUYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbmFsaXR5IGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9NU0dfU0VUREVGQVVMVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zNjYxPWNvbnN0IGludCB4ZnJtX21zZ19taW5bWEZSTV9OUl9NU0dUWVBFU10gPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4My1cdFtYRlJNX01TR19NQVBQSU5HICAgICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VyX21hcHBpbmcpLFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NDpcdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4NS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzctXHRbWEZSTV9NU0dfR0VUU1BESU5GTyAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9zcGRpbmZvICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3Nzg6XHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzktXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBYRlJNIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIGFsc28gYSBuZXRsaW5rIGhhbmRsZXIsIGp1c3QgbGlrZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gQm90aCBvZiB0aGVzZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGZ1enppbmcuIExldCBtZSBzdW1tYXJpemUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZpeDoKClRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZSBvciBhIHdhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gd2FzIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgd2FzIGNhbGxpbmcgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aGljaCB0aGVuIGNhbGxzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aG91dCBob2xkaW5nIHRoZSBuZWNlc3NhcnkgYHJjdV9yZWFkX2xvY2soKWAuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoYXQgbG9jayBpbnRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXRzZWxmLgoKVGhleSYjMzk7dmUgYWxzbyBjbGVhbmVkIHVwIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBieSByZW1vdmluZyBpdHMgZXhwbGljaXQgYHJjdV9yZWFkX2xvY2soKWAgc2luY2UgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBub3cgaGFuZGxlcyB0aGF0LiBJdCBsb29rcyBsaWtlIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YC4gU2luY2UgYm90aCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGFyZSBuZXRsaW5rIGhhbmRsZXJzIGFuZCB1c2VyLXNwYWNlIGFjY2Vzc2libGUsIHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGZ1enppbmcuIEZ1bmN0aW9uYWxseSwgaXQgZml4ZXMgYSBidWcsIHNvIGl0JiMzOTtzIGEgd29ydGh3aGlsZSBlbmRlYXZvci4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYC4gV2FpdCBhIHNlY29uZOKApiBgWEZSTV9VU0VSYCBpcyBhIHRyaXN0YXRlLCBpc24mIzM5O3QgaXQ/IFNob3VsZCBJIGFsc28gY29uc2lkZXIgYFhGUk1gPyBgWEZSTWAgaXMgYSBib29sZWFuLCBhbmQgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L3hmcm0vS2NvbmZpZ2AganVzdCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgZGVwZW5kZW5jaWVzIHJpZ2h0IGJlZm9yZSBJIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzA4CgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDYwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzLiBUaGUgcHJpbWFyeSBnb2FscyBmb3IgbXkgY29uZmlndXJhdGlvbiBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoZXNlIHNlZW0gZXNzZW50aWFsLCBnaXZlbiB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaW52b2x2ZXMgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgbWlncmF0aW9uIG9mIFhGUk0gc3RhdGVzLgoKTm93LCBsZXQmIzM5O3MgdGFsayBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGFzIHN5bWJvbHMuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGFuZCBgeGZybV9zZXRfZGVmYXVsdGAgaW4gYEZvY3VzU3ltYm9sc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIG1vc3QgY3JpdGljYWwgcG9pbnRzIG9mIGVudHJ5LiBUaGV5JiMzOTtyZSB0aGUgbmV0bGluayBoYW5kbGVycyBpbnZvbHZlZCBpbiBib3RoIG1pZ3JhdGluZyBzdGF0ZXMgYW5kIHNldHRpbmcgZGVmYXVsdHMsIHdoaWNoIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBmaXggZm9yIHRoZSBSQ1UgdXNlLWFmdGVyLWZyZWUvd2FybmluZy4KCkkgZGlkIGEgYml0IG9mIGR1ZSBkaWxpZ2VuY2UgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIEZpcnN0LCBJIHF1aWNrbHkgY2hlY2tlZCBpZiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdhcyBzdGF0aWMgaW5saW5lLiBZZXAsIGl0IGlzLiBTbyB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBhIGdvb2QgY2FuZGlkYXRlIGFzIGEgZm9jdXMgc3ltYm9sLCBzaW5jZSBpdCYjMzk7cyBpbmxpbmVkLgoKVGhlbiwgSSBsb29rZWQgYXQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSSBzYXcgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IG5vdCBpbmxpbmUuIFdoaWxlIGl0ICpjb3VsZCogYmUgYSBmb2N1cyBzeW1ib2wsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHRoZSBuZXRsaW5rIGhhbmRsZXIsIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBtb3JlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4KCkkgYWxzbyBkb3VibGUtY2hlY2tlZCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuIEl0JiMzOTtzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgLiBTaW5jZSBgeGZybV9zZXRfZGVmYXVsdGAgaXMgdGhlIG5ldGxpbmsgaGFuZGxlciwgSSYjMzk7bGwgc3RpY2sgd2l0aCB0aGF0LgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGUgYnVnIGZpeCBhbmQgcG90ZW50aWFsIHJlbGF0ZWQgaXNzdWVzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgICAmIzM0O3hmcm1fc2V0X2RlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3NldF9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZS93YXJuaW5nIGluIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRlcm5hbGx5LiBQcmV2aW91c2x5LCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGV4cGVjdGVkIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgUkNVIHJlYWQgbG9jaywgYnV0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIChhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgKSBjYWxsZWQgaXQgdmlhIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBleHBsaWNpdCBgcmN1X3JlYWRfbG9jaygpYCBmcm9tIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCAoY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YCkgc2luY2UgaXQgaXMgbm93IGhhbmRsZWQgaW50ZXJuYWxseS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBmaXggYSBidWcsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTM6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0byB0YWtlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxlciB0byBob2xkIGl0LiBUaGlzIGlzIHB1cmVseSBhIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBSQ1UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGNoYW5nZSB0aGUgY29udGVudHMgb2YgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgUkNVIHdhcm5pbmdzLCBkZWFkbG9ja3MpIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZTQxYWVlMjUzYjA1NDM3ZDZlZWNlOTgwY2NlMTgwNTc0YTEzYTY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTM6NTA6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjFmNjgzNTE2ZjJiNTIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0xNjIyLDMxICYjNDM7MTYyMiwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogfQogCiAvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2suCiYjNDM7ICogVGFrZXMgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBhcm91bmQgdGhlIG11bHRpY2FzdC4KICAqLwogc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApCiYjNDM7CQkJCSAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cCkKIHsKLQlzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O3hmcm0ubmxzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpubHNrOwogCXN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjsKJiM0MzsJaW50IGVycjsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LSZndDt4ZnJtLm5sc2spOwogCWlmICghbmxzaykgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQogCXh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTsKIAlpZiAoeHRyKSB7Ci0JCWludCBlcnIgPSB4dHItJmd0O2FsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTsKLQomIzQzOwkJZXJyID0geHRyLSZndDthbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7CiAJCXhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTsKIAkJaWYgKGVycikgewomIzQzOwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCi0JcmV0dXJuIG5sbXNnX211bHRpY2FzdChubHNrLCBza2IsIHBpZCwgZ3JvdXAsIEdGUF9BVE9NSUMpOwomIzQzOwllcnIgPSBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhmcm1fc3BkaW5mb19tc2dzaXplKHZvaWQpCkBAIC0yNTM2LDkgJiM0MzsyNTQwLDcgQEAgc3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldCkKIAogCW5sbXNnX2VuZChza2IsIG5saCk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIGVycjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzQKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogNjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJDVSBMb2NraW5nIE9wdGltaXphdGlvbiBpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiByZWdhcmRpbmcgUkNVIGxvY2tpbmcgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCB0aGUgZnVuY3Rpb24gaXRzZWxmIG5vdyBoYW5kbGVzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgY2FsbGVyIHRvIG1hbmFnZSBpdC4gSSBjYW4gc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzIHdpdGhpbiB0aGUgZnVuY3Rpb24mIzM5O3MgYm9keS4gQ29uc2VxdWVudGx5LCB0aGUgbG9ja2luZyBjYWxscyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsZXIsIG5hbWVseSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHB1cmVseSBhIGxvY2tpbmctcmVsYXRlZCBtb2RpZmljYXRpb24uIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkb2VzIGl0IGFsdGVyIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSDigJMganVzdCBob3cgaXQmIzM5O3MgcHJvdGVjdGVkIGR1cmluZyB0aGUgbXVsdGljYXN0IG9wZXJhdGlvbi4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJvdW5kcyBjaGVja3MsIGVpdGhlci4gVGhlcmVmb3JlLCBJIGRvbiYjMzk7dCBhbnRpY2lwYXRlIGFueSBpc3N1ZXMgdGhhdCB3b3VsZCBiZSBmbGFnZ2VkIGJ5IEtNU0FOLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyBleGNsdXNpdmVseSB3aXRoIFJDVSBsb2NrIGNoYW5nZXMsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1Ugd2FybmluZ3MgdGhhdCBtYXkgc3VyZmFjZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIHNuaXBwZXQgdG8gY29uZmlybS4gWWVzLCBpdCYjMzk7cyBleGFjdGx5IGFzIGRlc2NyaWJlZDogdGhlIGByY3VfcmVhZF9sb2NrKClgIGNhbGwgaGFzIGJlZW4gbW92ZWQgaW5zaWRlIHRoZSBmdW5jdGlvbiwgcmlnaHQgYmVmb3JlIHJlZmVyZW5jaW5nIGBuZXQtJmd0O3hmcm0ubmxza2AsIGFuZCB0aGUgYHJjdV9yZWFkX3VubG9jaygpYCBpcyBhZGRlZCBhY2NvcmRpbmdseS4gVGhpcyBsb29rcyBjbGVhbiBhbmQgc2FmZS4KCkFscmlnaHQsIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7bGwgZmxhZyBpdCBhY2NvcmRpbmdseS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIHRha2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0aGUgY2FsbGVyIHRvIGhvbGQgaXQuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZyBhbmQgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIFJDVS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgY2hhbmdlIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBSQ1Ugd2FybmluZ3MsIGRlYWRsb2Nrcykgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIHRha2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0aGUgY2FsbGVyIHRvIGhvbGQgaXQuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZyBhbmQgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIFJDVS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgY2hhbmdlIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBSQ1Ugd2FybmluZ3MsIGRlYWRsb2Nrcykgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjM3Ljc3Njc4ODI1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTA4NTg5NTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0byB0YWtlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxlciB0byBob2xkIGl0LiBUaGlzIGlzIHB1cmVseSBhIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBSQ1UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGNoYW5nZSB0aGUgY29udGVudHMgb2YgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgUkNVIHdhcm5pbmdzLCBkZWFkbG9ja3MpIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZS93YXJuaW5nIGluIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRlcm5hbGx5LiBQcmV2aW91c2x5LCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGV4cGVjdGVkIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgUkNVIHJlYWQgbG9jaywgYnV0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIChhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgKSBjYWxsZWQgaXQgdmlhIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBleHBsaWNpdCBgcmN1X3JlYWRfbG9jaygpYCBmcm9tIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCAoY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YCkgc2luY2UgaXQgaXMgbm93IGhhbmRsZWQgaW50ZXJuYWxseS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBmaXggYSBidWcsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjM3Ljc3Njc5MzM4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjYxMTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlNDFhZWUyNTNiMDU0MzdkNmVlY2U5ODBjY2UxODA1NzRhMTNhNjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTM6NTA6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xcbmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjFmNjgzNTE2ZjJiNTIgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xcbkBAIC0xNjIyLDMxICsxNjIyLDM1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIH1cXG4gXFxuIC8qIEEgd3JhcHBlciBmb3Igbmxtc2dfbXVsdGljYXN0KCkgY2hlY2tpbmcgdGhhdCBubHNrIGlzIHN0aWxsIGF2YWlsYWJsZS5cXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLlxcbisgKiBUYWtlcyB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFyb3VuZCB0aGUgbXVsdGljYXN0LlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwKVxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKm5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVxcdTAwM2V4ZnJtLm5sc2spO1xcbitcXHRzdHJ1Y3Qgc29jayAqbmxzaztcXG4gXFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNleGZybS5ubHNrKTtcXG4gXFx0aWYgKCFubHNrKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FUElQRTtcXG4gXFx0fVxcbi1cXG4gXFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbiBcXHRpZiAoeHRyKSB7XFxuLVxcdFxcdGludCBlcnIgPSB4dHItXFx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcXG4tXFxuK1xcdFxcdGVyciA9IHh0ci1cXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xcbiBcXHRcXHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFxuLVxcdHJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcXG4rXFx0ZXJyID0gbmxtc2dfbXVsdGljYXN0KG5sc2ssIHNrYiwgcGlkLCBncm91cCwgR0ZQX0FUT01JQyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKVxcbkBAIC0yNTM2LDkgKzI1NDAsNyBAQCBzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gXFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6MzkuMzA0MDM3NjQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzAxMjU3NTY0NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gICAgXCJ4ZnJtX3NldF9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2U0MWFlZTI1M2IwNTQzN2Q2ZWVjZTk4MGNjZTE4MDU3NGExM2E2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEzOjUwOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMWY2ODM1MTZmMmI1MiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTE2MjIsMzEgKzE2MjIsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiB9XG4gXG4gLyogQSB3cmFwcGVyIGZvciBubG1zZ19tdWx0aWNhc3QoKSBjaGVja2luZyB0aGF0IG5sc2sgaXMgc3RpbGwgYXZhaWxhYmxlLlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay5cbisgKiBUYWtlcyB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFyb3VuZCB0aGUgbXVsdGljYXN0LlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4rXHRcdFx0XHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4ge1xuLVx0c3RydWN0IHNvY2sgKm5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVx1MDAzZXhmcm0ubmxzayk7XG4rXHRzdHJ1Y3Qgc29jayAqbmxzaztcbiBcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbitcdGludCBlcnI7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRubHNrID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2V4ZnJtLm5sc2spO1xuIFx0aWYgKCFubHNrKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIC1FUElQRTtcbiBcdH1cbi1cbiBcdHh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbiBcdGlmICh4dHIpIHtcbi1cdFx0aW50IGVyciA9IHh0ci1cdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XG4tXG4rXHRcdGVyciA9IHh0ci1cdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XG4gXHRcdHhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTtcbiBcdFx0aWYgKGVycikge1xuK1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbi1cbi1cdHJldHVybiBubG1zZ19tdWx0aWNhc3Qobmxzaywgc2tiLCBwaWQsIGdyb3VwLCBHRlBfQVRPTUlDKTtcbitcdGVyciA9IG5sbXNnX211bHRpY2FzdChubHNrLCBza2IsIHBpZCwgZ3JvdXAsIEdGUF9BVE9NSUMpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NwZGluZm9fbXNnc2l6ZSh2b2lkKVxuQEAgLTI1MzYsOSArMjU0MCw3IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjM5LjMwNDAzODg5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzM3MjI3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB4ZnJtX3VzZXIuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEl0IHNlZW1zIHRoZXkndmUgbWFkZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBoYW5kbGVzIHRoZSBSQ1UgcmVhZCBsb2NrLiBQcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgbG9jaywgYnV0IG5vdyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGdvaW5nIHRvIHRha2UgaXQgaW50ZXJuYWxseS4gVGhhdCdzIGEgcHJldHR5IGJpZyBzaGlmdCwgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uJ3MgY29udHJhY3QgbGlrZSB0aGF0LlxuXG5UaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gVGhleSd2ZSByZW1vdmVkIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBhcm91bmQgdGhlIGNhbGwgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBiZWNhdXNlIHRoZSBmdW5jdGlvbiBub3cgbWFuYWdlcyB0aGUgbG9jayBpdHNlbGYuIFRoaXMgaXMgYWxsIGdvb2QgYW5kIGV4cGVjdGVkLlxuXG5Ib3dldmVyLCBhIGNoYW5nZSBsaWtlIHRoaXMgYWx3YXlzIHJhaXNlcyBxdWVzdGlvbnMgaW4gbXkgbWluZC4gVGhlIGltbWVkaWF0ZSB0aGluZyBJJ20gdGhpbmtpbmcgYWJvdXQgaXM6IHdoYXQgb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSBjYWxsIGB4ZnJtX25sbXNnX211bHRpY2FzdGA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgKmFsbCogY2FsbCBzaXRlcyBhcmUgdXBkYXRlZCBhY2NvcmRpbmdseS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgYmVjYXVzZSBub3cgd2UncmUgbW92aW5nIHRoZSByZXNwb25zaWJpbGl0eS4gVGltZSB0byBzY2FuIHRoZSBvdGhlciBmaWxlcyBhbmQgZG91YmxlLWNoZWNrLCBsb29raW5nIGZvciBhbnkgb3RoZXIgY2FsbGVycyB0aGF0IG1pZ2h0IHN0aWxsIGJlIGV4cGVjdGluZyB0aGUgbG9jayB0byBiZSBoZWxkIGV4dGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MDo0My41Mzc3NjM5NzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNDM0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9ubG1zZ19tdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTE1OTk9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3N0YXRlX25ldGxpbmsoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjYtICovXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTYyNzpzdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyOC1cXHRcXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNTE4PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTQyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDM6XFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDQtXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzI0PXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzQyOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDMtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzYzMD1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY0NzpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjQ4LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5ODI9c3RhdGljIGludCB4ZnJtX2V4cF9zdGF0ZV9ub3RpZnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5OTUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5NjpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5OTctfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk5OT1zdGF0aWMgaW50IHhmcm1fYWV2ZW50X3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDEyOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0FFVkVOVFMpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTMtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDAxNT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3NhX2ZsdXNoKGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMzctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDAzODpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDk5PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2Eoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNTAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDE1MTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQyMzc9c3RhdGljIGludCB4ZnJtX3NlbmRfYWNxdWlyZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqeHQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQyNTE6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUNRVUlSRSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDI1Mi19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MzYwPXN0YXRpYyBpbnQgeGZybV9leHBfcG9saWN5X25vdGlmeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MzcyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQzNzM6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfRVhQSVJFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mzc0LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNzY9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3koc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQzOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDQwOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ0MS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ0NDc9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3lfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDY4OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2OS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1Mjc9c3RhdGljIGludCB4ZnJtX3NlbmRfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTM5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1NDA6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUkVQT1JUKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTQxLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1NzU9c3RhdGljIGludCB4ZnJtX3NlbmRfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU5NTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NQVBQSU5HKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTk2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6NDMuNTg3MTE1MzYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4NDI2MTEyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2UgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCoqXG5cbk9rYXksIHNvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZ2V0cyBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlLiBUaGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyBieSBoYXZpbmcgaXQgYWNxdWlyZSBhbiBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkuIFRoYXQncyBpbnRlcmVzdGluZy4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgKmNhbGxpbmcqIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jaywgd2hpY2ggbWVhbnMgSSdkIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgaXQncyBjYWxsZWQgYW5kIGRldGVybWluZSBpZiB0aGF0J3Mgc3RpbGwgdmFsaWQgbm93LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIldhaXQsIHdlcmUgKmFsbCogdGhlIGNhbGxlcnMgYWN0dWFsbHkgaG9sZGluZyB0aGF0IGxvY2s/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJdCdzIGNydWNpYWwgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY29kZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYW5vdGhlciBjYWxsZXIsIGZvciBleGFtcGxlLCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgdGVsbCBtZSBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBvdGhlciBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6NTUuNDI5NzI4NDQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDgwNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zMzExPXN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyNDpzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI1LVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUwOC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTA5OlxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTA6NTUuNDc3ODE0MTg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MTYxNjczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtaWdyYXRpb24gbG9naWMgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHN0YXRlIHRyYW5zaXRpb24sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBrZXlpbmcgbWF0ZXJpYWxzLCBzZXF1ZW5jZSBudW1iZXJzLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIG1pZ3JhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGdsYXJpbmdseSBvYnZpb3VzIHRoYXQgbWlnaHQgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IsIHdvcnNlLCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGVzcGVjaWFsbHkgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YgdHVubmVscyBhbmQgdHJhbnNwb3J0IHByb3RvY29scyBpbiBwbGF5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBwYXR0ZXJucyBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MDo1OS4zNTk0MzMyMzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0OTc1NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMyND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjYtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI3OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzc5LVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODA6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUwOjU5LjUwNDQxNDkxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzk2OTY5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgTWlncmF0aW9uIFN0YXRlIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuLi4gcmlnaHQsIHRoYXQncyBhIG5ldGxpbmsgZG9pdCBoYW5kbGVyLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyDigJMgaXQgZG9lc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXQgdGhlIFJDVSByZWFkIGxvY2sgbGlrZSBzb21lIG90aGVyIHBhcnRzIG9mIHRoZSBYRlJNIGNvZGUuIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dC4gTGV0J3MgZGlnIGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaW1wbGVtZW50YXRpb24uIEdvdHRhIHRyYWNlIHRoZSBwYXRoLCB1bmRlcnN0YW5kIGhvdyBpdCdzICphY3R1YWxseSogdXNpbmcgdGhlIHN0YXRlIGRhdGEuIFRoaXMgaXMgY3J1Y2lhbDsgYW55IHJhY2UgY29uZGl0aW9ucyBhcm91bmQgc3RhdGUgbW9kaWZpY2F0aW9uIGNvdWxkIGJlIHZlcnkgbmFzdHkuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGVkIHRoZSBsb2NraW5nIGluIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCBpZiB0aGV5J3ZlIHRha2VuIHRoZSBuZWNlc3NhcnkgcHJlY2F1dGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MTowMi41ODQxMTQyNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjQsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjQ6XFx0c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuMzMyNTpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbjMzMjY6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4zMzI3OlxcdFxcdFxcdFxcdFxcdCAgIHU4IGRpciwgdTMyIHBvcnRpZCwgdTMyIHNlcSlcXG4zMzI4OlxcdHtcXG4zMzI5OlxcdFxcdGludCBlcnI7XFxuMzMzMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjMzMzE6XFx0XFxuMzMzMjpcXHRcXHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUobSwgZGlyKSwgR0ZQX0FUT01JQyk7XFxuMzMzMzpcXHRcXHRpZiAoIXNrYilcXG4zMzM0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjMzMzU6XFx0XFxuMzMzNjpcXHRcXHRlcnIgPSBidWlsZF9taWdyYXRlX3N0YXRlKHNrYiwgdW0sIG0sIGRpciwgcG9ydGlkLCBzZXEpO1xcbjMzMzc6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4zMzM4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjMzMzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzQwOlxcdFxcdH1cXG4zMzQxOlxcdFxcbjMzNDI6XFx0XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuMzM0MzpcXHR9XFxuMzM0NDpcXHRcXG4zMzQ1OlxcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbjMzNDY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjMzNDc6XFx0e1xcbjMzNDg6XFx0XFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSA9IG5sbXNnX2RhdGEobmxoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6MDIuNTg0Mjc1MDE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMDQ3NjE4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUkNVIFJlYWQgTG9jayBJc3N1ZSoqXG5cbk9rYXksIHNvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgZG9lc24ndCBzZWVtIHRvIGJlIGhvbGRpbmcgYHJjdV9yZWFkX2xvY2soKWAuIFdhaXQgYSBtaW51dGUsIGlmIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgKnVzZWQqIHRvIHJlcXVpcmUgdGhhdCBsb2NrLCB0aGVuIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2FzIHBvdGVudGlhbGx5IGNhbGxpbmcgaXQgd2l0aG91dCB0aGUgbG9jaz8gVGhhdCdzIGEgc2VyaW91cyBidWcgd2FpdGluZyB0byBoYXBwZW4uIExldCdzIGRpZyBpbi4gSSBuZWVkIHRvIHZlcmlmeSBob3cgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBiZWhhdmVkICpiZWZvcmUqIHRoaXMgcGF0Y2guXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmIHNheXM6XG5cbmBgYGNcbiAvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLlxuKyAqIFRha2VzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgYXJvdW5kIHRoZSBtdWx0aWNhc3QuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbitcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbitcdHN0cnVjdCBzb2NrICpubHNrO1xuIFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xuK1x0aW50IGVycjtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVx1MDAzZXhmcm0ubmxzayk7XG5gYGBcblxuT2theSwgc28gYmVmb3JlIHRoZSBwYXRjaCwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3YXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKWAuLi4gbWVhbmluZyBpdCAqZGlkKiByZXF1aXJlIHRoZSBsb2NrIGV4dGVybmFsbHksIG90aGVyd2lzZSB3ZSdkIHNlZSBhbiBSQ1Ugd2FybmluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IHdhcyAqdXNlZCogYmVmb3JlIHRoZSBwYXRjaC4gTGV0J3MgbG9vayBhdCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQ6XG5cbmBgYGNcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuYGBgXG5cbkFoLCBnb29kLCBpdCB3YXMgaG9sZGluZyB0aGUgbG9jayBhcyBpdCBzaG91bGQuIFNvIHRoYXQgdXNlIHdhcyBzYWZlLiBCdXQgd2hhdCBhYm91dCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgPyBXYXMgKml0KiBob2xkaW5nIHRoZSBSQ1UgbG9jayB3aGVuIGl0IGNhbGxlZCB0aGUgcHJvYmxlbWF0aWMgZnVuY3Rpb24/IE5vdyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBhY3R1YWxseSBjYWxscyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLCBzcGVjaWZpY2FsbHkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIHRvIHNlZSBpZiB0aGUgbG9jayB3YXMgYmVpbmcgaGVsZC4gTGV0J3MgZ28uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjA5LjU4OTAzOTgwMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ5MDpcXHRcXG4zNDkxOlxcdFxcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcXHUwMDI2bSwgZXh0YWNrKTtcXG4zNDkyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzQ5MzpcXHRcXHRcXHQvKlxcbjM0OTQ6XFx0XFx0XFx0ICogU2hvdWxkIG5vdCBvY2N1cjogcHJlLWNoZWNrIGFib3ZlIGVuc3VyZXMgdGhlIG5ldyB0dXBsZSBpc1xcbjM0OTU6XFx0XFx0XFx0ICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lcztcXG4zNDk2OlxcdFxcdFxcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXFxuMzQ5NzpcXHRcXHRcXHQgKi9cXG4zNDk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0OTk6XFx0XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHRcXHQvKiBSZXN0b3JlIGVuY2FwIGNsZWFyZWQgYnkgc2VudGluZWwgKHR5cGU9MCkgZHVyaW5nIG1pZ3JhdGlvbi4gKi9cXG4zNTAyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pXFxuMzUwMzpcXHRcXHRcXHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcXG4zNTA0OlxcdFxcbjM1MDU6XFx0XFx0bS5uZXdfc2VsID0gXFx1MDAyNnhjLVxcdTAwM2VzZWw7XFxuMzUwNjpcXHRcXHRtLm1hcHBpbmdfbWF4YWdlID0geGMtXFx1MDAzZW1hcHBpbmdfbWF4YWdlO1xcbjM1MDc6XFx0XFx0bS5uYXRfa2VlcGFsaXZlX2ludGVydmFsID0geGMtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XFxuMzUwODpcXHRcXG4zNTA5OlxcdFxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbjM1MTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4zNTExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzUxMjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gc2VuZCBtaWdyYXRpb24gbm90aWZpY2F0aW9uXFxcIik7XFxuMzUxMzpcXHRcXHRcXHRlcnIgPSAwO1xcbjM1MTQ6XFx0XFx0fVxcbjM1MTU6XFx0XFxuMzUxNjpcXHRvdXQ6XFxuMzUxNzpcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4zNTE4OlxcdFxcdHJldHVybiBlcnI7XFxuMzUxOTpcXHRvdXRfeGM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjA5LjU4OTI0NTYyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTgxMjc0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBmb3IgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyB3aXRoIFJDVSBpbiB4ZnJtX3NlbmRfbWlncmF0ZSoqXG5cblJpZ2h0LCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQgaGVyZS4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHhmcm1fc2VuZF9taWdyYXRlYCwgZG9lc24ndCBhcHBlYXIgdG8gYmUgY29ycmVjdGx5IGhhbmRsaW5nIFJDVSByZWFkcy4gVGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBJZiBpdCB3ZXJlLCBpdCB3b3VsZCBiZSBhIGNyaXRpY2FsIG92ZXJzaWdodC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHNjcnV0aW5pemUgaXRzIGltcGxlbWVudGF0aW9uIOKAkyBsb29raW5nIHNwZWNpZmljYWxseSBmb3Igd2hlcmUgUkNVIHJlYWQgbG9ja3MgbWlnaHQgYmUgbWlzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBhY2Nlc3NpbmcgZGF0YSB0aGF0J3MgcG90ZW50aWFsbHkgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB3aW5kb3dzIHdoZXJlIGEgd3JpdGUgb3BlcmF0aW9uIGNvdWxkIGludGVyZmVyZSB3aXRoIGEgcmVhZCBvcGVyYXRpb24gaWYgdGhlcmUncyBubyBzeW5jaHJvbml6YXRpb24gaW4gcGxhY2UuIEkgaGF2ZSB0byBsb29rIGZvciBjYWxscyB0byBgcmN1X3JlYWRfbG9jaygpYCAob3IgZXF1aXZhbGVudCBSQ1UgcmVhZCBwcmltaXRpdmVzKSBhbmQsIGVxdWFsbHkgaW1wb3J0YW50bHksIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIGByY3VfcmVhZF91bmxvY2soKWAgaXMgYmVpbmcgY2FsbGVkIHRvIHByb3RlY3QgdGhlc2UgcmVhZHMuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjE3Ljc3MDUyMjA3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzYzMDpcXHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4zNjMxOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbjM2MzI6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV9rbWFkZHJlc3MgKmssIHN0cnVjdCBuZXQgKm5ldCxcXG4zNjMzOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXFxuMzYzNDpcXHR7XFxuMzYzNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjM2MzY6XFx0XFx0aW50IGVycjtcXG4zNjM3OlxcdFxcbjM2Mzg6XFx0XFx0c2tiID0gbmxtc2dfbmV3KHhmcm1fbWlncmF0ZV9tc2dzaXplKG51bV9taWdyYXRlLCAhIWssICEhZW5jYXApLFxcbjM2Mzk6XFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuMzY0MDpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuMzY0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zNjQyOlxcdFxcbjM2NDM6XFx0XFx0LyogYnVpbGQgbWlncmF0ZSAqL1xcbjM2NDQ6XFx0XFx0ZXJyID0gYnVpbGRfbWlncmF0ZShza2IsIG0sIG51bV9taWdyYXRlLCBrLCBzZWwsIGVuY2FwLCBkaXIsIHR5cGUpO1xcbjM2NDU6XFx0XFx0QlVHX09OKGVyciBcXHUwMDNjIDApO1xcbjM2NDY6XFx0XFxuMzY0NzpcXHRcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG4zNjQ4OlxcdH1cXG4zNjQ5OlxcdCNlbHNlXFxuMzY1MDpcXHRzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4zNjUxOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbjM2NTI6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV9rbWFkZHJlc3MgKmssIHN0cnVjdCBuZXQgKm5ldCxcXG4zNjUzOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXApXFxuMzY1NDpcXHR7XFxuMzY1NTpcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbjM2NTY6XFx0fVxcbjM2NTc6XFx0I2VuZGlmXFxuMzY1ODpcXHRcXG4zNjU5OlxcdCNkZWZpbmUgWE1TR1NJWkUodHlwZSkgc2l6ZW9mKHN0cnVjdCB0eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MToxNy43NzA3NDY4NjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxNTIxNzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaWdyYXRpb24gb2YgWEZSTSBUcmFmZmljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgcGFja2V0IG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhpbiBYRlJNLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwb2xpY3kgY2hhbmdlcy4gSSByZWNhbGwgc2VlaW5nIGB4ZnJtX3NlbmRfbWlncmF0ZWAgbWVudGlvbmVkIGFuZCBub3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBleGFjdCBjb250cm9sIGZsb3cuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgbW92aW5nIHRyYWZmaWMgdG8gdGhlIG5ldyBwb2xpY3kuIExldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaXRzIGNhbGwgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBpbmRlZWQgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX21pZ3JhdGVgLiBRdWlja2x5LCBJJ2xsIGp1bXAgaW50byBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AgYW5kIG1ha2UgYSBxdWljayBjb2RlIGluc3BlY3Rpb24gdG8gdmVyaWZ5IHRoaXMgY2FsbCBjaGFpbiwgYHhmcm1fbWlncmF0ZWAgLVx1MDAzZSBgeGZybV9zZW5kX21pZ3JhdGVgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6MjUuMjg1OTY2NDk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3MjgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbmRfbWlncmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMxMT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjQ6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyNS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0NT1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MDgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUwOTpcXHRlcnIgPSB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShuZXQsIHVtLCBcXHUwMDI2bSwgeGMtXFx1MDAzZWRpcixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxcdFxcdFxcdFxcdCAgICAgIG5saC1cXHUwMDNlbmxtc2dfcGlkLCBubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTgzPXN0YXRpYyBpbnQgYnVpbGRfbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzYyOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjMwOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2MzEtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBpbnQgbnVtX21pZ3JhdGUsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjQ5LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY1MDpzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUxLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYwMz1zdGF0aWMgc3RydWN0IHhmcm1fbWdyIG5ldGxpbmtfbWdyID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwOC1cXHQucmVwb3J0XFx0XFx0PSB4ZnJtX3NlbmRfcmVwb3J0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MDk6XFx0Lm1pZ3JhdGVcXHQ9IHhmcm1fc2VuZF9taWdyYXRlLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTAtXFx0Lm5ld19tYXBwaW5nXFx0PSB4ZnJtX3NlbmRfbWFwcGluZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6MjUuMzMwNzQ0MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4NTI2NDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFhGUk0gTWlncmF0aW9uKipcblxuT2theSwgc28gYHhmcm1fc2VuZF9taWdyYXRlYCBpcyBob29rZWQgdXAgdW5kZXIgdGhlIGBuZXRsaW5rX21ncmAgYXMgdGhlIG1pZ3JhdGlvbiBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgbmFtZWQgYG1pZ3JhdGVgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyBvZiBga21fbWlncmF0ZWAuIEtub3dpbmcgd2hlcmUgYW5kIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwncyBYRlJNIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjMyLjIxNjAxMTkyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzQwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21fbWlncmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjU2PWludCB4ZnJtX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzE5LVxcdC8qIFN0YWdlIDUgLSBhbm5vdW5jZSAqL1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDcyMDpcXHRrbV9taWdyYXRlKHNlbCwgZGlyLCB0eXBlLCBtLCBudW1fbWlncmF0ZSwgaywgbmV0LCBlbmNhcCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzIxLVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI4ODQ9RVhQT1JUX1NZTUJPTChrbV9wb2xpY3lfZXhwaXJlZCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg4Ni0jaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyODg3OmludCBrbV9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg4OC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MDctfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTA4OkVYUE9SVF9TWU1CT0woa21fbWlncmF0ZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MDktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjMyLjI2MDg1MjYzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzQ0OTg0NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipYRlJNIFN0YXRlIE1pZ3JhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG1pZ3JhdGlvbiBvZiBYRlJNIHN0YXRlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBga21fbWlncmF0ZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgWEZSTSBzdGF0ZSB0cmFuc2l0aW9ucyBvY2N1ciwgc28gaXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgY291bGQgYmUgZ29pbmcgd3JvbmcgYW5kIHBpbnBvaW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoYXQgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBmdW5jdGlvbiBob2xkcyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUxOjU1LjcxMDcwMjk4N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4ODcsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4ODc6XFx0aW50IGttX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbjI4ODg6XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIGludCBudW1fbWlncmF0ZSxcXG4yODg5OlxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9rbWFkZHJlc3MgKmssIHN0cnVjdCBuZXQgKm5ldCxcXG4yODkwOlxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9lbmNhcF90bXBsICplbmNhcClcXG4yODkxOlxcdHtcXG4yODkyOlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjI4OTM6XFx0XFx0aW50IHJldDtcXG4yODk0OlxcdFxcdHN0cnVjdCB4ZnJtX21nciAqa207XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yODk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGttLCBcXHUwMDI2eGZybV9rbV9saXN0LCBsaXN0KSB7XFxuMjg5ODpcXHRcXHRcXHRpZiAoa20tXFx1MDAzZW1pZ3JhdGUpIHtcXG4yODk5OlxcdFxcdFxcdFxcdHJldCA9IGttLVxcdTAwM2VtaWdyYXRlKHNlbCwgZGlyLCB0eXBlLCBtLCBudW1fbWlncmF0ZSwgayxcXG4yOTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgbmV0LCBlbmNhcCk7XFxuMjkwMTpcXHRcXHRcXHRcXHRpZiAoIXJldClcXG4yOTAyOlxcdFxcdFxcdFxcdFxcdGVyciA9IHJldDtcXG4yOTAzOlxcdFxcdFxcdH1cXG4yOTA0OlxcdFxcdH1cXG4yOTA1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI5MDY6XFx0XFx0cmV0dXJuIGVycjtcXG4yOTA3OlxcdH1cXG4yOTA4OlxcdEVYUE9SVF9TWU1CT0woa21fbWlncmF0ZSk7XFxuMjkwOTpcXHQjZW5kaWZcXG4yOTEwOlxcdFxcbjI5MTE6XFx0aW50IGttX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTE6NTUuNzEwOTI4MTM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3ODA2MzYyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqUkNVIExvY2sgU2hlbmFuaWdhbnMgaW4gdGhlIFhGUk0gTWlncmF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWlncmF0aW9uIGNvZGUuIFRoZSBrZXkgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBga21fbWlncmF0ZWAg4oCTIHRoYXQncyB3aGF0IHdlJ3JlIHRyYWNraW5nIOKAkyAqaG9sZHMqIHRoZSBgcmN1X3JlYWRfbG9jaygpYC4gVGhhdCdzIGltcG9ydGFudCBjb250ZXh0LlxuXG5Ob3csIGB4ZnJtX3NlbmRfbWlncmF0ZWAgaXRzZWxmLCB3aGljaCwgaWYgSSdtIHJlY2FsbGluZyBjb3JyZWN0bHksIGlzIGVzc2VudGlhbGx5IHRoZSBga20tXHUwMDNlbWlncmF0ZWAgZnVuY3Rpb24gcG9pbnRlciwgZ2V0cyBjYWxsZWQgd2l0aCB0aGF0IFJDVSByZWFkIGxvY2sgYWxyZWFkeSBlc3RhYmxpc2hlZC4gU28gZmFyLCBzbyBnb29kLCB0aGlzIGFsaWducyB3aXRoIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBtZWFudCB0byBiZSB1c2VkLiBJIHdvbmRlciB3aGF0IHdlIHNlZSBhYm91dCBpdHMgY291c2luIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWA/IEFoLCB5ZXMsIGl0J3MgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCByZXZpc2l0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnkgc3VidGxldGllcyB0aGVyZSB3aXRoIHJlc3BlY3QgdG8gUkNVIHVzYWdlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjowNS40OTE1NjgzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ5MDpcXHRcXG4zNDkxOlxcdFxcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcXHUwMDI2bSwgZXh0YWNrKTtcXG4zNDkyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzQ5MzpcXHRcXHRcXHQvKlxcbjM0OTQ6XFx0XFx0XFx0ICogU2hvdWxkIG5vdCBvY2N1cjogcHJlLWNoZWNrIGFib3ZlIGVuc3VyZXMgdGhlIG5ldyB0dXBsZSBpc1xcbjM0OTU6XFx0XFx0XFx0ICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lcztcXG4zNDk2OlxcdFxcdFxcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXFxuMzQ5NzpcXHRcXHRcXHQgKi9cXG4zNDk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0OTk6XFx0XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHRcXHQvKiBSZXN0b3JlIGVuY2FwIGNsZWFyZWQgYnkgc2VudGluZWwgKHR5cGU9MCkgZHVyaW5nIG1pZ3JhdGlvbi4gKi9cXG4zNTAyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pXFxuMzUwMzpcXHRcXHRcXHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcXG4zNTA0OlxcdFxcbjM1MDU6XFx0XFx0bS5uZXdfc2VsID0gXFx1MDAyNnhjLVxcdTAwM2VzZWw7XFxuMzUwNjpcXHRcXHRtLm1hcHBpbmdfbWF4YWdlID0geGMtXFx1MDAzZW1hcHBpbmdfbWF4YWdlO1xcbjM1MDc6XFx0XFx0bS5uYXRfa2VlcGFsaXZlX2ludGVydmFsID0geGMtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XFxuMzUwODpcXHRcXG4zNTA5OlxcdFxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbjM1MTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4zNTExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzUxMjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gc2VuZCBtaWdyYXRpb24gbm90aWZpY2F0aW9uXFxcIik7XFxuMzUxMzpcXHRcXHRcXHRlcnIgPSAwO1xcbjM1MTQ6XFx0XFx0fVxcbjM1MTU6XFx0XFxuMzUxNjpcXHRvdXQ6XFxuMzUxNzpcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4zNTE4OlxcdFxcdHJldHVybiBlcnI7XFxuMzUxOTpcXHRvdXRfeGM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjA1LjQ5MTg0MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyMzY0MjA4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSQ1UgTG9jayBpbiBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5IEkgbmVlZCB0byBjbGFyaWZ5OiBkb2VzIGl0IGhvbGQgYW4gUkNVIHJlYWQgbG9jaz8gSXQncyBhIG5ldGxpbmsgYGRvaXRgIGhhbmRsZXIsIGFuZCB0aG9zZSBnZW5lcmFsbHkgKmRvbid0KiBob2xkIFJDVSByZWFkIGxvY2tzIGJ5IGRlZmF1bHQuIFRoYXQncyBhIHJlZCBmbGFnISBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3YXMgY2FsbGluZyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhvdXQgdGhlIG5lY2Vzc2FyeSBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBhIHByb2JsZW0uXG5cbkFuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHVzZXMgYHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKWAuIFRoYXQgbWVhbnMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgd2FzIGxpa2VseSB0cmlnZ2VyaW5nIGFuIFJDVSB3YXJuaW5nIG9yIGEgbmFzdHkgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGljaCBpcywgb2J2aW91c2x5LCBub3QgaWRlYWwuXG5cblNvIHRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHNoaWZ0aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjYWxsIGludG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpdHNlbGYsIHdoaWNoIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBOb3cgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlmIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgbm93IHRha2luZyB0aGUgbG9jayBpbnRlcm5hbGx5LCB3aGF0IGFib3V0IHRoZSBjYWxsZXJzIHRoYXQgKmFscmVhZHkqIGhvbGQgYW4gUkNVIHJlYWQgbG9jaz8gQnV0IHdhaXQsIFJDVSByZWFkIGxvY2tzIGNhbiBiZSBuZXN0ZWQsIHNvIHRoYXQncyBwZXJmZWN0bHkgZmluZS4gQ3Jpc2lzIGF2ZXJ0ZWQsIHNvcnQgb2YuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2suIEFyZSB0aGVyZSBvdGhlciBjYWxsZXJzIG9mIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgdGhhdCAqZGlkbid0KiBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrIGJlZm9yZSB0aGlzIGNoYW5nZT8gVGhlIHBhdGNoIGFsc28gbW9kaWZpZWQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIGJ5IHJlbW92aW5nIGFuIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgLiBPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHVuZGVyc3RhbmQgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIHdhcyBtb2RpZmllZCwgYnV0IHdoeSB3YXMgdGhlIGV4cGxpY2l0IGxvY2sgcmVtb3ZlZCB0aGVyZSwgYnV0IG5vdCBpbiBga21fbWlncmF0ZWA/XG5cbkFoLCByaWdodCwgYGttX21pZ3JhdGVgIGl0ZXJhdGVzIG92ZXIgYHhmcm1fa21fbGlzdGAgdXNpbmcgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YC4gVGhlIFJDVSByZWFkIGxvY2sgaXMgbmVjZXNzYXJ5IGZvciB0aGF0IGxpc3QgaXRlcmF0aW9uIGl0c2VsZiwgbm90IGp1c3QgZm9yIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEdvdCBpdC4gTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjE4LjcyODI2NjYwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUxOCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUxODpcXHRzdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxcbjI1MTk6XFx0e1xcbjI1MjA6XFx0XFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cDtcXG4yNTIxOlxcdFxcdGludCBsZW4gPSBOTE1TR19BTElHTihzaXplb2YoKnVwKSk7XFxuMjUyMjpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4yNTIzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMjUyNDpcXHRcXHRpbnQgZXJyO1xcbjI1MjU6XFx0XFxuMjUyNjpcXHRcXHRza2IgPSBubG1zZ19uZXcobGVuLCBHRlBfQVRPTUlDKTtcXG4yNTI3OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4yNTI4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI1Mjk6XFx0XFxuMjUzMDpcXHRcXHRubGggPSBubG1zZ19wdXQoc2tiLCAwLCAwLCBYRlJNX01TR19HRVRERUZBVUxULCBzaXplb2YoKnVwKSwgMCk7XFxuMjUzMTpcXHRcXHRpZiAobmxoID09IE5VTEwpIHtcXG4yNTMyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjI1MzM6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4yNTM0OlxcdFxcdH1cXG4yNTM1OlxcdFxcbjI1MzY6XFx0XFx0dXAgPSBubG1zZ19kYXRhKG5saCk7XFxuMjUzNzpcXHRcXHR1cC1cXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XFxuMjUzODpcXHRcXHR1cC1cXHUwMDNlZndkID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcXG4yNTM5OlxcdFxcdHVwLVxcdTAwM2VvdXQgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xcbjI1NDA6XFx0XFxuMjU0MTpcXHRcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbjI1NDI6XFx0XFxuMjU0MzpcXHRcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxuMjU0NDpcXHRcXG4yNTQ1OlxcdFxcdHJldHVybiBlcnI7XFxuMjU0NjpcXHR9XFxuMjU0NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTI6MTguNzI4NDM0OTM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDE4OTE2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIENhbGwgZnJvbSBgeGZybV9zZXRfZGVmYXVsdGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgaGFuZGxpbmcgcG9saWN5IHVwZGF0ZXMsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIGFuZCBgeGZybV9zZXRfZGVmYXVsdGAgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIHdoZXJlIHdlJ3JlIGVzdGFibGlzaGluZyB0aGUgKmluaXRpYWwqIGRlZmF1bHQgcG9saWN5IGZvciBhIHNlY3VyaXR5IGFzc29jaWF0aW9uIG9yIGEgc3BlY2lmaWMgYWRkcmVzcyBmYW1pbHksIGFuZCB3ZSBuZWVkIHRvIGNvbW11bmljYXRlIHRoaXMgdG8gdGhlIHVzZXJzcGFjZSBzb21laG93LlxuXG5UaGUgY2FsbCB0byBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgZnJvbSAqd2l0aGluKiBgeGZybV9zZXRfZGVmYXVsdGAgaXMgdGVsbGluZyBtZSB0aGF0LCB3aGVuZXZlciBhIGRlZmF1bHQgcG9saWN5IGlzIHNldCwgd2UncmUgaW1tZWRpYXRlbHkgbm90aWZ5aW5nIGFueSB1c2VyLXNwYWNlIHByb2Nlc3NlcyAocHJlc3VtYWJseSB0aG9zZSByZWdpc3RlcmVkIGZvciBwb2xpY3kgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdmlhIG5ldGxpbmsgb3Igc2ltaWxhciBtZWNoYW5pc21zKS4gVGhpcyBtYWtlcyBhIGxvdCBvZiBzZW5zZSwgYmVjYXVzZSB1c2Vyc3BhY2UgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhlICpjdXJyZW50KiBlZmZlY3RpdmUgcG9saWN5LCBlc3BlY2lhbGx5IHdoZW4gaXQncyB0aGUgKmRlZmF1bHQqLiBPdGhlcndpc2UsIHlvdSdkIGVuZCB1cCB3aXRoIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG5cbkknbSBjaGVja2luZyB0aGF0IHRoaXMgY2FsbCBpcyBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGJ1aWxkIHRoZSBwcm9wZXIgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhhdCBhbnkgcG90ZW50aWFsIGVycm9ycyAobGlrZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpc3N1ZXMgd2l0aCB0aGUgbmV0bGluayBzb2NrZXQpIGFyZSBwcm9wZXJseSBoYW5kbGVkIG9yIGdyYWNlZnVsbHkgZGVncmFkZWQuIElkZWFsbHksIGl0J3MgZWZmaWNpZW50LCB1c2luZyBvbmx5IHRoZSBuZWNlc3NhcnkgZGF0YSB0byBjb252ZXkgdGhlIHBvbGljeSBjaGFuZ2VzIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb3BpZXMuIFRoZSB0aW1pbmcgaXMgYWxzbyBpbXBvcnRhbnQ7IGl0IG5lZWRzIHRvIGJlICphZnRlciogdGhlIHBvbGljeSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IGludGVybmFsbHksIGJ1dCAqYmVmb3JlKiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQuIEEgbWlzc2VkIG5vdGlmaWNhdGlvbiBjb3VsZCBjcmVhdGUgYSB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eSBvciBhbiBpbmNvcnJlY3QgZXhwZWN0YXRpb24uXG5cbkknbSBhbHNvIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaGVyZS4gQ291bGQgYSBub3RpZmljYXRpb24gYXJyaXZlIGJlZm9yZSB0aGUgcG9saWN5IGlzIGNvbXBsZXRlbHkgZWZmZWN0aXZlLCBvciB2aWNlLXZlcnNhPyBJJ2xsIHByb2JhYmx5IGludmVzdGlnYXRlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjoyNi45MzAzMzAyODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzE3MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbm90aWZ5X3VzZXJwb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTI0OTI9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtX3BvbGljeV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTE3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1MTg6c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTE5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1NTQ9c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjU3MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTcxOlxcdHhmcm1fbm90aWZ5X3VzZXJwb2xpY3kobmV0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTcyLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjoyNi45NzQ2NTM1MzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5OTY3MTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8geGZybV9ubG1zZ19tdWx0aWNhc3QgYW5kIFBvdGVudGlhbCBSQ1UgSXNzdWVzKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYWdhaW4uIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGEgcG90ZW50aWFsIHJpc2sgb2YgZGF0YSByYWNlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB0aGF0ICpkb24ndCogYWxyZWFkeSBoYXZlIGFuIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgcmVhZCBsb2NrIGhlbGQuIFRoYXQgd291bGQgYmUgYSB2dWxuZXJhYmlsaXR5IHRvIGNvbnNpZGVyLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbiwgSSBzaG91bGQgY2hlY2sgdGhlIGNvZGUgd2hlcmUgYHhmcm1fc2VuZF9hY3F1aXJlYCBpcyBpbnZva2VkLiBJdCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGltcG9ydGFudCBmb3IgdmVyaWZ5aW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwb3RlbnRpYWwgUkNVLXJlbGF0ZWQgcHJvYmxlbXMuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjozMS4yNzQzMjczNzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTE4OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9hY3F1aXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz00MTkzPXN0YXRpYyBpbnQgYnVpbGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyMzYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDIzNzpzdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjM4LVxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fcG9saWN5ICp4cClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDM9c3RhdGljIHN0cnVjdCB4ZnJtX21nciBuZXRsaW5rX21nciA9IHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA0LVxcdC5ub3RpZnlcXHRcXHQ9IHhmcm1fc2VuZF9zdGF0ZV9ub3RpZnksXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwNTpcXHQuYWNxdWlyZVxcdD0geGZybV9zZW5kX2FjcXVpcmUsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNi1cXHQuY29tcGlsZV9wb2xpY3lcXHQ9IHhmcm1fY29tcGlsZV9wb2xpY3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjMxLjMyMjg1MTA0NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjkxNjMyMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBLZXkgTWFuYWdlbWVudCBQcm9jZXNzKipcblxuT2theSwgc28gYHhmcm1fc2VuZF9hY3F1aXJlYCBpcyByZWdpc3RlcmVkIGFzIGEgbmV0bGluayBtYW5hZ2VyIGFjcXVpc2l0aW9uIGhhbmRsZXIsIHNwZWNpZmljYWxseSBgbmV0bGlua19tZ3IuYWNxdWlyZWAuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGZldGNoaW5nIGtleWluZyBtYXRlcmlhbCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hbWUuIE5vdywgbGV0J3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhY3R1YWxseSAqZ2V0cyogdGhlIGtleXMuIEknbSBnb2luZyB0byBqdW1wIGludG8gYGttX3F1ZXJ5YCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIFRoYXQgZnVuY3Rpb24ncyBwcm9iYWJseSBhdCB0aGUgaGVhcnQgb2YgdGhlIGtleSBtYW5hZ2VtZW50IHF1ZXJ5aW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBhc2tpbmcgZm9yIHRoZSBrZXkgZGF0YSwgYW5kIHdoaWNoIHByb2Nlc3NlcyBvciBmdW5jdGlvbnMgaXQgaXMgY2FsbGluZy4gSSdtIGV4cGVjdGluZyB0aGlzIGBrbV9xdWVyeWAgZnVuY3Rpb24gd2lsbCBjb250YWluIHRoZSBsb2dpYyBmb3Igc2VuZGluZyByZXF1ZXN0cyBhbmQgbWFuYWdpbmcgdGhlIGtleSBhY3F1aXNpdGlvbiBsaWZlY3ljbGUsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlIGFuZCBtYXliZSB0YWxraW5nIHRvIHNvbWUgdXNlciBzcGFjZSBkYWVtb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBleHBsb3JpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTI6MzYuNjE0NDg1NDQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzNTkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbV9xdWVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTIzMD1pbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjMyOmludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMzMtc3RhdGljIGJvb2wga21faXNfYWxpdmUoY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzU2PXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTY2LSNlbmRpZlxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTY3OlxcdFxcdGlmIChrbV9xdWVyeSh4LCB0bXBsLCBwb2wpID09IDApIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2OC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI4MTk9RVhQT1JUX1NZTUJPTChrbV9zdGF0ZV9leHBpcmVkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODIzLSovXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4MjQ6aW50IGttX3F1ZXJ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjgyNS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjgzNy19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4Mzg6RVhQT1JUX1NZTUJPTChrbV9xdWVyeSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4MzktXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQ0PXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMDAtXFx0XFx0dC1cXHUwMDNlY2FsZ29zID0gdWEtXFx1MDAzZWNhbGdvcztcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTAxOlxcdFxcdGVyciA9IGttX3F1ZXJ5KHgsIHQsIHhwKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MjozNi42NjIzMjY3NzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3OTY4OTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBrbV9xdWVyeWAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHNjcnV0aW5pemUgdGhlIGBrbV9xdWVyeWAgaW1wbGVtZW50YXRpb24uXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBJIGtub3cgdGhlIHByaW5jaXBsZXMgb2Yga25vd2xlZGdlIG1hbmFnZW1lbnQsIGFuZCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCBpcyBlZmZpY2llbnRseSBoYW5kbGluZyB0aGUgcmVxdWlyZWQgZGF0YSByZXRyaWV2YWwuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga25vd2xlZGdlIGJhc2UsIHdoZXRoZXIgaXQncyBpbmRleGluZyBjb3JyZWN0bHksIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgaGFuZGxlcyBxdWVyeSBwYXJzaW5nIGFuZCBvcHRpbWl6YXRpb24uIEknbGwgYmUgZm9jdXNlZCBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGVkZ2UgY2FzZSBoYW5kbGluZywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGluIGEgaGlnaC1sb2FkIHNjZW5hcmlvLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbuKAlHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBxdWVyeSBsYW5ndWFnZSwgdGhlIGNhY2hpbmcgc3RyYXRlZ3nigJRhbGwgbmVlZCBhIGNsb3NlIGV4YW1pbmF0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIG9uIGl0cyB1dGlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjQwLjI0MjAxOTAwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MjQ6XFx0aW50IGttX3F1ZXJ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbClcXG4yODI1OlxcdHtcXG4yODI2OlxcdFxcdGludCBlcnIgPSAtRUlOVkFMLCBhY3FyZXQ7XFxuMjgyNzpcXHRcXHRzdHJ1Y3QgeGZybV9tZ3IgKmttO1xcbjI4Mjg6XFx0XFxuMjgyOTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjgzMDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrbSwgXFx1MDAyNnhmcm1fa21fbGlzdCwgbGlzdCkge1xcbjI4MzE6XFx0XFx0XFx0YWNxcmV0ID0ga20tXFx1MDAzZWFjcXVpcmUoeCwgdCwgcG9sKTtcXG4yODMyOlxcdFxcdFxcdGlmICghYWNxcmV0KVxcbjI4MzM6XFx0XFx0XFx0XFx0ZXJyID0gYWNxcmV0O1xcbjI4MzQ6XFx0XFx0fVxcbjI4MzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjgzNjpcXHRcXHRyZXR1cm4gZXJyO1xcbjI4Mzc6XFx0fVxcbjI4Mzg6XFx0RVhQT1JUX1NZTUJPTChrbV9xdWVyeSk7XFxuMjgzOTpcXHRcXG4yODQwOlxcdHN0YXRpYyBpbnQgX19rbV9uZXdfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkciwgX19iZTE2IHNwb3J0KVxcbjI4NDE6XFx0e1xcbjI4NDI6XFx0XFx0aW50IGVyciA9IC1FSU5WQUw7XFxuMjg0MzpcXHRcXHRzdHJ1Y3QgeGZybV9tZ3IgKmttO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1Mjo0MC4yNDIxODI5NDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MDM4NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSQ1UgTG9jayBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBrbV9xdWVyeWAgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgaG9sZGluZyBhbiBgcmN1X3JlYWRfbG9jaygpYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEFsbCB0aG9zZSBga21fKmAgZnVuY3Rpb25zIHdpdGhpbiBgeGZybV9zdGF0ZS5jYCBhcmUgZ3JhYmJpbmcgdGhhdCBsb2NrIGJlY2F1c2UgdGhleSdyZSBpdGVyYXRpbmcgb3ZlciB0aGUgYHhmcm1fa21fbGlzdGAuIFNlZW1zIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoaXMgY29kZSBiYXNlLlxuXG5CdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgYWxzbyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBuZXRsaW5rX21ncmAgY2FsbGJhY2tzLiBBbmQgdGhlc2UgY2FsbGJhY2tzIGFyZSBiZWluZyBpbnZva2VkIGluIGEgY291cGxlIG9mIHdheXMg4oCTIGRpcmVjdGx5IG9yIGZyb20gbmV0bGluayBgZG9pdGAgaGFuZGxlcnMuIEZvciBpbnN0YW5jZSwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgY2FsbHMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBkaXJlY3RseS4gTm93LCB3YWl0IGEgbWludXRlLi4uIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHRoZW4gY2FsbHMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBvbmx5IGJlaW5nIGNhbGxlZCBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgPyBMZXQncyBjaGVjayB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUyOjQ4LjU4MjU3MzI3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MjczMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zZW5kX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMTE9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzI0OnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDU9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MDk6XFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXFx1MDAyNm0sIHhjLVxcdTAwM2VkaXIsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cXHRcXHRcXHRcXHQgICAgICBubGgtXFx1MDAzZW5sbXNnX3BpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1Mjo0OC42MjkwMDUyMDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NjM2OTEwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWhhLCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGlzIG9ubHkgY2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIHdoaWNoIGl0c2VsZiBpcyBhIG5ldGxpbmsgZG9pdCBoYW5kbGVyLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBkb2Vzbid0IGV4cGxpY2l0bHkgaG9sZCBgcmN1X3JlYWRfbG9jaygpYC5cblxuVGhlcmVmb3JlLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBjYWxsaW5nIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgKndpdGhvdXQqIHRoYXQgY3J1Y2lhbCByZWFkIGxvY2sgaW4gcGxhY2UuIEJpbmdvIOKAkyBhIHJhY2UgY29uZGl0aW9uIHdhaXRpbmcgdG8gaGFwcGVuLiBUaGUgcGF0Y2ggY2xlYXJseSBhZGRyZXNzZXMgdGhpcyBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpdHNlbGYuIFRoYXQgbWFrZXMgc2Vuc2UsIGNlbnRyYWxpemluZyB0aGUgbG9ja2luZyByZXNwb25zaWJpbGl0eSB3aGVyZSBpdCdzIG5lZWRlZC5cblxuQnV0IG5vdyBteSBleHBlcnQgY3VyaW9zaXR5IGtpY2tzIGluLiBIYXMgdGhpcyBzYW1lIG1pc3Rha2UgYmVlbiBtYWRlIGVsc2V3aGVyZT8gVGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIFJDVSByZWFkIGxvY2s/IExldCdzIGNoZWNrIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YC4gSW50ZXJlc3RpbmcuIEl0ICpleHBsaWNpdGx5KiBoZWxkIGByY3VfcmVhZF9sb2NrKClgIGJlZm9yZSB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQsIGFuZCBub3cgdGhhdCB0aGUgcGF0Y2ggaGFzIGxhbmRlZCwgaXQgZG9lc24ndC4gVGhhdCdzIGdvb2Q7IHRoZSBwYXRjaCBpcyBjbGVhbmVyIG5vdy4gT25lIGxlc3MgbG9jayB0byBtYW5hZ2UuIFdoYXQgYWJvdXQgYHhmcm1fc2VuZF9yZXBvcnRgPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc3RhY2sgdGhlcmUgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MDEuMjkyNjk4NTY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAzMDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbmRfcmVwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz00NTAxPXN0YXRpYyBpbnQgYnVpbGRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHByb3RvLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTI3OnN0YXRpYyBpbnQgeGZybV9zZW5kX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1MjgtXFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHhmcm1fYWRkcmVzc190ICphZGRyKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYwMz1zdGF0aWMgc3RydWN0IHhmcm1fbWdyIG5ldGxpbmtfbWdyID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNy1cXHQubm90aWZ5X3BvbGljeVxcdD0geGZybV9zZW5kX3BvbGljeV9ub3RpZnksXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwODpcXHQucmVwb3J0XFx0XFx0PSB4ZnJtX3NlbmRfcmVwb3J0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MDktXFx0Lm1pZ3JhdGVcXHQ9IHhmcm1fc2VuZF9taWdyYXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MzowMS4zMzc3MzE1NTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU2ODUxOTUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JrIHNlY3VyaXR5IGV4cGVydDpcblxuKipJbnRlcm5hbCBOZXR3b3JrIFNlY3VyaXR5IFJlcG9ydGluZyBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgc2V0IHVwIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgc2VlIHRoYXQgYHhmcm1fc2VuZF9yZXBvcnRgIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0bGlua19tZ3JgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHVuZGVyIHRoZSBuYW1lIFwicmVwb3J0LlwiIFRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIGFueXRpbWUgYSByZXBvcnQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGFuZCBzZW50IG91dCB1c2luZyBOZXRsaW5rLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkLiBUaGUgY3J1Y2lhbCBkZXRhaWwgSSdtIGxvb2tpbmcgYXQsIGlzIHdoZXJlIHRoaXMgYHhmcm1fc2VuZF9yZXBvcnRgIGlzIHRyaWdnZXJlZCwgYW5kIEkndmUgc3BvdHRlZCB0aGF0IGl0J3MgaW52b2tlZCBieSBga21fcmVwb3J0YC4gU28sIGBrbV9yZXBvcnRgIGlzIGVzc2VudGlhbGx5IHRoZSBrZXJuZWwgbW9kdWxlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiwgYW5kIHRoYXQgY2FsbCBpcyBnb2luZyB0byB0cmlnZ2VyIHNlbmRpbmcgdGhlIGRhdGEgdG8gdXNlci1zcGFjZSB0aHJvdWdoIGB4ZnJtX3NlbmRfcmVwb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSwgaXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHJlcG9ydCBldmVudHMgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgdGhyb3VnaCBhIE5ldGxpbmsgc29ja2V0LiBUaGlzIGlzIGxpa2VseSBob3cgd2UgZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIFhGUk0gcG9saWNpZXMsIFNBcywgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZm9yIGF1ZGl0aW5nLCBtb25pdG9yaW5nLCBhbmQgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU2NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjEwLjkwNjI1Mzc0NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MzY4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21fcmVwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9MjkwOD1FWFBPUlRfU1lNQk9MKGttX21pZ3JhdGUpO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5MTAtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5MTE6aW50IGttX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcilcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkxMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjkyNy19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5Mjg6RVhQT1JUX1NZTUJPTChrbV9yZXBvcnQpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MzoxMC45NTAxOTY1MzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI0OTU4Mzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcG9ydGFuY2UgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBga21fcmVwb3J0YCBoYXMgYW4gYHJjdV9yZWFkX2xvY2soKWAgaGVsZCwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBtaXNzaW5nIGByY3VfcmVhZF9sb2NrKClgIGluIHRoYXQgc3BlY2lmaWMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgLVx1MDAzZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIC1cdTAwM2UgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBwYXRoLiBUaGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGp1c3RpZmllcyBmdXp6aW5nIGVmZm9ydC5cblxuV2VsbCwgdGhpcyBhY3R1YWxseSBmaXhlcyBhbiBSQ1UgdXNlLWFmdGVyLWZyZWUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBSQ1Ugd2FybmluZywgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIE5vdywgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudCBhbmQgY29uc2lkZXIgdGhlIGNvbnRleHQuIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSByZWxldmFudC4gV2FzIHRoaXMgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIHNvbWV0aGluZyByZWxhdGl2ZWx5IG5ldz8gTm8sIGl0IGxvb2tzIGxpa2UgaXQncyBiZWVuIGFyb3VuZC4gQWxyaWdodC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gU2luY2UgaXQncyBhIG5ldGxpbmsgaGFuZGxlciwgaXQncyBpbmhlcmVudGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cywgc28geWVzLiBUaGlzIGZpeCBleHBsaWNpdGx5IHByZXZlbnRzIGFuIFJDVSB3YXJuaW5nIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgZml4ZXMgYSBidWcgd2l0aGluIGEgcmVhY2hhYmxlIG5ldGxpbmsgaGFuZGxlciwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTm93LCB3aGF0IGFib3V0IGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gY2hlY2sgdG8gc2VlIHdoYXQgY29uZmlncyBhcmUgcmVxdWlyZWQuIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBuZWVkZWQsIGxvb2tpbmcgYXQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgc28gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEJlc3QgdG8gY29uZmlybSB0aGF0IGluIGBuZXQveGZybS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjIwLjE5OTc4MzIxM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MzQ2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fVVNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjIwLjI0MzIyMDg3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAzNDk4NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBwcm9jZXNzLCB3aXRoIHRoZSBhc3N1bXB0aW9uIEknbSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5lZWQgZm9yIGBYRlJNX01JR1JBVEVgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gd29uZGVyaW5nIGlmIGBYRlJNX01JR1JBVEVgIGlzIHRydWx5IG5lY2Vzc2FyeSBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBtaWdodCBiZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gY29uZmlybS4gVGhlIHdob2xlIHBvaW50IG9mIHRoZXNlIGZsYWdzIGlzIHRvIG9wdGltaXplIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZCwgc28gc2tlcHRpY2lzbSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblRvIHJlYWxseSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJJ20gZ29pbmcgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGFjdHVhbCBtaWdyYXRpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmRvZXMqLCB1bmRlciB3aGljaCBjaXJjdW1zdGFuY2VzIGl0J3MgY2FsbGVkLCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBoYXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdCwgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIChpZiBhbnkpIGFyZSBhdmFpbGFibGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGBYRlJNX01JR1JBVEVgIHBsYXlzIGEgcm9sZSBpbiB0aGUgZnVuY3Rpb24sIGFuZCBpZiBJIGNhbiBhdm9pZCBpdCBpbiB0aGUgY3VycmVudCBzZXR0aW5nLiBPbmx5IGJ5IGRpc3NlY3RpbmcgdGhlIGFjdHVhbCBjb2RlIGNhbiBJIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgd2hldGhlciB0aGlzIGZsYWcgaXMgdHJ1bHkgY3JpdGljYWwgb3IgaWYgdGhlcmUncyBhIG1vcmUgZWZmaWNpZW50IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MjUuNzQ2NzIxODUzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgxMzM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDU6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0Ni1cXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI2LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyNzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgwOlxcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1MzoyNS43OTI1MzgxNDZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODk3Mzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAncyBDb25kaXRpb25hbCBMb2dpYyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCBhbmQgSSd2ZSBoaXQgYW4gYCNlbHNlYCBibG9jay4gSW5zdGluY3RpdmVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCAqYXJlbid0KiBiZWluZyBtZXQgdG8gdHJpZ2dlciB0aGlzIGBlbHNlYCBwYXRoLiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5IGhlcmU/IFRoaXMgYCNlbHNlYCBpcyBhIGNyaXRpY2FsIGJyYW5jaCBwb2ludCwgcG90ZW50aWFsbHkgaGFuZGxpbmcgc29tZSB1bnVzdWFsIG9yIGVycm9yLXByb25lIHNjZW5hcmlvIHJlbGF0ZWQgdG8gc3RhdGUgbWlncmF0aW9uLCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGF0aC4gSXQncyB0aW1lIHRvIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBndWFyZHMgYW5kIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgdXBzdHJlYW0uIFdoYXQncyAqbm90KiBoYXBwZW5pbmcgdGhhdCBsZWFkcyB1cyBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlIHRob3JvdWdobHkgYmVmb3JlIEkgcHJvY2VlZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYyOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjI5LjUwMTUxNDYwM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM0MDpcXHRcXHR9XFxuMzM0MTpcXHRcXG4zMzQyOlxcdFxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbjMzNDM6XFx0fVxcbjMzNDQ6XFx0XFxuMzM0NTpcXHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4zMzQ2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zMzQ3OlxcdHtcXG4zMzQ4OlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XFxuMzM0OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4zMzUwOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcXG4zMzUxOlxcdFxcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xcbjMzNTI6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xcbjMzNTM6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuMzM1NDpcXHRcXHRpbnQgZXJyO1xcbjMzNTU6XFx0XFxuMzM1NjpcXHRcXHRpZiAoIXVtLVxcdTAwM2VpZC5zcGkpIHtcXG4zMzU3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgU1BJIDB4MFxcXCIpO1xcbjMzNTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzM1OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjI5LjUwMTcwODA3M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzUwMDgwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOlxuXG4qKldoZXJlJ3MgVGhhdCBQcmVwcm9jZXNzb3IgTWFnaWM/KipcblxuV2FpdCBhIG1pbnV0ZSwgSSdtIHN0YXJpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMuLi5vZmYuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgY2VydGFpbiBjb25zdHJ1Y3QgaGVyZSwgc29tZXRoaW5nIEknbSB1c2VkIHRvIHVzaW5nIHRvIG1haW50YWluIGRpZmZlcmVudCBidWlsZHMsIGFuZCBpdCdzIHNpbXBseSAqbm90KiB0aGVyZS4gV2hlcmUncyB0aGUgYCNpZmRlZmA/IFdoZXJlIGFyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcz8gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMsIGJ1dCBpdCdzIG5vdCBoZXJlLi4uRGlkIHNvbWVvbmUgcmVtb3ZlIGl0PyBJcyBpdCBkZWZpbmVkIGVsc2V3aGVyZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB3ZW50LCBvciAqaXMqIGhhcHBlbmluZy4gQmVjYXVzZSwgbGV0J3MgZmFjZSBpdCwgd2l0aG91dCBpdCB0aGluZ3MgYXJlIGdvaW5nIHRvIGdldCBwcm9ibGVtYXRpYywgcXVpY2tseS4gTm93LCBpcyB0aGUgcHJlcHJvY2Vzc29yIGJlaW5nIHVzZWQgZWZmZWN0aXZlbHkgYXQgYWxsLCBvciBoYXMgc29tZW9uZSBjaGFuZ2VkIHRoZSBjb21waWxhdGlvbiBzdHJhdGVneT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MzQuODUxNzkxNTY1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzAwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4zMzAxOlxcdFxcdH1cXG4zMzAyOlxcdFxcbjMzMDM6XFx0XFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4zMzA0OlxcdFxcdHJldHVybiAwO1xcbjMzMDU6XFx0XFxuMzMwNjpcXHRvdXRfY2FuY2VsOlxcbjMzMDc6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4zMzA4OlxcdFxcdHJldHVybiBlcnI7XFxuMzMwOTpcXHR9XFxuMzMxMDpcXHRcXG4zMzExOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4zMzEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1OCBkaXIpXFxuMzMxMzpcXHR7XFxuMzMxNDpcXHRcXHRyZXR1cm4gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSkpICtcXG4zMzE1OlxcdFxcdFxcdChtLVxcdTAwM2VlbmNhcCA/IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9lbmNhcF90bXBsKSkgOiAwKSArXFxuMzMxNjpcXHRcXHRcXHQobS1cXHUwMDNleHVvID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCkpIDogMCkgK1xcbjMzMTc6XFx0XFx0XFx0KG0tXFx1MDAzZW5ld19tYXJrID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspKSA6IDApICtcXG4zMzE4OlxcdFxcdFxcdCgobS1cXHUwMDNlc21hcmsudiB8IG0tXFx1MDAzZXNtYXJrLm0pID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICogMiA6IDApICtcXG4zMzE5OlxcdFxcdFxcdChtLVxcdTAwM2VtYXBwaW5nX21heGFnZSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTM6MzQuODUyMDEwNjM1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDMzMjA1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmFjdHMgd2l0aCBzb21lIHNvcnQgb2Ygc3RhdGUgbWFuYWdlbWVudCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIGlzIHRvIGNoZWNrIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSB0aGF0IGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGlmIGl0cyBiZWhhdmlvciBjaGFuZ2VzIGJhc2VkIG9uIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBrZXJuZWwgdmVyc2lvbnMsIG9yIGVuYWJsZWQgZmVhdHVyZXMuIEknbSB0aGlua2luZyBzcGVjaWZpYyBzY2VuYXJpb3MgbGlrZSBtaWdyYXRpb24gbWlnaHQgYmUgdG9nZ2xlZCBieSBhIGNvbmZpZyBvcHRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIHRob3NlIHRvZ2dsZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBpbXBhY3Qgb2YgdGhlIGZ1bmN0aW9uJ3MgcHJlc2VuY2UgKG9yIGFic2VuY2UpLiBUaGUgcHJlc2VuY2Ugb2YgYCNpZmRlZmAgYWxzbyB0ZWxscyBtZSBJIHNob3VsZCBiZSBsb29raW5nIGZvciBjb3JyZXNwb25kaW5nIGAjZW5kaWZgIGFuZCBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gdHJhY2UgdGhyb3VnaCBkaWZmZXJlbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjQ0Ljg4NTIxODgxOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNjM3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE5ODU9c3RhdGljIGludCB2ZXJpZnlfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk4OC1cXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfTUFJTjpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTg5OiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk5MC1cXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfU1VCOlxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjM4MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1c2VycG9saWN5X3R5cGVfYXR0cnNpemUodm9pZClcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgyLXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzgzOiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4NC1cXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4OS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzkwOiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5MS1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzA0ND1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTE4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMTk6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTIwLXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTM0PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTQxOiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0Mi1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjQ0LjkzNDU5MDgwNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ2NDc0MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZW06XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgWEZSTSBNaWdyYXRpb24qKlxuXG5SaWdodCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSByZXF1aXJlbWVudCBoZXJlLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGBYRlJNX01JR1JBVEVgIHRvIGVuc3VyZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGlzIHNvdW5kIGFuZCBhZGRyZXNzZXMgdGhpcyBwYXJ0aWN1bGFyIHJlcXVpcmVtZW50IHByb3Blcmx5LiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1Mzo0OS45ODEwNjgyODhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDIwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX01JR1JBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjUzOjUwLjAyNjQ5NTcyMloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjI0MjY4NzMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgWEZSTSBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBYRlJNX01JR1JBVEVgIGFuZCBgWEZSTV9VU0VSYCBhcmUgZW5hYmxlZC4gQnV0IGhhbmcgb24sIGBYRlJNX1VTRVJgIGlzIGEgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY291bGQgYmUgYSBtb2R1bGUuIEhvd2V2ZXIsIGZvciB0aG9yb3VnaCBmdXp6aW5nLCBJJ2QgcmF0aGVyIGhhdmUgaXQgYnVpbHQtaW4uIFRoYXQncyB0aGUgc2FmZXN0IG9wdGlvbi5cblxuTm93LCBhbSBJIG1pc3NpbmcgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEFoYSEgVGhlIHBhdGNoIGFsdGVycyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIGludGVybmFsbHkgYWNxdWlyZSB0aGUgYHJjdV9yZWFkX2xvY2soKWAuIFRoYXQncyBnb2luZyB0byBhZmZlY3QgKmFsbCogb2YgaXRzIGNhbGxlcnMuXG5cbkFoLCByaWdodC4gVGhlIHNwZWNpZmljIGJ1ZyBmaXhlZCBieSB0aGlzIHBhdGNoIGlzIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgY2FsbGVkIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIHdoaWNoIHRoZW4gY2FsbGVkIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aG91dCB0aGUgcHJvcGVyIGByY3VfcmVhZF9sb2NrKClgLlxuXG5XYWl0IGEgbWludXRlLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAsIGlzbid0IGl0PyBPa2F5LCB0aW1lIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gR290dGEgYmUgbWV0aWN1bG91cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDowNi4yNjkxODU4MzRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNDU6XFx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMzM0NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzM0NzpcXHR7XFxuMzM0ODpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xcbjMzNDk6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMzM1MDpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgeHVvID0ge307XFxuMzM1MTpcXHRcXHRzdHJ1Y3QgeGZybV9taWdyYXRlIG0gPSB7fTtcXG4zMzUyOlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4YztcXG4zMzUzOlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbjMzNTQ6XFx0XFx0aW50IGVycjtcXG4zMzU1OlxcdFxcbjMzNTY6XFx0XFx0aWYgKCF1bS1cXHUwMDNlaWQuc3BpKSB7XFxuMzM1NzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIFNQSSAweDBcXFwiKTtcXG4zMzU4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNTk6XFx0XFx0fVxcbjMzNjA6XFx0XFxuMzM2MTpcXHRcXHRpZiAodW0tXFx1MDAzZXJlc2VydmVkKSB7XFxuMzM2MjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXNlcnZlZCBmaWVsZCBtdXN0IGJlIHplcm9cXFwiKTtcXG4zMzYzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNjQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDowNi4yNjkzNjk2NzRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MDU0NzQ3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBYRlJNIFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgb2YgcmVjZW50IGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhcyBsb29raW5nIGF0IHRoZSByZWNlbnQgY29tbWl0cywgYW5kIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgY2FuZGlkYXRlIGFzIGEgZm9jdXMgc3ltYm9sLiBJdCdzIGEgbm9uLWlubGluZSBmdW5jdGlvbiBhbmQgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIGl0IG1vcmUgbGlrZWx5IHRvIGJlIGEgY2VudHJhbCBwb2ludCBvZiB0aGUgcmVjZW50IHdvcmsuXG5cbk5vdywgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIEJlY2F1c2UgaXQncyBpbmxpbmUsIGl0J3MgcHJvYmFibHkgc3ByZWFkIHRocm91Z2hvdXQgdGhlIGNvZGUsIHdoaWNoIG1ha2VzIGl0IGxlc3MgdXNlZnVsIGFzIGEgc2luZ2xlIHBvaW50IG9mIGludmVzdGlnYXRpb24uIEl0IHdvbid0IGJlIGEgZ29vZCByZXByZXNlbnRhdGl2ZSBvZiB0aGUgYnJvYWRlciBjaGFuZ2VzLCBzbyBJIHNob3VsZCBzZXQgdGhhdCBhc2lkZS5cblxuV2hhdCBlbHNlPyBBaCwgaGVyZSdzIG9uZSwgYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLiBUaGF0IHdhcyBhbHNvIHRvdWNoZWQgcmVjZW50bHkuIExldCBtZSBjaGVjayB0aGF0IGZ1bmN0aW9uIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDg0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDoyMy42NzQ4NDcxMThaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1MTg6XFx0c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG4yNTE5OlxcdHtcXG4yNTIwOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXA7XFxuMjUyMTpcXHRcXHRpbnQgbGVuID0gTkxNU0dfQUxJR04oc2l6ZW9mKCp1cCkpO1xcbjI1MjI6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuMjUyMzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjI1MjQ6XFx0XFx0aW50IGVycjtcXG4yNTI1OlxcdFxcbjI1MjY6XFx0XFx0c2tiID0gbmxtc2dfbmV3KGxlbiwgR0ZQX0FUT01JQyk7XFxuMjUyNzpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuMjUyODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yNTI5OlxcdFxcbjI1MzA6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgMCwgMCwgWEZSTV9NU0dfR0VUREVGQVVMVCwgc2l6ZW9mKCp1cCksIDApO1xcbjI1MzE6XFx0XFx0aWYgKG5saCA9PSBOVUxMKSB7XFxuMjUzMjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4yNTMzOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjUzNDpcXHRcXHR9XFxuMjUzNTpcXHRcXG4yNTM2OlxcdFxcdHVwID0gbmxtc2dfZGF0YShubGgpO1xcbjI1Mzc6XFx0XFx0dXAtXFx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NDoyMy42NzUwMjU1NzhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE1ODQyMjk1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBvbGljeSBOb3RpZmljYXRpb24gUGF0aHdheSoqXG5cbk9rYXksIHNvIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgeGZybV9zZXRfZGVmYXVsdGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBgeGZybV9zZXRfZGVmYXVsdGAgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhhdCBjYWxsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGggYW5kIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBwb2xpY3kgbm90aWZpY2F0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZC4gSXMgaXQgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIGRlZmF1bHQgcG9saWN5IHNldHRpbmcgcHJvY2Vzcywgb3IgaXMgaXQgYSBzaWRlIGVmZmVjdCB0aGF0IG1pZ2h0IGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIG9yIGV2ZW4gb3B0aW1pemU/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBleGFtaW5pbmcgYHhmcm1fc2V0X2RlZmF1bHRgIHdpbGwgaWxsdW1pbmF0ZSB0aGUgbG9naWMgZHJpdmluZyB0aGUgbm90aWZpY2F0aW9uIGFuZCB3aGF0IHN0YXRlIGNoYW5nZXMgdHJpZ2dlciBpdC4gRnJvbSBoZXJlIEknbGwgc2VlIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBjYW4gbGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU0OjQ1LjI1OTI1Nzk2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTU0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTU0OlxcdHN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4yNTU1OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yNTU2OlxcdHtcXG4yNTU3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1NTg6XFx0XFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cCA9IG5sbXNnX2RhdGEobmxoKTtcXG4yNTU5OlxcdFxcbjI1NjA6XFx0XFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cXHUwMDNlaW4pKVxcbjI1NjE6XFx0XFx0XFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dLCB1cC1cXHUwMDNlaW4pO1xcbjI1NjI6XFx0XFxuMjU2MzpcXHRcXHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVxcdTAwM2Vmd2QpKVxcbjI1NjQ6XFx0XFx0XFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtXFx1MDAzZWZ3ZCk7XFxuMjU2NTpcXHRcXG4yNTY2OlxcdFxcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXFx1MDAzZW91dCkpXFxuMjU2NzpcXHRcXHRcXHRXUklURV9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdLCB1cC1cXHUwMDNlb3V0KTtcXG4yNTY4OlxcdFxcbjI1Njk6XFx0XFx0cnRfZ2VuaWRfYnVtcF9hbGwobmV0KTtcXG4yNTcwOlxcdFxcbjI1NzE6XFx0XFx0eGZybV9ub3RpZnlfdXNlcnBvbGljeShuZXQpO1xcbjI1NzI6XFx0XFx0cmV0dXJuIDA7XFxuMjU3MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU0OjQ1LjI1OTU2OTJaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU4MTAzOTk2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBYRlJNIE5ldGxpbmsgYW5kIE11bHRpY2FzdGluZyoqXG5cbk9rYXksIHNvIGB4ZnJtX3NldF9kZWZhdWx0YCBpcyB0aGUgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfU0VUREVGQVVMVGAuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGZvY2FsIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJ1dCBJIG5lZWQgdG8gcmV2aXNpdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjYWxsIGNvbnRleHQuXG5cbk15IGNvbmNlcm4gaXMgd2hldGhlciBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIG1pZ2h0IGJlIGludm9rZWQgZnJvbSBsb2NhdGlvbnMgdGhhdCAqZG9uJ3QqIGFscmVhZHkgaG9sZCBgcmN1X3JlYWRfbG9jaygpYC4gV2UgcHJldmlvdXNseSBleGFtaW5lZCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEFyZSB0aGVyZSAqb3RoZXIqIGNhbGxlcnMgSSBtaXNzZWQ/IExldCdzIHNlZS4uLiBgeGZybV9zdGF0ZV9uZXRsaW5rYD8gTm8sIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGRpcmVjdGx5IGNhbGwgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC5cblxuV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgd2l0aCBhIHF1aWNrIGBncmVwYCBzZWFyY2ggZm9yIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEknbSBnb2luZyB0byByZWx5IG9uIHRoZSBvdXRwdXQgdG8gc2V0dGxlIHRoaXMgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzODMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTowMS4wNjk5NzE1ODNaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODI4MTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25sbXNnX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MTU5OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyNi0gKi9cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjI3OnN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjI4LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1MTg9c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjU0MzpcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjU0NC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDI6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0My19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjMwPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0Ni1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ3OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NDgtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk4Mj1zdGF0aWMgaW50IHhmcm1fZXhwX3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTk2OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5Ny19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTk5PXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDExLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTI6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUVWRU5UUyk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMy19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDE1PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2FfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDM4OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDM5LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwOTk9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MTUxOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUyLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNTAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BQ1FVSVJFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUyLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNjA9c3RhdGljIGludCB4ZnJtX2V4cF9wb2xpY3lfbm90aWZ5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzItXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDM3MzpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDM3Nj1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDM5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NDA6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQxLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0Nz1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDY3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0Njg6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDY5LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDUyNz1zdGF0aWMgaW50IHhmcm1fc2VuZF9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90byxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1MzktXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU0MDpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9SRVBPUlQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDU3NT1zdGF0aWMgaW50IHhmcm1fc2VuZF9tYXBwaW5nKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB4ZnJtX2FkZHJlc3NfdCAqaXBhZGRyLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU5NC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTk1OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTowMS4yMDgyNjA0NTZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1ODQwNjYyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBCdWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZXNlIGBuZXRsaW5rX21ncmAgY2FsbGJhY2tzLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGVtIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBga21fKmAgZnVuY3Rpb25zIGZyb20gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIFRoZXNlIGZ1bmN0aW9ucywgYXMgd2Uga25vdywgcHJvdGVjdCB0aGVpciBpdGVyYXRpb25zIG92ZXIgYHhmcm1fa21fbGlzdGAgd2l0aCBgcmN1X3JlYWRfbG9jaygpYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGV4Y2VwdGlvbnMuIEkgaGF2ZTpcblxuKiAgIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YDogQ2FsbGVkIGZyb20gYHhmcm1fc2V0X2RlZmF1bHRgLCB3aGljaCBleHBsaWNpdGx5ICp1c2VkKiB0byBob2xkIGByY3VfcmVhZF9sb2NrKClgIChhY2NvcmRpbmcgdG8gbXkgbm90ZXMsIGEgcHJldmlvdXMgcGF0Y2ggcmVtb3ZlZCB0aGlzKS4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1dHVyZSB2ZXJpZmljYXRpb24uXG4qICAgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYDogQ2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuICpUaGlzKiBvbmUsIGltcG9ydGFudGx5LCAqZGlkbid0KiBob2xkIGByY3VfcmVhZF9sb2NrKClgLCB3aGljaCBJJ20gaW5mZXJyaW5nIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0uXG5cblNvLCB0aGUgaXNzdWUgYXBwZWFycyB0byBiZSBwaW5wb2ludGVkIHRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gZHJpbGwgaW50byAqdGhhdCogZnVuY3Rpb24gbm93LiBgeGZybV9zZXRfZGVmYXVsdGAgaXMgYWxzbyB3b3J0aCBhIGxvb2sgYmVjYXVzZSBpdCBjYWxscyBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuXG5cbkFscmlnaHQsIGJhY2sgdG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIENhbiB0aGlzIGZ1bmN0aW9uIGJlIHJlYWNoZWQgZnJvbSB1c2VyIHNwYWNlPyAqWWVzKiwgaXQncyBoYW5kbGluZyBhIG5ldGxpbmsgY2FsbCBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBBaGEsIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBpcyBhIG5ldGxpbmsgbWVzc2FnZSB0eXBlLiBJIHNob3VsZCBub3cgbG9vayBhdCBgeGZybV91c2VyLmNgIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NToxMS43OTIzMzA1NjhaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTU1MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fTVNHX01JR1JBVEVfU1RBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fY29tcGF0LmM9NzQ9c3RhdGljIGNvbnN0IGludCBjb21wYXRfbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtOTctXFx0W1hGUk1fTVNHX01BUFBJTkcgICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJfbWFwcGluZyksXFxubmV0L3hmcm0veGZybV9jb21wYXQuYzo5ODpcXHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSxcXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTk5LX07XFxuLS1cXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jPTEzOT1zdGF0aWMgc3RydWN0IG5sbXNnaGRyICp4ZnJtX25sbXNnX3B1dF9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmMtMTY1LVxcdGNhc2UgWEZSTV9NU0dfTUlHUkFURTpcXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jOjE2NjpcXHRjYXNlIFhGUk1fTVNHX01JR1JBVEVfU1RBVEU6XFxubmV0L3hmcm0veGZybV9jb21wYXQuYy0xNjctXFx0Y2FzZSBYRlJNX01TR19ORVdTQURJTkZPOlxcbi0tXFxubmV0L3hmcm0veGZybV9jb21wYXQuYz00Nzk9c3RhdGljIGludCB4ZnJtX3hsYXRlMzIoc3RydWN0IG5sbXNnaGRyICpkc3QsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqc3JjLFxcbi0tXFxubmV0L3hmcm0veGZybV9jb21wYXQuYy01MDItXFx0Y2FzZSBYRlJNX01TR19NSUdSQVRFOlxcbm5ldC94ZnJtL3hmcm1fY29tcGF0LmM6NTAzOlxcdGNhc2UgWEZSTV9NU0dfTUlHUkFURV9TVEFURTpcXG5uZXQveGZybS94ZnJtX2NvbXBhdC5jLTUwNC1cXHRjYXNlIFhGUk1fTVNHX05FV1NBRElORk86XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2MDU9c3RhdGljIGludCB4ZnJtX21pZ3JhdGVfY2hlY2soY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgaW50IG51bV9taWdyYXRlLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQyLSAqIEZpbGwgbWlncmF0ZSBmaWVsZHMgdGhhdCBhcmUgaW52YXJpYW50IGluIFhGUk1fTVNHX01JR1JBVEU6IGluaGVyaXRlZFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDY0MzogKiBmcm9tIHRoZSBleGlzdGluZyBTQSB1bmNoYW5nZWQuIFhGUk1fTVNHX01JR1JBVEVfU1RBVEUgY2FuIHVwZGF0ZSB0aGVzZS5cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2NDQtICovXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY2xvbmVfYW5kX3NldHVwKHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5ODQtXFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VpZCwgXFx1MDAyNm9yaWctXFx1MDAzZWlkLCBzaXplb2YoeC1cXHUwMDNlaWQpKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk4NTpcXHRpZiAobS1cXHUwMDNlbXNnX3R5cGUgPT0gWEZSTV9NU0dfTUlHUkFURV9TVEFURSkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTg2LVxcdFxcdGlmIChtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzEyMD1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzEzNS1cXHRtYS1cXHUwMDNlbmV3X3NlbCAgPSBcXHUwMDI2dW0tXFx1MDAzZW5ld19zZWw7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzEzNjpcXHRtYS1cXHUwMDNlbXNnX3R5cGUgPSBYRlJNX01TR19NSUdSQVRFX1NUQVRFO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMzctfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzI0Mz1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyNTEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzI1MjpcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgWEZSTV9NU0dfTUlHUkFURV9TVEFURSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjUzLVxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUpLCAwKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1Mjc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTMwOlxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlhGUk1fTVNHX01JR1JBVEVfU1RBVEUgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzEtXFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2NjE9Y29uc3QgaW50IHhmcm1fbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtXFx0W1hGUk1fTVNHX0dFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCksXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NjpcXHRbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VyX21pZ3JhdGVfc3RhdGUpLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODctfTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3OS1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgwOlxcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS19O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc4Mz1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODExLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4MTI6XFx0aWYgKHR5cGUgPT0gWEZSTV9NU0dfTUlHUkFURV9TVEFURSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MTMtXFx0XFx0aW50IGk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODI5LVxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCBhdHRyc1tpXSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiVW5zdXBwb3J0ZWQgYXR0cmlidXRlIGluIFhGUk1fTVNHX01JR1JBVEVfU1RBVEVcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODMxLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NToxMS44MzcyOTA4NDNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NjYxNTU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFhGUk0gU3RhdGUgTWlncmF0aW9uIGFuZCBEZWZhdWx0IFNldHRpbmdzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBpbmRlZWQgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCwgYW5kIGl0J3MgcmVhY2hhYmxlLiBUaGF0IG1ha2VzIGl0IGEgbmV0bGluayBoYW5kbGVyLCB3aGljaCBpcyBleGNlbGxlbnQg4oCTIGl0J3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYW5hbHlzaXMuIFRoaXMgaXMgc29saWQuIE5vdyBJIHNob3VsZCB0dXJuIG15IGF0dGVudGlvbiB0byBgeGZybV9zZXRfZGVmYXVsdGAsIHdoaWNoLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBoYW5kbGVzIGBYRlJNX01TR19TRVRERUZBVUxUYC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYFhGUk1fTVNHX1NFVERFRkFVTFRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU1OjIzLjUwMzQ0ODc2MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMDE1NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9NU0dfU0VUREVGQVVMVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzY2MT1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4My1cXHRbWEZSTV9NU0dfTUFQUElORyAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9tYXBwaW5nKSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjg0OlxcdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2RlZmF1bHQpLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtXFx0W1hGUk1fTVNHX0dFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCksXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NzctXFx0W1hGUk1fTVNHX0dFVFNQRElORk8gIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfc3BkaW5mbyAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc3ODpcXHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzc5LVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NToyMy41NDc2NTY0NTVaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExNzI0MjIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFhGUk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGB4ZnJtX3NldF9kZWZhdWx0YCBpcyBhbHNvIGEgbmV0bGluayBoYW5kbGVyLCBqdXN0IGxpa2UgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEJvdGggb2YgdGhlc2UgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLiBMZXQgbWUgc3VtbWFyaXplIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaXg6XG5cblRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZSBvciBhIHdhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gd2FzIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgd2FzIGNhbGxpbmcgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aGljaCB0aGVuIGNhbGxzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aG91dCBob2xkaW5nIHRoZSBuZWNlc3NhcnkgYHJjdV9yZWFkX2xvY2soKWAuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoYXQgbG9jayBpbnRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXRzZWxmLlxuXG5UaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgYnkgcmVtb3ZpbmcgaXRzIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIHNpbmNlIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgbm93IGhhbmRsZXMgdGhhdC4gSXQgbG9va3MgbGlrZSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgeGZybV9zZXRfZGVmYXVsdGAuIFNpbmNlIGJvdGggYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgYW5kIGB4ZnJtX3NldF9kZWZhdWx0YCBhcmUgbmV0bGluayBoYW5kbGVycyBhbmQgdXNlci1zcGFjZSBhY2Nlc3NpYmxlLCB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgZGVmaW5pdGVseSBiZSBmdXp6aW5nLiBGdW5jdGlvbmFsbHksIGl0IGZpeGVzIGEgYnVnLCBzbyBpdCdzIGEgd29ydGh3aGlsZSBlbmRlYXZvci5cblxuVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFhGUk1fVVNFUmAgYW5kIGBYRlJNX01JR1JBVEVgLiBXYWl0IGEgc2Vjb25k4oCmIGBYRlJNX1VTRVJgIGlzIGEgdHJpc3RhdGUsIGlzbid0IGl0PyBTaG91bGQgSSBhbHNvIGNvbnNpZGVyIGBYRlJNYD8gYFhGUk1gIGlzIGEgYm9vbGVhbiwgYW5kIGBYRlJNX1VTRVJgIGRlcGVuZHMgb24gYElORVRgLiBPa2F5LCBJJ2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L3hmcm0vS2NvbmZpZ2AganVzdCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQgYmVmb3JlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzE5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU1OjMwLjY2NDkwMTM3MloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MDM0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTozMC43MTA4MTAyMzZaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc2NDcxNTE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBoZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGlzLiBUaGUgcHJpbWFyeSBnb2FscyBmb3IgbXkgY29uZmlndXJhdGlvbiBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdtIGdvaW5nIHRvIGluY2x1ZGUgYFhGUk1fVVNFUmAgYW5kIGBYRlJNX01JR1JBVEVgIGluIGBFbmFibGVDb25maWdzYC4gVGhlc2Ugc2VlbSBlc3NlbnRpYWwsIGdpdmVuIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBtaWdyYXRpb24gb2YgWEZSTSBzdGF0ZXMuXG5cbk5vdywgbGV0J3MgdGFsayBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYXMgc3ltYm9scy4gSSdtIGdvaW5nIHRvIGFkZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgYHhmcm1fc2V0X2RlZmF1bHRgIGluIGBGb2N1c1N5bWJvbHNgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBlbnRyeS4gVGhleSdyZSB0aGUgbmV0bGluayBoYW5kbGVycyBpbnZvbHZlZCBpbiBib3RoIG1pZ3JhdGluZyBzdGF0ZXMgYW5kIHNldHRpbmcgZGVmYXVsdHMsIHdoaWNoIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBmaXggZm9yIHRoZSBSQ1UgdXNlLWFmdGVyLWZyZWUvd2FybmluZy5cblxuSSBkaWQgYSBiaXQgb2YgZHVlIGRpbGlnZW5jZSB0byBtYWtlIHN1cmUgSSB3YXNuJ3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBGaXJzdCwgSSBxdWlja2x5IGNoZWNrZWQgaWYgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3YXMgc3RhdGljIGlubGluZS4gWWVwLCBpdCBpcy4gU28gdGhhdCdzIG5vdCBnb2luZyB0byBiZSBhIGdvb2QgY2FuZGlkYXRlIGFzIGEgZm9jdXMgc3ltYm9sLCBzaW5jZSBpdCdzIGlubGluZWQuXG5cblRoZW4sIEkgbG9va2VkIGF0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIEkgc2F3IHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IG5vdCBpbmxpbmUuIFdoaWxlIGl0ICpjb3VsZCogYmUgYSBmb2N1cyBzeW1ib2wsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHRoZSBuZXRsaW5rIGhhbmRsZXIsIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBtb3JlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy5cblxuSSBhbHNvIGRvdWJsZS1jaGVja2VkIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YC4gSXQncyBhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YC4gU2luY2UgYHhmcm1fc2V0X2RlZmF1bHRgIGlzIHRoZSBuZXRsaW5rIGhhbmRsZXIsIEknbGwgc3RpY2sgd2l0aCB0aGF0LlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgYW5kIGB4ZnJtX3NldF9kZWZhdWx0YCBhcmUgdGhlIGJlc3QgZm9jdXMgc3ltYm9scyB0byBlZmZlY3RpdmVseSB0YXJnZXQgdGhlIGJ1ZyBmaXggYW5kIHBvdGVudGlhbCByZWxhdGVkIGlzc3Vlcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMwOCwiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTU6NDAuNDc1NTI4Mjk2WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNjk0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gICAgXCJ4ZnJtX3NldF9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHVzZS1hZnRlci1mcmVlL3dhcm5pbmcgaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBieSBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGludGVybmFsbHkuIFByZXZpb3VzbHksIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZXhwZWN0ZWQgdGhlIGNhbGxlciB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLCBidXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgKGEgbmV0bGluayBoYW5kbGVyIGZvciBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWApIGNhbGxlZCBpdCB2aWEgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suIFRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGByY3VfcmVhZF9sb2NrKClgIGZyb20gYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgIChjYWxsZWQgYnkgYHhmcm1fc2V0X2RlZmF1bHRgKSBzaW5jZSBpdCBpcyBub3cgaGFuZGxlZCBpbnRlcm5hbGx5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGZpeCBhIGJ1ZywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIFJDVSB1c2UtYWZ0ZXItZnJlZS93YXJuaW5nIGluIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgYnkgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBpbnRlcm5hbGx5LiBQcmV2aW91c2x5LCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGV4cGVjdGVkIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgUkNVIHJlYWQgbG9jaywgYnV0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIChhIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgKSBjYWxsZWQgaXQgdmlhIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBleHBsaWNpdCBgcmN1X3JlYWRfbG9jaygpYCBmcm9tIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCAoY2FsbGVkIGJ5IGB4ZnJtX3NldF9kZWZhdWx0YCkgc2luY2UgaXQgaXMgbm93IGhhbmRsZWQgaW50ZXJuYWxseS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBmaXggYSBidWcsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEzOjU1OjQwLjU2MTYwNjU0NFoiLCJTZXEiOjY3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzMDEwNjc1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMzo1NTo0MC41NjIyNjMxNTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYzMDA0MDY5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgdG8gdGFrZSB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5IGluc3RlYWQgb2YgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gaG9sZCBpdC4gVGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nIGFuZCBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gUkNVLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGUuZy4sIFJDVSB3YXJuaW5ncywgZGVhZGxvY2tzKSBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTQxYWVlMjUzYjA1NDM3ZDZlZWNlOTgwY2NlMTgwNTc0YTEzYTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTM6NTA6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4xZjY4MzUxNmYyYjUyIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTYyMiwzMSArMTYyMiwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm1fc3RhdGVfbmV0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIH1cbiBcbiAvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLlxuKyAqIFRha2VzIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgYXJvdW5kIHRoZSBtdWx0aWNhc3QuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbitcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbitcdHN0cnVjdCBzb2NrICpubHNrO1xuIFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xuK1x0aW50IGVycjtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG5sc2sgPSByY3VfZGVyZWZlcmVuY2UobmV0LVx1MDAzZXhmcm0ubmxzayk7XG4gXHRpZiAoIW5sc2spIHtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gLUVQSVBFO1xuIFx0fVxuLVxuIFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuIFx0aWYgKHh0cikge1xuLVx0XHRpbnQgZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbi1cbitcdFx0ZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbiBcdFx0eGZybV9wdXRfdHJhbnNsYXRvcih4dHIpO1xuIFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuLVxuLVx0cmV0dXJuIG5sbXNnX211bHRpY2FzdChubHNrLCBza2IsIHBpZCwgZ3JvdXAsIEdGUF9BVE9NSUMpO1xuK1x0ZXJyID0gbmxtc2dfbXVsdGljYXN0KG5sc2ssIHNrYiwgcGlkLCBncm91cCwgR0ZQX0FUT01JQyk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhmcm1fc3BkaW5mb19tc2dzaXplKHZvaWQpXG5AQCAtMjUzNiw5ICsyNTQwLDcgQEAgc3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdG5sbXNnX2VuZChza2IsIG5saCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSk7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTU6NDAuNTYyMjY0MTA0WiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzAwMzgzMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJDVSBMb2NraW5nIE9wdGltaXphdGlvbiBpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIHJlZ2FyZGluZyBSQ1UgbG9ja2luZyBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpdHNlbGYgbm93IGhhbmRsZXMgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBjYWxsZXIgdG8gbWFuYWdlIGl0LiBJIGNhbiBzZWUgdGhleSd2ZSBhZGRlZCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3MgYm9keS4gQ29uc2VxdWVudGx5LCB0aGUgbG9ja2luZyBjYWxscyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsZXIsIG5hbWVseSBgeGZybV9ub3RpZnlfdXNlcnBvbGljeWAuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZy1yZWxhdGVkIG1vZGlmaWNhdGlvbi4gSXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBub3IgZG9lcyBpdCBhbHRlciB0aGUgY29udGVudCBvZiB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ug4oCTIGp1c3QgaG93IGl0J3MgcHJvdGVjdGVkIGR1cmluZyB0aGUgbXVsdGljYXN0IG9wZXJhdGlvbi4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJvdW5kcyBjaGVja3MsIGVpdGhlci4gVGhlcmVmb3JlLCBJIGRvbid0IGFudGljaXBhdGUgYW55IGlzc3VlcyB0aGF0IHdvdWxkIGJlIGZsYWdnZWQgYnkgS01TQU4uIFNpbmNlIHdlJ3JlIGRlYWxpbmcgZXhjbHVzaXZlbHkgd2l0aCBSQ1UgbG9jayBjaGFuZ2VzLCBLQVNBTiBhbmQgTE9DS0RFUCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHByb2JsZW1zIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHdhcm5pbmdzIHRoYXQgbWF5IHN1cmZhY2UuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIHNuaXBwZXQgdG8gY29uZmlybS4gWWVzLCBpdCdzIGV4YWN0bHkgYXMgZGVzY3JpYmVkOiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uLCByaWdodCBiZWZvcmUgcmVmZXJlbmNpbmcgYG5ldC1cdTAwM2V4ZnJtLm5sc2tgLCBhbmQgdGhlIGByY3VfcmVhZF91bmxvY2soKWAgaXMgYWRkZWQgYWNjb3JkaW5nbHkuIFRoaXMgbG9va3MgY2xlYW4gYW5kIHNhZmUuXG5cbkFscmlnaHQsIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCBuZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guIEknbGwgZmxhZyBpdCBhY2NvcmRpbmdseS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzQsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTM6NTY6MTYuODYyNjUwMzYzWiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHRvIHRha2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0aGUgY2FsbGVyIHRvIGhvbGQgaXQuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZyBhbmQgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIFJDVS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgY2hhbmdlIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBSQ1Ugd2FybmluZ3MsIGRlYWRsb2Nrcykgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB0byB0YWtlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHkgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxlciB0byBob2xkIGl0LiBUaGlzIGlzIHB1cmVseSBhIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBSQ1UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGNoYW5nZSB0aGUgY29udGVudHMgb2YgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgUkNVIHdhcm5pbmdzLCBkZWFkbG9ja3MpIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[1] Phase: Succeeded StartedAt: 2026-08-18 13:56:28 +0000 UTC FinishedAt: 2026-08-18 13:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 13:56:28 +0000 UTC FinishedAt: 2026-08-18 13:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2] Phase: Succeeded StartedAt: 2026-08-18 13:56:28 +0000 UTC FinishedAt: 2026-08-18 17:36:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 13:56:28 +0000 UTC FinishedAt: 2026-08-18 17:36:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 13:56:28 +0000 UTC FinishedAt: 2026-08-18 13:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 13:56:28 +0000 UTC FinishedAt: 2026-08-18 13:56:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflfdn/series-workflowflfdn-convert-artifact-2150912419/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 13:56:38 +0000 UTC FinishedAt: 2026-08-18 14:12:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 13:56:38 +0000 UTC FinishedAt: 2026-08-18 14:12:58 +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:*d4a030a1-d6c9-45be-a4fd-7a13d99a6884,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-workflowflfdn/series-workflowflfdn-convert-artifact-2150912419/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": "6442ff6b-0f81-4448-9162-21aa0087d30b", "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-workflowflfdn/series-workflowflfdn-build-action-535741969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 13:56:38 +0000 UTC FinishedAt: 2026-08-18 14:12:48 +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:*d4a030a1-d6c9-45be-a4fd-7a13d99a6884,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-workflowflfdn/series-workflowflfdn-convert-artifact-2150912419/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": "6442ff6b-0f81-4448-9162-21aa0087d30b", "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-workflowflfdn/series-workflowflfdn-build-action-535741969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 14:12:58 +0000 UTC FinishedAt: 2026-08-18 14:12:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 14:12:58 +0000 UTC FinishedAt: 2026-08-18 14:12:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 14:12:58 +0000 UTC FinishedAt: 2026-08-18 14:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 14:12:58 +0000 UTC FinishedAt: 2026-08-18 14:13:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflfdn/series-workflowflfdn-convert-artifact-92159706/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 14:13:08 +0000 UTC FinishedAt: 2026-08-18 14:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 14:13:08 +0000 UTC FinishedAt: 2026-08-18 14:15:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6442ff6b-0f81-4448-9162-21aa0087d30b,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-workflowflfdn/series-workflowflfdn-build-action-535741969/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-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 14:15:22 +0000 UTC FinishedAt: 2026-08-18 14:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 14:15:22 +0000 UTC FinishedAt: 2026-08-18 14:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 14:15:22 +0000 UTC FinishedAt: 2026-08-18 14:31:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 14:15:22 +0000 UTC FinishedAt: 2026-08-18 14:31:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d4a030a1-d6c9-45be-a4fd-7a13d99a6884,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-workflowflfdn/series-workflowflfdn-convert-artifact-92159706/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": "21a7bf6a-c2df-4ae1-833e-956fc4cda9c4", "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-workflowflfdn/series-workflowflfdn-build-action-2060553150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 14:15:22 +0000 UTC FinishedAt: 2026-08-18 14:31:25 +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:*d4a030a1-d6c9-45be-a4fd-7a13d99a6884,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-workflowflfdn/series-workflowflfdn-convert-artifact-92159706/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": "21a7bf6a-c2df-4ae1-833e-956fc4cda9c4", "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-workflowflfdn/series-workflowflfdn-build-action-2060553150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 14:31:35 +0000 UTC FinishedAt: 2026-08-18 14:31:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 14:31:35 +0000 UTC FinishedAt: 2026-08-18 14:31:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 14:31:35 +0000 UTC FinishedAt: 2026-08-18 14:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 14:31:35 +0000 UTC FinishedAt: 2026-08-18 14:33:36 +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:*21a7bf6a-c2df-4ae1-833e-956fc4cda9c4,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-workflowflfdn/series-workflowflfdn-build-action-2060553150/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-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 17:36:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 17:36:55 +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":["xfrm_do_migrate_state","xfrm_set_default"],"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:*6442ff6b-0f81-4448-9162-21aa0087d30b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*21a7bf6a-c2df-4ae1-833e-956fc4cda9c4,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-workflowflfdn/series-workflowflfdn-build-action-535741969/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-workflowflfdn/series-workflowflfdn-build-action-2060553150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 14:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 14:33:50 +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":["xfrm_do_migrate_state","xfrm_set_default"],"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-workflowflfdn/series-workflowflfdn-convert-artifact-3123892879/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 14:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 14:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 14:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 14:33:56 +0000 UTC FinishedAt: 2026-08-18 17:36:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflfdn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_do_migrate_state","xfrm_set_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"dc1d569a-dd80-4070-8717-641f9dba0434","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 14:33:56 +0000 UTC FinishedAt: 2026-08-18 17:36:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6442ff6b-0f81-4448-9162-21aa0087d30b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*21a7bf6a-c2df-4ae1-833e-956fc4cda9c4,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-workflowflfdn/series-workflowflfdn-build-action-535741969/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-workflowflfdn/series-workflowflfdn-build-action-2060553150/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-workflowflfdn/series-workflowflfdn-convert-artifact-3123892879/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}