Name: series-workflowd5tc7 Phase: Succeeded StartedAt: 2026-08-13 22:16:37 +0000 UTC FinishedAt: 2026-08-14 02:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[0] Phase: Succeeded StartedAt: 2026-08-13 22:16:37 +0000 UTC FinishedAt: 2026-08-13 22:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 22:16:37 +0000 UTC FinishedAt: 2026-08-13 22:35:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "8aec947c-494d-4f3d-8592-97658f086812" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_generic_rcv", "__xsk_map_redirect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssCiAgICAmIzM0O19feHNrX21hcF9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3hza19yY3ZgIGluIGBuZXQveGRwL3hzay5jYCB0byBwcmUtYWxsb2NhdGUgYWxsIHJlcXVpcmVkIFhEUCBidWZmZXJzIGJlZm9yZSBjb3B5aW5nIGRhdGEgaW50byB0aGVtLiBUaGlzIHByZXZlbnRzIHBhcnRpYWwgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2ggYSBtdWx0aS1idWZmZXIgcGFja2V0LiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgc2FmZXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVmZmVyJiMzOTtzIGxpc3Qgbm9kZSBpcyBlbXB0eSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSB0ZW1wb3JhcnkgbGlzdC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsaXN0IGludGVncml0eSBpc3N1ZXMgKHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGxpc3QgZGVidWdnaW5nKSwgYW5kIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCByZWNlaXZlIHBhdGggdG8gcHJlLWFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgYnVmZmVycyBmb3IgbXVsdGktYnVmZmVyIHBhY2tldHMsIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZjYjIwOTAyNDJkZmE3MDFlNTU3YzgyN2NhZDFkMzI4ODRmODRjYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMjozMzozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggNzg1NWVlMDljNGI2NC4uMzM0NzViMTgwZWE2ZiAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC0yOTgsOSAmIzQzOzI5OCwxMSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdHUzMiBmcmFtZV9zaXplID0gX194c2tfcG9vbF9nZXRfcnhfZnJhbWVfc2l6ZSh4cy1cdTAwM2Vwb29sKTtcbiBcdHZvaWQgKmNvcHlfZnJvbSA9IHhza19jb3B5X3hkcF9zdGFydCh4ZHApLCAqY29weV90bztcbiBcdHUzMiBmcm9tX2xlbiwgbWV0YV9sZW4sIHJlbSwgbnVtX2Rlc2M7XG4tXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiO1xuJiM0MztcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7XG4gXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhza194ZHA7XG4mIzQzO1x0TElTVF9IRUFEKHhza19idWZmcyk7XG4gXHRza2JfZnJhZ190ICpmcmFnO1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0ZnJvbV9sZW4gPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSBjb3B5X2Zyb207XG4gXHRtZXRhX2xlbiA9IHhkcC1cdTAwM2VkYXRhIC0gY29weV9mcm9tO1xuQEAgLTM0MywyMyAmIzQzOzM0NSw0NSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdFx0ZnJhZyA9ICBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1swXTtcbiBcdH1cbiBcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVzYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdGlmICgheHNrX3hkcClcbiYjNDM7XHRcdFx0Z290byBlcnJfYWxsb2M7XG4mIzQzO1xuJiM0MztcdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX2FsbG9jO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUsIFx1MDAyNnhza19idWZmcyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGRvIHtcbiBcdFx0dTMyIHRvX2xlbiA9IGZyYW1lX3NpemUgJiM0MzsgbWV0YV9sZW47XG4gXHRcdHUzMiBjb3BpZWQ7XG4gXG4tXHRcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdHhza2IgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnhza19idWZmcywgc3RydWN0IHhkcF9idWZmX3hzayxcbiYjNDM7XHRcdFx0XHRcdGxpc3Rfbm9kZSk7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKTtcbiYjNDM7XHRcdHhza194ZHAgPSBcdTAwMjZ4c2tiLVx1MDAzZXhkcDtcbiBcdFx0Y29weV90byA9IHhza194ZHAtXHUwMDNlZGF0YSAtIG1ldGFfbGVuO1xuIFxuIFx0XHRjb3BpZWQgPSB4c2tfY29weV94ZHAoY29weV90bywgXHUwMDI2Y29weV9mcm9tLCB0b19sZW4sIFx1MDAyNmZyb21fbGVuLCBcdTAwMjZmcmFnLCByZW0pO1xuIFx0XHRyZW0gLT0gY29waWVkO1xuIFxuLVx0XHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XG4gXHRcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcbiBcdFx0XHRcdCAgcmVtID8gWERQX1BLVF9DT05URCA6IDApO1xuIFx0XHRtZXRhX2xlbiA9IDA7XG4gXHR9IHdoaWxlIChyZW0pO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfYWxsb2M6XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhza2IsIHRtcCwgXHUwMDI2eHNrX2J1ZmZzLCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpO1xuJiM0MztcdFx0eHNrX2J1ZmZfZnJlZShcdTAwMjZ4c2tiLVx1MDAzZXhkcCk7XG4mIzQzO1x0fVxuJiM0MztcdHhzLVx1MDAzZXJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4c2tfdHhfd3JpdGVhYmxlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssCiAgICAmIzM0O19feHNrX21hcF9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHJlY2VpdmUgcGF0aCB0byBwcmUtYWxsb2NhdGUgYWxsIG5lY2Vzc2FyeSBidWZmZXJzIGZvciBtdWx0aS1idWZmZXIgcGFja2V0cywgcHJldmVudGluZyBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyeSBvbiBPT00uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmNiMjA5MDI0MmRmYTcwMWU1NTdjODI3Y2FkMWQzMjg4NGY4NGNiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDIyOjMzOjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmMKaW5kZXggNzg1NWVlMDljNGI2NC4uMzM0NzViMTgwZWE2ZiAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jCkBAIC0yOTgsOSAmIzQzOzI5OCwxMSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbikKIAl1MzIgZnJhbWVfc2l6ZSA9IF9feHNrX3Bvb2xfZ2V0X3J4X2ZyYW1lX3NpemUoeHMtJmd0O3Bvb2wpOwogCXZvaWQgKmNvcHlfZnJvbSA9IHhza19jb3B5X3hkcF9zdGFydCh4ZHApLCAqY29weV90bzsKIAl1MzIgZnJvbV9sZW4sIG1ldGFfbGVuLCByZW0sIG51bV9kZXNjOwotCXN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2I7CiYjNDM7CXN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7CiAJc3RydWN0IHhkcF9idWZmICp4c2tfeGRwOwomIzQzOwlMSVNUX0hFQUQoeHNrX2J1ZmZzKTsKIAlza2JfZnJhZ190ICpmcmFnOwomIzQzOwl1MzIgaTsKIAogCWZyb21fbGVuID0geGRwLSZndDtkYXRhX2VuZCAtIGNvcHlfZnJvbTsKIAltZXRhX2xlbiA9IHhkcC0mZ3Q7ZGF0YSAtIGNvcHlfZnJvbTsKQEAgLTM0MywyMyAmIzQzOzM0NSw0NSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbikKIAkJZnJhZyA9ICAmYW1wO3NpbmZvLSZndDtmcmFnc1swXTsKIAl9CiAKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJeHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLSZndDtwb29sKTsKJiM0MzsJCWlmICgheHNrX3hkcCkKJiM0MzsJCQlnb3RvIGVycl9hbGxvYzsKJiM0MzsKJiM0MzsJCXhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTsKJiM0MzsJCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSkpKQomIzQzOwkJCWdvdG8gZXJyX2FsbG9jOwomIzQzOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSwgJmFtcDt4c2tfYnVmZnMpOwomIzQzOwl9CiYjNDM7CiAJZG8gewogCQl1MzIgdG9fbGVuID0gZnJhbWVfc2l6ZSAmIzQzOyBtZXRhX2xlbjsKIAkJdTMyIGNvcGllZDsKIAotCQl4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtJmd0O3Bvb2wpOwomIzQzOwkJeHNrYiA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDt4c2tfYnVmZnMsIHN0cnVjdCB4ZHBfYnVmZl94c2ssCiYjNDM7CQkJCQlsaXN0X25vZGUpOwomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSk7CiYjNDM7CQl4c2tfeGRwID0gJmFtcDt4c2tiLSZndDt4ZHA7CiAJCWNvcHlfdG8gPSB4c2tfeGRwLSZndDtkYXRhIC0gbWV0YV9sZW47CiAKIAkJY29waWVkID0geHNrX2NvcHlfeGRwKGNvcHlfdG8sICZhbXA7Y29weV9mcm9tLCB0b19sZW4sICZhbXA7ZnJvbV9sZW4sICZhbXA7ZnJhZywgcmVtKTsKIAkJcmVtIC09IGNvcGllZDsKIAotCQl4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7CiAJCV9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbiwKIAkJCQkgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTsKIAkJbWV0YV9sZW4gPSAwOwogCX0gd2hpbGUgKHJlbSk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfYWxsb2M6CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4c2tiLCB0bXAsICZhbXA7eHNrX2J1ZmZzLCBsaXN0X25vZGUpIHsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUpOwomIzQzOwkJeHNrX2J1ZmZfZnJlZSgmYW1wO3hza2ItJmd0O3hkcCk7CiYjNDM7CX0KJiM0MzsJeHMtJmd0O3J4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWERQIFNvY2tldCBCdWZmZXIgQWxsb2NhdGlvbiBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3hza19yY3ZgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyBpbiBob3cgYHhza19idWZmX2FsbG9jYCBpcyBiZWluZyBoYW5kbGVkLiBJbnN0ZWFkIG9mIHBvdGVudGlhbGx5IGhhdmluZyB0byBkZWFsIHdpdGggcGFydGlhbCBhbGxvY2F0aW9ucyDigJMgd2hlcmUgc29tZSBidWZmZXJzIHN1Y2NlZWQgYnV0IG90aGVycyBmYWlsIOKAkyB0aGlzIHBhdGNoIGltcGxlbWVudHMgYSBwcmUtYWxsb2NhdGlvbiBzdHJhdGVneS4gSSYjMzk7bSBzZWVpbmcgdGhhdCBpdCYjMzk7cyBsb29waW5nIHRocm91Z2ggYW5kIGdyYWJiaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcnMgdXBmcm9udCwgYWRkaW5nIHRoZW0gdG8gdGhpcyBgeHNrX2J1ZmZzYCBsaXN0LiBUaGF0JiMzOTtzIGEgY2xldmVyIHdheSB0byBlbnN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQgKmJlZm9yZSogd2UgZXZlbiBzdGFydCBwcm9jZXNzaW5nLgoKQW5kIHRoZSBzYWZldHkgbmV0IGlzIGNsZWFyOiBpZiAqYW55KiBvZiB0aG9zZSBidWZmZXIgYWxsb2NhdGlvbnMgZmFpbCBkdXJpbmcgdGhhdCBwcmUtYWxsb2NhdGlvbiBzdGVwLCB0aGUgY29kZSBpbW1lZGlhdGVseSBmcmVlcyBhbGwgdGhlIGJ1ZmZlcnMgaXQgKmRpZCogbWFuYWdlIHRvIGdldCBhbmQgcmV0dXJucyBgLUVOT01FTWAuIE5vIHBhcnRpYWwsIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCwgZGF0YSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIFRoaXMgcHJldmVudHMgdGhlIG1lc3N5IHNpdHVhdGlvbiBvZiBoYXZpbmcgYSBwYWNrZXQgcGFydGlhbGx5IGFsbG9jYXRlZCwgcHJvY2Vzc2VkLCBhbmQgdGhlbiB0cnVuY2F0ZWQgb3IgZHJvcHBlZC4gR29vZCB0aGlua2luZywgSSBoYXZlIHNlZW4gaXQgYSB0aG91c2FuZCB0aW1lcywgYW5kIGlzIHdvcnRoIHRoZSBvdmVyaGVhZCEKCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gYF9feHNrX3JjdmAgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIHJpZ2h0PyBTbywgbGV0JiMzOTtzIGZpbmQgdGhlIGVudHJ5IHBvaW50cyB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZS4gSXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBidXQgbW9yZSBsaWtlbHkgaXQgaXMgYW4gZWRnZSBjYXNlIHRoYXQgbmVlZHMgdG8gYmUgcHJvcGVybHkgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hza19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTY1PWludCB4c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrLmMtMTkwLVxubmV0L3hkcC94c2suYzoxOTE6c3RhdGljIGludCBfX3hza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgdTMyIGxlbixcbm5ldC94ZHAveHNrLmMtMTkyLVx0XHRcdHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIwNy1cbm5ldC94ZHAveHNrLmM6MjA4OnN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXG5uZXQveGRwL3hzay5jLTIwOS1cdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXG4tLVxubmV0L3hkcC94c2suYz0yMTk9c3RhdGljIGludCB4c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMjI5LVx0aWYgKGxpa2VseSghZnJhZ3MpKSB7XG5uZXQveGRwL3hzay5jOjIzMDpcdFx0ZXJyID0gX194c2tfcmN2X3pjKHhzLCB4c2tiLCBsZW4sIGNvbnRkKTtcbm5ldC94ZHAveHNrLmMtMjMxLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmMtMjQzLVxubmV0L3hkcC94c2suYzoyNDQ6XHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgbGVuLCBjb250ZCk7XG5uZXQveGRwL3hzay5jLTI0NS1cdHhza2JfbGlzdCA9IFx1MDAyNnhza2ItXHUwMDNlcG9vbC1cdTAwM2V4c2tiX2xpc3Q7XG4tLVxubmV0L3hkcC94c2suYy0yNDktXHRcdGxlbiA9IHBvcy1cdTAwM2V4ZHAuZGF0YV9lbmQgLSBwb3MtXHUwMDNleGRwLmRhdGE7XG5uZXQveGRwL3hzay5jOjI1MDpcdFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHBvcywgbGVuLCBjb250ZCk7XG5uZXQveGRwL3hzay5jLTI1MS1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwb3MtXHUwMDNlbGlzdF9ub2RlKTtcbi0tXG5uZXQveGRwL3hzay5jPTI2OD1zdGF0aWMgdTMyIHhza19jb3B5X3hkcCh2b2lkICp0bywgdm9pZCAqKmZyb20sIHUzMiB0b19sZW4sXG4tLVxubmV0L3hkcC94c2suYy0yOTUtXG5uZXQveGRwL3hzay5jOjI5NjpzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjk3LXtcbi0tXG5uZXQveGRwL3hzay5jLTMyMC1cdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xubmV0L3hkcC94c2suYzozMjE6XHRcdGVyciA9IF9feHNrX3Jjdl96Yyh4cywgeHNrYiwgbGVuLCAwKTtcbm5ldC94ZHAveHNrLmMtMzIyLVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3hkcC94c2suYy0zNzItXG5uZXQveGRwL3hzay5jOjM3MzpcdFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGNvcGllZCAtIG1ldGFfbGVuLFxubmV0L3hkcC94c2suYy0zNzQtXHRcdFx0XHQgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTtcbi0tXG5uZXQveGRwL3hzay5jPTQ2MT1pbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbm5ldC94ZHAveHNrLmMtNDY4LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eHMtXHUwMDNlcG9vbC1cdTAwM2VyeF9sb2NrKTtcbm5ldC94ZHAveHNrLmM6NDY5Olx0XHRlcnIgPSBfX3hza19yY3YoeHMsIHhkcCwgbGVuKTtcbm5ldC94ZHAveHNrLmMtNDcwLVx0XHR4c2tfZmx1c2goeHMpO1xuLS1cbm5ldC94ZHAveHNrLmM9NDc3PXN0YXRpYyBpbnQgeHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5uZXQveGRwL3hzay5jLTQ5MC1cbm5ldC94ZHAveHNrLmM6NDkxOlx0ZXJyID0gX194c2tfcmN2KHhzLCB4ZHAsIGxlbik7XG5uZXQveGRwL3hzay5jLTQ5Mi1cdGlmICghZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBSZWNlaXZlIFBhdGggaW4gWERQIFNvY2tldHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGRhdGEgYWN0dWFsbHkgZ2V0cyByZWNlaXZlZCB3aXRoIFhEUCBzb2NrZXRzLiBJIHNlZSBgX194c2tfcmN2YCBpcyB0aGUgY29yZSByZWNlaXZlIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQmIzM5O3MgcHJvYmFibHkgdGhlIHdvcmtob3JzZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNhbGxzIG9yaWdpbmF0ZS4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCB3aGljaCBhcmUgYHhza19nZW5lcmljX3JjdmAgYW5kIGB4c2tfcmN2YC4gV2l0aCB0aG9zZSB0d28sIEkgY2FuIHJlY29uc3RydWN0IHRoZSB3aG9sZSByZWNlaXZlIHBhdGggYW5kIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBkYXRhIGZsb3cuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcmVjZWl2ZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19nZW5lcmljX3Jjdnx4c2tfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xNjU9aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxubmV0L3hkcC94c2suYy0xOTAtXG5uZXQveGRwL3hzay5jOjE5MTpzdGF0aWMgaW50IF9feHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCB1MzIgbGVuLFxubmV0L3hkcC94c2suYy0xOTItXHRcdFx0dTMyIGZsYWdzKVxuLS1cbm5ldC94ZHAveHNrLmMtMjA3LVxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcbm5ldC94ZHAveHNrLmMtMjA5LVx0XHRcdCAgICAgIHUzMiBsZW4sIHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIxOC1cbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjIwLXtcbi0tXG5uZXQveGRwL3hzay5jLTIyOS1cdGlmIChsaWtlbHkoIWZyYWdzKSkge1xubmV0L3hkcC94c2suYzoyMzA6XHRcdGVyciA9IF9feHNrX3Jjdl96Yyh4cywgeHNrYiwgbGVuLCBjb250ZCk7XG5uZXQveGRwL3hzay5jLTIzMS1cdFx0aWYgKGVycilcbi0tXG5uZXQveGRwL3hzay5jLTI0My1cbm5ldC94ZHAveHNrLmM6MjQ0Olx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGxlbiwgY29udGQpO1xubmV0L3hkcC94c2suYy0yNDUtXHR4c2tiX2xpc3QgPSBcdTAwMjZ4c2tiLVx1MDAzZXBvb2wtXHUwMDNleHNrYl9saXN0O1xuLS1cbm5ldC94ZHAveHNrLmMtMjQ5LVx0XHRsZW4gPSBwb3MtXHUwMDNleGRwLmRhdGFfZW5kIC0gcG9zLVx1MDAzZXhkcC5kYXRhO1xubmV0L3hkcC94c2suYzoyNTA6XHRcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCBwb3MsIGxlbiwgY29udGQpO1xubmV0L3hkcC94c2suYy0yNTEtXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cG9zLVx1MDAzZWxpc3Rfbm9kZSk7XG4tLVxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxuLS1cbm5ldC94ZHAveHNrLmMtMjk1LVxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTI5Ny17XG4tLVxubmV0L3hkcC94c2suYy0zMjAtXHRcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcbm5ldC94ZHAveHNrLmM6MzIxOlx0XHRlcnIgPSBfX3hza19yY3ZfemMoeHMsIHhza2IsIGxlbiwgMCk7XG5uZXQveGRwL3hzay5jLTMyMi1cdFx0aWYgKGVycikge1xuLS1cbm5ldC94ZHAveHNrLmMtMzcyLVxubmV0L3hkcC94c2suYzozNzM6XHRcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcbm5ldC94ZHAveHNrLmMtMzc0LVx0XHRcdFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XG4tLVxubmV0L3hkcC94c2suYz00MTQ9c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtNDM4LVxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy00NDAte1xuLS1cbm5ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtNDYwLVxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDYyLXtcbi0tXG5uZXQveGRwL3hzay5jLTQ2NS1cbm5ldC94ZHAveHNrLmM6NDY2Olx0ZXJyID0geHNrX3Jjdl9jaGVjayh4cywgeGRwLCBsZW4pO1xubmV0L3hkcC94c2suYy00NjctXHRpZiAoIWVycikge1xubmV0L3hkcC94c2suYy00NjgtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4cy1cdTAwM2Vwb29sLVx1MDAzZXJ4X2xvY2spO1xubmV0L3hkcC94c2suYzo0Njk6XHRcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xubmV0L3hkcC94c2suYy00NzAtXHRcdHhza19mbHVzaCh4cyk7XG4tLVxubmV0L3hkcC94c2suYy00NzYtXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ3OC17XG4tLVxubmV0L3hkcC94c2suYy00ODEtXG5uZXQveGRwL3hzay5jOjQ4MjpcdGVyciA9IHhza19yY3ZfY2hlY2soeHMsIHhkcCwgbGVuKTtcbm5ldC94ZHAveHNrLmMtNDgzLVx0aWYgKGVycilcbi0tXG5uZXQveGRwL3hzay5jLTQ4Ny1cdFx0bGVuID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGE7XG5uZXQveGRwL3hzay5jOjQ4ODpcdFx0cmV0dXJuIHhza19yY3ZfemMoeHMsIHhkcCwgbGVuKTtcbm5ldC94ZHAveHNrLmMtNDg5LVx0fVxubmV0L3hkcC94c2suYy00OTAtXG5uZXQveGRwL3hzay5jOjQ5MTpcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xubmV0L3hkcC94c2suYy00OTItXHRpZiAoIWVycilcbi0tXG5uZXQveGRwL3hzay5jPTQ5Nz1pbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbm5ldC94ZHAveHNrLmMtNTAwLVxubmV0L3hkcC94c2suYzo1MDE6XHRlcnIgPSB4c2tfcmN2KHhzLCB4ZHApO1xubmV0L3hkcC94c2suYy01MDItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhTSyBEYXRhIEZsb3cqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgeHNrX2dlbmVyaWNfcmN2YCBpcyBnZXR0aW5nIGl0cyBob29rcyBpbnRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIG1lYW5pbmcgaXQmIzM5O3MgZWl0aGVyIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIGJlaW5nIHV0aWxpemVkIGVsc2V3aGVyZS4gSW50ZXJlc3RpbmcuIEFuZCBgeHNrX3JjdmAgaXMgZGVmaW5pdGVseSBhIGtleSBwYXJ0IG9mIHRoZSBwdXp6bGUsIGJlY2F1c2UgYF9feHNrX21hcF9yZWRpcmVjdGAgY2FsbHMgaXQuIEdpdmVuIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHVzYWdlIG9mIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHRyYWNlIHRoZSBmbG93IG9mIGRhdGEgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgWFNLIHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCBieSB3aGF0IGZ1bmN0aW9uLCBhbmQgd2hlbi4gR290dGEgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2UgcmVkaXJlY3RzIGFyZSBoYXBwZW5pbmcgYW5kIGhvdyBgeHNrX2dlbmVyaWNfcmN2YCBmaXRzIGludG8gdGhlIG1peC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgX194c2tfbWFwX3JlZGlyZWN0YCBhbmQgYHhza19nZW5lcmljX3JjdmAgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX2dlbmVyaWNfcmN2fF9feHNrX21hcF9yZWRpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZHBfc29jay5oPTExNz1zdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX29wcyB7XG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xMjUtXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjEyNjppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTI3OmludCBfX3hza19tYXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApO1xuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xMjgtdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdCk7XG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2suaD0xNjY9c3RhdGljIGlubGluZSB2b2lkIHhza190eF9tZXRhZGF0YV9jb21wbGV0ZShzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTE3OS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTgwOnN0YXRpYyBpbmxpbmUgaW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTgxLXtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTE4NC1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTg1OnN0YXRpYyBpbmxpbmUgaW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTg2LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NDk4PXN0YXRpYyBpbmxpbmUgaW50IF9feGRwX2RvX3JlZGlyZWN0X3hzayhzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MTAtXG5uZXQvY29yZS9maWx0ZXIuYzo0NTExOlx0ZXJyID0gX194c2tfbWFwX3JlZGlyZWN0KGZ3ZCwgeGRwKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MTItXHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjIxPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDY1Ni1cdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcbm5ldC9jb3JlL2ZpbHRlci5jOjQ2NTc6XHRcdGVyciA9IHhza19nZW5lcmljX3Jjdihmd2QsIHhkcCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NjU4LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtNDYwLVxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDYyLXtcbi0tXG5uZXQveGRwL3hzay5jPTQ3Nz1zdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxubmV0L3hkcC94c2suYy00OTYtXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFhEUC9BRl9YRFAgTXVsdGktQnVmZmVyIFJlY2VpdmUgUGF0aCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQUZfWERQIHNvY2tldCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggbXVsdGktYnVmZmVyIFhEUCBwYWNrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHdoYXQgSSYjMzk7bSB1bmRlcnN0YW5kaW5nLCB0aGUga2V5IGVudHJ5IHBvaW50IGlzIGBfX3hza19yY3ZgLCB3aGljaCBpcyByZWFjaGVkIHRocm91Z2ggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLiBUaGVzZSwgaW4gdHVybiwgYXJlIGNhbGxlZCBmcm9tIGB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXBgIGFuZCBgX194ZHBfZG9fcmVkaXJlY3RfeHNrYCByZXNwZWN0aXZlbHkg4oCTIGNsYXNzaWMgWERQIHJlZGlyZWN0IHRvIFhTS01BUCBmdW5jdGlvbmFsaXR5LiBJIGtub3cgdGhpcyBpcyBoZWF2aWx5IGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXphdGlvbiwgc28gYW55IGNoYW5nZSBoZXJlIG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuCgpUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgcHJldmVudGluZyBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyeSBvbiBPT00uIEl0JiMzOTtzIHdvcmtpbmcgd2l0aGluIHRoZSBsb29wIGBmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2Rlc2M7IGkmIzQzOyYjNDM7KWAgdG8gaGFuZGxlIHRob3NlIG11bHRpLWJ1ZmZlciBwYWNrZXRzLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgc3RhdGljIGZ1bmN0aW9uIGBfX3hza19yY3ZgLiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYXJlIHRoZSBkaXJlY3QgY2FsbGVycy4gV2hpbGUgYHhza19yY3ZgIGlzIHN0YXRpYywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3hza19tYXBfcmVkaXJlY3RgLiBTbywgdGhvc2UgdHdvLCBhbG9uZyB3aXRoIGB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXBgIGFuZCBgX194ZHBfZG9fcmVkaXJlY3RfeHNrYCAob3IgcGVyaGFwcyBgeGRwX2RvX3JlZGlyZWN0YCBhbmQgYHhkcF9kb19nZW5lcmljX3JlZGlyZWN0YCBzaW5jZSBpdCYjMzk7cyBpbmxpbmUpIGFyZSBteSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgYW55IGFkZGl0aW9uYWwgY2FsbGVycyBvZiBgX194ZHBfZG9fcmVkaXJlY3RfeHNrYCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hkcF9kb19yZWRpcmVjdF94c2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz00NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9tYXN0ZXJfcmVkaXJlY3QpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDQ5Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ0OTg6c3RhdGljIGlubGluZSBpbnQgX194ZHBfZG9fcmVkaXJlY3RfeHNrKHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmksXG5uZXQvY29yZS9maWx0ZXIuYy00NDk5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ1OTM9aW50IHhkcF9kb19yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NTk5LVx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXG5uZXQvY29yZS9maWx0ZXIuYzo0NjAwOlx0XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDYwMS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjA3PWludCB4ZHBfZG9fcmVkaXJlY3RfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDYxNC1cdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxubmV0L2NvcmUvZmlsdGVyLmM6NDYxNTpcdFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWERQIGFuZCBBRl9YRFAgRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gWERQIHJlZGlyZWN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBgeGRwX2RvX3JlZGlyZWN0YCwgYHhkcF9kb19yZWRpcmVjdF9mcmFtZWAsIGFuZCBgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwYCBhcmUgdGhlIGJyb2FkIFhEUCBmdW5jdGlvbnMgdG8ga2VlcCBhbiBleWUgb24uIEhvd2V2ZXIsIHRoZXNlIGFyZSBnZW5lcmljIFhEUCBmdW5jdGlvbmFsaXRpZXMuIFdoYXQgSSYjMzk7bSByZWFsbHkgYWZ0ZXIgYXJlIHRoZSBBRl9YRFAtc3BlY2lmaWMgZGV0YWlscy4gRnJvbSBteSBrbm93bGVkZ2UsIEkmIzM5O2Qgc2F5IEkgbmVlZCB0byBmb2N1cyBvbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYmVjYXVzZSB0aGV5IHNlZW0gbW9yZSByZWxldmFudCB0byB0aGUgQUZfWERQIGltcGxlbWVudGF0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgbW9yZSBYU0sgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgdG8gY29uc2lkZXIuIFNpbmNlIEkga25vdyB0aGUgcGF0Y2ggaXMgaW4gYG5ldC94ZHAveHNrLmNgLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCBBRl9YRFAgaXMsIGFzIGV4cGVjdGVkLCBnb3Zlcm5lZCBieSBgQ09ORklHX1hEUF9TT0NLRVRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhEUF9TT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXG5uZXQveGRwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQveGRwL0tjb25maWctOS1cbm5ldC94ZHAvS2NvbmZpZzoxMDpjb25maWcgWERQX1NPQ0tFVFNfRElBR1xubmV0L3hkcC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7WERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKlhEUF9TT0NLRVRTIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFhEUF9TT0NLRVRTYC4gQmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZS4gTGV0IG1lIG5hdmlnYXRlIHRvIGBuZXQveGRwL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBYRFAsIGluY2x1ZGluZyB0aGlzIG9uZSwgYXJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBrZXJuZWwgc2V0dGluZ3MgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgWERQX1NPQ0tFVFNgIGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBhbmQgdXNlIHRoaXMgZmVhdHVyZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgZGlyZWN0IGRlcGVuZGVuY2llcywgb2J2aW91c2x5LCBidXQgYWxzbyBmb3IgaW5kaXJlY3Qgb25lcyB0aGF0IGFyZSBzZXQgb3IgdW5zZXQgYmFzZWQgb24gY2VydGFpbiBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhlbHAgd2l0aCB0cm91Ymxlc2hvb3RpbmcgYW5kIGtub3dpbmcgd2hhdCB0byBleHBlY3QgZnJvbSB0aGlzIGZlYXR1cmUgYW5kIG90aGVycyBhcm91bmQgaXQuIExldCYjMzk7cyBzZWUgd2hhdCBLY29uZmlnIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFhEUF9TT0NLRVRTXG4gICAzOlx0XHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gICA1Olx0XHRkZWZhdWx0IG5cbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgWERQIHNvY2tldHMgYWxsb3dzIGEgY2hhbm5lbCBiZXR3ZWVuIFhEUCBwcm9ncmFtcyBhbmRcbiAgIDg6XHRcdCAgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucy5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgWERQX1NPQ0tFVFNfRElBR1xuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7WERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDEyOlx0XHRkZXBlbmRzIG9uIFhEUF9TT0NLRVRTXG4gIDEzOlx0XHRkZWZhdWx0IG5cbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgU3VwcG9ydCBmb3IgUEZfWERQIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cbiAgMTY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipYRFAgU29ja2V0IEVuYWJsZW1lbnQgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIHJlbGF0aW9uc2hpcCBpcyBjbGVhcjogYFhEUF9TT0NLRVRTYCBoaW5nZXMgb24gYEJQRl9TWVNDQUxMYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGBYRFBfU09DS0VUU2AgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKTm93LCBiZWZvcmUgSSBqdW1wIGludG8gdGhhdCwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb2RlYmFzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgbmV0L3hkcC94c2suY2AgZmlsZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSBhbSBpbnRlcmVzdGVkIGluIHRoaXMgYmVjYXVzZSB0aGVzZSB3b3VsZCBiZSBleHRlcm5hbCBwb2ludHMgb2YgY29udGFjdCB3aXRoIHRoZSBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0IHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBgWERQX1NPQ0tFVFNgLiBJIGNhbiB0aGVuIGNvbnNpZGVyIG90aGVyIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gb3RoZXIgc3Vic3lzdGVtcy4gVGhhdCBxdWljayBzY2FuIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGEgYml0IGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLiogeHNrXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTQ5PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeHNrX3R4X2dlbmVyaWNfY2FjaGU7XG5uZXQveGRwL3hzay5jLTUwLVxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTUyLXtcbi0tXG5uZXQveGRwL3hzay5jPTU5PUVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTYwLVxubmV0L3hkcC94c2suYzo2MTp2b2lkIHhza19zZXRfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTYyLXtcbi0tXG5uZXQveGRwL3hzay5jPTc2PUVYUE9SVF9TWU1CT0woeHNrX3NldF90eF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTc3LVxubmV0L3hkcC94c2suYzo3ODp2b2lkIHhza19jbGVhcl9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNzkte1xuLS1cbm5ldC94ZHAveHNrLmM9ODY9RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfcnhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy04Ny1cbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTg5LXtcbi0tXG5uZXQveGRwL3hzay5jPTEwMz1FWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTEwNC1cbm5ldC94ZHAveHNrLmM6MTA1OmJvb2wgeHNrX3VzZXNfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTEwNi17XG4tLVxubmV0L3hkcC94c2suYz0xMDk9RVhQT1JUX1NZTUJPTCh4c2tfdXNlc19uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTExMC1cbm5ldC94ZHAveHNrLmM6MTExOnN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC94ZHAveHNrLmMtMTEyLVx0XHRcdFx0XHQgICAgdTE2IHF1ZXVlX2lkKVxuLS1cbm5ldC94ZHAveHNrLmM9MTIzPXN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbi0tXG5uZXQveGRwL3hzay5jLTEzMC1cbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTMyLXtcbi0tXG5uZXQveGRwL3hzay5jPTE0Nz1zdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC94ZHAveHNrLmMtMTY0LSAqL1xubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTE2Ni1cdFx0XHR1MTYgcXVldWVfaWQpXG4tLVxubmV0L3hkcC94c2suYz0yMDg9c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcbi0tXG5uZXQveGRwL3hzay5jLTIxOC1cbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjIwLXtcbi0tXG5uZXQveGRwL3hzay5jPTI2MD1zdGF0aWMgdm9pZCAqeHNrX2NvcHlfeGRwX3N0YXJ0KHN0cnVjdCB4ZHBfYnVmZiAqZnJvbSlcbi0tXG5uZXQveGRwL3hzay5jLTI2Ny1cbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcbm5ldC94ZHAveHNrLmMtMjY5LVx0XHRcdHUzMiAqZnJvbV9sZW4sIHNrYl9mcmFnX3QgKipmcmFnLCB1MzIgcmVtKVxuLS1cbm5ldC94ZHAveHNrLmM9Mjk2PXN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMzg4LVxubmV0L3hkcC94c2suYzozODk6c3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0zOTAte1xuLS1cbm5ldC94ZHAveHNrLmM9Mzk3PXN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcbi0tXG5uZXQveGRwL3hzay5jLTQwMy1cbm5ldC94ZHAveHNrLmM6NDA0OnN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy00MDUte1xuLS1cbm5ldC94ZHAveHNrLmMtNDEzLVxubmV0L3hkcC94c2suYzo0MTQ6c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy00MTUtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgeGRwX3J4cV9pbmZvICppbmZvKVxuLS1cbm5ldC94ZHAveHNrLmMtNDM4LVxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy00NDAte1xuLS1cbm5ldC94ZHAveHNrLmMtNDUzLVxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTQ1NS17XG4tLVxubmV0L3hkcC94c2suYy00NjAtXG5uZXQveGRwL3hzay5jOjQ2MTppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00NjIte1xuLS1cbm5ldC94ZHAveHNrLmMtNDc2LVxubmV0L3hkcC94c2suYzo0Nzc6c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00Nzgte1xuLS1cbm5ldC94ZHAveHNrLmM9NTE0PXZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXG4tLVxubmV0L3hkcC94c2suYy01MjMtXG5uZXQveGRwL3hzay5jOjUyNDp2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxubmV0L3hkcC94c2suYy01MjUte1xuLS1cbm5ldC94ZHAveHNrLmM9NTQ1PUVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5uZXQveGRwL3hzay5jLTU0Ni1cbm5ldC94ZHAveHNrLmM6NTQ3OnZvaWQgeHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTU0OC17XG4tLVxubmV0L3hkcC94c2suYz01NTY9RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XG5uZXQveGRwL3hzay5jLTU1Ny1cbm5ldC94ZHAveHNrLmM6NTU4OmJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxubmV0L3hkcC94c2suYy01NTkte1xuLS1cbm5ldC94ZHAveHNrLmM9NjA0PUVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XG5uZXQveGRwL3hzay5jLTYwNS1cbm5ldC94ZHAveHNrLmM6NjA2OnN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyaWVzKVxubmV0L3hkcC94c2suYy02MDcte1xuLS1cbm5ldC94ZHAveHNrLmMtNjE3LVxubmV0L3hkcC94c2suYzo2MTg6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbm5ldC94ZHAveHNrLmMtNjE5LVx0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4tLVxubmV0L3hkcC94c2suYz02Njk9eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcbi0tXG5uZXQveGRwL3hzay5jLTc0My1cbm5ldC94ZHAveHNrLmM6NzQ0OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxubmV0L3hkcC94c2suYy03NDUte1xuLS1cbm5ldC94ZHAveHNrLmM9NzkxPUVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbm5ldC94ZHAveHNrLmMtNzkyLVxubmV0L3hkcC94c2suYzo3OTM6c3RhdGljIGludCB4c2tfd2FrZXVwKHN0cnVjdCB4ZHBfc29jayAqeHMsIHU4IGZsYWdzKVxubmV0L3hkcC94c2suYy03OTQte1xuLS1cbm5ldC94ZHAveHNrLmMtNzk5LVxubmV0L3hkcC94c2suYzo4MDA6c3RhdGljIGludCB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTgwMS17XG4tLVxubmV0L3hkcC94c2suYy04MTAtXG5uZXQveGRwL3hzay5jOjgxMTpzdGF0aWMgYm9vbCB4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04MTIte1xuLS1cbm5ldC94ZHAveHNrLmMtODE1LVxubmV0L3hkcC94c2suYzo4MTY6c3RhdGljIHU2NCB4c2tfc2tiX2Rlc3RydWN0b3JfZ2V0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODE3LXtcbi0tXG5uZXQveGRwL3hzay5jLTgyMC1cbm5ldC94ZHAveHNrLmM6ODIxOnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICpfX3hza19hZGRyc19hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcbm5ldC94ZHAveHNrLmMtODIyLXtcbi0tXG5uZXQveGRwL3hzay5jLTgzMy1cbm5ldC94ZHAveHNrLmM6ODM0OnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODM1LXtcbi0tXG5uZXQveGRwL3hzay5jLTg0Ni1cbm5ldC94ZHAveHNrLmM6ODQ3OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxubmV0L3hkcC94c2suYy04NDgte1xuLS1cbm5ldC94ZHAveHNrLmMtODU4LVxubmV0L3hkcC94c2suYzo4NTk6c3RhdGljIHZvaWQgeHNrX2luY19udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NjAte1xuLS1cbm5ldC94ZHAveHNrLmMtODY4LVxubmV0L3hkcC94c2suYzo4Njk6c3RhdGljIHUzMiB4c2tfZ2V0X251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTg3MC17XG4tLVxubmV0L3hkcC94c2suYy04ODAtXG5uZXQveGRwL3hzay5jOjg4MTpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy04ODItXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTEwLVxubmV0L3hkcC94c2suYzo5MTE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTkxMi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYy05MjMtXG5uZXQveGRwL3hzay5jOjkyNDpzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXG5uZXQveGRwL3hzay5jLTkyNS17XG4tLVxubmV0L3hkcC94c2suYz05MzE9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbm5ldC94ZHAveHNrLmM6OTMyOnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05MzMte1xuLS1cbm5ldC94ZHAveHNrLmMtOTQ0LVxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05NDYtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jLTk2MC1cbm5ldC94ZHAveHNrLmM6OTYxOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05NjIte1xuLS1cbm5ldC94ZHAveHNrLmMtOTc4LVxubmV0L3hkcC94c2suYzo5Nzk6c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTk4MC17XG4tLVxubmV0L3hkcC94c2suYy05ODctXG5uZXQveGRwL3hzay5jOjk4ODpzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxubmV0L3hkcC94c2suYy05ODktXHRcdFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxubmV0L3hkcC94c2suYz0xMjE1PXN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQveGRwL3hzay5jLTEzMjktXG5uZXQveGRwL3hzay5jOjEzMzA6c3RhdGljIGludCB4c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZHAveHNrLmMtMTMzMS17XG4tLVxubmV0L3hkcC94c2suYy0xMzQyLVxubmV0L3hkcC94c2suYzoxMzQzOnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzQ0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNTMtXG5uZXQveGRwL3hzay5jOjEzNTQ6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTEzNTUte1xuLS1cbm5ldC94ZHAveHNrLmM9MTM2ND1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTEzOTQtXG5uZXQveGRwL3hzay5jOjEzOTU6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzk2LXtcbi0tXG5uZXQveGRwL3hzay5jPTE0MDY9c3RhdGljIGludCBfX3hza19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4sIGludCBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTE0MzEtXG5uZXQveGRwL3hzay5jOjE0MzI6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG5uZXQveGRwL3hzay5jLTE0MzMte1xuLS1cbm5ldC94ZHAveHNrLmMtMTQ0Mi1cbm5ldC94ZHAveHNrLmM6MTQ0MzpzdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQveGRwL3hzay5jLTE0NDQtXHRcdFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpXG4tLVxubmV0L3hkcC94c2suYy0xNDc1LVxubmV0L3hkcC94c2suYzoxNDc2OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcbm5ldC94ZHAveHNrLmMtMTQ3Ny1cdFx0XHQgIGJvb2wgdW1lbV9xdWV1ZSlcbi0tXG5uZXQveGRwL3hzay5jLTE0OTMtXG5uZXQveGRwL3hzay5jOjE0OTQ6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTQ5NS17XG4tLVxubmV0L3hkcC94c2suYy0xNTA3LVxubmV0L3hkcC94c2suYzoxNTA4OnN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xNTA5LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX3NvY2sgX19yY3UgKioqbWFwX2VudHJ5KVxuLS1cbm5ldC94ZHAveHNrLmMtMTUyNy1cbm5ldC94ZHAveHNrLmM6MTUyODpzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNTI5LXtcbi0tXG5uZXQveGRwL3hzay5jLTE1NTMtXG5uZXQveGRwL3hzay5jOjE1NTQ6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3hkcC94c2suYy0xNTU1LXtcbi0tXG5uZXQveGRwL3hzay5jPTE1OTI9c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxuLS1cbm5ldC94ZHAveHNrLmMtMTYwOC1cbm5ldC94ZHAveHNrLmM6MTYwOTpzdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTE2MTAte1xuLS1cbm5ldC94ZHAveHNrLmMtMTYxMy1cbm5ldC94ZHAveHNrLmM6MTYxNDpzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXG5uZXQveGRwL3hzay5jLTE2MTUte1xuLS1cbm5ldC94ZHAveHNrLmM9MTgwNT1zdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE4MTEtXG5uZXQveGRwL3hzay5jOjE4MTI6c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xODEzLVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQveGRwL3hzay5jLTE5MzQtXG5uZXQveGRwL3hzay5jOjE5MzU6c3RhdGljIHZvaWQgeHNrX2VudGVyX3J4dHhfb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTM2LXtcbi0tXG5uZXQveGRwL3hzay5jLTE5NDEtXG5uZXQveGRwL3hzay5jOjE5NDI6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTQzLXtcbi0tXG5uZXQveGRwL3hzay5jPTE5NDk9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE5NTQtXG5uZXQveGRwL3hzay5jOjE5NTU6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xOTU2LVx0XHRcdCAgc29ja29wdF90ICpvcHQpXG4tLVxubmV0L3hkcC94c2suYy0yMDgyLVxubmV0L3hkcC94c2suYzoyMDgzOnN0YXRpYyBpbnQgeHNrX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQveGRwL3hzay5jLTIwODQtXHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5uZXQveGRwL3hzay5jLTIxMjAtXG5uZXQveGRwL3hzay5jOjIxMjE6c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxubmV0L3hkcC94c2suYy0yMTIyLVx0XHRcdHVuc2lnbmVkIGxvbmcgbXNnLCB2b2lkICpwdHIpXG4tLVxubmV0L3hkcC94c2suYz0yMTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMTc4LVxubmV0L3hkcC94c2suYzoyMTc5OnN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTIxODAte1xuLS1cbm5ldC94ZHAveHNrLmMtMjE4OS1cbm5ldC94ZHAveHNrLmM6MjE5MDpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQveGRwL3hzay5jLTIxOTEtXHRcdCAgICAgIGludCBrZXJuKVxuLS1cbm5ldC94ZHAveHNrLmM9MjI0Mz1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhza19uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMjQ2LVxubmV0L3hkcC94c2suYzoyMjQ3OnN0YXRpYyBpbnQgX19uZXRfaW5pdCB4c2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTIyNTMtXG5uZXQveGRwL3hzay5jOjIyNTQ6c3RhdGljIHZvaWQgX19uZXRfZXhpdCB4c2tfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjU1LXtcbi0tXG5uZXQveGRwL3hzay5jPTIyNTk9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4c2tfbmV0X29wcyA9IHtcbi0tXG5uZXQveGRwL3hzay5jLTIyNjMtXG5uZXQveGRwL3hzay5jOjIyNjQ6c3RhdGljIGludCBfX2luaXQgeHNrX2luaXQodm9pZClcbm5ldC94ZHAveHNrLmMtMjI2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDEyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFhTSyBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGB4c2tfZ2VuZXJpY19yY3ZgIOKAkyB0aGF0IGZlZWxzIHJpZ2h0LCB0aGF0JiMzOTtzIGEga2V5IGZvY3VzIHN5bWJvbCBmb3IgdGhpcy4gQW5kIGB4c2tfcmN2YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgbm90IGlkZWFsLCBidXQgZ29vZCB0byBrbm93IGZvciBjb250ZXh0LiBBaGEsIGJ1dCBgX194c2tfbWFwX3JlZGlyZWN0YCAqaXMqIGV4cG9ydGVkLCBpdCYjMzk7cyBub24tc3RhdGljISBFeGNlbGxlbnQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYF9feHNrX21hcF9yZWRpcmVjdGAgaXMgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBuZXQveGRwL3hzay5jYC4gWWVwLCBpdCYjMzk7cyByaWdodCB0aGVyZSwgYXQgbGluZSA0OTcuCgpTbywgdGFraW5nIHN0b2NrLCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHk6CgoqICAgYHhza19nZW5lcmljX3JjdmAKKiAgIGBfX3hza19tYXBfcmVkaXJlY3RgCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZC4gV2UmIzM5O2xsIG5lZWQgYFhEUF9TT0NLRVRTYCwgb2J2aW91c2x5LiBBbmQgc2luY2UgWERQIHNvY2tldHMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIHVzaW5nIEJQRiBpbnRlcm5hbGx5LCBgQlBGX1NZU0NBTExgIGlzIGltcGxpZWQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdCBhYm91dCBpdC4KClRpbWUgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGluIGBuZXQveGRwL0tjb25maWdgLiBMZXQmIzM5O3MgY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBoaWRkZW4gY29uZmlncyBhdCBwbGF5IGhlcmUuIFl1cCwganVzdCBgWERQX1NPQ0tFVFNgLgoKTm93LCB0aW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBpdHNlbGYsIHNwZWNpZmljYWxseSwgYG5ldC94ZHAveHNrLmNgLCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIGJvdGggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgeHNrX2dlbmVyaWNfcmN2fGludCBfX3hza19tYXBfcmVkaXJlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtNDYwLVxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDYyLXtcbi0tXG5uZXQveGRwL3hzay5jPTQ3Nz1zdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxubmV0L3hkcC94c2suYy00OTYtXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI3NwoJCQkJCQkJb3V0cHV0OiA5OQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYF9feHNrX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGRwL3hzay5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuCgpFc3NlbnRpYWxseSwgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaXMgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjb2RlIHRvICpwcmUtYWxsb2NhdGUqIGFsbCB0aGUgYnVmZmVycyBuZWVkZWQgZm9yIGEgbXVsdGktYnVmZmVyIFhEUCBwYWNrZXQgKmJlZm9yZSogcHJvY2Vzc2luZyBpdC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgZ29hbCBpcyB0byBhdm9pZCB0aG9zZSBuYXN0eSBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyaWVzIGlmIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gSWYgYW4gYWxsb2NhdGlvbiBmYWlscyAqYW55d2hlcmUqIGFsb25nIHRoZSBsaW5lLCBpdCBpbW1lZGlhdGVseSBmcmVlcyBldmVyeXRoaW5nIGl0ICpkaWQqIG1hbmFnZSB0byBhbGxvY2F0ZSBhbmQgZHJvcHMgdGhlIHBhY2tldCwgcmV0dXJuaW5nIGAtRU5PTUVNYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IG1lbW9yeSBsZWFrcyBhbmQgYXZvaWRzIGFueSBjb3JydXB0ZWQgc3RhdGUgdGhhdCBtaWdodCBoYXBwZW4gd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1tZW1vcnkgKE9PTSkgc2l0dWF0aW9uIGR1cmluZyBtdWx0aS1idWZmZXIgcGFja2V0IHJlY2VwdGlvbi4gU21hcnQuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBjb3JlIEFGX1hEUCByZWNlaXZlIHBhdGguIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIGJvdGggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4gQW5kIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWcgb3B0aW9uIGJlaW5nIGVuYWJsZWQuCgpHaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB4c2tfZ2VuZXJpY19yY3ZgIGFuZCBgX194c2tfbWFwX3JlZGlyZWN0YCwgc28gSSYjMzk7bGwgc2V0IGBGb2N1c1N5bWJvbHM9WyYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssICYjMzQ7X194c2tfbWFwX3JlZGlyZWN0JiMzNDtdYC4gSSYjMzk7bGwgYWxzbyBlbnN1cmUgdGhhdCBgRW5hYmxlQ29uZmlncz1bJiMzNDtYRFBfU09DS0VUUyYjMzQ7XWAgaXMgc2V0LiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRoLCB0aGUgQUZfWERQIHJlY2VpdmUgcGF0aCwgdG8gcHJlLWFsbG9jYXRlIGJ1ZmZlcnMsIHdoaWNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaXQgaGFuZGxlcyBPT00gc2NlbmFyaW9zIHdpdGggbXVsdGktYnVmZmVyIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBvZnRlbiByZXZlYWwgaW50ZXJlc3RpbmcgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssCiAgICAmIzM0O19feHNrX21hcF9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHJlY2VpdmUgcGF0aCB0byBwcmUtYWxsb2NhdGUgYWxsIG5lY2Vzc2FyeSBidWZmZXJzIGZvciBtdWx0aS1idWZmZXIgcGFja2V0cywgcHJldmVudGluZyBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyeSBvbiBPT00uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19nZW5lcmljX3JjdiYjMzQ7LAogICAgJiMzNDtfX3hza19tYXBfcmVkaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCByZWNlaXZlIHBhdGggdG8gcHJlLWFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgYnVmZmVycyBmb3IgbXVsdGktYnVmZmVyIHBhY2tldHMsIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX194c2tfcmN2YCBpbiBgbmV0L3hkcC94c2suY2AgdG8gcHJlLWFsbG9jYXRlIGFsbCByZXF1aXJlZCBYRFAgYnVmZmVycyBiZWZvcmUgY29weWluZyBkYXRhIGludG8gdGhlbS4gVGhpcyBwcmV2ZW50cyBwYXJ0aWFsIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGxpc3QgY29ycnVwdGlvbiBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzIG1pZHdheSB0aHJvdWdoIGEgbXVsdGktYnVmZmVyIHBhY2tldC4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIHNhZmV0eSBjaGVjayB0byBlbnN1cmUgdGhlIGJ1ZmZlciYjMzk7cyBsaXN0IG5vZGUgaXMgZW1wdHkgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgdGVtcG9yYXJ5IGxpc3QuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlzdCBpbnRlZ3JpdHkgaXNzdWVzICh3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBsaXN0IGRlYnVnZ2luZyksIGFuZCBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZjYjIwOTAyNDJkZmE3MDFlNTU3YzgyN2NhZDFkMzI4ODRmODRjYjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAyMjozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDc4NTVlZTA5YzRiNjQuLjMzNDc1YjE4MGVhNmYgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtMjk4LDkgJiM0MzsyOTgsMTEgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pCiAJdTMyIGZyYW1lX3NpemUgPSBfX3hza19wb29sX2dldF9yeF9mcmFtZV9zaXplKHhzLSZndDtwb29sKTsKIAl2b2lkICpjb3B5X2Zyb20gPSB4c2tfY29weV94ZHBfc3RhcnQoeGRwKSwgKmNvcHlfdG87CiAJdTMyIGZyb21fbGVuLCBtZXRhX2xlbiwgcmVtLCBudW1fZGVzYzsKLQlzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiOwomIzQzOwlzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCAqdG1wOwogCXN0cnVjdCB4ZHBfYnVmZiAqeHNrX3hkcDsKJiM0MzsJTElTVF9IRUFEKHhza19idWZmcyk7CiAJc2tiX2ZyYWdfdCAqZnJhZzsKJiM0MzsJdTMyIGk7CiAKIAlmcm9tX2xlbiA9IHhkcC0mZ3Q7ZGF0YV9lbmQgLSBjb3B5X2Zyb207CiAJbWV0YV9sZW4gPSB4ZHAtJmd0O2RhdGEgLSBjb3B5X2Zyb207CkBAIC0zNDMsMjMgJiM0MzszNDUsNDUgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pCiAJCWZyYWcgPSAgJmFtcDtzaW5mby0mZ3Q7ZnJhZ3NbMF07CiAJfQogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZGVzYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy0mZ3Q7cG9vbCk7CiYjNDM7CQlpZiAoIXhza194ZHApCiYjNDM7CQkJZ290byBlcnJfYWxsb2M7CiYjNDM7CiYjNDM7CQl4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7CiYjNDM7CQlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUpKSkKJiM0MzsJCQlnb3RvIGVycl9hbGxvYzsKJiM0MzsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUsICZhbXA7eHNrX2J1ZmZzKTsKJiM0MzsJfQomIzQzOwogCWRvIHsKIAkJdTMyIHRvX2xlbiA9IGZyYW1lX3NpemUgJiM0MzsgbWV0YV9sZW47CiAJCXUzMiBjb3BpZWQ7CiAKLQkJeHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLSZndDtwb29sKTsKJiM0MzsJCXhza2IgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7eHNrX2J1ZmZzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLAomIzQzOwkJCQkJbGlzdF9ub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUpOwomIzQzOwkJeHNrX3hkcCA9ICZhbXA7eHNrYi0mZ3Q7eGRwOwogCQljb3B5X3RvID0geHNrX3hkcC0mZ3Q7ZGF0YSAtIG1ldGFfbGVuOwogCiAJCWNvcGllZCA9IHhza19jb3B5X3hkcChjb3B5X3RvLCAmYW1wO2NvcHlfZnJvbSwgdG9fbGVuLCAmYW1wO2Zyb21fbGVuLCAmYW1wO2ZyYWcsIHJlbSk7CiAJCXJlbSAtPSBjb3BpZWQ7CiAKLQkJeHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApOwogCQlfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgY29waWVkIC0gbWV0YV9sZW4sCiAJCQkJICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7CiAJCW1ldGFfbGVuID0gMDsKIAl9IHdoaWxlIChyZW0pOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2FsbG9jOgomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeHNrYiwgdG1wLCAmYW1wO3hza19idWZmcywgbGlzdF9ub2RlKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7eHNrYi0mZ3Q7bGlzdF9ub2RlKTsKJiM0MzsJCXhza19idWZmX2ZyZWUoJmFtcDt4c2tiLSZndDt4ZHApOwomIzQzOwl9CiYjNDM7CXhzLSZndDtyeF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYU0sgQnVmZmVyIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgX194c2tfcmN2YCB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLiBUaGUgY29yZSBzZWVtcyB0byBiZSBhYm91dCBwcmUtYWxsb2NhdGluZyBidWZmZXJzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYSBgTElTVF9IRUFEKHhza19idWZmcylgIGFuZCBgeHNrX2J1ZmZfYWxsb2MoeHMtJmd0O3Bvb2wpYCBmb3IgYSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgKGBudW1fZGVzY2ApLiBJIHNlZSB0aGUgYC1FTk9NRU1gIGVycm9yIGhhbmRsaW5nIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZS4gVGhlIGFsbG9jYXRpb24gaXMgZm9sbG93ZWQgYnkgYSBjb3B5IG9wZXJhdGlvbiBhbmQgYSBjYWxsIHRvIGBfX3hza19yY3ZfemNfc2FmZWAuIFRoYXQgYWxsIG1ha2VzIHNlbnNlLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gSSYjMzk7bSBzZWVpbmcgYSBjaGVjazogYGlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSkpKSBnb3RvIGVycl9hbGxvYztgLiBUaGF0JiMzOTtzIHRvIGNvbmZpcm0gdGhhdCB0aGUgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBpdCYjMzk7cyBhZGRlZCB0byB0aGUgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkmIzM5O20ganVzdCBxdWlja2x5IHRoaW5raW5nIGlmIHRoZXJlIGFyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBhcmUgYWxsb2NhdGluZyBgeGRwX2J1ZmZgIHRocm91Z2ggYHhza19idWZmX2FsbG9jYC4KCk5vdywgSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMgb2YgYHhza19idWZmX2FsbG9jYCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gc3VidGxlIGlzc3VlIHRoYXQgSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgIG9yIG1heWJlIGl0JiMzOTtzIGluIGBuZXQveGRwL3hzay5jYCBpdHNlbGYuIEdvdHRhIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX2J1ZmZfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTI5Nj1zdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbi0tXG5uZXQveGRwL3hzay5jLTMxMy1cbm5ldC94ZHAveHNrLmM6MzE0Olx0XHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXHUwMDNlcG9vbCk7XG5uZXQveGRwL3hzay5jLTMxNS1cdFx0aWYgKCF4c2tfeGRwKSB7XG4tLVxubmV0L3hkcC94c2suYy0zNDgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVzYzsgaSYjNDM7JiM0MzspIHtcbm5ldC94ZHAveHNrLmM6MzQ5Olx0XHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXHUwMDNlcG9vbCk7XG5uZXQveGRwL3hzay5jLTM1MC1cdFx0aWYgKCF4c2tfeGRwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgeHNrX2J1ZmZfYWxsb2MgRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGB4c2tfYnVmZl9hbGxvY2AgdGhvcm91Z2hseS4gSXQmIzM5O3MgdGhlIGNvcm5lcnN0b25lIG9mIGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBidWZmZXJzIGluIFhEUCwgYW5kIGEgc29saWQgZ3Jhc3Agb24gaXQgaXMgbm9uLW5lZ290aWFibGUgZm9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBwb2ludHMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoZSBOSUMgYW5kIHRoZSBob3N0LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqTWVtb3J5IGFsaWdubWVudCoqOiBXaGF0IGFyZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgYnVmZmVycz8gQXJlIHRoZXJlIGFueSBoaWRkZW4gcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGR1ZSB0byB0aGUgYWxpZ25tZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHZhcmlvdXMgTklDIG9mZmxvYWRzIG9yIERNQSBvcGVyYXRpb25zPwoqICAgKipCdWZmZXIgcG9vbCBtYW5hZ2VtZW50Kio6IEhvdyBhcmUgdGhlc2UgYnVmZmVycyBtYW5hZ2VkIGludGVybmFsbHk/IElzIGl0IGEgc2ltcGxlIGZyZWVsaXN0LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byB3YXRjaCBvdXQgZm9yLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQ/IEhvdyBkb2VzIHRoaXMgcG9vbCB3b3JrIHdpdGggdGhlIHJpbmdzIGFuZCBob3cgYXJlIHRoZXkgbGlua2VkPwoqICAgKipDb250ZW50aW9uKio6IFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgc2VjdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBpbiB0aGUgYWxsb2NhdGlvbiBwYXRoPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgaGF6YXJkcyB0byB0aGUgYHhza19idWZmX2FsbG9jYCB0aGF0IGNvdWxkIGJlIGNvbnNpZGVyZWQ/CiogICAqKkVycm9yIGhhbmRsaW5nKio6IFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzIG9mIGB4c2tfYnVmZl9hbGxvY2A/IEFyZSB0aGVyZSBwcm9wZXIgcmVzb3VyY2UgZXhoYXVzdGlvbiBjaGVja3MgYW5kIGZhaWx1cmUgcGF0aHdheXMgb3IgcG90ZW50aWFsIGxlYWtzIHRvIGFkZHJlc3M/CiogICAqKkludGVyYWN0aW9uIHdpdGggWERQIHJpbmdzKio6IExldCYjMzk7cyBzZWUgaG93IGB4c2tfYnVmZl9hbGxvY2Agd29ya3Mgd2l0aCB0aGUgcmluZ3MuIEkgbmVlZCB0byB2aXN1YWxpemUgdGhlIGNvbXBsZXRlIGZsb3cgb2YgcGFja2V0cywgZnJvbSBOSUMgdG8gYHhza19idWZmX2FsbG9jYCwgYW5kIHRoZW4gaG93IHRoZXkgYXJlIGxpbmtlZCBpbnRvIHRoZSByaW5ncy4KKiAgICoqQWx0ZXJuYXRpdmUgYWxsb2NhdG9ycyoqOiBBcmUgdGhlcmUgcG90ZW50aWFsIGFsdGVybmF0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB0byBjb25zaWRlciwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS9OSUMgYW5kIHVzZSBjYXNlPyBDb3VsZCBjdXN0b20gYWxsb2NhdG9ycywgb3IgZXZlbiBsZXZlcmFnaW5nIHRoZSBrZXJuZWwmIzM5O3Mgc2xhYiBhbGxvY2F0b3JzLCBvZmZlciBhZHZhbnRhZ2VzIGluIGNlcnRhaW4gc2NlbmFyaW9zPwoqICAgKipQZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMqKjogTG9va2luZyBhdCB0aGUgY29kZSBpdHNlbGYsIGNhbiBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IGJlIHNwb3R0ZWQ/CkkgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSwgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdywgYW5kIHRoaW5rIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGxpbmUsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLi4uIG9yIHdoZXJlIHRoZSBidWdzIGhpZGUuIEkmIzM5O20gZ29pbmcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWZmX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0yOTY9c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG4tLVxubmV0L3hkcC94c2suYy0zMTMtXG5uZXQveGRwL3hzay5jOjMxNDpcdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xubmV0L3hkcC94c2suYy0zMTUtXHRcdGlmICgheHNrX3hkcCkge1xuLS1cbm5ldC94ZHAveHNrLmMtMzQ4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2Rlc2M7IGkmIzQzOyYjNDM7KSB7XG5uZXQveGRwL3hzay5jOjM0OTpcdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xubmV0L3hkcC94c2suYy0zNTAtXHRcdGlmICgheHNrX3hkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEZWJ1Z2dpbmcgYSBTdXNwZWN0ZWQgSW5saW5lIEZ1bmN0aW9uIElzc3VlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgaXNuJiMzOTt0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBhbmQgSSYjMzk7bSBzdXNwZWN0aW5nIGl0IG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2YgdGhlIHRyb3VibGUgY291bGQgYmUgYW4gaW5saW5lIGZ1bmN0aW9uLiBJbmxpbmUgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgYmUgdHJpY2t5IHRvIGRlYnVnIGJlY2F1c2UgdGhlIGNvbXBpbGVyIG9mdGVuIGhhbmRsZXMgdGhlbSBpbiBhIHdheSB0aGF0IG9ic2N1cmVzIHRoZSBkaXJlY3Qgc291cmNlIGNvZGUgZXhlY3V0aW9uLCBpdCYjMzk7cyBub3QgZXhhY3RseSBlYXN5IHRvIHRyYWNlIHRoZWlyIGZsb3cgaW4gdGhlIHNhbWUgd2F5IGFzIGEgcmVndWxhciBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2ssIGJlY2F1c2UgaXQmIzM5O3MgYSBjb21tb24gYXJlYSBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciwgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhbnkgY29tcGxleCBsb2dpYyBvciBzaWRlIGVmZmVjdHMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBoZWFkZXIgZmlsZXMgdG8gc2VlIGlmIEkgZmluZCBhbnkgc3VzcGVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWZmX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9MTEzPXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCB4c2tfYnVmZl94ZHBfZ2V0X2ZyYW1lX2RtYShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0xMTktXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoxMjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgeGRwX2J1ZmYgKnhza19idWZmX2FsbG9jKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMTIxLXtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00NDM9c3RhdGljIGlubGluZSBkbWFfYWRkcl90IHhza19idWZmX3hkcF9nZXRfZnJhbWVfZG1hKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTQ0Ny1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oOjQ0ODpzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZHBfYnVmZiAqeHNrX2J1ZmZfYWxsb2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00NDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgeHNrX2J1ZmZfYWxsb2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCBgeHNrX2J1ZmZfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBob3cgWERQIG1hbmFnZXMgbWVtb3J5IGZvciBwYWNrZXQgZGF0YS4gSSBhbHJlYWR5IGtub3cgdGhlIGhpZ2gtbGV2ZWwgZGV0YWlscyDigJMgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSByaW5nIGJ1ZmZlcnMgdXNlZCB0byBleGNoYW5nZSBwYWNrZXRzIGJldHdlZW4gdGhlIFhEUCBwcm9ncmFtIGFuZCB0aGUgaG9zdCBrZXJuZWwuIEJ1dCBub3cgSSB3YW50IGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBudWFuY2VzIGluIHRoaXMgcHJvY2Vzcy4gSSBuZWVkIHRvIGtub3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhlIHN5c3RlbSwgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXQgbWlnaHQgaW50cm9kdWNlIGluIGhpZ2gtcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBzY2hlbWUgcGxheXMgb3V0LiBIb3cgZG9lcyBpdCBtYW5hZ2UgdGhlIGB4c2tfdW1lbWAsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBkZXNpZ24gb24gdGhpbmdzIGxpa2UgY2FjaGUgZWZmaWNpZW5jeSBhbmQgZnJhZ21lbnRhdGlvbj8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgaXNzdWVzIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIHZ5aW5nIGZvciByZXNvdXJjZXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IgPSBjb250YWluZXJfb2YoeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuIDExNjpcdFxuIDExNzpcdFx0cmV0dXJuIHhwX2dldF9mcmFtZV9kbWEoeHNrYik7XG4gMTE4Olx0fVxuIDExOTpcdFxuIDEyMDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHhkcF9idWZmICp4c2tfYnVmZl9hbGxvYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiAxMjE6XHR7XG4gMTIyOlx0XHRyZXR1cm4geHBfYWxsb2MocG9vbCk7XG4gMTIzOlx0fVxuIDEyNDpcdFxuIDEyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB4c2tfaXNfZW9wX2Rlc2MoY29uc3Qgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuIDEyNjpcdHtcbiAxMjc6XHRcdHJldHVybiAheHBfbWJfZGVzYyhkZXNjKTtcbiAxMjg6XHR9XG4gMTI5Olx0XG4gMTMwOlx0LyogUmV0dXJucyBhcyBtYW55IGVudHJpZXMgYXMgcG9zc2libGUgdXAgdG8gbWF4LiAwIFx1MDAzYz0gTiBcdTAwM2M9IG1heC4gKi9cbiAxMzE6XHRzdGF0aWMgaW5saW5lIHUzMiB4c2tfYnVmZl9hbGxvY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9idWZmICoqeGRwLCB1MzIgbWF4KVxuIDEzMjpcdHtcbiAxMzM6XHRcdHJldHVybiB4cF9hbGxvY19iYXRjaChwb29sLCB4ZHAsIG1heCk7XG4gMTM0Olx0fVxuIDEzNTpcdFxuIDEzNjpcdHN0YXRpYyBpbmxpbmUgYm9vbCB4c2tfYnVmZl9jYW5fYWxsb2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBjb3VudClcbiAxMzc6XHR7XG4gMTM4Olx0XHRyZXR1cm4geHBfY2FuX2FsbG9jKHBvb2wsIGNvdW50KTtcbiAxMzk6XHR9XG4gMTQwOlx0XG4gMTQxOlx0c3RhdGljIGlubGluZSB2b2lkIHhza19idWZmX2ZyZWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gMTQyOlx0e1xuIDE0MzpcdFx0c3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiA9IGNvbnRhaW5lcl9vZih4ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XG4gMTQ0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp4c2tiX2xpc3QgPSBcdTAwMjZ4c2tiLVx1MDAzZXBvb2wtXHUwMDNleHNrYl9saXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTk3CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgQnVmZmVyIFByZS1hbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBfX3hza19yY3ZgIHRvIHByZS1hbGxvY2F0ZSBhbGwgb2YgdGhlIGB4c2tfeGRwYCBidWZmZXJzICpiZWZvcmUqIGNvcHlpbmcgYW55IGRhdGEgaW50byB0aGVtLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgYSBzaXR1YXRpb24gd2hlcmUgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWQtcGFja2V0LCBwYXJ0aWN1bGFybHkgd2l0aCBtdWx0aS1idWZmZXIgWERQLCB3aGljaCB3b3VsZCBsZWFkIHRvIGEgcGFydGlhbCBjb3B5IGFuZCBwb3RlbnRpYWxseSBjb3JydXB0IGRhdGEuIElmIGFuIGFsbG9jYXRpb24gKmRvZXMqIGZhaWwsIGl0IGNsZWFucyB1cCBieSBmcmVlaW5nIGFueSBidWZmZXJzIGl0ICpkaWQqIG1hbmFnZSB0byBhbGxvY2F0ZSBhbmQgcmV0dXJucyBgLUVOT01FTWAuIEl0IHNlZW1zIHRvIG1lIHRoaXMgaXMgcHJpbWFyaWx5IGEgYnVnIGZpeCwgbGlrZWx5IGFkZHJlc3NpbmcgZWl0aGVyIGEgbWVtb3J5IGxlYWssIHBhY2tldCBkcm9wIGR1ZSB0byBpbmNvbXBsZXRlIGNvcHksIG9yIHBvc3NpYmx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIHNjZW5hcmlvLgoKQWgsIGhhbmcgb24gYSBzZWNvbmQuIEkgc2VlIHRoaXMgYWRkaXRpb246CgpgYGBjCgkJeHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApOwoJCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSkpKQoJCQlnb3RvIGVycl9hbGxvYzsKYGBgCgpUaGlzICpyZWFsbHkqIGxvb2tzIGxpa2UgYSBjaGVjayBvbiB3aGV0aGVyIGBsaXN0X25vZGVgIGlzIGVtcHR5LiBJZiBub3QsIGl0IGJhaWxzIG91dCB0byBgZXJyX2FsbG9jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGlzIGFpbWVkIGF0IGZpeGluZyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSDigJMgZGVmaW5pdGVseSBhIG1lbW9yeSBzYWZldHkgcHJvYmxlbSB0aGF0IGNvdWxkIHByb2JhYmx5IGJlIGNhdWdodCBieSBLQVNBTiBvciB0aGUgc3RhbmRhcmQgbGlzdCBkZWJ1Z2dpbmcuIEJ1dCBpdCBpcyBzdGlsbCBhIGdvb2QgY2hlY2sgdG8gaGF2ZS4KClNvLCBsZXQmIzM5O3MgbmFpbCB0aGlzIGRvd24uIERvZXMgdGhpcyBwYXRjaCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBJdCBjaGFuZ2VzIHRoZSAqYWxsb2NhdGlvbiBzdHJhdGVneSogdG8gcHJlLWFsbG9jYXRlIGFuZCBhZGRzIHRoaXMgc2FmZXR5IGNoZWNrLCB0aGF0JiMzOTtzIGFsbC4gRG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEFic29sdXRlbHkgbm90LiBJdCYjMzk7cyBjb3B5aW5nIGRhdGEgZnJvbSB3aGF0IHNob3VsZCBiZSBhIGZ1bGx5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXIgKHRoZSBpbmNvbWluZyBwYWNrZXQpIGludG8gdGhlIHByZS1hbGxvY2F0ZWQgYnVmZmVycy4gVGhpcyBpc24mIzM5O3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBpcyBmaXhpbmcgYSBsaXN0IGNvcnJ1cHRpb24gb3IgbWVtb3J5IGxlYWsuCgpUaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU49ZmFsc2VgIGZsYWcgaXMgY29ycmVjdCBoZXJlLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBpdCBuZWVkcyBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXImIzM5O3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXImIzM5O3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzozMy43MzA5MzUxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODgzMTAwNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX2dlbmVyaWNfcmN2XCIsXG4gICAgXCJfX3hza19tYXBfcmVkaXJlY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3hza19yY3ZgIGluIGBuZXQveGRwL3hzay5jYCB0byBwcmUtYWxsb2NhdGUgYWxsIHJlcXVpcmVkIFhEUCBidWZmZXJzIGJlZm9yZSBjb3B5aW5nIGRhdGEgaW50byB0aGVtLiBUaGlzIHByZXZlbnRzIHBhcnRpYWwgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2ggYSBtdWx0aS1idWZmZXIgcGFja2V0LiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgc2FmZXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVmZmVyJ3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoIHRvIHByZS1hbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IGJ1ZmZlcnMgZm9yIG11bHRpLWJ1ZmZlciBwYWNrZXRzLCBwcmV2ZW50aW5nIHBhcnRpYWwgcGFja2V0IGRlbGl2ZXJ5IG9uIE9PTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjMzLjczMDk0MDA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMyNDMwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2Y2IyMDkwMjQyZGZhNzAxZTU1N2M4MjdjYWQxZDMyODg0Zjg0Y2IwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDIyOjMzOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggNzg1NWVlMDljNGI2NC4uMzM0NzViMTgwZWE2ZiAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC0yOTgsOSArMjk4LDExIEBAIHN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbiBcXHR1MzIgZnJhbWVfc2l6ZSA9IF9feHNrX3Bvb2xfZ2V0X3J4X2ZyYW1lX3NpemUoeHMtXFx1MDAzZXBvb2wpO1xcbiBcXHR2b2lkICpjb3B5X2Zyb20gPSB4c2tfY29weV94ZHBfc3RhcnQoeGRwKSwgKmNvcHlfdG87XFxuIFxcdHUzMiBmcm9tX2xlbiwgbWV0YV9sZW4sIHJlbSwgbnVtX2Rlc2M7XFxuLVxcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2I7XFxuK1xcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7XFxuIFxcdHN0cnVjdCB4ZHBfYnVmZiAqeHNrX3hkcDtcXG4rXFx0TElTVF9IRUFEKHhza19idWZmcyk7XFxuIFxcdHNrYl9mcmFnX3QgKmZyYWc7XFxuK1xcdHUzMiBpO1xcbiBcXG4gXFx0ZnJvbV9sZW4gPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0gY29weV9mcm9tO1xcbiBcXHRtZXRhX2xlbiA9IHhkcC1cXHUwMDNlZGF0YSAtIGNvcHlfZnJvbTtcXG5AQCAtMzQzLDIzICszNDUsNDUgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxuIFxcdFxcdGZyYWcgPSAgXFx1MDAyNnNpbmZvLVxcdTAwM2VmcmFnc1swXTtcXG4gXFx0fVxcbiBcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9kZXNjOyBpKyspIHtcXG4rXFx0XFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVxcdTAwM2Vwb29sKTtcXG4rXFx0XFx0aWYgKCF4c2tfeGRwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4rXFxuK1xcdFxcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZ4c2tiLVxcdTAwM2VsaXN0X25vZGUpKSlcXG4rXFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuK1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZ4c2tiLVxcdTAwM2VsaXN0X25vZGUsIFxcdTAwMjZ4c2tfYnVmZnMpO1xcbitcXHR9XFxuK1xcbiBcXHRkbyB7XFxuIFxcdFxcdHUzMiB0b19sZW4gPSBmcmFtZV9zaXplICsgbWV0YV9sZW47XFxuIFxcdFxcdHUzMiBjb3BpZWQ7XFxuIFxcbi1cXHRcXHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHR4c2tiID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2eHNrX2J1ZmZzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLFxcbitcXHRcXHRcXHRcXHRcXHRsaXN0X25vZGUpO1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ4c2tiLVxcdTAwM2VsaXN0X25vZGUpO1xcbitcXHRcXHR4c2tfeGRwID0gXFx1MDAyNnhza2ItXFx1MDAzZXhkcDtcXG4gXFx0XFx0Y29weV90byA9IHhza194ZHAtXFx1MDAzZWRhdGEgLSBtZXRhX2xlbjtcXG4gXFxuIFxcdFxcdGNvcGllZCA9IHhza19jb3B5X3hkcChjb3B5X3RvLCBcXHUwMDI2Y29weV9mcm9tLCB0b19sZW4sIFxcdTAwMjZmcm9tX2xlbiwgXFx1MDAyNmZyYWcsIHJlbSk7XFxuIFxcdFxcdHJlbSAtPSBjb3BpZWQ7XFxuIFxcbi1cXHRcXHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XFxuIFxcdFxcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcXG4gXFx0XFx0XFx0XFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XFxuIFxcdFxcdG1ldGFfbGVuID0gMDtcXG4gXFx0fSB3aGlsZSAocmVtKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX2FsbG9jOlxcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeHNrYiwgdG1wLCBcXHUwMDI2eHNrX2J1ZmZzLCBsaXN0X25vZGUpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2eHNrYi1cXHUwMDNlbGlzdF9ub2RlKTtcXG4rXFx0XFx0eHNrX2J1ZmZfZnJlZShcXHUwMDI2eHNrYi1cXHUwMDNleGRwKTtcXG4rXFx0fVxcbitcXHR4cy1cXHUwMDNlcnhfZHJvcHBlZCsrO1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzozNC4yNDQ5ODY2MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MDQ1NzYwMzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19nZW5lcmljX3JjdlwiLFxuICAgIFwiX194c2tfbWFwX3JlZGlyZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCByZWNlaXZlIHBhdGggdG8gcHJlLWFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgYnVmZmVycyBmb3IgbXVsdGktYnVmZmVyIHBhY2tldHMsIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmNiMjA5MDI0MmRmYTcwMWU1NTdjODI3Y2FkMWQzMjg4NGY4NGNiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIyOjMzOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDc4NTVlZTA5YzRiNjQuLjMzNDc1YjE4MGVhNmYgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtMjk4LDkgKzI5OCwxMSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdHUzMiBmcmFtZV9zaXplID0gX194c2tfcG9vbF9nZXRfcnhfZnJhbWVfc2l6ZSh4cy1cdTAwM2Vwb29sKTtcbiBcdHZvaWQgKmNvcHlfZnJvbSA9IHhza19jb3B5X3hkcF9zdGFydCh4ZHApLCAqY29weV90bztcbiBcdHUzMiBmcm9tX2xlbiwgbWV0YV9sZW4sIHJlbSwgbnVtX2Rlc2M7XG4tXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiO1xuK1x0c3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgKnRtcDtcbiBcdHN0cnVjdCB4ZHBfYnVmZiAqeHNrX3hkcDtcbitcdExJU1RfSEVBRCh4c2tfYnVmZnMpO1xuIFx0c2tiX2ZyYWdfdCAqZnJhZztcbitcdHUzMiBpO1xuIFxuIFx0ZnJvbV9sZW4gPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSBjb3B5X2Zyb207XG4gXHRtZXRhX2xlbiA9IHhkcC1cdTAwM2VkYXRhIC0gY29weV9mcm9tO1xuQEAgLTM0MywyMyArMzQ1LDQ1IEBAIHN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxuIFx0XHRmcmFnID0gIFx1MDAyNnNpbmZvLVx1MDAzZWZyYWdzWzBdO1xuIFx0fVxuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2Rlc2M7IGkrKykge1xuK1x0XHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXHUwMDNlcG9vbCk7XG4rXHRcdGlmICgheHNrX3hkcClcbitcdFx0XHRnb3RvIGVycl9hbGxvYztcbitcbitcdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuK1x0XHRpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpKSlcbitcdFx0XHRnb3RvIGVycl9hbGxvYztcbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4c2tiLVx1MDAzZWxpc3Rfbm9kZSwgXHUwMDI2eHNrX2J1ZmZzKTtcbitcdH1cbitcbiBcdGRvIHtcbiBcdFx0dTMyIHRvX2xlbiA9IGZyYW1lX3NpemUgKyBtZXRhX2xlbjtcbiBcdFx0dTMyIGNvcGllZDtcbiBcbi1cdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xuK1x0XHR4c2tiID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ4c2tfYnVmZnMsIHN0cnVjdCB4ZHBfYnVmZl94c2ssXG4rXHRcdFx0XHRcdGxpc3Rfbm9kZSk7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpO1xuK1x0XHR4c2tfeGRwID0gXHUwMDI2eHNrYi1cdTAwM2V4ZHA7XG4gXHRcdGNvcHlfdG8gPSB4c2tfeGRwLVx1MDAzZWRhdGEgLSBtZXRhX2xlbjtcbiBcbiBcdFx0Y29waWVkID0geHNrX2NvcHlfeGRwKGNvcHlfdG8sIFx1MDAyNmNvcHlfZnJvbSwgdG9fbGVuLCBcdTAwMjZmcm9tX2xlbiwgXHUwMDI2ZnJhZywgcmVtKTtcbiBcdFx0cmVtIC09IGNvcGllZDtcbiBcbi1cdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuIFx0XHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgY29waWVkIC0gbWV0YV9sZW4sXG4gXHRcdFx0XHQgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTtcbiBcdFx0bWV0YV9sZW4gPSAwO1xuIFx0fSB3aGlsZSAocmVtKTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9hbGxvYzpcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4c2tiLCB0bXAsIFx1MDAyNnhza19idWZmcywgbGlzdF9ub2RlKSB7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpO1xuK1x0XHR4c2tfYnVmZl9mcmVlKFx1MDAyNnhza2ItXHUwMDNleGRwKTtcbitcdH1cbitcdHhzLVx1MDAzZXJ4X2Ryb3BwZWQrKztcbitcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4c2tfdHhfd3JpdGVhYmxlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzozNC4yNDQ5ODc5OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzEzMzAxNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWERQIFNvY2tldCBCdWZmZXIgQWxsb2NhdGlvbiBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX194c2tfcmN2YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgaW4gaG93IGB4c2tfYnVmZl9hbGxvY2AgaXMgYmVpbmcgaGFuZGxlZC4gSW5zdGVhZCBvZiBwb3RlbnRpYWxseSBoYXZpbmcgdG8gZGVhbCB3aXRoIHBhcnRpYWwgYWxsb2NhdGlvbnMg4oCTIHdoZXJlIHNvbWUgYnVmZmVycyBzdWNjZWVkIGJ1dCBvdGhlcnMgZmFpbCDigJMgdGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3kuIEknbSBzZWVpbmcgdGhhdCBpdCdzIGxvb3BpbmcgdGhyb3VnaCBhbmQgZ3JhYmJpbmcgYWxsIHRoZSBuZWNlc3NhcnkgYnVmZmVycyB1cGZyb250LCBhZGRpbmcgdGhlbSB0byB0aGlzIGB4c2tfYnVmZnNgIGxpc3QuIFRoYXQncyBhIGNsZXZlciB3YXkgdG8gZW5zdXJlIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkICpiZWZvcmUqIHdlIGV2ZW4gc3RhcnQgcHJvY2Vzc2luZy5cblxuQW5kIHRoZSBzYWZldHkgbmV0IGlzIGNsZWFyOiBpZiAqYW55KiBvZiB0aG9zZSBidWZmZXIgYWxsb2NhdGlvbnMgZmFpbCBkdXJpbmcgdGhhdCBwcmUtYWxsb2NhdGlvbiBzdGVwLCB0aGUgY29kZSBpbW1lZGlhdGVseSBmcmVlcyBhbGwgdGhlIGJ1ZmZlcnMgaXQgKmRpZCogbWFuYWdlIHRvIGdldCBhbmQgcmV0dXJucyBgLUVOT01FTWAuIE5vIHBhcnRpYWwsIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCwgZGF0YSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIFRoaXMgcHJldmVudHMgdGhlIG1lc3N5IHNpdHVhdGlvbiBvZiBoYXZpbmcgYSBwYWNrZXQgcGFydGlhbGx5IGFsbG9jYXRlZCwgcHJvY2Vzc2VkLCBhbmQgdGhlbiB0cnVuY2F0ZWQgb3IgZHJvcHBlZC4gR29vZCB0aGlua2luZywgSSBoYXZlIHNlZW4gaXQgYSB0aG91c2FuZCB0aW1lcywgYW5kIGlzIHdvcnRoIHRoZSBvdmVyaGVhZCFcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIGBfX3hza19yY3ZgIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCByaWdodD8gU28sIGxldCdzIGZpbmQgdGhlIGVudHJ5IHBvaW50cyB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZS4gSXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBidXQgbW9yZSBsaWtlbHkgaXQgaXMgYW4gZWRnZSBjYXNlIHRoYXQgbmVlZHMgdG8gYmUgcHJvcGVybHkgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjM5LjU1ODI5MzAzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ1ODExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hza19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTE2NT1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkwLVxcbm5ldC94ZHAveHNrLmM6MTkxOnN0YXRpYyBpbnQgX194c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsIHUzMiBsZW4sXFxubmV0L3hkcC94c2suYy0xOTItXFx0XFx0XFx0dTMyIGZsYWdzKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDctXFxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcXG5uZXQveGRwL3hzay5jLTIwOS1cXHRcXHRcXHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jPTIxOT1zdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyOS1cXHRpZiAobGlrZWx5KCFmcmFncykpIHtcXG5uZXQveGRwL3hzay5jOjIzMDpcXHRcXHRlcnIgPSBfX3hza19yY3ZfemMoeHMsIHhza2IsIGxlbiwgY29udGQpO1xcbm5ldC94ZHAveHNrLmMtMjMxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQveGRwL3hzay5jLTI0My1cXG5uZXQveGRwL3hzay5jOjI0NDpcXHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgbGVuLCBjb250ZCk7XFxubmV0L3hkcC94c2suYy0yNDUtXFx0eHNrYl9saXN0ID0gXFx1MDAyNnhza2ItXFx1MDAzZXBvb2wtXFx1MDAzZXhza2JfbGlzdDtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjQ5LVxcdFxcdGxlbiA9IHBvcy1cXHUwMDNleGRwLmRhdGFfZW5kIC0gcG9zLVxcdTAwM2V4ZHAuZGF0YTtcXG5uZXQveGRwL3hzay5jOjI1MDpcXHRcXHRfX3hza19yY3ZfemNfc2FmZSh4cywgcG9zLCBsZW4sIGNvbnRkKTtcXG5uZXQveGRwL3hzay5jLTI1MS1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwb3MtXFx1MDAzZWxpc3Rfbm9kZSk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTI2OD1zdGF0aWMgdTMyIHhza19jb3B5X3hkcCh2b2lkICp0bywgdm9pZCAqKmZyb20sIHUzMiB0b19sZW4sXFxuLS1cXG5uZXQveGRwL3hzay5jLTI5NS1cXG5uZXQveGRwL3hzay5jOjI5NjpzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG5uZXQveGRwL3hzay5jLTI5Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTMyMC1cXHRcXHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XFxubmV0L3hkcC94c2suYzozMjE6XFx0XFx0ZXJyID0gX194c2tfcmN2X3pjKHhzLCB4c2tiLCBsZW4sIDApO1xcbm5ldC94ZHAveHNrLmMtMzIyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzcyLVxcbm5ldC94ZHAveHNrLmM6MzczOlxcdFxcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcXG5uZXQveGRwL3hzay5jLTM3NC1cXHRcXHRcXHRcXHQgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NDYxPWludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ2OC1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhzLVxcdTAwM2Vwb29sLVxcdTAwM2VyeF9sb2NrKTtcXG5uZXQveGRwL3hzay5jOjQ2OTpcXHRcXHRlcnIgPSBfX3hza19yY3YoeHMsIHhkcCwgbGVuKTtcXG5uZXQveGRwL3hzay5jLTQ3MC1cXHRcXHR4c2tfZmx1c2goeHMpO1xcbi0tXFxubmV0L3hkcC94c2suYz00Nzc9c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxubmV0L3hkcC94c2suYy00OTAtXFxubmV0L3hkcC94c2suYzo0OTE6XFx0ZXJyID0gX194c2tfcmN2KHhzLCB4ZHAsIGxlbik7XFxubmV0L3hkcC94c2suYy00OTItXFx0aWYgKCFlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjM5LjYzOTc1NDgyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODA4NzY3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFJlY2VpdmUgUGF0aCBpbiBYRFAgU29ja2V0cyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGRhdGEgYWN0dWFsbHkgZ2V0cyByZWNlaXZlZCB3aXRoIFhEUCBzb2NrZXRzLiBJIHNlZSBgX194c2tfcmN2YCBpcyB0aGUgY29yZSByZWNlaXZlIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQncyBwcm9iYWJseSB0aGUgd29ya2hvcnNlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY2FsbHMgb3JpZ2luYXRlLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIHdoaWNoIGFyZSBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYHhza19yY3ZgLiBXaXRoIHRob3NlIHR3bywgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIHdob2xlIHJlY2VpdmUgcGF0aCBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIGRhdGEgZmxvdy4gTGV0J3Mgc2VlIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIHJlY2VpdmUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjQyLjkyMDYzNDczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjM2MDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfZ2VuZXJpY19yY3Z8eHNrX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTE2NT1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkwLVxcbm5ldC94ZHAveHNrLmM6MTkxOnN0YXRpYyBpbnQgX194c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsIHUzMiBsZW4sXFxubmV0L3hkcC94c2suYy0xOTItXFx0XFx0XFx0dTMyIGZsYWdzKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDctXFxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcXG5uZXQveGRwL3hzay5jLTIwOS1cXHRcXHRcXHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxOC1cXG5uZXQveGRwL3hzay5jOjIxOTpzdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yMjAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjktXFx0aWYgKGxpa2VseSghZnJhZ3MpKSB7XFxubmV0L3hkcC94c2suYzoyMzA6XFx0XFx0ZXJyID0gX194c2tfcmN2X3pjKHhzLCB4c2tiLCBsZW4sIGNvbnRkKTtcXG5uZXQveGRwL3hzay5jLTIzMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYy0yNDMtXFxubmV0L3hkcC94c2suYzoyNDQ6XFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGxlbiwgY29udGQpO1xcbm5ldC94ZHAveHNrLmMtMjQ1LVxcdHhza2JfbGlzdCA9IFxcdTAwMjZ4c2tiLVxcdTAwM2Vwb29sLVxcdTAwM2V4c2tiX2xpc3Q7XFxuLS1cXG5uZXQveGRwL3hzay5jLTI0OS1cXHRcXHRsZW4gPSBwb3MtXFx1MDAzZXhkcC5kYXRhX2VuZCAtIHBvcy1cXHUwMDNleGRwLmRhdGE7XFxubmV0L3hkcC94c2suYzoyNTA6XFx0XFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHBvcywgbGVuLCBjb250ZCk7XFxubmV0L3hkcC94c2suYy0yNTEtXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cG9zLVxcdTAwM2VsaXN0X25vZGUpO1xcbi0tXFxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxcbi0tXFxubmV0L3hkcC94c2suYy0yOTUtXFxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yOTcte1xcbi0tXFxubmV0L3hkcC94c2suYy0zMjAtXFx0XFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xcbm5ldC94ZHAveHNrLmM6MzIxOlxcdFxcdGVyciA9IF9feHNrX3Jjdl96Yyh4cywgeHNrYiwgbGVuLCAwKTtcXG5uZXQveGRwL3hzay5jLTMyMi1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTM3Mi1cXG5uZXQveGRwL3hzay5jOjM3MzpcXHRcXHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgY29waWVkIC0gbWV0YV9sZW4sXFxubmV0L3hkcC94c2suYy0zNzQtXFx0XFx0XFx0XFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTQxND1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTQzOC1cXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00NDAte1xcbi0tXFxubmV0L3hkcC94c2suYz00NTQ9c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ2MC1cXG5uZXQveGRwL3hzay5jOjQ2MTppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC94ZHAveHNrLmMtNDYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDY1LVxcbm5ldC94ZHAveHNrLmM6NDY2OlxcdGVyciA9IHhza19yY3ZfY2hlY2soeHMsIHhkcCwgbGVuKTtcXG5uZXQveGRwL3hzay5jLTQ2Ny1cXHRpZiAoIWVycikge1xcbm5ldC94ZHAveHNrLmMtNDY4LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2eHMtXFx1MDAzZXBvb2wtXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC94ZHAveHNrLmM6NDY5OlxcdFxcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xcbm5ldC94ZHAveHNrLmMtNDcwLVxcdFxcdHhza19mbHVzaCh4cyk7XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ3Ni1cXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00Nzgte1xcbi0tXFxubmV0L3hkcC94c2suYy00ODEtXFxubmV0L3hkcC94c2suYzo0ODI6XFx0ZXJyID0geHNrX3Jjdl9jaGVjayh4cywgeGRwLCBsZW4pO1xcbm5ldC94ZHAveHNrLmMtNDgzLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ4Ny1cXHRcXHRsZW4gPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0geGRwLVxcdTAwM2VkYXRhO1xcbm5ldC94ZHAveHNrLmM6NDg4OlxcdFxcdHJldHVybiB4c2tfcmN2X3pjKHhzLCB4ZHAsIGxlbik7XFxubmV0L3hkcC94c2suYy00ODktXFx0fVxcbm5ldC94ZHAveHNrLmMtNDkwLVxcbm5ldC94ZHAveHNrLmM6NDkxOlxcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xcbm5ldC94ZHAveHNrLmMtNDkyLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz00OTc9aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTAwLVxcbm5ldC94ZHAveHNrLmM6NTAxOlxcdGVyciA9IHhza19yY3YoeHMsIHhkcCk7XFxubmV0L3hkcC94c2suYy01MDItXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzM6NDMuMDI2OTk4OTY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NDk1MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhTSyBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGB4c2tfZ2VuZXJpY19yY3ZgIGlzIGdldHRpbmcgaXRzIGhvb2tzIGludG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbWVhbmluZyBpdCdzIGVpdGhlciBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBiZWluZyB1dGlsaXplZCBlbHNld2hlcmUuIEludGVyZXN0aW5nLiBBbmQgYHhza19yY3ZgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGFydCBvZiB0aGUgcHV6emxlLCBiZWNhdXNlIGBfX3hza19tYXBfcmVkaXJlY3RgIGNhbGxzIGl0LiBHaXZlbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byB0cmFjZSB0aGUgZmxvdyBvZiBkYXRhIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFhTSyBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgYnkgd2hhdCBmdW5jdGlvbiwgYW5kIHdoZW4uIEdvdHRhIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIHJlZGlyZWN0cyBhcmUgaGFwcGVuaW5nIGFuZCBob3cgYHhza19nZW5lcmljX3JjdmAgZml0cyBpbnRvIHRoZSBtaXguIEknbGwgbmVlZCB0byBkaWcgaW50byBgX194c2tfbWFwX3JlZGlyZWN0YCBhbmQgYHhza19nZW5lcmljX3JjdmAgZGlyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzo0Ni41NzE5NTU1ODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyMTU5MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfZ2VuZXJpY19yY3Z8X194c2tfbWFwX3JlZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZHBfc29jay5oPTExNz1zdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTEyNS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjEyNjppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjEyNzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTEyOC12b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg9MTY2PXN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfdHhfbWV0YWRhdGFfY29tcGxldGUoc3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTE3OS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjE4MDpzdGF0aWMgaW5saW5lIGludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xODEte1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xODQtXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaDoxODU6c3RhdGljIGlubGluZSBpbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTg2LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ0OTg9c3RhdGljIGlubGluZSBpbnQgX194ZHBfZG9fcmVkaXJlY3RfeHNrKHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmksXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NTEwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MTE6XFx0ZXJyID0gX194c2tfbWFwX3JlZGlyZWN0KGZ3ZCwgeGRwKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NTEyLVxcdGlmICh1bmxpa2VseShlcnIpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDYyMT1zdGF0aWMgaW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDY1Ni1cXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxubmV0L2NvcmUvZmlsdGVyLmM6NDY1NzpcXHRcXHRlcnIgPSB4c2tfZ2VuZXJpY19yY3YoZndkLCB4ZHApO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2NTgtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbi0tXFxubmV0L3hkcC94c2suYy00NjAtXFxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTQ3Nz1zdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ5Ni1cXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC94ZHAveHNrLmMtNDk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzM6NTAuMjkzNTU1NDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE4MDE0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBYRFAvQUZfWERQIE11bHRpLUJ1ZmZlciBSZWNlaXZlIFBhdGggTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQUZfWERQIHNvY2tldCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggbXVsdGktYnVmZmVyIFhEUCBwYWNrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHdoYXQgSSdtIHVuZGVyc3RhbmRpbmcsIHRoZSBrZXkgZW50cnkgcG9pbnQgaXMgYF9feHNrX3JjdmAsIHdoaWNoIGlzIHJlYWNoZWQgdGhyb3VnaCBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGZyb20gYHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcGAgYW5kIGBfX3hkcF9kb19yZWRpcmVjdF94c2tgIHJlc3BlY3RpdmVseSDigJMgY2xhc3NpYyBYRFAgcmVkaXJlY3QgdG8gWFNLTUFQIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGlzIGlzIGhlYXZpbHkgZXhlcmNpc2VkIGluIHZpcnR1YWxpemF0aW9uLCBzbyBhbnkgY2hhbmdlIGhlcmUgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS5cblxuVGhpcyBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBJdCdzIHdvcmtpbmcgd2l0aGluIHRoZSBsb29wIGBmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVzYzsgaSsrKWAgdG8gaGFuZGxlIHRob3NlIG11bHRpLWJ1ZmZlciBwYWNrZXRzLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdlJ3JlIG1vZGlmeWluZyB0aGUgc3RhdGljIGZ1bmN0aW9uIGBfX3hza19yY3ZgLiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYXJlIHRoZSBkaXJlY3QgY2FsbGVycy4gV2hpbGUgYHhza19yY3ZgIGlzIHN0YXRpYywgaXQncyBjYWxsZWQgYnkgYF9feHNrX21hcF9yZWRpcmVjdGAuIFNvLCB0aG9zZSB0d28sIGFsb25nIHdpdGggYHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcGAgYW5kIGBfX3hkcF9kb19yZWRpcmVjdF94c2tgIChvciBwZXJoYXBzIGB4ZHBfZG9fcmVkaXJlY3RgIGFuZCBgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RgIHNpbmNlIGl0J3MgaW5saW5lKSBhcmUgbXkgcHJpbWFyeSBmb2N1cyBwb2ludHMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AgZm9yIGFueSBhZGRpdGlvbmFsIGNhbGxlcnMgb2YgYF9feGRwX2RvX3JlZGlyZWN0X3hza2AganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzo1Ni45MTE1NzM4NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEzNjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hkcF9kb19yZWRpcmVjdF94c2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NDQ5Nj1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfbWFzdGVyX3JlZGlyZWN0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NDk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0OTg6c3RhdGljIGlubGluZSBpbnQgX194ZHBfZG9fcmVkaXJlY3RfeHNrKHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmksXFxubmV0L2NvcmUvZmlsdGVyLmMtNDQ5OS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDU5Mz1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDU5OS1cXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5uZXQvY29yZS9maWx0ZXIuYzo0NjAwOlxcdFxcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDYwMS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ2MDc9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MTQtXFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXFxubmV0L2NvcmUvZmlsdGVyLmM6NDYxNTpcXHRcXHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjU3LjAyMzcxODczNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg4MTkwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlhEUCBhbmQgQUZfWERQIEZ1bmN0aW9uIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBYRFAgcmVkaXJlY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGB4ZHBfZG9fcmVkaXJlY3RgLCBgeGRwX2RvX3JlZGlyZWN0X2ZyYW1lYCwgYW5kIGB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXBgIGFyZSB0aGUgYnJvYWQgWERQIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbi4gSG93ZXZlciwgdGhlc2UgYXJlIGdlbmVyaWMgWERQIGZ1bmN0aW9uYWxpdGllcy4gV2hhdCBJJ20gcmVhbGx5IGFmdGVyIGFyZSB0aGUgQUZfWERQLXNwZWNpZmljIGRldGFpbHMuIEZyb20gbXkga25vd2xlZGdlLCBJJ2Qgc2F5IEkgbmVlZCB0byBmb2N1cyBvbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYmVjYXVzZSB0aGV5IHNlZW0gbW9yZSByZWxldmFudCB0byB0aGUgQUZfWERQIGltcGxlbWVudGF0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgbW9yZSBYU0sgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgdG8gY29uc2lkZXIuIFNpbmNlIEkga25vdyB0aGUgcGF0Y2ggaXMgaW4gYG5ldC94ZHAveHNrLmNgLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCBBRl9YRFAgaXMsIGFzIGV4cGVjdGVkLCBnb3Zlcm5lZCBieSBgQ09ORklHX1hEUF9TT0NLRVRTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDowMi4wMTE5MTI5NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDE3MjI5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhEUF9TT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcXG5uZXQveGRwL0tjb25maWctMy1cXHRib29sIFxcXCJYRFAgc29ja2V0c1xcXCJcXG4tLVxcbm5ldC94ZHAvS2NvbmZpZy05LVxcbm5ldC94ZHAvS2NvbmZpZzoxMDpjb25maWcgWERQX1NPQ0tFVFNfRElBR1xcbm5ldC94ZHAvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDowNC4yNTM2NDE1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA2MzU3MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKlhEUF9TT0NLRVRTIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgWERQX1NPQ0tFVFNgLiBCZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlLiBMZXQgbWUgbmF2aWdhdGUgdG8gYG5ldC94ZHAvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgWERQLCBpbmNsdWRpbmcgdGhpcyBvbmUsIGFyZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBrZXJuZWwgc2V0dGluZ3MgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgWERQX1NPQ0tFVFNgIGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBhbmQgdXNlIHRoaXMgZmVhdHVyZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIEknbSBsb29raW5nIGZvciBkaXJlY3QgZGVwZW5kZW5jaWVzLCBvYnZpb3VzbHksIGJ1dCBhbHNvIGZvciBpbmRpcmVjdCBvbmVzIHRoYXQgYXJlIHNldCBvciB1bnNldCBiYXNlZCBvbiBjZXJ0YWluIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRyb3VibGVzaG9vdGluZyBhbmQga25vd2luZyB3aGF0IHRvIGV4cGVjdCBmcm9tIHRoaXMgZmVhdHVyZSBhbmQgb3RoZXJzIGFyb3VuZCBpdC4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MDcuMjYwMDAxNzY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFhEUF9TT0NLRVRTXFxuICAgMzpcXHRcXHRib29sIFxcXCJYRFAgc29ja2V0c1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gICA1OlxcdFxcdGRlZmF1bHQgblxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxcbiAgIDg6XFx0XFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgWERQX1NPQ0tFVFNfRElBR1xcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcXG4gIDEzOlxcdFxcdGRlZmF1bHQgblxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxcbiAgMTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDowNy4yNjAwNTcyNzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNDc3NTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKlhEUCBTb2NrZXQgRW5hYmxlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSByZWxhdGlvbnNoaXAgaXMgY2xlYXI6IGBYRFBfU09DS0VUU2AgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlcmVmb3JlLCBlbmFibGluZyBgWERQX1NPQ0tFVFNgIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuTm93LCBiZWZvcmUgSSBqdW1wIGludG8gdGhhdCwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb2RlYmFzZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIGFtIGludGVyZXN0ZWQgaW4gdGhpcyBiZWNhdXNlIHRoZXNlIHdvdWxkIGJlIGV4dGVybmFsIHBvaW50cyBvZiBjb250YWN0IHdpdGggdGhlIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIGBYRFBfU09DS0VUU2AuIEkgY2FuIHRoZW4gY29uc2lkZXIgb3RoZXIgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvbiBvdGhlciBzdWJzeXN0ZW1zLiBUaGF0IHF1aWNrIHNjYW4gd2lsbCBoZWxwIG1lIGF2b2lkIGFueSBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjExLjI4NDgzNDY4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxODcyNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qIHhza18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz00OT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xcbm5ldC94ZHAveHNrLmMtNTAtXFxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy01Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTU5PUVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy02MC1cXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NzY9RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTc3LVxcbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy03OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTg2PUVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTg3LVxcbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEwMz1FWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy0xMDQtXFxubmV0L3hkcC94c2suYzoxMDU6Ym9vbCB4c2tfdXNlc19uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTEwNi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEwOT1FWFBPUlRfU1lNQk9MKHhza191c2VzX25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTExMC1cXG5uZXQveGRwL3hzay5jOjExMTpzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX2dldF9wb29sX2Zyb21fcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3hkcC94c2suYy0xMTItXFx0XFx0XFx0XFx0XFx0ICAgIHUxNiBxdWV1ZV9pZClcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTIzPXN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMwLVxcbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcXG5uZXQveGRwL3hzay5jLTEzMi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE0Nz1zdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hkcC94c2suYy0xNjQtICovXFxubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy0xNjYtXFx0XFx0XFx0dTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYz0yMDg9c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE4LVxcbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG5uZXQveGRwL3hzay5jLTIyMC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTI2MD1zdGF0aWMgdm9pZCAqeHNrX2NvcHlfeGRwX3N0YXJ0KHN0cnVjdCB4ZHBfYnVmZiAqZnJvbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjY3LVxcbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcXG5uZXQveGRwL3hzay5jLTI2OS1cXHRcXHRcXHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcXG4tLVxcbm5ldC94ZHAveHNrLmM9Mjk2PXN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbi0tXFxubmV0L3hkcC94c2suYy0zODgtXFxubmV0L3hkcC94c2suYzozODk6c3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMzkwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9Mzk3PXN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDAzLVxcbm5ldC94ZHAveHNrLmM6NDA0OnN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtNDA1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDEzLVxcbm5ldC94ZHAveHNrLmM6NDE0OnN0YXRpYyBib29sIHhza19kZXZfcXVldWVfdmFsaWQoY29uc3Qgc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTQxNS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeGRwX3J4cV9pbmZvICppbmZvKVxcbi0tXFxubmV0L3hkcC94c2suYy00MzgtXFxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtNDQwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDUzLVxcbm5ldC94ZHAveHNrLmM6NDU0OnN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtNDU1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDYwLVxcbm5ldC94ZHAveHNrLmM6NDYxOmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00NjIte1xcbi0tXFxubmV0L3hkcC94c2suYy00NzYtXFxubmV0L3hkcC94c2suYzo0Nzc6c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC94ZHAveHNrLmMtNDc4LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NTE0PXZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXFxuLS1cXG5uZXQveGRwL3hzay5jLTUyMy1cXG5uZXQveGRwL3hzay5jOjUyNDp2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxcbm5ldC94ZHAveHNrLmMtNTI1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NTQ1PUVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxubmV0L3hkcC94c2suYy01NDYtXFxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTU0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTU1Nj1FWFBPUlRfU1lNQk9MKHhza190eF9yZWxlYXNlKTtcXG5uZXQveGRwL3hzay5jLTU1Ny1cXG5uZXQveGRwL3hzay5jOjU1ODpib29sIHhza190eF9wZWVrX2Rlc2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG5uZXQveGRwL3hzay5jLTU1OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTYwND1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX2Rlc2MpO1xcbm5ldC94ZHAveHNrLmMtNjA1LVxcbm5ldC94ZHAveHNrLmM6NjA2OnN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyaWVzKVxcbm5ldC94ZHAveHNrLmMtNjA3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNjE3LVxcbm5ldC94ZHAveHNrLmM6NjE4OnN0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy02MTktXFx0XFx0XFx0XFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXFxuLS1cXG5uZXQveGRwL3hzay5jPTY2OT14c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxcbi0tXFxubmV0L3hkcC94c2suYy03NDMtXFxubmV0L3hkcC94c2suYzo3NDQ6dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxubmV0L3hkcC94c2suYy03NDUte1xcbi0tXFxubmV0L3hkcC94c2suYz03OTE9RVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpO1xcbm5ldC94ZHAveHNrLmMtNzkyLVxcbm5ldC94ZHAveHNrLmM6NzkzOnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcXG5uZXQveGRwL3hzay5jLTc5NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTc5OS1cXG5uZXQveGRwL3hzay5jOjgwMDpzdGF0aWMgaW50IHhza19jcV9yZXNlcnZlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTgwMS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgxMC1cXG5uZXQveGRwL3hzay5jOjgxMTpzdGF0aWMgYm9vbCB4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODEyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODE1LVxcbm5ldC94ZHAveHNrLmM6ODE2OnN0YXRpYyB1NjQgeHNrX3NrYl9kZXN0cnVjdG9yX2dldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04MTcte1xcbi0tXFxubmV0L3hkcC94c2suYy04MjAtXFxubmV0L3hkcC94c2suYzo4MjE6c3RhdGljIHN0cnVjdCB4c2tfYWRkcnMgKl9feHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxcbm5ldC94ZHAveHNrLmMtODIyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODMzLVxcbm5ldC94ZHAveHNrLmM6ODM0OnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTgzNS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg0Ni1cXG5uZXQveGRwL3hzay5jOjg0NzpzdGF0aWMgaW50IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcXG5uZXQveGRwL3hzay5jLTg0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg1OC1cXG5uZXQveGRwL3hzay5jOjg1OTpzdGF0aWMgdm9pZCB4c2tfaW5jX251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04NjAte1xcbi0tXFxubmV0L3hkcC94c2suYy04NjgtXFxubmV0L3hkcC94c2suYzo4Njk6c3RhdGljIHUzMiB4c2tfZ2V0X251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04NzAte1xcbi0tXFxubmV0L3hkcC94c2suYy04ODAtXFxubmV0L3hkcC94c2suYzo4ODE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTg4Mi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hkcC94c2suYy05MTAtXFxubmV0L3hkcC94c2suYzo5MTE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy05MTItXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTkyMy1cXG5uZXQveGRwL3hzay5jOjkyNDpzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXFxubmV0L3hkcC94c2suYy05MjUte1xcbi0tXFxubmV0L3hkcC94c2suYz05MzE9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG5uZXQveGRwL3hzay5jOjkzMjp2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTkzMy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTk0NC1cXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy05NDYtXFx0XFx0XFx0ICAgICB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTYwLVxcbm5ldC94ZHAveHNrLmM6OTYxOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTc4LVxcbm5ldC94ZHAveHNrLmM6OTc5OnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTgwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTg3LVxcbm5ldC94ZHAveHNrLmM6OTg4OnN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXFxubmV0L3hkcC94c2suYy05ODktXFx0XFx0XFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQveGRwL3hzay5jPTEyMTU9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMzI5LVxcbm5ldC94ZHAveHNrLmM6MTMzMDpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTMzMS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNDItXFxubmV0L3hkcC94c2suYzoxMzQzOnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTM0NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNTMtXFxubmV0L3hkcC94c2suYzoxMzU0OnN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMTM1NS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEzNjQ9c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTQtXFxubmV0L3hkcC94c2suYzoxMzk1OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5uZXQveGRwL3hzay5jLTEzOTYte1xcbi0tXFxubmV0L3hkcC94c2suYz0xNDA2PXN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MzEtXFxubmV0L3hkcC94c2suYzoxNDMyOnN0YXRpYyBpbnQgeHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtMTQzMy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NDItXFxubmV0L3hkcC94c2suYzoxNDQzOnN0YXRpYyBfX3BvbGxfdCB4c2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQveGRwL3hzay5jLTE0NDQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NzUtXFxubmV0L3hkcC94c2suYzoxNDc2OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG5uZXQveGRwL3hzay5jLTE0NzctXFx0XFx0XFx0ICBib29sIHVtZW1fcXVldWUpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0OTMtXFxubmV0L3hkcC94c2suYzoxNDk0OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDk1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUwNy1cXG5uZXQveGRwL3hzay5jOjE1MDg6c3RhdGljIHN0cnVjdCB4c2tfbWFwICp4c2tfZ2V0X21hcF9saXN0X2VudHJ5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xNTA5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfc29jayBfX3JjdSAqKiptYXBfZW50cnkpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE1MjctXFxubmV0L3hkcC94c2suYzoxNTI4OnN0YXRpYyB2b2lkIHhza19kZWxldGVfZnJvbV9tYXBzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNTI5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU1My1cXG5uZXQveGRwL3hzay5jOjE1NTQ6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC94ZHAveHNrLmMtMTU1NS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE1OTI9c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNjA4LVxcbm5ldC94ZHAveHNrLmM6MTYwOTpzdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNjEwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxMy1cXG5uZXQveGRwL3hzay5jOjE2MTQ6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTYxNS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE4MDU9c3RydWN0IHhkcF91bWVtX3JlZ192MSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MTEtXFxubmV0L3hkcC94c2suYzoxODEyOnN0YXRpYyBpbnQgeHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQveGRwL3hzay5jLTE4MTMtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3hkcC94c2suYy0xOTM0LVxcbm5ldC94ZHAveHNrLmM6MTkzNTpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXFxubmV0L3hkcC94c2suYy0xOTM2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk0MS1cXG5uZXQveGRwL3hzay5jOjE5NDI6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxcbm5ldC94ZHAveHNrLmMtMTk0My17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE5NDk9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk1NC1cXG5uZXQveGRwL3hzay5jOjE5NTU6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC94ZHAveHNrLmMtMTk1Ni1cXHRcXHRcXHQgIHNvY2tvcHRfdCAqb3B0KVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDgyLVxcbm5ldC94ZHAveHNrLmM6MjA4MzpzdGF0aWMgaW50IHhza19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC94ZHAveHNrLmMtMjA4NC1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMjAtXFxubmV0L3hkcC94c2suYzoyMTIxOnN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQveGRwL3hzay5jLTIxMjItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjE1OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMTc4LVxcbm5ldC94ZHAveHNrLmM6MjE3OTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMjE4MC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxODktXFxubmV0L3hkcC94c2suYzoyMTkwOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQveGRwL3hzay5jLTIxOTEtXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQveGRwL3hzay5jPTIyNDM9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjQ2LVxcbm5ldC94ZHAveHNrLmM6MjI0NzpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGRwL3hzay5jLTIyNDgte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjUzLVxcbm5ldC94ZHAveHNrLmM6MjI1NDpzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhza19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hkcC94c2suYy0yMjU1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjI1OT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHhza19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjYzLVxcbm5ldC94ZHAveHNrLmM6MjI2NDpzdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxcbm5ldC94ZHAveHNrLmMtMjI2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjExLjM1MTAyNzA5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg3ODExNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFhTSyBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYHhza19nZW5lcmljX3JjdmAg4oCTIHRoYXQgZmVlbHMgcmlnaHQsIHRoYXQncyBhIGtleSBmb2N1cyBzeW1ib2wgZm9yIHRoaXMuIEFuZCBgeHNrX3JjdmAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCwgYnV0IGdvb2QgdG8ga25vdyBmb3IgY29udGV4dC4gQWhhLCBidXQgYF9feHNrX21hcF9yZWRpcmVjdGAgKmlzKiBleHBvcnRlZCwgaXQncyBub24tc3RhdGljISBFeGNlbGxlbnQuIExldCdzIGNvbmZpcm0gdGhhdCBgX194c2tfbWFwX3JlZGlyZWN0YCBpcyBpbmRlZWQgZGVmaW5lZCB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLiBZZXAsIGl0J3MgcmlnaHQgdGhlcmUsIGF0IGxpbmUgNDk3LlxuXG5TbywgdGFraW5nIHN0b2NrLCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHk6XG5cbiogICBgeHNrX2dlbmVyaWNfcmN2YFxuKiAgIGBfX3hza19tYXBfcmVkaXJlY3RgXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQuIFdlJ2xsIG5lZWQgYFhEUF9TT0NLRVRTYCwgb2J2aW91c2x5LiBBbmQgc2luY2UgWERQIHNvY2tldHMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIHVzaW5nIEJQRiBpbnRlcm5hbGx5LCBgQlBGX1NZU0NBTExgIGlzIGltcGxpZWQsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGV4cGxpY2l0IGFib3V0IGl0LlxuXG5UaW1lIGZvciBhIHF1aWNrIHNhbml0eSBjaGVjayBpbiBgbmV0L3hkcC9LY29uZmlnYC4gTGV0J3MgY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBjb25maWdzIGF0IHBsYXkgaGVyZS4gWXVwLCBqdXN0IGBYRFBfU09DS0VUU2AuXG5cbk5vdywgdGltZSB0byBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UgaXRzZWxmLCBzcGVjaWZpY2FsbHksIGBuZXQveGRwL3hzay5jYCwgYW5kIHRob3JvdWdobHkgZXhhbWluZSBib3RoIGB4c2tfZ2VuZXJpY19yY3ZgIGFuZCBgX194c2tfbWFwX3JlZGlyZWN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MTcuNzM4ODQyNTYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU1MTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgeHNrX2dlbmVyaWNfcmN2fGludCBfX3hza19tYXBfcmVkaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTQ1ND1zdGF0aWMgdm9pZCB4c2tfZmx1c2goc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDYwLVxcbm5ldC94ZHAveHNrLmM6NDYxOmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00NjIte1xcbi0tXFxubmV0L3hkcC94c2suYz00Nzc9c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxubmV0L3hkcC94c2suYy00OTYtXFxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjE3Ljc4MzQwMTc2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQ0MjA3MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVhbGluZyB3aXRoIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBfX3hza19yY3ZgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hkcC94c2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLlxuXG5Fc3NlbnRpYWxseSwgd2hhdCdzIGhhcHBlbmluZyBpcyB0aGV5J3JlIG1vZGlmeWluZyB0aGUgY29kZSB0byAqcHJlLWFsbG9jYXRlKiBhbGwgdGhlIGJ1ZmZlcnMgbmVlZGVkIGZvciBhIG11bHRpLWJ1ZmZlciBYRFAgcGFja2V0ICpiZWZvcmUqIHByb2Nlc3NpbmcgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgdGhvc2UgbmFzdHkgcGFydGlhbCBwYWNrZXQgZGVsaXZlcmllcyBpZiB0aGVyZSdzIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gSWYgYW4gYWxsb2NhdGlvbiBmYWlscyAqYW55d2hlcmUqIGFsb25nIHRoZSBsaW5lLCBpdCBpbW1lZGlhdGVseSBmcmVlcyBldmVyeXRoaW5nIGl0ICpkaWQqIG1hbmFnZSB0byBhbGxvY2F0ZSBhbmQgZHJvcHMgdGhlIHBhY2tldCwgcmV0dXJuaW5nIGAtRU5PTUVNYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IG1lbW9yeSBsZWFrcyBhbmQgYXZvaWRzIGFueSBjb3JydXB0ZWQgc3RhdGUgdGhhdCBtaWdodCBoYXBwZW4gd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gb3V0LW9mLW1lbW9yeSAoT09NKSBzaXR1YXRpb24gZHVyaW5nIG11bHRpLWJ1ZmZlciBwYWNrZXQgcmVjZXB0aW9uLiBTbWFydC5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgY29yZSBBRl9YRFAgcmVjZWl2ZSBwYXRoLiBJdCdzIGFjY2Vzc2libGUgdmlhIGJvdGggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLCBzbyBJJ2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLiBBbmQgaXQncyBkZXBlbmRlbnQgb24gdGhlIGBYRFBfU09DS0VUU2AgY29uZmlnIG9wdGlvbiBiZWluZyBlbmFibGVkLlxuXG5HaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAsIHNvIEknbGwgc2V0IGBGb2N1c1N5bWJvbHM9W1wieHNrX2dlbmVyaWNfcmN2XCIsIFwiX194c2tfbWFwX3JlZGlyZWN0XCJdYC4gSSdsbCBhbHNvIGVuc3VyZSB0aGF0IGBFbmFibGVDb25maWdzPVtcIlhEUF9TT0NLRVRTXCJdYCBpcyBzZXQuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGgsIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoLCB0byBwcmUtYWxsb2NhdGUgYnVmZmVycywgd2hpY2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBpdCBoYW5kbGVzIE9PTSBzY2VuYXJpb3Mgd2l0aCBtdWx0aS1idWZmZXIgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIG9mdGVuIHJldmVhbCBpbnRlcmVzdGluZyBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3NywiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDoyNC42Mjc2MTEyMjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk3NTczMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZ2VuZXJpY19yY3ZcIixcbiAgICBcIl9feHNrX21hcF9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoIHRvIHByZS1hbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IGJ1ZmZlcnMgZm9yIG11bHRpLWJ1ZmZlciBwYWNrZXRzLCBwcmV2ZW50aW5nIHBhcnRpYWwgcGFja2V0IGRlbGl2ZXJ5IG9uIE9PTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZ2VuZXJpY19yY3ZcIixcbiAgICBcIl9feHNrX21hcF9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoIHRvIHByZS1hbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IGJ1ZmZlcnMgZm9yIG11bHRpLWJ1ZmZlciBwYWNrZXRzLCBwcmV2ZW50aW5nIHBhcnRpYWwgcGFja2V0IGRlbGl2ZXJ5IG9uIE9PTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjI0LjcwMjU5NDczM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MTE0MzIwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDoyNC43MDMxNDIwNzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjM5MTA4ODAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3hza19yY3ZgIGluIGBuZXQveGRwL3hzay5jYCB0byBwcmUtYWxsb2NhdGUgYWxsIHJlcXVpcmVkIFhEUCBidWZmZXJzIGJlZm9yZSBjb3B5aW5nIGRhdGEgaW50byB0aGVtLiBUaGlzIHByZXZlbnRzIHBhcnRpYWwgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2ggYSBtdWx0aS1idWZmZXIgcGFja2V0LiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgc2FmZXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVmZmVyJ3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjYjIwOTAyNDJkZmE3MDFlNTU3YzgyN2NhZDFkMzI4ODRmODRjYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMjozMzozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCA3ODU1ZWUwOWM0YjY0Li4zMzQ3NWIxODBlYTZmIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTI5OCw5ICsyOTgsMTEgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG4gXHR1MzIgZnJhbWVfc2l6ZSA9IF9feHNrX3Bvb2xfZ2V0X3J4X2ZyYW1lX3NpemUoeHMtXHUwMDNlcG9vbCk7XG4gXHR2b2lkICpjb3B5X2Zyb20gPSB4c2tfY29weV94ZHBfc3RhcnQoeGRwKSwgKmNvcHlfdG87XG4gXHR1MzIgZnJvbV9sZW4sIG1ldGFfbGVuLCByZW0sIG51bV9kZXNjO1xuLVx0c3RydWN0IHhkcF9idWZmX3hzayAqeHNrYjtcbitcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7XG4gXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhza194ZHA7XG4rXHRMSVNUX0hFQUQoeHNrX2J1ZmZzKTtcbiBcdHNrYl9mcmFnX3QgKmZyYWc7XG4rXHR1MzIgaTtcbiBcbiBcdGZyb21fbGVuID0geGRwLVx1MDAzZWRhdGFfZW5kIC0gY29weV9mcm9tO1xuIFx0bWV0YV9sZW4gPSB4ZHAtXHUwMDNlZGF0YSAtIGNvcHlfZnJvbTtcbkBAIC0zNDMsMjMgKzM0NSw0NSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdFx0ZnJhZyA9ICBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1swXTtcbiBcdH1cbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9kZXNjOyBpKyspIHtcbitcdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xuK1x0XHRpZiAoIXhza194ZHApXG4rXHRcdFx0Z290byBlcnJfYWxsb2M7XG4rXG4rXHRcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcbitcdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpXG4rXHRcdFx0Z290byBlcnJfYWxsb2M7XG4rXG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUsIFx1MDAyNnhza19idWZmcyk7XG4rXHR9XG4rXG4gXHRkbyB7XG4gXHRcdHUzMiB0b19sZW4gPSBmcmFtZV9zaXplICsgbWV0YV9sZW47XG4gXHRcdHUzMiBjb3BpZWQ7XG4gXG4tXHRcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKTtcbitcdFx0eHNrYiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2eHNrX2J1ZmZzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLFxuK1x0XHRcdFx0XHRsaXN0X25vZGUpO1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKTtcbitcdFx0eHNrX3hkcCA9IFx1MDAyNnhza2ItXHUwMDNleGRwO1xuIFx0XHRjb3B5X3RvID0geHNrX3hkcC1cdTAwM2VkYXRhIC0gbWV0YV9sZW47XG4gXG4gXHRcdGNvcGllZCA9IHhza19jb3B5X3hkcChjb3B5X3RvLCBcdTAwMjZjb3B5X2Zyb20sIHRvX2xlbiwgXHUwMDI2ZnJvbV9sZW4sIFx1MDAyNmZyYWcsIHJlbSk7XG4gXHRcdHJlbSAtPSBjb3BpZWQ7XG4gXG4tXHRcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcbiBcdFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGNvcGllZCAtIG1ldGFfbGVuLFxuIFx0XHRcdFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XG4gXHRcdG1ldGFfbGVuID0gMDtcbiBcdH0gd2hpbGUgKHJlbSk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfYWxsb2M6XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeHNrYiwgdG1wLCBcdTAwMjZ4c2tfYnVmZnMsIGxpc3Rfbm9kZSkge1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKTtcbitcdFx0eHNrX2J1ZmZfZnJlZShcdTAwMjZ4c2tiLVx1MDAzZXhkcCk7XG4rXHR9XG4rXHR4cy1cdTAwM2VyeF9kcm9wcGVkKys7XG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MjQuNzAzMTQyNzUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjQ3NzQ5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYU0sgQnVmZmVyIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBfX3hza19yY3ZgIHdpdGhpbiBgbmV0L3hkcC94c2suY2AuIFRoZSBjb3JlIHNlZW1zIHRvIGJlIGFib3V0IHByZS1hbGxvY2F0aW5nIGJ1ZmZlcnMsIHNwZWNpZmljYWxseSB1c2luZyBhIGBMSVNUX0hFQUQoeHNrX2J1ZmZzKWAgYW5kIGB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKWAgZm9yIGEgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIChgbnVtX2Rlc2NgKS4gSSBzZWUgdGhlIGAtRU5PTUVNYCBlcnJvciBoYW5kbGluZyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIFRoZSBhbGxvY2F0aW9uIGlzIGZvbGxvd2VkIGJ5IGEgY29weSBvcGVyYXRpb24gYW5kIGEgY2FsbCB0byBgX194c2tfcmN2X3pjX3NhZmVgLiBUaGF0IGFsbCBtYWtlcyBzZW5zZS5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSdtIHNlZWluZyBhIGNoZWNrOiBgaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpIGdvdG8gZXJyX2FsbG9jO2AuIFRoYXQncyB0byBjb25maXJtIHRoYXQgdGhlIGxpc3Qgbm9kZSBpcyBlbXB0eSBiZWZvcmUgaXQncyBhZGRlZCB0byB0aGUgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEknbSBqdXN0IHF1aWNrbHkgdGhpbmtpbmcgaWYgdGhlcmUgYXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlIGFyZSBhbGxvY2F0aW5nIGB4ZHBfYnVmZmAgdGhyb3VnaCBgeHNrX2J1ZmZfYWxsb2NgLlxuXG5Ob3csIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMgb2YgYHhza19idWZmX2FsbG9jYCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaXNzdWUgdGhhdCBJJ20gbWlzc2luZy4gVGltZSB0byBkaXZlIGludG8gYG5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jYCBvciBtYXliZSBpdCdzIGluIGBuZXQveGRwL3hzay5jYCBpdHNlbGYuIEdvdHRhIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MjkuMjY3OTIwMzM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzMjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfYnVmZl9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTI5Nj1zdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzEzLVxcbm5ldC94ZHAveHNrLmM6MzE0OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zMTUtXFx0XFx0aWYgKCF4c2tfeGRwKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTM0OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2Rlc2M7IGkrKykge1xcbm5ldC94ZHAveHNrLmM6MzQ5OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zNTAtXFx0XFx0aWYgKCF4c2tfeGRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDoyOS4zMTA0NTgwMzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MzY4MTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgeHNrX2J1ZmZfYWxsb2MgRGV0YWlscyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgeHNrX2J1ZmZfYWxsb2NgIHRob3JvdWdobHkuIEl0J3MgdGhlIGNvcm5lcnN0b25lIG9mIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFja2V0IGJ1ZmZlcnMgaW4gWERQLCBhbmQgYSBzb2xpZCBncmFzcCBvbiBpdCBpcyBub24tbmVnb3RpYWJsZSBmb3Igb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFueSBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIHBvaW50cywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhlIE5JQyBhbmQgdGhlIGhvc3QuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipNZW1vcnkgYWxpZ25tZW50Kio6IFdoYXQgYXJlIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBidWZmZXJzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgZHVlIHRvIHRoZSBhbGlnbm1lbnQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdmFyaW91cyBOSUMgb2ZmbG9hZHMgb3IgRE1BIG9wZXJhdGlvbnM/XG4qICAgKipCdWZmZXIgcG9vbCBtYW5hZ2VtZW50Kio6IEhvdyBhcmUgdGhlc2UgYnVmZmVycyBtYW5hZ2VkIGludGVybmFsbHk/IElzIGl0IGEgc2ltcGxlIGZyZWVsaXN0LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byB3YXRjaCBvdXQgZm9yLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQ/IEhvdyBkb2VzIHRoaXMgcG9vbCB3b3JrIHdpdGggdGhlIHJpbmdzIGFuZCBob3cgYXJlIHRoZXkgbGlua2VkP1xuKiAgICoqQ29udGVudGlvbioqOiBXaGVyZSBhcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb25zPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MgaW4gdGhlIGFsbG9jYXRpb24gcGF0aD8gQXJlIHRoZXJlIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGhhemFyZHMgdG8gdGhlIGB4c2tfYnVmZl9hbGxvY2AgdGhhdCBjb3VsZCBiZSBjb25zaWRlcmVkP1xuKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgb2YgYHhza19idWZmX2FsbG9jYD8gQXJlIHRoZXJlIHByb3BlciByZXNvdXJjZSBleGhhdXN0aW9uIGNoZWNrcyBhbmQgZmFpbHVyZSBwYXRod2F5cyBvciBwb3RlbnRpYWwgbGVha3MgdG8gYWRkcmVzcz9cbiogICAqKkludGVyYWN0aW9uIHdpdGggWERQIHJpbmdzKio6IExldCdzIHNlZSBob3cgYHhza19idWZmX2FsbG9jYCB3b3JrcyB3aXRoIHRoZSByaW5ncy4gSSBuZWVkIHRvIHZpc3VhbGl6ZSB0aGUgY29tcGxldGUgZmxvdyBvZiBwYWNrZXRzLCBmcm9tIE5JQyB0byBgeHNrX2J1ZmZfYWxsb2NgLCBhbmQgdGhlbiBob3cgdGhleSBhcmUgbGlua2VkIGludG8gdGhlIHJpbmdzLlxuKiAgICoqQWx0ZXJuYXRpdmUgYWxsb2NhdG9ycyoqOiBBcmUgdGhlcmUgcG90ZW50aWFsIGFsdGVybmF0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB0byBjb25zaWRlciwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS9OSUMgYW5kIHVzZSBjYXNlPyBDb3VsZCBjdXN0b20gYWxsb2NhdG9ycywgb3IgZXZlbiBsZXZlcmFnaW5nIHRoZSBrZXJuZWwncyBzbGFiIGFsbG9jYXRvcnMsIG9mZmVyIGFkdmFudGFnZXMgaW4gY2VydGFpbiBzY2VuYXJpb3M/XG4qICAgKipQZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMqKjogTG9va2luZyBhdCB0aGUgY29kZSBpdHNlbGYsIGNhbiBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IGJlIHNwb3R0ZWQ/XG5JIG5lZWQgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUsIHRyYWNlIHRoZSBjb250cm9sIGZsb3csIGFuZCB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBsaW5lLCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLi4uIG9yIHdoZXJlIHRoZSBidWdzIGhpZGUuIEknbSBnb2luZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzU0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjMzLjY4NDE0MjMxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxNzExNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1ZmZfYWxsb2NcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTI5Nj1zdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzEzLVxcbm5ldC94ZHAveHNrLmM6MzE0OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zMTUtXFx0XFx0aWYgKCF4c2tfeGRwKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTM0OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2Rlc2M7IGkrKykge1xcbm5ldC94ZHAveHNrLmM6MzQ5OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zNTAtXFx0XFx0aWYgKCF4c2tfeGRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDozMy43MzczMjM4NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MDg1NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRlYnVnZ2luZyBhIFN1c3BlY3RlZCBJbmxpbmUgRnVuY3Rpb24gSXNzdWUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIGNvZGUgaXNuJ3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBJJ20gc3VzcGVjdGluZyBpdCBtaWdodCBiZSB0aGUgc291cmNlIG9mIHRoZSB0cm91YmxlIGNvdWxkIGJlIGFuIGlubGluZSBmdW5jdGlvbi4gSW5saW5lIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIHRyaWNreSB0byBkZWJ1ZyBiZWNhdXNlIHRoZSBjb21waWxlciBvZnRlbiBoYW5kbGVzIHRoZW0gaW4gYSB3YXkgdGhhdCBvYnNjdXJlcyB0aGUgZGlyZWN0IHNvdXJjZSBjb2RlIGV4ZWN1dGlvbiwgaXQncyBub3QgZXhhY3RseSBlYXN5IHRvIHRyYWNlIHRoZWlyIGZsb3cgaW4gdGhlIHNhbWUgd2F5IGFzIGEgcmVndWxhciBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gbG9vaywgYmVjYXVzZSBpdCdzIGEgY29tbW9uIGFyZWEgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgY29tcGxleCBsb2dpYyBvciBzaWRlIGVmZmVjdHMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGhlYWRlciBmaWxlcyB0byBzZWUgaWYgSSBmaW5kIGFueSBzdXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjM2LjkxODE4MzA4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTUyNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19idWZmX2FsbG9jXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9MTEzPXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCB4c2tfYnVmZl94ZHBfZ2V0X2ZyYW1lX2RtYShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTExOS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoxMjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgeGRwX2J1ZmYgKnhza19idWZmX2FsbG9jKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTEyMS17XFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00NDM9c3RhdGljIGlubGluZSBkbWFfYWRkcl90IHhza19idWZmX3hkcF9nZXRfZnJhbWVfZG1hKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDQ3LVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oOjQ0ODpzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZHBfYnVmZiAqeHNrX2J1ZmZfYWxsb2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MzcuMDUwMzQxODQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTYyODcwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHhza19idWZmX2FsbG9jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdpdGggYHhza19idWZmX2FsbG9jYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29ybmVyc3RvbmUgb2YgaG93IFhEUCBtYW5hZ2VzIG1lbW9yeSBmb3IgcGFja2V0IGRhdGEuIEkgYWxyZWFkeSBrbm93IHRoZSBoaWdoLWxldmVsIGRldGFpbHMg4oCTIGl0J3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSByaW5nIGJ1ZmZlcnMgdXNlZCB0byBleGNoYW5nZSBwYWNrZXRzIGJldHdlZW4gdGhlIFhEUCBwcm9ncmFtIGFuZCB0aGUgaG9zdCBrZXJuZWwuIEJ1dCBub3cgSSB3YW50IGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBudWFuY2VzIGluIHRoaXMgcHJvY2Vzcy4gSSBuZWVkIHRvIGtub3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhlIHN5c3RlbSwgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXQgbWlnaHQgaW50cm9kdWNlIGluIGhpZ2gtcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBzY2hlbWUgcGxheXMgb3V0LiBIb3cgZG9lcyBpdCBtYW5hZ2UgdGhlIGB4c2tfdW1lbWAsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBkZXNpZ24gb24gdGhpbmdzIGxpa2UgY2FjaGUgZWZmaWNpZW5jeSBhbmQgZnJhZ21lbnRhdGlvbj8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgaXNzdWVzIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIHZ5aW5nIGZvciByZXNvdXJjZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzg4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6NDAuMzA2NjMxNzkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiID0gY29udGFpbmVyX29mKHhkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0cmV0dXJuIHhwX2dldF9mcmFtZV9kbWEoeHNrYik7XFxuIDExODpcXHR9XFxuIDExOTpcXHRcXG4gMTIwOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHhkcF9idWZmICp4c2tfYnVmZl9hbGxvYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4gMTIxOlxcdHtcXG4gMTIyOlxcdFxcdHJldHVybiB4cF9hbGxvYyhwb29sKTtcXG4gMTIzOlxcdH1cXG4gMTI0OlxcdFxcbiAxMjU6XFx0c3RhdGljIGlubGluZSBib29sIHhza19pc19lb3BfZGVzYyhjb25zdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHRyZXR1cm4gIXhwX21iX2Rlc2MoZGVzYyk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qIFJldHVybnMgYXMgbWFueSBlbnRyaWVzIGFzIHBvc3NpYmxlIHVwIHRvIG1heC4gMCBcXHUwMDNjPSBOIFxcdTAwM2M9IG1heC4gKi9cXG4gMTMxOlxcdHN0YXRpYyBpbmxpbmUgdTMyIHhza19idWZmX2FsbG9jX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2J1ZmYgKip4ZHAsIHUzMiBtYXgpXFxuIDEzMjpcXHR7XFxuIDEzMzpcXHRcXHRyZXR1cm4geHBfYWxsb2NfYmF0Y2gocG9vbCwgeGRwLCBtYXgpO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgeHNrX2J1ZmZfY2FuX2FsbG9jKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgY291bnQpXFxuIDEzNzpcXHR7XFxuIDEzODpcXHRcXHRyZXR1cm4geHBfY2FuX2FsbG9jKHBvb2wsIGNvdW50KTtcXG4gMTM5OlxcdH1cXG4gMTQwOlxcdFxcbiAxNDE6XFx0c3RhdGljIGlubGluZSB2b2lkIHhza19idWZmX2ZyZWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIDE0MjpcXHR7XFxuIDE0MzpcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiID0gY29udGFpbmVyX29mKHhkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcXG4gMTQ0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnhza2JfbGlzdCA9IFxcdTAwMjZ4c2tiLVxcdTAwM2Vwb29sLVxcdTAwM2V4c2tiX2xpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjQwLjMwNjcwOTgzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA3MjkwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBCdWZmZXIgUHJlLWFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgX194c2tfcmN2YCB0byBwcmUtYWxsb2NhdGUgYWxsIG9mIHRoZSBgeHNrX3hkcGAgYnVmZmVycyAqYmVmb3JlKiBjb3B5aW5nIGFueSBkYXRhIGludG8gdGhlbS4gVGhlIGdvYWwgaGVyZSBpcyB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkLXBhY2tldCwgcGFydGljdWxhcmx5IHdpdGggbXVsdGktYnVmZmVyIFhEUCwgd2hpY2ggd291bGQgbGVhZCB0byBhIHBhcnRpYWwgY29weSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdCBkYXRhLiBJZiBhbiBhbGxvY2F0aW9uICpkb2VzKiBmYWlsLCBpdCBjbGVhbnMgdXAgYnkgZnJlZWluZyBhbnkgYnVmZmVycyBpdCAqZGlkKiBtYW5hZ2UgdG8gYWxsb2NhdGUgYW5kIHJldHVybnMgYC1FTk9NRU1gLiBJdCBzZWVtcyB0byBtZSB0aGlzIGlzIHByaW1hcmlseSBhIGJ1ZyBmaXgsIGxpa2VseSBhZGRyZXNzaW5nIGVpdGhlciBhIG1lbW9yeSBsZWFrLCBwYWNrZXQgZHJvcCBkdWUgdG8gaW5jb21wbGV0ZSBjb3B5LCBvciBwb3NzaWJseSBhIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbiBzY2VuYXJpby5cblxuQWgsIGhhbmcgb24gYSBzZWNvbmQuIEkgc2VlIHRoaXMgYWRkaXRpb246XG5cbmBgYGNcblx0XHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XG5cdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpXG5cdFx0XHRnb3RvIGVycl9hbGxvYztcbmBgYFxuXG5UaGlzICpyZWFsbHkqIGxvb2tzIGxpa2UgYSBjaGVjayBvbiB3aGV0aGVyIGBsaXN0X25vZGVgIGlzIGVtcHR5LiBJZiBub3QsIGl0IGJhaWxzIG91dCB0byBgZXJyX2FsbG9jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGlzIGFpbWVkIGF0IGZpeGluZyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSDigJMgZGVmaW5pdGVseSBhIG1lbW9yeSBzYWZldHkgcHJvYmxlbSB0aGF0IGNvdWxkIHByb2JhYmx5IGJlIGNhdWdodCBieSBLQVNBTiBvciB0aGUgc3RhbmRhcmQgbGlzdCBkZWJ1Z2dpbmcuIEJ1dCBpdCBpcyBzdGlsbCBhIGdvb2QgY2hlY2sgdG8gaGF2ZS5cblxuU28sIGxldCdzIG5haWwgdGhpcyBkb3duLiBEb2VzIHRoaXMgcGF0Y2ggZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgY2hhbmdlcyB0aGUgKmFsbG9jYXRpb24gc3RyYXRlZ3kqIHRvIHByZS1hbGxvY2F0ZSBhbmQgYWRkcyB0aGlzIHNhZmV0eSBjaGVjaywgdGhhdCdzIGFsbC4gRG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEFic29sdXRlbHkgbm90LiBJdCdzIGNvcHlpbmcgZGF0YSBmcm9tIHdoYXQgc2hvdWxkIGJlIGEgZnVsbHkgaW5pdGlhbGl6ZWQgc291cmNlIGJ1ZmZlciAodGhlIGluY29taW5nIHBhY2tldCkgaW50byB0aGUgcHJlLWFsbG9jYXRlZCBidWZmZXJzLiBUaGlzIGlzbid0IGEgY2FzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQgaXMgZml4aW5nIGEgbGlzdCBjb3JydXB0aW9uIG9yIG1lbW9yeSBsZWFrLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU49ZmFsc2VgIGZsYWcgaXMgY29ycmVjdCBoZXJlLiBUaGlzIGRvZXNuJ3Qgc2VlbSBsaWtlIGl0IG5lZWRzIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTk3LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjQ4LjYxNDAwMjg4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXIncyBsaXN0IG5vZGUgaXMgZW1wdHkgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgdGVtcG9yYXJ5IGxpc3QuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlzdCBpbnRlZ3JpdHkgaXNzdWVzICh3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBsaXN0IGRlYnVnZ2luZyksIGFuZCBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXIncyBsaXN0IG5vZGUgaXMgZW1wdHkgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgdGVtcG9yYXJ5IGxpc3QuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlzdCBpbnRlZ3JpdHkgaXNzdWVzICh3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBsaXN0IGRlYnVnZ2luZyksIGFuZCBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 22:16:37 +0000 UTC FinishedAt: 2026-08-13 22:34:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "8aec947c-494d-4f3d-8592-97658f086812" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_generic_rcv", "__xsk_map_redirect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssCiAgICAmIzM0O19feHNrX21hcF9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3hza19yY3ZgIGluIGBuZXQveGRwL3hzay5jYCB0byBwcmUtYWxsb2NhdGUgYWxsIHJlcXVpcmVkIFhEUCBidWZmZXJzIGJlZm9yZSBjb3B5aW5nIGRhdGEgaW50byB0aGVtLiBUaGlzIHByZXZlbnRzIHBhcnRpYWwgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2ggYSBtdWx0aS1idWZmZXIgcGFja2V0LiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgc2FmZXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVmZmVyJiMzOTtzIGxpc3Qgbm9kZSBpcyBlbXB0eSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSB0ZW1wb3JhcnkgbGlzdC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsaXN0IGludGVncml0eSBpc3N1ZXMgKHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGxpc3QgZGVidWdnaW5nKSwgYW5kIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCByZWNlaXZlIHBhdGggdG8gcHJlLWFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgYnVmZmVycyBmb3IgbXVsdGktYnVmZmVyIHBhY2tldHMsIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZjYjIwOTAyNDJkZmE3MDFlNTU3YzgyN2NhZDFkMzI4ODRmODRjYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMjozMzozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggNzg1NWVlMDljNGI2NC4uMzM0NzViMTgwZWE2ZiAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC0yOTgsOSAmIzQzOzI5OCwxMSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdHUzMiBmcmFtZV9zaXplID0gX194c2tfcG9vbF9nZXRfcnhfZnJhbWVfc2l6ZSh4cy1cdTAwM2Vwb29sKTtcbiBcdHZvaWQgKmNvcHlfZnJvbSA9IHhza19jb3B5X3hkcF9zdGFydCh4ZHApLCAqY29weV90bztcbiBcdHUzMiBmcm9tX2xlbiwgbWV0YV9sZW4sIHJlbSwgbnVtX2Rlc2M7XG4tXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiO1xuJiM0MztcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7XG4gXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhza194ZHA7XG4mIzQzO1x0TElTVF9IRUFEKHhza19idWZmcyk7XG4gXHRza2JfZnJhZ190ICpmcmFnO1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0ZnJvbV9sZW4gPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSBjb3B5X2Zyb207XG4gXHRtZXRhX2xlbiA9IHhkcC1cdTAwM2VkYXRhIC0gY29weV9mcm9tO1xuQEAgLTM0MywyMyAmIzQzOzM0NSw0NSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdFx0ZnJhZyA9ICBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1swXTtcbiBcdH1cbiBcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVzYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdGlmICgheHNrX3hkcClcbiYjNDM7XHRcdFx0Z290byBlcnJfYWxsb2M7XG4mIzQzO1xuJiM0MztcdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX2FsbG9jO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUsIFx1MDAyNnhza19idWZmcyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGRvIHtcbiBcdFx0dTMyIHRvX2xlbiA9IGZyYW1lX3NpemUgJiM0MzsgbWV0YV9sZW47XG4gXHRcdHUzMiBjb3BpZWQ7XG4gXG4tXHRcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdHhza2IgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnhza19idWZmcywgc3RydWN0IHhkcF9idWZmX3hzayxcbiYjNDM7XHRcdFx0XHRcdGxpc3Rfbm9kZSk7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKTtcbiYjNDM7XHRcdHhza194ZHAgPSBcdTAwMjZ4c2tiLVx1MDAzZXhkcDtcbiBcdFx0Y29weV90byA9IHhza194ZHAtXHUwMDNlZGF0YSAtIG1ldGFfbGVuO1xuIFxuIFx0XHRjb3BpZWQgPSB4c2tfY29weV94ZHAoY29weV90bywgXHUwMDI2Y29weV9mcm9tLCB0b19sZW4sIFx1MDAyNmZyb21fbGVuLCBcdTAwMjZmcmFnLCByZW0pO1xuIFx0XHRyZW0gLT0gY29waWVkO1xuIFxuLVx0XHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XG4gXHRcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcbiBcdFx0XHRcdCAgcmVtID8gWERQX1BLVF9DT05URCA6IDApO1xuIFx0XHRtZXRhX2xlbiA9IDA7XG4gXHR9IHdoaWxlIChyZW0pO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfYWxsb2M6XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhza2IsIHRtcCwgXHUwMDI2eHNrX2J1ZmZzLCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpO1xuJiM0MztcdFx0eHNrX2J1ZmZfZnJlZShcdTAwMjZ4c2tiLVx1MDAzZXhkcCk7XG4mIzQzO1x0fVxuJiM0MztcdHhzLVx1MDAzZXJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4c2tfdHhfd3JpdGVhYmxlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssCiAgICAmIzM0O19feHNrX21hcF9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHJlY2VpdmUgcGF0aCB0byBwcmUtYWxsb2NhdGUgYWxsIG5lY2Vzc2FyeSBidWZmZXJzIGZvciBtdWx0aS1idWZmZXIgcGFja2V0cywgcHJldmVudGluZyBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyeSBvbiBPT00uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmNiMjA5MDI0MmRmYTcwMWU1NTdjODI3Y2FkMWQzMjg4NGY4NGNiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDIyOjMzOjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmMKaW5kZXggNzg1NWVlMDljNGI2NC4uMzM0NzViMTgwZWE2ZiAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jCkBAIC0yOTgsOSAmIzQzOzI5OCwxMSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbikKIAl1MzIgZnJhbWVfc2l6ZSA9IF9feHNrX3Bvb2xfZ2V0X3J4X2ZyYW1lX3NpemUoeHMtJmd0O3Bvb2wpOwogCXZvaWQgKmNvcHlfZnJvbSA9IHhza19jb3B5X3hkcF9zdGFydCh4ZHApLCAqY29weV90bzsKIAl1MzIgZnJvbV9sZW4sIG1ldGFfbGVuLCByZW0sIG51bV9kZXNjOwotCXN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2I7CiYjNDM7CXN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7CiAJc3RydWN0IHhkcF9idWZmICp4c2tfeGRwOwomIzQzOwlMSVNUX0hFQUQoeHNrX2J1ZmZzKTsKIAlza2JfZnJhZ190ICpmcmFnOwomIzQzOwl1MzIgaTsKIAogCWZyb21fbGVuID0geGRwLSZndDtkYXRhX2VuZCAtIGNvcHlfZnJvbTsKIAltZXRhX2xlbiA9IHhkcC0mZ3Q7ZGF0YSAtIGNvcHlfZnJvbTsKQEAgLTM0MywyMyAmIzQzOzM0NSw0NSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbikKIAkJZnJhZyA9ICAmYW1wO3NpbmZvLSZndDtmcmFnc1swXTsKIAl9CiAKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJeHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLSZndDtwb29sKTsKJiM0MzsJCWlmICgheHNrX3hkcCkKJiM0MzsJCQlnb3RvIGVycl9hbGxvYzsKJiM0MzsKJiM0MzsJCXhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTsKJiM0MzsJCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSkpKQomIzQzOwkJCWdvdG8gZXJyX2FsbG9jOwomIzQzOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSwgJmFtcDt4c2tfYnVmZnMpOwomIzQzOwl9CiYjNDM7CiAJZG8gewogCQl1MzIgdG9fbGVuID0gZnJhbWVfc2l6ZSAmIzQzOyBtZXRhX2xlbjsKIAkJdTMyIGNvcGllZDsKIAotCQl4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtJmd0O3Bvb2wpOwomIzQzOwkJeHNrYiA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDt4c2tfYnVmZnMsIHN0cnVjdCB4ZHBfYnVmZl94c2ssCiYjNDM7CQkJCQlsaXN0X25vZGUpOwomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSk7CiYjNDM7CQl4c2tfeGRwID0gJmFtcDt4c2tiLSZndDt4ZHA7CiAJCWNvcHlfdG8gPSB4c2tfeGRwLSZndDtkYXRhIC0gbWV0YV9sZW47CiAKIAkJY29waWVkID0geHNrX2NvcHlfeGRwKGNvcHlfdG8sICZhbXA7Y29weV9mcm9tLCB0b19sZW4sICZhbXA7ZnJvbV9sZW4sICZhbXA7ZnJhZywgcmVtKTsKIAkJcmVtIC09IGNvcGllZDsKIAotCQl4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7CiAJCV9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbiwKIAkJCQkgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTsKIAkJbWV0YV9sZW4gPSAwOwogCX0gd2hpbGUgKHJlbSk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfYWxsb2M6CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4c2tiLCB0bXAsICZhbXA7eHNrX2J1ZmZzLCBsaXN0X25vZGUpIHsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUpOwomIzQzOwkJeHNrX2J1ZmZfZnJlZSgmYW1wO3hza2ItJmd0O3hkcCk7CiYjNDM7CX0KJiM0MzsJeHMtJmd0O3J4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWERQIFNvY2tldCBCdWZmZXIgQWxsb2NhdGlvbiBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3hza19yY3ZgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyBpbiBob3cgYHhza19idWZmX2FsbG9jYCBpcyBiZWluZyBoYW5kbGVkLiBJbnN0ZWFkIG9mIHBvdGVudGlhbGx5IGhhdmluZyB0byBkZWFsIHdpdGggcGFydGlhbCBhbGxvY2F0aW9ucyDigJMgd2hlcmUgc29tZSBidWZmZXJzIHN1Y2NlZWQgYnV0IG90aGVycyBmYWlsIOKAkyB0aGlzIHBhdGNoIGltcGxlbWVudHMgYSBwcmUtYWxsb2NhdGlvbiBzdHJhdGVneS4gSSYjMzk7bSBzZWVpbmcgdGhhdCBpdCYjMzk7cyBsb29waW5nIHRocm91Z2ggYW5kIGdyYWJiaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcnMgdXBmcm9udCwgYWRkaW5nIHRoZW0gdG8gdGhpcyBgeHNrX2J1ZmZzYCBsaXN0LiBUaGF0JiMzOTtzIGEgY2xldmVyIHdheSB0byBlbnN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQgKmJlZm9yZSogd2UgZXZlbiBzdGFydCBwcm9jZXNzaW5nLgoKQW5kIHRoZSBzYWZldHkgbmV0IGlzIGNsZWFyOiBpZiAqYW55KiBvZiB0aG9zZSBidWZmZXIgYWxsb2NhdGlvbnMgZmFpbCBkdXJpbmcgdGhhdCBwcmUtYWxsb2NhdGlvbiBzdGVwLCB0aGUgY29kZSBpbW1lZGlhdGVseSBmcmVlcyBhbGwgdGhlIGJ1ZmZlcnMgaXQgKmRpZCogbWFuYWdlIHRvIGdldCBhbmQgcmV0dXJucyBgLUVOT01FTWAuIE5vIHBhcnRpYWwsIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCwgZGF0YSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIFRoaXMgcHJldmVudHMgdGhlIG1lc3N5IHNpdHVhdGlvbiBvZiBoYXZpbmcgYSBwYWNrZXQgcGFydGlhbGx5IGFsbG9jYXRlZCwgcHJvY2Vzc2VkLCBhbmQgdGhlbiB0cnVuY2F0ZWQgb3IgZHJvcHBlZC4gR29vZCB0aGlua2luZywgSSBoYXZlIHNlZW4gaXQgYSB0aG91c2FuZCB0aW1lcywgYW5kIGlzIHdvcnRoIHRoZSBvdmVyaGVhZCEKCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gYF9feHNrX3JjdmAgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIHJpZ2h0PyBTbywgbGV0JiMzOTtzIGZpbmQgdGhlIGVudHJ5IHBvaW50cyB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZS4gSXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBidXQgbW9yZSBsaWtlbHkgaXQgaXMgYW4gZWRnZSBjYXNlIHRoYXQgbmVlZHMgdG8gYmUgcHJvcGVybHkgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hza19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTY1PWludCB4c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrLmMtMTkwLVxubmV0L3hkcC94c2suYzoxOTE6c3RhdGljIGludCBfX3hza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgdTMyIGxlbixcbm5ldC94ZHAveHNrLmMtMTkyLVx0XHRcdHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIwNy1cbm5ldC94ZHAveHNrLmM6MjA4OnN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXG5uZXQveGRwL3hzay5jLTIwOS1cdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXG4tLVxubmV0L3hkcC94c2suYz0yMTk9c3RhdGljIGludCB4c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMjI5LVx0aWYgKGxpa2VseSghZnJhZ3MpKSB7XG5uZXQveGRwL3hzay5jOjIzMDpcdFx0ZXJyID0gX194c2tfcmN2X3pjKHhzLCB4c2tiLCBsZW4sIGNvbnRkKTtcbm5ldC94ZHAveHNrLmMtMjMxLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmMtMjQzLVxubmV0L3hkcC94c2suYzoyNDQ6XHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgbGVuLCBjb250ZCk7XG5uZXQveGRwL3hzay5jLTI0NS1cdHhza2JfbGlzdCA9IFx1MDAyNnhza2ItXHUwMDNlcG9vbC1cdTAwM2V4c2tiX2xpc3Q7XG4tLVxubmV0L3hkcC94c2suYy0yNDktXHRcdGxlbiA9IHBvcy1cdTAwM2V4ZHAuZGF0YV9lbmQgLSBwb3MtXHUwMDNleGRwLmRhdGE7XG5uZXQveGRwL3hzay5jOjI1MDpcdFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHBvcywgbGVuLCBjb250ZCk7XG5uZXQveGRwL3hzay5jLTI1MS1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwb3MtXHUwMDNlbGlzdF9ub2RlKTtcbi0tXG5uZXQveGRwL3hzay5jPTI2OD1zdGF0aWMgdTMyIHhza19jb3B5X3hkcCh2b2lkICp0bywgdm9pZCAqKmZyb20sIHUzMiB0b19sZW4sXG4tLVxubmV0L3hkcC94c2suYy0yOTUtXG5uZXQveGRwL3hzay5jOjI5NjpzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjk3LXtcbi0tXG5uZXQveGRwL3hzay5jLTMyMC1cdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xubmV0L3hkcC94c2suYzozMjE6XHRcdGVyciA9IF9feHNrX3Jjdl96Yyh4cywgeHNrYiwgbGVuLCAwKTtcbm5ldC94ZHAveHNrLmMtMzIyLVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3hkcC94c2suYy0zNzItXG5uZXQveGRwL3hzay5jOjM3MzpcdFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGNvcGllZCAtIG1ldGFfbGVuLFxubmV0L3hkcC94c2suYy0zNzQtXHRcdFx0XHQgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTtcbi0tXG5uZXQveGRwL3hzay5jPTQ2MT1pbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbm5ldC94ZHAveHNrLmMtNDY4LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eHMtXHUwMDNlcG9vbC1cdTAwM2VyeF9sb2NrKTtcbm5ldC94ZHAveHNrLmM6NDY5Olx0XHRlcnIgPSBfX3hza19yY3YoeHMsIHhkcCwgbGVuKTtcbm5ldC94ZHAveHNrLmMtNDcwLVx0XHR4c2tfZmx1c2goeHMpO1xuLS1cbm5ldC94ZHAveHNrLmM9NDc3PXN0YXRpYyBpbnQgeHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5uZXQveGRwL3hzay5jLTQ5MC1cbm5ldC94ZHAveHNrLmM6NDkxOlx0ZXJyID0gX194c2tfcmN2KHhzLCB4ZHAsIGxlbik7XG5uZXQveGRwL3hzay5jLTQ5Mi1cdGlmICghZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBSZWNlaXZlIFBhdGggaW4gWERQIFNvY2tldHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGRhdGEgYWN0dWFsbHkgZ2V0cyByZWNlaXZlZCB3aXRoIFhEUCBzb2NrZXRzLiBJIHNlZSBgX194c2tfcmN2YCBpcyB0aGUgY29yZSByZWNlaXZlIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQmIzM5O3MgcHJvYmFibHkgdGhlIHdvcmtob3JzZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNhbGxzIG9yaWdpbmF0ZS4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCB3aGljaCBhcmUgYHhza19nZW5lcmljX3JjdmAgYW5kIGB4c2tfcmN2YC4gV2l0aCB0aG9zZSB0d28sIEkgY2FuIHJlY29uc3RydWN0IHRoZSB3aG9sZSByZWNlaXZlIHBhdGggYW5kIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBkYXRhIGZsb3cuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcmVjZWl2ZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19nZW5lcmljX3Jjdnx4c2tfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xNjU9aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxubmV0L3hkcC94c2suYy0xOTAtXG5uZXQveGRwL3hzay5jOjE5MTpzdGF0aWMgaW50IF9feHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCB1MzIgbGVuLFxubmV0L3hkcC94c2suYy0xOTItXHRcdFx0dTMyIGZsYWdzKVxuLS1cbm5ldC94ZHAveHNrLmMtMjA3LVxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcbm5ldC94ZHAveHNrLmMtMjA5LVx0XHRcdCAgICAgIHUzMiBsZW4sIHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIxOC1cbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjIwLXtcbi0tXG5uZXQveGRwL3hzay5jLTIyOS1cdGlmIChsaWtlbHkoIWZyYWdzKSkge1xubmV0L3hkcC94c2suYzoyMzA6XHRcdGVyciA9IF9feHNrX3Jjdl96Yyh4cywgeHNrYiwgbGVuLCBjb250ZCk7XG5uZXQveGRwL3hzay5jLTIzMS1cdFx0aWYgKGVycilcbi0tXG5uZXQveGRwL3hzay5jLTI0My1cbm5ldC94ZHAveHNrLmM6MjQ0Olx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGxlbiwgY29udGQpO1xubmV0L3hkcC94c2suYy0yNDUtXHR4c2tiX2xpc3QgPSBcdTAwMjZ4c2tiLVx1MDAzZXBvb2wtXHUwMDNleHNrYl9saXN0O1xuLS1cbm5ldC94ZHAveHNrLmMtMjQ5LVx0XHRsZW4gPSBwb3MtXHUwMDNleGRwLmRhdGFfZW5kIC0gcG9zLVx1MDAzZXhkcC5kYXRhO1xubmV0L3hkcC94c2suYzoyNTA6XHRcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCBwb3MsIGxlbiwgY29udGQpO1xubmV0L3hkcC94c2suYy0yNTEtXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cG9zLVx1MDAzZWxpc3Rfbm9kZSk7XG4tLVxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxuLS1cbm5ldC94ZHAveHNrLmMtMjk1LVxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTI5Ny17XG4tLVxubmV0L3hkcC94c2suYy0zMjAtXHRcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcbm5ldC94ZHAveHNrLmM6MzIxOlx0XHRlcnIgPSBfX3hza19yY3ZfemMoeHMsIHhza2IsIGxlbiwgMCk7XG5uZXQveGRwL3hzay5jLTMyMi1cdFx0aWYgKGVycikge1xuLS1cbm5ldC94ZHAveHNrLmMtMzcyLVxubmV0L3hkcC94c2suYzozNzM6XHRcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcbm5ldC94ZHAveHNrLmMtMzc0LVx0XHRcdFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XG4tLVxubmV0L3hkcC94c2suYz00MTQ9c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtNDM4LVxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy00NDAte1xuLS1cbm5ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtNDYwLVxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDYyLXtcbi0tXG5uZXQveGRwL3hzay5jLTQ2NS1cbm5ldC94ZHAveHNrLmM6NDY2Olx0ZXJyID0geHNrX3Jjdl9jaGVjayh4cywgeGRwLCBsZW4pO1xubmV0L3hkcC94c2suYy00NjctXHRpZiAoIWVycikge1xubmV0L3hkcC94c2suYy00NjgtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4cy1cdTAwM2Vwb29sLVx1MDAzZXJ4X2xvY2spO1xubmV0L3hkcC94c2suYzo0Njk6XHRcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xubmV0L3hkcC94c2suYy00NzAtXHRcdHhza19mbHVzaCh4cyk7XG4tLVxubmV0L3hkcC94c2suYy00NzYtXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ3OC17XG4tLVxubmV0L3hkcC94c2suYy00ODEtXG5uZXQveGRwL3hzay5jOjQ4MjpcdGVyciA9IHhza19yY3ZfY2hlY2soeHMsIHhkcCwgbGVuKTtcbm5ldC94ZHAveHNrLmMtNDgzLVx0aWYgKGVycilcbi0tXG5uZXQveGRwL3hzay5jLTQ4Ny1cdFx0bGVuID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGE7XG5uZXQveGRwL3hzay5jOjQ4ODpcdFx0cmV0dXJuIHhza19yY3ZfemMoeHMsIHhkcCwgbGVuKTtcbm5ldC94ZHAveHNrLmMtNDg5LVx0fVxubmV0L3hkcC94c2suYy00OTAtXG5uZXQveGRwL3hzay5jOjQ5MTpcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xubmV0L3hkcC94c2suYy00OTItXHRpZiAoIWVycilcbi0tXG5uZXQveGRwL3hzay5jPTQ5Nz1pbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbm5ldC94ZHAveHNrLmMtNTAwLVxubmV0L3hkcC94c2suYzo1MDE6XHRlcnIgPSB4c2tfcmN2KHhzLCB4ZHApO1xubmV0L3hkcC94c2suYy01MDItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhTSyBEYXRhIEZsb3cqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgeHNrX2dlbmVyaWNfcmN2YCBpcyBnZXR0aW5nIGl0cyBob29rcyBpbnRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIG1lYW5pbmcgaXQmIzM5O3MgZWl0aGVyIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIGJlaW5nIHV0aWxpemVkIGVsc2V3aGVyZS4gSW50ZXJlc3RpbmcuIEFuZCBgeHNrX3JjdmAgaXMgZGVmaW5pdGVseSBhIGtleSBwYXJ0IG9mIHRoZSBwdXp6bGUsIGJlY2F1c2UgYF9feHNrX21hcF9yZWRpcmVjdGAgY2FsbHMgaXQuIEdpdmVuIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHVzYWdlIG9mIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHRyYWNlIHRoZSBmbG93IG9mIGRhdGEgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgWFNLIHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCBieSB3aGF0IGZ1bmN0aW9uLCBhbmQgd2hlbi4gR290dGEgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2UgcmVkaXJlY3RzIGFyZSBoYXBwZW5pbmcgYW5kIGhvdyBgeHNrX2dlbmVyaWNfcmN2YCBmaXRzIGludG8gdGhlIG1peC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgX194c2tfbWFwX3JlZGlyZWN0YCBhbmQgYHhza19nZW5lcmljX3JjdmAgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX2dlbmVyaWNfcmN2fF9feHNrX21hcF9yZWRpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZHBfc29jay5oPTExNz1zdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX29wcyB7XG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xMjUtXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjEyNjppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTI3OmludCBfX3hza19tYXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApO1xuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xMjgtdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdCk7XG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2suaD0xNjY9c3RhdGljIGlubGluZSB2b2lkIHhza190eF9tZXRhZGF0YV9jb21wbGV0ZShzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTE3OS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTgwOnN0YXRpYyBpbmxpbmUgaW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTgxLXtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTE4NC1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTg1OnN0YXRpYyBpbmxpbmUgaW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTg2LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NDk4PXN0YXRpYyBpbmxpbmUgaW50IF9feGRwX2RvX3JlZGlyZWN0X3hzayhzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MTAtXG5uZXQvY29yZS9maWx0ZXIuYzo0NTExOlx0ZXJyID0gX194c2tfbWFwX3JlZGlyZWN0KGZ3ZCwgeGRwKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MTItXHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjIxPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDY1Ni1cdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcbm5ldC9jb3JlL2ZpbHRlci5jOjQ2NTc6XHRcdGVyciA9IHhza19nZW5lcmljX3Jjdihmd2QsIHhkcCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NjU4LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtNDYwLVxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDYyLXtcbi0tXG5uZXQveGRwL3hzay5jPTQ3Nz1zdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxubmV0L3hkcC94c2suYy00OTYtXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFhEUC9BRl9YRFAgTXVsdGktQnVmZmVyIFJlY2VpdmUgUGF0aCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQUZfWERQIHNvY2tldCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggbXVsdGktYnVmZmVyIFhEUCBwYWNrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHdoYXQgSSYjMzk7bSB1bmRlcnN0YW5kaW5nLCB0aGUga2V5IGVudHJ5IHBvaW50IGlzIGBfX3hza19yY3ZgLCB3aGljaCBpcyByZWFjaGVkIHRocm91Z2ggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLiBUaGVzZSwgaW4gdHVybiwgYXJlIGNhbGxlZCBmcm9tIGB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXBgIGFuZCBgX194ZHBfZG9fcmVkaXJlY3RfeHNrYCByZXNwZWN0aXZlbHkg4oCTIGNsYXNzaWMgWERQIHJlZGlyZWN0IHRvIFhTS01BUCBmdW5jdGlvbmFsaXR5LiBJIGtub3cgdGhpcyBpcyBoZWF2aWx5IGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXphdGlvbiwgc28gYW55IGNoYW5nZSBoZXJlIG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuCgpUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgcHJldmVudGluZyBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyeSBvbiBPT00uIEl0JiMzOTtzIHdvcmtpbmcgd2l0aGluIHRoZSBsb29wIGBmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2Rlc2M7IGkmIzQzOyYjNDM7KWAgdG8gaGFuZGxlIHRob3NlIG11bHRpLWJ1ZmZlciBwYWNrZXRzLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgc3RhdGljIGZ1bmN0aW9uIGBfX3hza19yY3ZgLiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYXJlIHRoZSBkaXJlY3QgY2FsbGVycy4gV2hpbGUgYHhza19yY3ZgIGlzIHN0YXRpYywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3hza19tYXBfcmVkaXJlY3RgLiBTbywgdGhvc2UgdHdvLCBhbG9uZyB3aXRoIGB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXBgIGFuZCBgX194ZHBfZG9fcmVkaXJlY3RfeHNrYCAob3IgcGVyaGFwcyBgeGRwX2RvX3JlZGlyZWN0YCBhbmQgYHhkcF9kb19nZW5lcmljX3JlZGlyZWN0YCBzaW5jZSBpdCYjMzk7cyBpbmxpbmUpIGFyZSBteSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgYW55IGFkZGl0aW9uYWwgY2FsbGVycyBvZiBgX194ZHBfZG9fcmVkaXJlY3RfeHNrYCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hkcF9kb19yZWRpcmVjdF94c2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz00NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9tYXN0ZXJfcmVkaXJlY3QpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDQ5Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ0OTg6c3RhdGljIGlubGluZSBpbnQgX194ZHBfZG9fcmVkaXJlY3RfeHNrKHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmksXG5uZXQvY29yZS9maWx0ZXIuYy00NDk5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ1OTM9aW50IHhkcF9kb19yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NTk5LVx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXG5uZXQvY29yZS9maWx0ZXIuYzo0NjAwOlx0XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDYwMS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjA3PWludCB4ZHBfZG9fcmVkaXJlY3RfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDYxNC1cdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxubmV0L2NvcmUvZmlsdGVyLmM6NDYxNTpcdFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWERQIGFuZCBBRl9YRFAgRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gWERQIHJlZGlyZWN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBgeGRwX2RvX3JlZGlyZWN0YCwgYHhkcF9kb19yZWRpcmVjdF9mcmFtZWAsIGFuZCBgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwYCBhcmUgdGhlIGJyb2FkIFhEUCBmdW5jdGlvbnMgdG8ga2VlcCBhbiBleWUgb24uIEhvd2V2ZXIsIHRoZXNlIGFyZSBnZW5lcmljIFhEUCBmdW5jdGlvbmFsaXRpZXMuIFdoYXQgSSYjMzk7bSByZWFsbHkgYWZ0ZXIgYXJlIHRoZSBBRl9YRFAtc3BlY2lmaWMgZGV0YWlscy4gRnJvbSBteSBrbm93bGVkZ2UsIEkmIzM5O2Qgc2F5IEkgbmVlZCB0byBmb2N1cyBvbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYmVjYXVzZSB0aGV5IHNlZW0gbW9yZSByZWxldmFudCB0byB0aGUgQUZfWERQIGltcGxlbWVudGF0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgbW9yZSBYU0sgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgdG8gY29uc2lkZXIuIFNpbmNlIEkga25vdyB0aGUgcGF0Y2ggaXMgaW4gYG5ldC94ZHAveHNrLmNgLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCBBRl9YRFAgaXMsIGFzIGV4cGVjdGVkLCBnb3Zlcm5lZCBieSBgQ09ORklHX1hEUF9TT0NLRVRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhEUF9TT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXG5uZXQveGRwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQveGRwL0tjb25maWctOS1cbm5ldC94ZHAvS2NvbmZpZzoxMDpjb25maWcgWERQX1NPQ0tFVFNfRElBR1xubmV0L3hkcC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7WERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKlhEUF9TT0NLRVRTIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFhEUF9TT0NLRVRTYC4gQmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZS4gTGV0IG1lIG5hdmlnYXRlIHRvIGBuZXQveGRwL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBYRFAsIGluY2x1ZGluZyB0aGlzIG9uZSwgYXJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBrZXJuZWwgc2V0dGluZ3MgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgWERQX1NPQ0tFVFNgIGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBhbmQgdXNlIHRoaXMgZmVhdHVyZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgZGlyZWN0IGRlcGVuZGVuY2llcywgb2J2aW91c2x5LCBidXQgYWxzbyBmb3IgaW5kaXJlY3Qgb25lcyB0aGF0IGFyZSBzZXQgb3IgdW5zZXQgYmFzZWQgb24gY2VydGFpbiBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhlbHAgd2l0aCB0cm91Ymxlc2hvb3RpbmcgYW5kIGtub3dpbmcgd2hhdCB0byBleHBlY3QgZnJvbSB0aGlzIGZlYXR1cmUgYW5kIG90aGVycyBhcm91bmQgaXQuIExldCYjMzk7cyBzZWUgd2hhdCBLY29uZmlnIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFhEUF9TT0NLRVRTXG4gICAzOlx0XHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gICA1Olx0XHRkZWZhdWx0IG5cbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgWERQIHNvY2tldHMgYWxsb3dzIGEgY2hhbm5lbCBiZXR3ZWVuIFhEUCBwcm9ncmFtcyBhbmRcbiAgIDg6XHRcdCAgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucy5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgWERQX1NPQ0tFVFNfRElBR1xuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7WERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDEyOlx0XHRkZXBlbmRzIG9uIFhEUF9TT0NLRVRTXG4gIDEzOlx0XHRkZWZhdWx0IG5cbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgU3VwcG9ydCBmb3IgUEZfWERQIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cbiAgMTY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipYRFAgU29ja2V0IEVuYWJsZW1lbnQgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIHJlbGF0aW9uc2hpcCBpcyBjbGVhcjogYFhEUF9TT0NLRVRTYCBoaW5nZXMgb24gYEJQRl9TWVNDQUxMYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGBYRFBfU09DS0VUU2AgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKTm93LCBiZWZvcmUgSSBqdW1wIGludG8gdGhhdCwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb2RlYmFzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgbmV0L3hkcC94c2suY2AgZmlsZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSBhbSBpbnRlcmVzdGVkIGluIHRoaXMgYmVjYXVzZSB0aGVzZSB3b3VsZCBiZSBleHRlcm5hbCBwb2ludHMgb2YgY29udGFjdCB3aXRoIHRoZSBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0IHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBgWERQX1NPQ0tFVFNgLiBJIGNhbiB0aGVuIGNvbnNpZGVyIG90aGVyIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gb3RoZXIgc3Vic3lzdGVtcy4gVGhhdCBxdWljayBzY2FuIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGEgYml0IGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLiogeHNrXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTQ5PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeHNrX3R4X2dlbmVyaWNfY2FjaGU7XG5uZXQveGRwL3hzay5jLTUwLVxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTUyLXtcbi0tXG5uZXQveGRwL3hzay5jPTU5PUVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTYwLVxubmV0L3hkcC94c2suYzo2MTp2b2lkIHhza19zZXRfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTYyLXtcbi0tXG5uZXQveGRwL3hzay5jPTc2PUVYUE9SVF9TWU1CT0woeHNrX3NldF90eF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTc3LVxubmV0L3hkcC94c2suYzo3ODp2b2lkIHhza19jbGVhcl9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNzkte1xuLS1cbm5ldC94ZHAveHNrLmM9ODY9RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfcnhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy04Ny1cbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTg5LXtcbi0tXG5uZXQveGRwL3hzay5jPTEwMz1FWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTEwNC1cbm5ldC94ZHAveHNrLmM6MTA1OmJvb2wgeHNrX3VzZXNfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTEwNi17XG4tLVxubmV0L3hkcC94c2suYz0xMDk9RVhQT1JUX1NZTUJPTCh4c2tfdXNlc19uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTExMC1cbm5ldC94ZHAveHNrLmM6MTExOnN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC94ZHAveHNrLmMtMTEyLVx0XHRcdFx0XHQgICAgdTE2IHF1ZXVlX2lkKVxuLS1cbm5ldC94ZHAveHNrLmM9MTIzPXN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbi0tXG5uZXQveGRwL3hzay5jLTEzMC1cbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTMyLXtcbi0tXG5uZXQveGRwL3hzay5jPTE0Nz1zdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC94ZHAveHNrLmMtMTY0LSAqL1xubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTE2Ni1cdFx0XHR1MTYgcXVldWVfaWQpXG4tLVxubmV0L3hkcC94c2suYz0yMDg9c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcbi0tXG5uZXQveGRwL3hzay5jLTIxOC1cbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjIwLXtcbi0tXG5uZXQveGRwL3hzay5jPTI2MD1zdGF0aWMgdm9pZCAqeHNrX2NvcHlfeGRwX3N0YXJ0KHN0cnVjdCB4ZHBfYnVmZiAqZnJvbSlcbi0tXG5uZXQveGRwL3hzay5jLTI2Ny1cbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcbm5ldC94ZHAveHNrLmMtMjY5LVx0XHRcdHUzMiAqZnJvbV9sZW4sIHNrYl9mcmFnX3QgKipmcmFnLCB1MzIgcmVtKVxuLS1cbm5ldC94ZHAveHNrLmM9Mjk2PXN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMzg4LVxubmV0L3hkcC94c2suYzozODk6c3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0zOTAte1xuLS1cbm5ldC94ZHAveHNrLmM9Mzk3PXN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcbi0tXG5uZXQveGRwL3hzay5jLTQwMy1cbm5ldC94ZHAveHNrLmM6NDA0OnN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy00MDUte1xuLS1cbm5ldC94ZHAveHNrLmMtNDEzLVxubmV0L3hkcC94c2suYzo0MTQ6c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy00MTUtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgeGRwX3J4cV9pbmZvICppbmZvKVxuLS1cbm5ldC94ZHAveHNrLmMtNDM4LVxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy00NDAte1xuLS1cbm5ldC94ZHAveHNrLmMtNDUzLVxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTQ1NS17XG4tLVxubmV0L3hkcC94c2suYy00NjAtXG5uZXQveGRwL3hzay5jOjQ2MTppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00NjIte1xuLS1cbm5ldC94ZHAveHNrLmMtNDc2LVxubmV0L3hkcC94c2suYzo0Nzc6c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00Nzgte1xuLS1cbm5ldC94ZHAveHNrLmM9NTE0PXZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXG4tLVxubmV0L3hkcC94c2suYy01MjMtXG5uZXQveGRwL3hzay5jOjUyNDp2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxubmV0L3hkcC94c2suYy01MjUte1xuLS1cbm5ldC94ZHAveHNrLmM9NTQ1PUVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5uZXQveGRwL3hzay5jLTU0Ni1cbm5ldC94ZHAveHNrLmM6NTQ3OnZvaWQgeHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTU0OC17XG4tLVxubmV0L3hkcC94c2suYz01NTY9RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XG5uZXQveGRwL3hzay5jLTU1Ny1cbm5ldC94ZHAveHNrLmM6NTU4OmJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxubmV0L3hkcC94c2suYy01NTkte1xuLS1cbm5ldC94ZHAveHNrLmM9NjA0PUVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XG5uZXQveGRwL3hzay5jLTYwNS1cbm5ldC94ZHAveHNrLmM6NjA2OnN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyaWVzKVxubmV0L3hkcC94c2suYy02MDcte1xuLS1cbm5ldC94ZHAveHNrLmMtNjE3LVxubmV0L3hkcC94c2suYzo2MTg6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbm5ldC94ZHAveHNrLmMtNjE5LVx0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4tLVxubmV0L3hkcC94c2suYz02Njk9eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcbi0tXG5uZXQveGRwL3hzay5jLTc0My1cbm5ldC94ZHAveHNrLmM6NzQ0OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxubmV0L3hkcC94c2suYy03NDUte1xuLS1cbm5ldC94ZHAveHNrLmM9NzkxPUVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbm5ldC94ZHAveHNrLmMtNzkyLVxubmV0L3hkcC94c2suYzo3OTM6c3RhdGljIGludCB4c2tfd2FrZXVwKHN0cnVjdCB4ZHBfc29jayAqeHMsIHU4IGZsYWdzKVxubmV0L3hkcC94c2suYy03OTQte1xuLS1cbm5ldC94ZHAveHNrLmMtNzk5LVxubmV0L3hkcC94c2suYzo4MDA6c3RhdGljIGludCB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTgwMS17XG4tLVxubmV0L3hkcC94c2suYy04MTAtXG5uZXQveGRwL3hzay5jOjgxMTpzdGF0aWMgYm9vbCB4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04MTIte1xuLS1cbm5ldC94ZHAveHNrLmMtODE1LVxubmV0L3hkcC94c2suYzo4MTY6c3RhdGljIHU2NCB4c2tfc2tiX2Rlc3RydWN0b3JfZ2V0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODE3LXtcbi0tXG5uZXQveGRwL3hzay5jLTgyMC1cbm5ldC94ZHAveHNrLmM6ODIxOnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICpfX3hza19hZGRyc19hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcbm5ldC94ZHAveHNrLmMtODIyLXtcbi0tXG5uZXQveGRwL3hzay5jLTgzMy1cbm5ldC94ZHAveHNrLmM6ODM0OnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODM1LXtcbi0tXG5uZXQveGRwL3hzay5jLTg0Ni1cbm5ldC94ZHAveHNrLmM6ODQ3OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxubmV0L3hkcC94c2suYy04NDgte1xuLS1cbm5ldC94ZHAveHNrLmMtODU4LVxubmV0L3hkcC94c2suYzo4NTk6c3RhdGljIHZvaWQgeHNrX2luY19udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NjAte1xuLS1cbm5ldC94ZHAveHNrLmMtODY4LVxubmV0L3hkcC94c2suYzo4Njk6c3RhdGljIHUzMiB4c2tfZ2V0X251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTg3MC17XG4tLVxubmV0L3hkcC94c2suYy04ODAtXG5uZXQveGRwL3hzay5jOjg4MTpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy04ODItXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTEwLVxubmV0L3hkcC94c2suYzo5MTE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTkxMi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYy05MjMtXG5uZXQveGRwL3hzay5jOjkyNDpzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXG5uZXQveGRwL3hzay5jLTkyNS17XG4tLVxubmV0L3hkcC94c2suYz05MzE9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbm5ldC94ZHAveHNrLmM6OTMyOnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05MzMte1xuLS1cbm5ldC94ZHAveHNrLmMtOTQ0LVxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05NDYtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jLTk2MC1cbm5ldC94ZHAveHNrLmM6OTYxOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05NjIte1xuLS1cbm5ldC94ZHAveHNrLmMtOTc4LVxubmV0L3hkcC94c2suYzo5Nzk6c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTk4MC17XG4tLVxubmV0L3hkcC94c2suYy05ODctXG5uZXQveGRwL3hzay5jOjk4ODpzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxubmV0L3hkcC94c2suYy05ODktXHRcdFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxubmV0L3hkcC94c2suYz0xMjE1PXN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQveGRwL3hzay5jLTEzMjktXG5uZXQveGRwL3hzay5jOjEzMzA6c3RhdGljIGludCB4c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZHAveHNrLmMtMTMzMS17XG4tLVxubmV0L3hkcC94c2suYy0xMzQyLVxubmV0L3hkcC94c2suYzoxMzQzOnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzQ0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNTMtXG5uZXQveGRwL3hzay5jOjEzNTQ6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTEzNTUte1xuLS1cbm5ldC94ZHAveHNrLmM9MTM2ND1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTEzOTQtXG5uZXQveGRwL3hzay5jOjEzOTU6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzk2LXtcbi0tXG5uZXQveGRwL3hzay5jPTE0MDY9c3RhdGljIGludCBfX3hza19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4sIGludCBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTE0MzEtXG5uZXQveGRwL3hzay5jOjE0MzI6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG5uZXQveGRwL3hzay5jLTE0MzMte1xuLS1cbm5ldC94ZHAveHNrLmMtMTQ0Mi1cbm5ldC94ZHAveHNrLmM6MTQ0MzpzdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQveGRwL3hzay5jLTE0NDQtXHRcdFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpXG4tLVxubmV0L3hkcC94c2suYy0xNDc1LVxubmV0L3hkcC94c2suYzoxNDc2OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcbm5ldC94ZHAveHNrLmMtMTQ3Ny1cdFx0XHQgIGJvb2wgdW1lbV9xdWV1ZSlcbi0tXG5uZXQveGRwL3hzay5jLTE0OTMtXG5uZXQveGRwL3hzay5jOjE0OTQ6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTQ5NS17XG4tLVxubmV0L3hkcC94c2suYy0xNTA3LVxubmV0L3hkcC94c2suYzoxNTA4OnN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xNTA5LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX3NvY2sgX19yY3UgKioqbWFwX2VudHJ5KVxuLS1cbm5ldC94ZHAveHNrLmMtMTUyNy1cbm5ldC94ZHAveHNrLmM6MTUyODpzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNTI5LXtcbi0tXG5uZXQveGRwL3hzay5jLTE1NTMtXG5uZXQveGRwL3hzay5jOjE1NTQ6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3hkcC94c2suYy0xNTU1LXtcbi0tXG5uZXQveGRwL3hzay5jPTE1OTI9c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxuLS1cbm5ldC94ZHAveHNrLmMtMTYwOC1cbm5ldC94ZHAveHNrLmM6MTYwOTpzdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTE2MTAte1xuLS1cbm5ldC94ZHAveHNrLmMtMTYxMy1cbm5ldC94ZHAveHNrLmM6MTYxNDpzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXG5uZXQveGRwL3hzay5jLTE2MTUte1xuLS1cbm5ldC94ZHAveHNrLmM9MTgwNT1zdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE4MTEtXG5uZXQveGRwL3hzay5jOjE4MTI6c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xODEzLVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQveGRwL3hzay5jLTE5MzQtXG5uZXQveGRwL3hzay5jOjE5MzU6c3RhdGljIHZvaWQgeHNrX2VudGVyX3J4dHhfb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTM2LXtcbi0tXG5uZXQveGRwL3hzay5jLTE5NDEtXG5uZXQveGRwL3hzay5jOjE5NDI6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTQzLXtcbi0tXG5uZXQveGRwL3hzay5jPTE5NDk9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE5NTQtXG5uZXQveGRwL3hzay5jOjE5NTU6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xOTU2LVx0XHRcdCAgc29ja29wdF90ICpvcHQpXG4tLVxubmV0L3hkcC94c2suYy0yMDgyLVxubmV0L3hkcC94c2suYzoyMDgzOnN0YXRpYyBpbnQgeHNrX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQveGRwL3hzay5jLTIwODQtXHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5uZXQveGRwL3hzay5jLTIxMjAtXG5uZXQveGRwL3hzay5jOjIxMjE6c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxubmV0L3hkcC94c2suYy0yMTIyLVx0XHRcdHVuc2lnbmVkIGxvbmcgbXNnLCB2b2lkICpwdHIpXG4tLVxubmV0L3hkcC94c2suYz0yMTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMTc4LVxubmV0L3hkcC94c2suYzoyMTc5OnN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTIxODAte1xuLS1cbm5ldC94ZHAveHNrLmMtMjE4OS1cbm5ldC94ZHAveHNrLmM6MjE5MDpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQveGRwL3hzay5jLTIxOTEtXHRcdCAgICAgIGludCBrZXJuKVxuLS1cbm5ldC94ZHAveHNrLmM9MjI0Mz1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhza19uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMjQ2LVxubmV0L3hkcC94c2suYzoyMjQ3OnN0YXRpYyBpbnQgX19uZXRfaW5pdCB4c2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTIyNTMtXG5uZXQveGRwL3hzay5jOjIyNTQ6c3RhdGljIHZvaWQgX19uZXRfZXhpdCB4c2tfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjU1LXtcbi0tXG5uZXQveGRwL3hzay5jPTIyNTk9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4c2tfbmV0X29wcyA9IHtcbi0tXG5uZXQveGRwL3hzay5jLTIyNjMtXG5uZXQveGRwL3hzay5jOjIyNjQ6c3RhdGljIGludCBfX2luaXQgeHNrX2luaXQodm9pZClcbm5ldC94ZHAveHNrLmMtMjI2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDEyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFhTSyBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGB4c2tfZ2VuZXJpY19yY3ZgIOKAkyB0aGF0IGZlZWxzIHJpZ2h0LCB0aGF0JiMzOTtzIGEga2V5IGZvY3VzIHN5bWJvbCBmb3IgdGhpcy4gQW5kIGB4c2tfcmN2YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgbm90IGlkZWFsLCBidXQgZ29vZCB0byBrbm93IGZvciBjb250ZXh0LiBBaGEsIGJ1dCBgX194c2tfbWFwX3JlZGlyZWN0YCAqaXMqIGV4cG9ydGVkLCBpdCYjMzk7cyBub24tc3RhdGljISBFeGNlbGxlbnQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYF9feHNrX21hcF9yZWRpcmVjdGAgaXMgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBuZXQveGRwL3hzay5jYC4gWWVwLCBpdCYjMzk7cyByaWdodCB0aGVyZSwgYXQgbGluZSA0OTcuCgpTbywgdGFraW5nIHN0b2NrLCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHk6CgoqICAgYHhza19nZW5lcmljX3JjdmAKKiAgIGBfX3hza19tYXBfcmVkaXJlY3RgCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZC4gV2UmIzM5O2xsIG5lZWQgYFhEUF9TT0NLRVRTYCwgb2J2aW91c2x5LiBBbmQgc2luY2UgWERQIHNvY2tldHMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIHVzaW5nIEJQRiBpbnRlcm5hbGx5LCBgQlBGX1NZU0NBTExgIGlzIGltcGxpZWQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdCBhYm91dCBpdC4KClRpbWUgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGluIGBuZXQveGRwL0tjb25maWdgLiBMZXQmIzM5O3MgY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBoaWRkZW4gY29uZmlncyBhdCBwbGF5IGhlcmUuIFl1cCwganVzdCBgWERQX1NPQ0tFVFNgLgoKTm93LCB0aW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBpdHNlbGYsIHNwZWNpZmljYWxseSwgYG5ldC94ZHAveHNrLmNgLCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIGJvdGggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgeHNrX2dlbmVyaWNfcmN2fGludCBfX3hza19tYXBfcmVkaXJlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtNDYwLVxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDYyLXtcbi0tXG5uZXQveGRwL3hzay5jPTQ3Nz1zdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxubmV0L3hkcC94c2suYy00OTYtXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI3NwoJCQkJCQkJb3V0cHV0OiA5OQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYF9feHNrX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGRwL3hzay5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuCgpFc3NlbnRpYWxseSwgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaXMgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjb2RlIHRvICpwcmUtYWxsb2NhdGUqIGFsbCB0aGUgYnVmZmVycyBuZWVkZWQgZm9yIGEgbXVsdGktYnVmZmVyIFhEUCBwYWNrZXQgKmJlZm9yZSogcHJvY2Vzc2luZyBpdC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgZ29hbCBpcyB0byBhdm9pZCB0aG9zZSBuYXN0eSBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyaWVzIGlmIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gSWYgYW4gYWxsb2NhdGlvbiBmYWlscyAqYW55d2hlcmUqIGFsb25nIHRoZSBsaW5lLCBpdCBpbW1lZGlhdGVseSBmcmVlcyBldmVyeXRoaW5nIGl0ICpkaWQqIG1hbmFnZSB0byBhbGxvY2F0ZSBhbmQgZHJvcHMgdGhlIHBhY2tldCwgcmV0dXJuaW5nIGAtRU5PTUVNYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IG1lbW9yeSBsZWFrcyBhbmQgYXZvaWRzIGFueSBjb3JydXB0ZWQgc3RhdGUgdGhhdCBtaWdodCBoYXBwZW4gd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1tZW1vcnkgKE9PTSkgc2l0dWF0aW9uIGR1cmluZyBtdWx0aS1idWZmZXIgcGFja2V0IHJlY2VwdGlvbi4gU21hcnQuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBjb3JlIEFGX1hEUCByZWNlaXZlIHBhdGguIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIGJvdGggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4gQW5kIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWcgb3B0aW9uIGJlaW5nIGVuYWJsZWQuCgpHaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB4c2tfZ2VuZXJpY19yY3ZgIGFuZCBgX194c2tfbWFwX3JlZGlyZWN0YCwgc28gSSYjMzk7bGwgc2V0IGBGb2N1c1N5bWJvbHM9WyYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssICYjMzQ7X194c2tfbWFwX3JlZGlyZWN0JiMzNDtdYC4gSSYjMzk7bGwgYWxzbyBlbnN1cmUgdGhhdCBgRW5hYmxlQ29uZmlncz1bJiMzNDtYRFBfU09DS0VUUyYjMzQ7XWAgaXMgc2V0LiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRoLCB0aGUgQUZfWERQIHJlY2VpdmUgcGF0aCwgdG8gcHJlLWFsbG9jYXRlIGJ1ZmZlcnMsIHdoaWNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaXQgaGFuZGxlcyBPT00gc2NlbmFyaW9zIHdpdGggbXVsdGktYnVmZmVyIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBvZnRlbiByZXZlYWwgaW50ZXJlc3RpbmcgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2dlbmVyaWNfcmN2JiMzNDssCiAgICAmIzM0O19feHNrX21hcF9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHJlY2VpdmUgcGF0aCB0byBwcmUtYWxsb2NhdGUgYWxsIG5lY2Vzc2FyeSBidWZmZXJzIGZvciBtdWx0aS1idWZmZXIgcGFja2V0cywgcHJldmVudGluZyBwYXJ0aWFsIHBhY2tldCBkZWxpdmVyeSBvbiBPT00uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19nZW5lcmljX3JjdiYjMzQ7LAogICAgJiMzNDtfX3hza19tYXBfcmVkaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCByZWNlaXZlIHBhdGggdG8gcHJlLWFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgYnVmZmVycyBmb3IgbXVsdGktYnVmZmVyIHBhY2tldHMsIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX194c2tfcmN2YCBpbiBgbmV0L3hkcC94c2suY2AgdG8gcHJlLWFsbG9jYXRlIGFsbCByZXF1aXJlZCBYRFAgYnVmZmVycyBiZWZvcmUgY29weWluZyBkYXRhIGludG8gdGhlbS4gVGhpcyBwcmV2ZW50cyBwYXJ0aWFsIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGxpc3QgY29ycnVwdGlvbiBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzIG1pZHdheSB0aHJvdWdoIGEgbXVsdGktYnVmZmVyIHBhY2tldC4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIHNhZmV0eSBjaGVjayB0byBlbnN1cmUgdGhlIGJ1ZmZlciYjMzk7cyBsaXN0IG5vZGUgaXMgZW1wdHkgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgdGVtcG9yYXJ5IGxpc3QuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlzdCBpbnRlZ3JpdHkgaXNzdWVzICh3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBsaXN0IGRlYnVnZ2luZyksIGFuZCBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZjYjIwOTAyNDJkZmE3MDFlNTU3YzgyN2NhZDFkMzI4ODRmODRjYjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAyMjozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDc4NTVlZTA5YzRiNjQuLjMzNDc1YjE4MGVhNmYgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtMjk4LDkgJiM0MzsyOTgsMTEgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pCiAJdTMyIGZyYW1lX3NpemUgPSBfX3hza19wb29sX2dldF9yeF9mcmFtZV9zaXplKHhzLSZndDtwb29sKTsKIAl2b2lkICpjb3B5X2Zyb20gPSB4c2tfY29weV94ZHBfc3RhcnQoeGRwKSwgKmNvcHlfdG87CiAJdTMyIGZyb21fbGVuLCBtZXRhX2xlbiwgcmVtLCBudW1fZGVzYzsKLQlzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiOwomIzQzOwlzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCAqdG1wOwogCXN0cnVjdCB4ZHBfYnVmZiAqeHNrX3hkcDsKJiM0MzsJTElTVF9IRUFEKHhza19idWZmcyk7CiAJc2tiX2ZyYWdfdCAqZnJhZzsKJiM0MzsJdTMyIGk7CiAKIAlmcm9tX2xlbiA9IHhkcC0mZ3Q7ZGF0YV9lbmQgLSBjb3B5X2Zyb207CiAJbWV0YV9sZW4gPSB4ZHAtJmd0O2RhdGEgLSBjb3B5X2Zyb207CkBAIC0zNDMsMjMgJiM0MzszNDUsNDUgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pCiAJCWZyYWcgPSAgJmFtcDtzaW5mby0mZ3Q7ZnJhZ3NbMF07CiAJfQogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZGVzYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy0mZ3Q7cG9vbCk7CiYjNDM7CQlpZiAoIXhza194ZHApCiYjNDM7CQkJZ290byBlcnJfYWxsb2M7CiYjNDM7CiYjNDM7CQl4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7CiYjNDM7CQlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUpKSkKJiM0MzsJCQlnb3RvIGVycl9hbGxvYzsKJiM0MzsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUsICZhbXA7eHNrX2J1ZmZzKTsKJiM0MzsJfQomIzQzOwogCWRvIHsKIAkJdTMyIHRvX2xlbiA9IGZyYW1lX3NpemUgJiM0MzsgbWV0YV9sZW47CiAJCXUzMiBjb3BpZWQ7CiAKLQkJeHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLSZndDtwb29sKTsKJiM0MzsJCXhza2IgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7eHNrX2J1ZmZzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLAomIzQzOwkJCQkJbGlzdF9ub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDt4c2tiLSZndDtsaXN0X25vZGUpOwomIzQzOwkJeHNrX3hkcCA9ICZhbXA7eHNrYi0mZ3Q7eGRwOwogCQljb3B5X3RvID0geHNrX3hkcC0mZ3Q7ZGF0YSAtIG1ldGFfbGVuOwogCiAJCWNvcGllZCA9IHhza19jb3B5X3hkcChjb3B5X3RvLCAmYW1wO2NvcHlfZnJvbSwgdG9fbGVuLCAmYW1wO2Zyb21fbGVuLCAmYW1wO2ZyYWcsIHJlbSk7CiAJCXJlbSAtPSBjb3BpZWQ7CiAKLQkJeHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApOwogCQlfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgY29waWVkIC0gbWV0YV9sZW4sCiAJCQkJICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7CiAJCW1ldGFfbGVuID0gMDsKIAl9IHdoaWxlIChyZW0pOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2FsbG9jOgomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeHNrYiwgdG1wLCAmYW1wO3hza19idWZmcywgbGlzdF9ub2RlKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7eHNrYi0mZ3Q7bGlzdF9ub2RlKTsKJiM0MzsJCXhza19idWZmX2ZyZWUoJmFtcDt4c2tiLSZndDt4ZHApOwomIzQzOwl9CiYjNDM7CXhzLSZndDtyeF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYU0sgQnVmZmVyIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgX194c2tfcmN2YCB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLiBUaGUgY29yZSBzZWVtcyB0byBiZSBhYm91dCBwcmUtYWxsb2NhdGluZyBidWZmZXJzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYSBgTElTVF9IRUFEKHhza19idWZmcylgIGFuZCBgeHNrX2J1ZmZfYWxsb2MoeHMtJmd0O3Bvb2wpYCBmb3IgYSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgKGBudW1fZGVzY2ApLiBJIHNlZSB0aGUgYC1FTk9NRU1gIGVycm9yIGhhbmRsaW5nIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZS4gVGhlIGFsbG9jYXRpb24gaXMgZm9sbG93ZWQgYnkgYSBjb3B5IG9wZXJhdGlvbiBhbmQgYSBjYWxsIHRvIGBfX3hza19yY3ZfemNfc2FmZWAuIFRoYXQgYWxsIG1ha2VzIHNlbnNlLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gSSYjMzk7bSBzZWVpbmcgYSBjaGVjazogYGlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSkpKSBnb3RvIGVycl9hbGxvYztgLiBUaGF0JiMzOTtzIHRvIGNvbmZpcm0gdGhhdCB0aGUgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBpdCYjMzk7cyBhZGRlZCB0byB0aGUgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkmIzM5O20ganVzdCBxdWlja2x5IHRoaW5raW5nIGlmIHRoZXJlIGFyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBhcmUgYWxsb2NhdGluZyBgeGRwX2J1ZmZgIHRocm91Z2ggYHhza19idWZmX2FsbG9jYC4KCk5vdywgSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMgb2YgYHhza19idWZmX2FsbG9jYCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gc3VidGxlIGlzc3VlIHRoYXQgSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgIG9yIG1heWJlIGl0JiMzOTtzIGluIGBuZXQveGRwL3hzay5jYCBpdHNlbGYuIEdvdHRhIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX2J1ZmZfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTI5Nj1zdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbi0tXG5uZXQveGRwL3hzay5jLTMxMy1cbm5ldC94ZHAveHNrLmM6MzE0Olx0XHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXHUwMDNlcG9vbCk7XG5uZXQveGRwL3hzay5jLTMxNS1cdFx0aWYgKCF4c2tfeGRwKSB7XG4tLVxubmV0L3hkcC94c2suYy0zNDgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVzYzsgaSYjNDM7JiM0MzspIHtcbm5ldC94ZHAveHNrLmM6MzQ5Olx0XHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXHUwMDNlcG9vbCk7XG5uZXQveGRwL3hzay5jLTM1MC1cdFx0aWYgKCF4c2tfeGRwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgeHNrX2J1ZmZfYWxsb2MgRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGB4c2tfYnVmZl9hbGxvY2AgdGhvcm91Z2hseS4gSXQmIzM5O3MgdGhlIGNvcm5lcnN0b25lIG9mIGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBidWZmZXJzIGluIFhEUCwgYW5kIGEgc29saWQgZ3Jhc3Agb24gaXQgaXMgbm9uLW5lZ290aWFibGUgZm9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBwb2ludHMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoZSBOSUMgYW5kIHRoZSBob3N0LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqTWVtb3J5IGFsaWdubWVudCoqOiBXaGF0IGFyZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgYnVmZmVycz8gQXJlIHRoZXJlIGFueSBoaWRkZW4gcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGR1ZSB0byB0aGUgYWxpZ25tZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHZhcmlvdXMgTklDIG9mZmxvYWRzIG9yIERNQSBvcGVyYXRpb25zPwoqICAgKipCdWZmZXIgcG9vbCBtYW5hZ2VtZW50Kio6IEhvdyBhcmUgdGhlc2UgYnVmZmVycyBtYW5hZ2VkIGludGVybmFsbHk/IElzIGl0IGEgc2ltcGxlIGZyZWVsaXN0LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byB3YXRjaCBvdXQgZm9yLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQ/IEhvdyBkb2VzIHRoaXMgcG9vbCB3b3JrIHdpdGggdGhlIHJpbmdzIGFuZCBob3cgYXJlIHRoZXkgbGlua2VkPwoqICAgKipDb250ZW50aW9uKio6IFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgc2VjdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBpbiB0aGUgYWxsb2NhdGlvbiBwYXRoPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgaGF6YXJkcyB0byB0aGUgYHhza19idWZmX2FsbG9jYCB0aGF0IGNvdWxkIGJlIGNvbnNpZGVyZWQ/CiogICAqKkVycm9yIGhhbmRsaW5nKio6IFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzIG9mIGB4c2tfYnVmZl9hbGxvY2A/IEFyZSB0aGVyZSBwcm9wZXIgcmVzb3VyY2UgZXhoYXVzdGlvbiBjaGVja3MgYW5kIGZhaWx1cmUgcGF0aHdheXMgb3IgcG90ZW50aWFsIGxlYWtzIHRvIGFkZHJlc3M/CiogICAqKkludGVyYWN0aW9uIHdpdGggWERQIHJpbmdzKio6IExldCYjMzk7cyBzZWUgaG93IGB4c2tfYnVmZl9hbGxvY2Agd29ya3Mgd2l0aCB0aGUgcmluZ3MuIEkgbmVlZCB0byB2aXN1YWxpemUgdGhlIGNvbXBsZXRlIGZsb3cgb2YgcGFja2V0cywgZnJvbSBOSUMgdG8gYHhza19idWZmX2FsbG9jYCwgYW5kIHRoZW4gaG93IHRoZXkgYXJlIGxpbmtlZCBpbnRvIHRoZSByaW5ncy4KKiAgICoqQWx0ZXJuYXRpdmUgYWxsb2NhdG9ycyoqOiBBcmUgdGhlcmUgcG90ZW50aWFsIGFsdGVybmF0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB0byBjb25zaWRlciwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS9OSUMgYW5kIHVzZSBjYXNlPyBDb3VsZCBjdXN0b20gYWxsb2NhdG9ycywgb3IgZXZlbiBsZXZlcmFnaW5nIHRoZSBrZXJuZWwmIzM5O3Mgc2xhYiBhbGxvY2F0b3JzLCBvZmZlciBhZHZhbnRhZ2VzIGluIGNlcnRhaW4gc2NlbmFyaW9zPwoqICAgKipQZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMqKjogTG9va2luZyBhdCB0aGUgY29kZSBpdHNlbGYsIGNhbiBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IGJlIHNwb3R0ZWQ/CkkgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSwgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdywgYW5kIHRoaW5rIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGxpbmUsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLi4uIG9yIHdoZXJlIHRoZSBidWdzIGhpZGUuIEkmIzM5O20gZ29pbmcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWZmX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0yOTY9c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG4tLVxubmV0L3hkcC94c2suYy0zMTMtXG5uZXQveGRwL3hzay5jOjMxNDpcdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xubmV0L3hkcC94c2suYy0zMTUtXHRcdGlmICgheHNrX3hkcCkge1xuLS1cbm5ldC94ZHAveHNrLmMtMzQ4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2Rlc2M7IGkmIzQzOyYjNDM7KSB7XG5uZXQveGRwL3hzay5jOjM0OTpcdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xubmV0L3hkcC94c2suYy0zNTAtXHRcdGlmICgheHNrX3hkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEZWJ1Z2dpbmcgYSBTdXNwZWN0ZWQgSW5saW5lIEZ1bmN0aW9uIElzc3VlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgaXNuJiMzOTt0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBhbmQgSSYjMzk7bSBzdXNwZWN0aW5nIGl0IG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2YgdGhlIHRyb3VibGUgY291bGQgYmUgYW4gaW5saW5lIGZ1bmN0aW9uLiBJbmxpbmUgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgYmUgdHJpY2t5IHRvIGRlYnVnIGJlY2F1c2UgdGhlIGNvbXBpbGVyIG9mdGVuIGhhbmRsZXMgdGhlbSBpbiBhIHdheSB0aGF0IG9ic2N1cmVzIHRoZSBkaXJlY3Qgc291cmNlIGNvZGUgZXhlY3V0aW9uLCBpdCYjMzk7cyBub3QgZXhhY3RseSBlYXN5IHRvIHRyYWNlIHRoZWlyIGZsb3cgaW4gdGhlIHNhbWUgd2F5IGFzIGEgcmVndWxhciBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2ssIGJlY2F1c2UgaXQmIzM5O3MgYSBjb21tb24gYXJlYSBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciwgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhbnkgY29tcGxleCBsb2dpYyBvciBzaWRlIGVmZmVjdHMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBoZWFkZXIgZmlsZXMgdG8gc2VlIGlmIEkgZmluZCBhbnkgc3VzcGVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWZmX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9MTEzPXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCB4c2tfYnVmZl94ZHBfZ2V0X2ZyYW1lX2RtYShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0xMTktXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoxMjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgeGRwX2J1ZmYgKnhza19idWZmX2FsbG9jKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMTIxLXtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00NDM9c3RhdGljIGlubGluZSBkbWFfYWRkcl90IHhza19idWZmX3hkcF9nZXRfZnJhbWVfZG1hKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTQ0Ny1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oOjQ0ODpzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZHBfYnVmZiAqeHNrX2J1ZmZfYWxsb2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00NDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgeHNrX2J1ZmZfYWxsb2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCBgeHNrX2J1ZmZfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBob3cgWERQIG1hbmFnZXMgbWVtb3J5IGZvciBwYWNrZXQgZGF0YS4gSSBhbHJlYWR5IGtub3cgdGhlIGhpZ2gtbGV2ZWwgZGV0YWlscyDigJMgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSByaW5nIGJ1ZmZlcnMgdXNlZCB0byBleGNoYW5nZSBwYWNrZXRzIGJldHdlZW4gdGhlIFhEUCBwcm9ncmFtIGFuZCB0aGUgaG9zdCBrZXJuZWwuIEJ1dCBub3cgSSB3YW50IGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBudWFuY2VzIGluIHRoaXMgcHJvY2Vzcy4gSSBuZWVkIHRvIGtub3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhlIHN5c3RlbSwgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXQgbWlnaHQgaW50cm9kdWNlIGluIGhpZ2gtcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBzY2hlbWUgcGxheXMgb3V0LiBIb3cgZG9lcyBpdCBtYW5hZ2UgdGhlIGB4c2tfdW1lbWAsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBkZXNpZ24gb24gdGhpbmdzIGxpa2UgY2FjaGUgZWZmaWNpZW5jeSBhbmQgZnJhZ21lbnRhdGlvbj8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgaXNzdWVzIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIHZ5aW5nIGZvciByZXNvdXJjZXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IgPSBjb250YWluZXJfb2YoeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuIDExNjpcdFxuIDExNzpcdFx0cmV0dXJuIHhwX2dldF9mcmFtZV9kbWEoeHNrYik7XG4gMTE4Olx0fVxuIDExOTpcdFxuIDEyMDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHhkcF9idWZmICp4c2tfYnVmZl9hbGxvYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiAxMjE6XHR7XG4gMTIyOlx0XHRyZXR1cm4geHBfYWxsb2MocG9vbCk7XG4gMTIzOlx0fVxuIDEyNDpcdFxuIDEyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB4c2tfaXNfZW9wX2Rlc2MoY29uc3Qgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuIDEyNjpcdHtcbiAxMjc6XHRcdHJldHVybiAheHBfbWJfZGVzYyhkZXNjKTtcbiAxMjg6XHR9XG4gMTI5Olx0XG4gMTMwOlx0LyogUmV0dXJucyBhcyBtYW55IGVudHJpZXMgYXMgcG9zc2libGUgdXAgdG8gbWF4LiAwIFx1MDAzYz0gTiBcdTAwM2M9IG1heC4gKi9cbiAxMzE6XHRzdGF0aWMgaW5saW5lIHUzMiB4c2tfYnVmZl9hbGxvY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9idWZmICoqeGRwLCB1MzIgbWF4KVxuIDEzMjpcdHtcbiAxMzM6XHRcdHJldHVybiB4cF9hbGxvY19iYXRjaChwb29sLCB4ZHAsIG1heCk7XG4gMTM0Olx0fVxuIDEzNTpcdFxuIDEzNjpcdHN0YXRpYyBpbmxpbmUgYm9vbCB4c2tfYnVmZl9jYW5fYWxsb2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBjb3VudClcbiAxMzc6XHR7XG4gMTM4Olx0XHRyZXR1cm4geHBfY2FuX2FsbG9jKHBvb2wsIGNvdW50KTtcbiAxMzk6XHR9XG4gMTQwOlx0XG4gMTQxOlx0c3RhdGljIGlubGluZSB2b2lkIHhza19idWZmX2ZyZWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gMTQyOlx0e1xuIDE0MzpcdFx0c3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiA9IGNvbnRhaW5lcl9vZih4ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XG4gMTQ0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp4c2tiX2xpc3QgPSBcdTAwMjZ4c2tiLVx1MDAzZXBvb2wtXHUwMDNleHNrYl9saXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTk3CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgQnVmZmVyIFByZS1hbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBfX3hza19yY3ZgIHRvIHByZS1hbGxvY2F0ZSBhbGwgb2YgdGhlIGB4c2tfeGRwYCBidWZmZXJzICpiZWZvcmUqIGNvcHlpbmcgYW55IGRhdGEgaW50byB0aGVtLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgYSBzaXR1YXRpb24gd2hlcmUgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWQtcGFja2V0LCBwYXJ0aWN1bGFybHkgd2l0aCBtdWx0aS1idWZmZXIgWERQLCB3aGljaCB3b3VsZCBsZWFkIHRvIGEgcGFydGlhbCBjb3B5IGFuZCBwb3RlbnRpYWxseSBjb3JydXB0IGRhdGEuIElmIGFuIGFsbG9jYXRpb24gKmRvZXMqIGZhaWwsIGl0IGNsZWFucyB1cCBieSBmcmVlaW5nIGFueSBidWZmZXJzIGl0ICpkaWQqIG1hbmFnZSB0byBhbGxvY2F0ZSBhbmQgcmV0dXJucyBgLUVOT01FTWAuIEl0IHNlZW1zIHRvIG1lIHRoaXMgaXMgcHJpbWFyaWx5IGEgYnVnIGZpeCwgbGlrZWx5IGFkZHJlc3NpbmcgZWl0aGVyIGEgbWVtb3J5IGxlYWssIHBhY2tldCBkcm9wIGR1ZSB0byBpbmNvbXBsZXRlIGNvcHksIG9yIHBvc3NpYmx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIHNjZW5hcmlvLgoKQWgsIGhhbmcgb24gYSBzZWNvbmQuIEkgc2VlIHRoaXMgYWRkaXRpb246CgpgYGBjCgkJeHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApOwoJCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3hza2ItJmd0O2xpc3Rfbm9kZSkpKQoJCQlnb3RvIGVycl9hbGxvYzsKYGBgCgpUaGlzICpyZWFsbHkqIGxvb2tzIGxpa2UgYSBjaGVjayBvbiB3aGV0aGVyIGBsaXN0X25vZGVgIGlzIGVtcHR5LiBJZiBub3QsIGl0IGJhaWxzIG91dCB0byBgZXJyX2FsbG9jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGlzIGFpbWVkIGF0IGZpeGluZyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSDigJMgZGVmaW5pdGVseSBhIG1lbW9yeSBzYWZldHkgcHJvYmxlbSB0aGF0IGNvdWxkIHByb2JhYmx5IGJlIGNhdWdodCBieSBLQVNBTiBvciB0aGUgc3RhbmRhcmQgbGlzdCBkZWJ1Z2dpbmcuIEJ1dCBpdCBpcyBzdGlsbCBhIGdvb2QgY2hlY2sgdG8gaGF2ZS4KClNvLCBsZXQmIzM5O3MgbmFpbCB0aGlzIGRvd24uIERvZXMgdGhpcyBwYXRjaCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBJdCBjaGFuZ2VzIHRoZSAqYWxsb2NhdGlvbiBzdHJhdGVneSogdG8gcHJlLWFsbG9jYXRlIGFuZCBhZGRzIHRoaXMgc2FmZXR5IGNoZWNrLCB0aGF0JiMzOTtzIGFsbC4gRG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEFic29sdXRlbHkgbm90LiBJdCYjMzk7cyBjb3B5aW5nIGRhdGEgZnJvbSB3aGF0IHNob3VsZCBiZSBhIGZ1bGx5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXIgKHRoZSBpbmNvbWluZyBwYWNrZXQpIGludG8gdGhlIHByZS1hbGxvY2F0ZWQgYnVmZmVycy4gVGhpcyBpc24mIzM5O3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBpcyBmaXhpbmcgYSBsaXN0IGNvcnJ1cHRpb24gb3IgbWVtb3J5IGxlYWsuCgpUaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU49ZmFsc2VgIGZsYWcgaXMgY29ycmVjdCBoZXJlLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBpdCBuZWVkcyBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXImIzM5O3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXImIzM5O3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzozMy43MzA5MzUxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODgzMTAwNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX2dlbmVyaWNfcmN2XCIsXG4gICAgXCJfX3hza19tYXBfcmVkaXJlY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3hza19yY3ZgIGluIGBuZXQveGRwL3hzay5jYCB0byBwcmUtYWxsb2NhdGUgYWxsIHJlcXVpcmVkIFhEUCBidWZmZXJzIGJlZm9yZSBjb3B5aW5nIGRhdGEgaW50byB0aGVtLiBUaGlzIHByZXZlbnRzIHBhcnRpYWwgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2ggYSBtdWx0aS1idWZmZXIgcGFja2V0LiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgc2FmZXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVmZmVyJ3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoIHRvIHByZS1hbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IGJ1ZmZlcnMgZm9yIG11bHRpLWJ1ZmZlciBwYWNrZXRzLCBwcmV2ZW50aW5nIHBhcnRpYWwgcGFja2V0IGRlbGl2ZXJ5IG9uIE9PTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjMzLjczMDk0MDA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMyNDMwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2Y2IyMDkwMjQyZGZhNzAxZTU1N2M4MjdjYWQxZDMyODg0Zjg0Y2IwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDIyOjMzOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggNzg1NWVlMDljNGI2NC4uMzM0NzViMTgwZWE2ZiAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC0yOTgsOSArMjk4LDExIEBAIHN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbiBcXHR1MzIgZnJhbWVfc2l6ZSA9IF9feHNrX3Bvb2xfZ2V0X3J4X2ZyYW1lX3NpemUoeHMtXFx1MDAzZXBvb2wpO1xcbiBcXHR2b2lkICpjb3B5X2Zyb20gPSB4c2tfY29weV94ZHBfc3RhcnQoeGRwKSwgKmNvcHlfdG87XFxuIFxcdHUzMiBmcm9tX2xlbiwgbWV0YV9sZW4sIHJlbSwgbnVtX2Rlc2M7XFxuLVxcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2I7XFxuK1xcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7XFxuIFxcdHN0cnVjdCB4ZHBfYnVmZiAqeHNrX3hkcDtcXG4rXFx0TElTVF9IRUFEKHhza19idWZmcyk7XFxuIFxcdHNrYl9mcmFnX3QgKmZyYWc7XFxuK1xcdHUzMiBpO1xcbiBcXG4gXFx0ZnJvbV9sZW4gPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0gY29weV9mcm9tO1xcbiBcXHRtZXRhX2xlbiA9IHhkcC1cXHUwMDNlZGF0YSAtIGNvcHlfZnJvbTtcXG5AQCAtMzQzLDIzICszNDUsNDUgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxuIFxcdFxcdGZyYWcgPSAgXFx1MDAyNnNpbmZvLVxcdTAwM2VmcmFnc1swXTtcXG4gXFx0fVxcbiBcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9kZXNjOyBpKyspIHtcXG4rXFx0XFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVxcdTAwM2Vwb29sKTtcXG4rXFx0XFx0aWYgKCF4c2tfeGRwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4rXFxuK1xcdFxcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZ4c2tiLVxcdTAwM2VsaXN0X25vZGUpKSlcXG4rXFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuK1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZ4c2tiLVxcdTAwM2VsaXN0X25vZGUsIFxcdTAwMjZ4c2tfYnVmZnMpO1xcbitcXHR9XFxuK1xcbiBcXHRkbyB7XFxuIFxcdFxcdHUzMiB0b19sZW4gPSBmcmFtZV9zaXplICsgbWV0YV9sZW47XFxuIFxcdFxcdHUzMiBjb3BpZWQ7XFxuIFxcbi1cXHRcXHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHR4c2tiID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2eHNrX2J1ZmZzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLFxcbitcXHRcXHRcXHRcXHRcXHRsaXN0X25vZGUpO1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ4c2tiLVxcdTAwM2VsaXN0X25vZGUpO1xcbitcXHRcXHR4c2tfeGRwID0gXFx1MDAyNnhza2ItXFx1MDAzZXhkcDtcXG4gXFx0XFx0Y29weV90byA9IHhza194ZHAtXFx1MDAzZWRhdGEgLSBtZXRhX2xlbjtcXG4gXFxuIFxcdFxcdGNvcGllZCA9IHhza19jb3B5X3hkcChjb3B5X3RvLCBcXHUwMDI2Y29weV9mcm9tLCB0b19sZW4sIFxcdTAwMjZmcm9tX2xlbiwgXFx1MDAyNmZyYWcsIHJlbSk7XFxuIFxcdFxcdHJlbSAtPSBjb3BpZWQ7XFxuIFxcbi1cXHRcXHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XFxuIFxcdFxcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcXG4gXFx0XFx0XFx0XFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XFxuIFxcdFxcdG1ldGFfbGVuID0gMDtcXG4gXFx0fSB3aGlsZSAocmVtKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX2FsbG9jOlxcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeHNrYiwgdG1wLCBcXHUwMDI2eHNrX2J1ZmZzLCBsaXN0X25vZGUpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2eHNrYi1cXHUwMDNlbGlzdF9ub2RlKTtcXG4rXFx0XFx0eHNrX2J1ZmZfZnJlZShcXHUwMDI2eHNrYi1cXHUwMDNleGRwKTtcXG4rXFx0fVxcbitcXHR4cy1cXHUwMDNlcnhfZHJvcHBlZCsrO1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzozNC4yNDQ5ODY2MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MDQ1NzYwMzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19nZW5lcmljX3JjdlwiLFxuICAgIFwiX194c2tfbWFwX3JlZGlyZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCByZWNlaXZlIHBhdGggdG8gcHJlLWFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgYnVmZmVycyBmb3IgbXVsdGktYnVmZmVyIHBhY2tldHMsIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmNiMjA5MDI0MmRmYTcwMWU1NTdjODI3Y2FkMWQzMjg4NGY4NGNiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIyOjMzOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDc4NTVlZTA5YzRiNjQuLjMzNDc1YjE4MGVhNmYgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtMjk4LDkgKzI5OCwxMSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdHUzMiBmcmFtZV9zaXplID0gX194c2tfcG9vbF9nZXRfcnhfZnJhbWVfc2l6ZSh4cy1cdTAwM2Vwb29sKTtcbiBcdHZvaWQgKmNvcHlfZnJvbSA9IHhza19jb3B5X3hkcF9zdGFydCh4ZHApLCAqY29weV90bztcbiBcdHUzMiBmcm9tX2xlbiwgbWV0YV9sZW4sIHJlbSwgbnVtX2Rlc2M7XG4tXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiO1xuK1x0c3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgKnRtcDtcbiBcdHN0cnVjdCB4ZHBfYnVmZiAqeHNrX3hkcDtcbitcdExJU1RfSEVBRCh4c2tfYnVmZnMpO1xuIFx0c2tiX2ZyYWdfdCAqZnJhZztcbitcdHUzMiBpO1xuIFxuIFx0ZnJvbV9sZW4gPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSBjb3B5X2Zyb207XG4gXHRtZXRhX2xlbiA9IHhkcC1cdTAwM2VkYXRhIC0gY29weV9mcm9tO1xuQEAgLTM0MywyMyArMzQ1LDQ1IEBAIHN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxuIFx0XHRmcmFnID0gIFx1MDAyNnNpbmZvLVx1MDAzZWZyYWdzWzBdO1xuIFx0fVxuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2Rlc2M7IGkrKykge1xuK1x0XHR4c2tfeGRwID0geHNrX2J1ZmZfYWxsb2MoeHMtXHUwMDNlcG9vbCk7XG4rXHRcdGlmICgheHNrX3hkcClcbitcdFx0XHRnb3RvIGVycl9hbGxvYztcbitcbitcdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuK1x0XHRpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpKSlcbitcdFx0XHRnb3RvIGVycl9hbGxvYztcbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4c2tiLVx1MDAzZWxpc3Rfbm9kZSwgXHUwMDI2eHNrX2J1ZmZzKTtcbitcdH1cbitcbiBcdGRvIHtcbiBcdFx0dTMyIHRvX2xlbiA9IGZyYW1lX3NpemUgKyBtZXRhX2xlbjtcbiBcdFx0dTMyIGNvcGllZDtcbiBcbi1cdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xuK1x0XHR4c2tiID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ4c2tfYnVmZnMsIHN0cnVjdCB4ZHBfYnVmZl94c2ssXG4rXHRcdFx0XHRcdGxpc3Rfbm9kZSk7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpO1xuK1x0XHR4c2tfeGRwID0gXHUwMDI2eHNrYi1cdTAwM2V4ZHA7XG4gXHRcdGNvcHlfdG8gPSB4c2tfeGRwLVx1MDAzZWRhdGEgLSBtZXRhX2xlbjtcbiBcbiBcdFx0Y29waWVkID0geHNrX2NvcHlfeGRwKGNvcHlfdG8sIFx1MDAyNmNvcHlfZnJvbSwgdG9fbGVuLCBcdTAwMjZmcm9tX2xlbiwgXHUwMDI2ZnJhZywgcmVtKTtcbiBcdFx0cmVtIC09IGNvcGllZDtcbiBcbi1cdFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xuIFx0XHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgY29waWVkIC0gbWV0YV9sZW4sXG4gXHRcdFx0XHQgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTtcbiBcdFx0bWV0YV9sZW4gPSAwO1xuIFx0fSB3aGlsZSAocmVtKTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9hbGxvYzpcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4c2tiLCB0bXAsIFx1MDAyNnhza19idWZmcywgbGlzdF9ub2RlKSB7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUpO1xuK1x0XHR4c2tfYnVmZl9mcmVlKFx1MDAyNnhza2ItXHUwMDNleGRwKTtcbitcdH1cbitcdHhzLVx1MDAzZXJ4X2Ryb3BwZWQrKztcbitcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4c2tfdHhfd3JpdGVhYmxlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzozNC4yNDQ5ODc5OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzEzMzAxNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWERQIFNvY2tldCBCdWZmZXIgQWxsb2NhdGlvbiBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX194c2tfcmN2YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgaW4gaG93IGB4c2tfYnVmZl9hbGxvY2AgaXMgYmVpbmcgaGFuZGxlZC4gSW5zdGVhZCBvZiBwb3RlbnRpYWxseSBoYXZpbmcgdG8gZGVhbCB3aXRoIHBhcnRpYWwgYWxsb2NhdGlvbnMg4oCTIHdoZXJlIHNvbWUgYnVmZmVycyBzdWNjZWVkIGJ1dCBvdGhlcnMgZmFpbCDigJMgdGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3kuIEknbSBzZWVpbmcgdGhhdCBpdCdzIGxvb3BpbmcgdGhyb3VnaCBhbmQgZ3JhYmJpbmcgYWxsIHRoZSBuZWNlc3NhcnkgYnVmZmVycyB1cGZyb250LCBhZGRpbmcgdGhlbSB0byB0aGlzIGB4c2tfYnVmZnNgIGxpc3QuIFRoYXQncyBhIGNsZXZlciB3YXkgdG8gZW5zdXJlIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkICpiZWZvcmUqIHdlIGV2ZW4gc3RhcnQgcHJvY2Vzc2luZy5cblxuQW5kIHRoZSBzYWZldHkgbmV0IGlzIGNsZWFyOiBpZiAqYW55KiBvZiB0aG9zZSBidWZmZXIgYWxsb2NhdGlvbnMgZmFpbCBkdXJpbmcgdGhhdCBwcmUtYWxsb2NhdGlvbiBzdGVwLCB0aGUgY29kZSBpbW1lZGlhdGVseSBmcmVlcyBhbGwgdGhlIGJ1ZmZlcnMgaXQgKmRpZCogbWFuYWdlIHRvIGdldCBhbmQgcmV0dXJucyBgLUVOT01FTWAuIE5vIHBhcnRpYWwsIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCwgZGF0YSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIFRoaXMgcHJldmVudHMgdGhlIG1lc3N5IHNpdHVhdGlvbiBvZiBoYXZpbmcgYSBwYWNrZXQgcGFydGlhbGx5IGFsbG9jYXRlZCwgcHJvY2Vzc2VkLCBhbmQgdGhlbiB0cnVuY2F0ZWQgb3IgZHJvcHBlZC4gR29vZCB0aGlua2luZywgSSBoYXZlIHNlZW4gaXQgYSB0aG91c2FuZCB0aW1lcywgYW5kIGlzIHdvcnRoIHRoZSBvdmVyaGVhZCFcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIGBfX3hza19yY3ZgIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCByaWdodD8gU28sIGxldCdzIGZpbmQgdGhlIGVudHJ5IHBvaW50cyB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZS4gSXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBidXQgbW9yZSBsaWtlbHkgaXQgaXMgYW4gZWRnZSBjYXNlIHRoYXQgbmVlZHMgdG8gYmUgcHJvcGVybHkgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjM5LjU1ODI5MzAzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ1ODExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hza19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTE2NT1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkwLVxcbm5ldC94ZHAveHNrLmM6MTkxOnN0YXRpYyBpbnQgX194c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsIHUzMiBsZW4sXFxubmV0L3hkcC94c2suYy0xOTItXFx0XFx0XFx0dTMyIGZsYWdzKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDctXFxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcXG5uZXQveGRwL3hzay5jLTIwOS1cXHRcXHRcXHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jPTIxOT1zdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyOS1cXHRpZiAobGlrZWx5KCFmcmFncykpIHtcXG5uZXQveGRwL3hzay5jOjIzMDpcXHRcXHRlcnIgPSBfX3hza19yY3ZfemMoeHMsIHhza2IsIGxlbiwgY29udGQpO1xcbm5ldC94ZHAveHNrLmMtMjMxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQveGRwL3hzay5jLTI0My1cXG5uZXQveGRwL3hzay5jOjI0NDpcXHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgbGVuLCBjb250ZCk7XFxubmV0L3hkcC94c2suYy0yNDUtXFx0eHNrYl9saXN0ID0gXFx1MDAyNnhza2ItXFx1MDAzZXBvb2wtXFx1MDAzZXhza2JfbGlzdDtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjQ5LVxcdFxcdGxlbiA9IHBvcy1cXHUwMDNleGRwLmRhdGFfZW5kIC0gcG9zLVxcdTAwM2V4ZHAuZGF0YTtcXG5uZXQveGRwL3hzay5jOjI1MDpcXHRcXHRfX3hza19yY3ZfemNfc2FmZSh4cywgcG9zLCBsZW4sIGNvbnRkKTtcXG5uZXQveGRwL3hzay5jLTI1MS1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwb3MtXFx1MDAzZWxpc3Rfbm9kZSk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTI2OD1zdGF0aWMgdTMyIHhza19jb3B5X3hkcCh2b2lkICp0bywgdm9pZCAqKmZyb20sIHUzMiB0b19sZW4sXFxuLS1cXG5uZXQveGRwL3hzay5jLTI5NS1cXG5uZXQveGRwL3hzay5jOjI5NjpzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG5uZXQveGRwL3hzay5jLTI5Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTMyMC1cXHRcXHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XFxubmV0L3hkcC94c2suYzozMjE6XFx0XFx0ZXJyID0gX194c2tfcmN2X3pjKHhzLCB4c2tiLCBsZW4sIDApO1xcbm5ldC94ZHAveHNrLmMtMzIyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzcyLVxcbm5ldC94ZHAveHNrLmM6MzczOlxcdFxcdF9feHNrX3Jjdl96Y19zYWZlKHhzLCB4c2tiLCBjb3BpZWQgLSBtZXRhX2xlbixcXG5uZXQveGRwL3hzay5jLTM3NC1cXHRcXHRcXHRcXHQgIHJlbSA/IFhEUF9QS1RfQ09OVEQgOiAwKTtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NDYxPWludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ2OC1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhzLVxcdTAwM2Vwb29sLVxcdTAwM2VyeF9sb2NrKTtcXG5uZXQveGRwL3hzay5jOjQ2OTpcXHRcXHRlcnIgPSBfX3hza19yY3YoeHMsIHhkcCwgbGVuKTtcXG5uZXQveGRwL3hzay5jLTQ3MC1cXHRcXHR4c2tfZmx1c2goeHMpO1xcbi0tXFxubmV0L3hkcC94c2suYz00Nzc9c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxubmV0L3hkcC94c2suYy00OTAtXFxubmV0L3hkcC94c2suYzo0OTE6XFx0ZXJyID0gX194c2tfcmN2KHhzLCB4ZHAsIGxlbik7XFxubmV0L3hkcC94c2suYy00OTItXFx0aWYgKCFlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjM5LjYzOTc1NDgyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODA4NzY3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFJlY2VpdmUgUGF0aCBpbiBYRFAgU29ja2V0cyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGRhdGEgYWN0dWFsbHkgZ2V0cyByZWNlaXZlZCB3aXRoIFhEUCBzb2NrZXRzLiBJIHNlZSBgX194c2tfcmN2YCBpcyB0aGUgY29yZSByZWNlaXZlIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQncyBwcm9iYWJseSB0aGUgd29ya2hvcnNlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY2FsbHMgb3JpZ2luYXRlLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIHdoaWNoIGFyZSBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYHhza19yY3ZgLiBXaXRoIHRob3NlIHR3bywgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIHdob2xlIHJlY2VpdmUgcGF0aCBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIGRhdGEgZmxvdy4gTGV0J3Mgc2VlIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIHJlY2VpdmUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjQyLjkyMDYzNDczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjM2MDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfZ2VuZXJpY19yY3Z8eHNrX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTE2NT1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkwLVxcbm5ldC94ZHAveHNrLmM6MTkxOnN0YXRpYyBpbnQgX194c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsIHUzMiBsZW4sXFxubmV0L3hkcC94c2suYy0xOTItXFx0XFx0XFx0dTMyIGZsYWdzKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDctXFxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcXG5uZXQveGRwL3hzay5jLTIwOS1cXHRcXHRcXHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxOC1cXG5uZXQveGRwL3hzay5jOjIxOTpzdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yMjAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjktXFx0aWYgKGxpa2VseSghZnJhZ3MpKSB7XFxubmV0L3hkcC94c2suYzoyMzA6XFx0XFx0ZXJyID0gX194c2tfcmN2X3pjKHhzLCB4c2tiLCBsZW4sIGNvbnRkKTtcXG5uZXQveGRwL3hzay5jLTIzMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYy0yNDMtXFxubmV0L3hkcC94c2suYzoyNDQ6XFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGxlbiwgY29udGQpO1xcbm5ldC94ZHAveHNrLmMtMjQ1LVxcdHhza2JfbGlzdCA9IFxcdTAwMjZ4c2tiLVxcdTAwM2Vwb29sLVxcdTAwM2V4c2tiX2xpc3Q7XFxuLS1cXG5uZXQveGRwL3hzay5jLTI0OS1cXHRcXHRsZW4gPSBwb3MtXFx1MDAzZXhkcC5kYXRhX2VuZCAtIHBvcy1cXHUwMDNleGRwLmRhdGE7XFxubmV0L3hkcC94c2suYzoyNTA6XFx0XFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHBvcywgbGVuLCBjb250ZCk7XFxubmV0L3hkcC94c2suYy0yNTEtXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cG9zLVxcdTAwM2VsaXN0X25vZGUpO1xcbi0tXFxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxcbi0tXFxubmV0L3hkcC94c2suYy0yOTUtXFxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yOTcte1xcbi0tXFxubmV0L3hkcC94c2suYy0zMjAtXFx0XFx0eHNrYiA9IGNvbnRhaW5lcl9vZih4c2tfeGRwLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLCB4ZHApO1xcbm5ldC94ZHAveHNrLmM6MzIxOlxcdFxcdGVyciA9IF9feHNrX3Jjdl96Yyh4cywgeHNrYiwgbGVuLCAwKTtcXG5uZXQveGRwL3hzay5jLTMyMi1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTM3Mi1cXG5uZXQveGRwL3hzay5jOjM3MzpcXHRcXHRfX3hza19yY3ZfemNfc2FmZSh4cywgeHNrYiwgY29waWVkIC0gbWV0YV9sZW4sXFxubmV0L3hkcC94c2suYy0zNzQtXFx0XFx0XFx0XFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTQxND1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTQzOC1cXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00NDAte1xcbi0tXFxubmV0L3hkcC94c2suYz00NTQ9c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ2MC1cXG5uZXQveGRwL3hzay5jOjQ2MTppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC94ZHAveHNrLmMtNDYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDY1LVxcbm5ldC94ZHAveHNrLmM6NDY2OlxcdGVyciA9IHhza19yY3ZfY2hlY2soeHMsIHhkcCwgbGVuKTtcXG5uZXQveGRwL3hzay5jLTQ2Ny1cXHRpZiAoIWVycikge1xcbm5ldC94ZHAveHNrLmMtNDY4LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2eHMtXFx1MDAzZXBvb2wtXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC94ZHAveHNrLmM6NDY5OlxcdFxcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xcbm5ldC94ZHAveHNrLmMtNDcwLVxcdFxcdHhza19mbHVzaCh4cyk7XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ3Ni1cXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00Nzgte1xcbi0tXFxubmV0L3hkcC94c2suYy00ODEtXFxubmV0L3hkcC94c2suYzo0ODI6XFx0ZXJyID0geHNrX3Jjdl9jaGVjayh4cywgeGRwLCBsZW4pO1xcbm5ldC94ZHAveHNrLmMtNDgzLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ4Ny1cXHRcXHRsZW4gPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0geGRwLVxcdTAwM2VkYXRhO1xcbm5ldC94ZHAveHNrLmM6NDg4OlxcdFxcdHJldHVybiB4c2tfcmN2X3pjKHhzLCB4ZHAsIGxlbik7XFxubmV0L3hkcC94c2suYy00ODktXFx0fVxcbm5ldC94ZHAveHNrLmMtNDkwLVxcbm5ldC94ZHAveHNrLmM6NDkxOlxcdGVyciA9IF9feHNrX3Jjdih4cywgeGRwLCBsZW4pO1xcbm5ldC94ZHAveHNrLmMtNDkyLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz00OTc9aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTAwLVxcbm5ldC94ZHAveHNrLmM6NTAxOlxcdGVyciA9IHhza19yY3YoeHMsIHhkcCk7XFxubmV0L3hkcC94c2suYy01MDItXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzM6NDMuMDI2OTk4OTY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NDk1MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhTSyBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGB4c2tfZ2VuZXJpY19yY3ZgIGlzIGdldHRpbmcgaXRzIGhvb2tzIGludG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbWVhbmluZyBpdCdzIGVpdGhlciBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBiZWluZyB1dGlsaXplZCBlbHNld2hlcmUuIEludGVyZXN0aW5nLiBBbmQgYHhza19yY3ZgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGFydCBvZiB0aGUgcHV6emxlLCBiZWNhdXNlIGBfX3hza19tYXBfcmVkaXJlY3RgIGNhbGxzIGl0LiBHaXZlbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byB0cmFjZSB0aGUgZmxvdyBvZiBkYXRhIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFhTSyBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgYnkgd2hhdCBmdW5jdGlvbiwgYW5kIHdoZW4uIEdvdHRhIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIHJlZGlyZWN0cyBhcmUgaGFwcGVuaW5nIGFuZCBob3cgYHhza19nZW5lcmljX3JjdmAgZml0cyBpbnRvIHRoZSBtaXguIEknbGwgbmVlZCB0byBkaWcgaW50byBgX194c2tfbWFwX3JlZGlyZWN0YCBhbmQgYHhza19nZW5lcmljX3JjdmAgZGlyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzo0Ni41NzE5NTU1ODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyMTU5MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfZ2VuZXJpY19yY3Z8X194c2tfbWFwX3JlZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZHBfc29jay5oPTExNz1zdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTEyNS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjEyNjppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjEyNzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTEyOC12b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg9MTY2PXN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfdHhfbWV0YWRhdGFfY29tcGxldGUoc3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTE3OS1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjE4MDpzdGF0aWMgaW5saW5lIGludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xODEte1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xODQtXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaDoxODU6c3RhdGljIGlubGluZSBpbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTg2LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ0OTg9c3RhdGljIGlubGluZSBpbnQgX194ZHBfZG9fcmVkaXJlY3RfeHNrKHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmksXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NTEwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MTE6XFx0ZXJyID0gX194c2tfbWFwX3JlZGlyZWN0KGZ3ZCwgeGRwKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NTEyLVxcdGlmICh1bmxpa2VseShlcnIpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDYyMT1zdGF0aWMgaW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDY1Ni1cXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxubmV0L2NvcmUvZmlsdGVyLmM6NDY1NzpcXHRcXHRlcnIgPSB4c2tfZ2VuZXJpY19yY3YoZndkLCB4ZHApO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2NTgtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZHAveHNrLmM9NDU0PXN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbi0tXFxubmV0L3hkcC94c2suYy00NjAtXFxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTQ3Nz1zdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5uZXQveGRwL3hzay5jLTQ5Ni1cXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC94ZHAveHNrLmMtNDk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzM6NTAuMjkzNTU1NDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE4MDE0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBYRFAvQUZfWERQIE11bHRpLUJ1ZmZlciBSZWNlaXZlIFBhdGggTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQUZfWERQIHNvY2tldCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggbXVsdGktYnVmZmVyIFhEUCBwYWNrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHdoYXQgSSdtIHVuZGVyc3RhbmRpbmcsIHRoZSBrZXkgZW50cnkgcG9pbnQgaXMgYF9feHNrX3JjdmAsIHdoaWNoIGlzIHJlYWNoZWQgdGhyb3VnaCBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGZyb20gYHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcGAgYW5kIGBfX3hkcF9kb19yZWRpcmVjdF94c2tgIHJlc3BlY3RpdmVseSDigJMgY2xhc3NpYyBYRFAgcmVkaXJlY3QgdG8gWFNLTUFQIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGlzIGlzIGhlYXZpbHkgZXhlcmNpc2VkIGluIHZpcnR1YWxpemF0aW9uLCBzbyBhbnkgY2hhbmdlIGhlcmUgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS5cblxuVGhpcyBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHByZXZlbnRpbmcgcGFydGlhbCBwYWNrZXQgZGVsaXZlcnkgb24gT09NLiBJdCdzIHdvcmtpbmcgd2l0aGluIHRoZSBsb29wIGBmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVzYzsgaSsrKWAgdG8gaGFuZGxlIHRob3NlIG11bHRpLWJ1ZmZlciBwYWNrZXRzLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdlJ3JlIG1vZGlmeWluZyB0aGUgc3RhdGljIGZ1bmN0aW9uIGBfX3hza19yY3ZgLiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYXJlIHRoZSBkaXJlY3QgY2FsbGVycy4gV2hpbGUgYHhza19yY3ZgIGlzIHN0YXRpYywgaXQncyBjYWxsZWQgYnkgYF9feHNrX21hcF9yZWRpcmVjdGAuIFNvLCB0aG9zZSB0d28sIGFsb25nIHdpdGggYHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcGAgYW5kIGBfX3hkcF9kb19yZWRpcmVjdF94c2tgIChvciBwZXJoYXBzIGB4ZHBfZG9fcmVkaXJlY3RgIGFuZCBgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RgIHNpbmNlIGl0J3MgaW5saW5lKSBhcmUgbXkgcHJpbWFyeSBmb2N1cyBwb2ludHMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AgZm9yIGFueSBhZGRpdGlvbmFsIGNhbGxlcnMgb2YgYF9feGRwX2RvX3JlZGlyZWN0X3hza2AganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozMzo1Ni45MTE1NzM4NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEzNjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hkcF9kb19yZWRpcmVjdF94c2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NDQ5Nj1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfbWFzdGVyX3JlZGlyZWN0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NDk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0OTg6c3RhdGljIGlubGluZSBpbnQgX194ZHBfZG9fcmVkaXJlY3RfeHNrKHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmksXFxubmV0L2NvcmUvZmlsdGVyLmMtNDQ5OS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDU5Mz1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDU5OS1cXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5uZXQvY29yZS9maWx0ZXIuYzo0NjAwOlxcdFxcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDYwMS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ2MDc9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MTQtXFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXFxubmV0L2NvcmUvZmlsdGVyLmM6NDYxNTpcXHRcXHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjMzOjU3LjAyMzcxODczNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg4MTkwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlhEUCBhbmQgQUZfWERQIEZ1bmN0aW9uIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBYRFAgcmVkaXJlY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGB4ZHBfZG9fcmVkaXJlY3RgLCBgeGRwX2RvX3JlZGlyZWN0X2ZyYW1lYCwgYW5kIGB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXBgIGFyZSB0aGUgYnJvYWQgWERQIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbi4gSG93ZXZlciwgdGhlc2UgYXJlIGdlbmVyaWMgWERQIGZ1bmN0aW9uYWxpdGllcy4gV2hhdCBJJ20gcmVhbGx5IGFmdGVyIGFyZSB0aGUgQUZfWERQLXNwZWNpZmljIGRldGFpbHMuIEZyb20gbXkga25vd2xlZGdlLCBJJ2Qgc2F5IEkgbmVlZCB0byBmb2N1cyBvbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAgYmVjYXVzZSB0aGV5IHNlZW0gbW9yZSByZWxldmFudCB0byB0aGUgQUZfWERQIGltcGxlbWVudGF0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgbW9yZSBYU0sgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgdG8gY29uc2lkZXIuIFNpbmNlIEkga25vdyB0aGUgcGF0Y2ggaXMgaW4gYG5ldC94ZHAveHNrLmNgLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCBBRl9YRFAgaXMsIGFzIGV4cGVjdGVkLCBnb3Zlcm5lZCBieSBgQ09ORklHX1hEUF9TT0NLRVRTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDowMi4wMTE5MTI5NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDE3MjI5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhEUF9TT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcXG5uZXQveGRwL0tjb25maWctMy1cXHRib29sIFxcXCJYRFAgc29ja2V0c1xcXCJcXG4tLVxcbm5ldC94ZHAvS2NvbmZpZy05LVxcbm5ldC94ZHAvS2NvbmZpZzoxMDpjb25maWcgWERQX1NPQ0tFVFNfRElBR1xcbm5ldC94ZHAvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDowNC4yNTM2NDE1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA2MzU3MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKlhEUF9TT0NLRVRTIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgWERQX1NPQ0tFVFNgLiBCZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlLiBMZXQgbWUgbmF2aWdhdGUgdG8gYG5ldC94ZHAvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgWERQLCBpbmNsdWRpbmcgdGhpcyBvbmUsIGFyZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBrZXJuZWwgc2V0dGluZ3MgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgWERQX1NPQ0tFVFNgIGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBhbmQgdXNlIHRoaXMgZmVhdHVyZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIEknbSBsb29raW5nIGZvciBkaXJlY3QgZGVwZW5kZW5jaWVzLCBvYnZpb3VzbHksIGJ1dCBhbHNvIGZvciBpbmRpcmVjdCBvbmVzIHRoYXQgYXJlIHNldCBvciB1bnNldCBiYXNlZCBvbiBjZXJ0YWluIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRyb3VibGVzaG9vdGluZyBhbmQga25vd2luZyB3aGF0IHRvIGV4cGVjdCBmcm9tIHRoaXMgZmVhdHVyZSBhbmQgb3RoZXJzIGFyb3VuZCBpdC4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MDcuMjYwMDAxNzY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFhEUF9TT0NLRVRTXFxuICAgMzpcXHRcXHRib29sIFxcXCJYRFAgc29ja2V0c1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gICA1OlxcdFxcdGRlZmF1bHQgblxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxcbiAgIDg6XFx0XFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgWERQX1NPQ0tFVFNfRElBR1xcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcXG4gIDEzOlxcdFxcdGRlZmF1bHQgblxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxcbiAgMTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDowNy4yNjAwNTcyNzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNDc3NTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKlhEUCBTb2NrZXQgRW5hYmxlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSByZWxhdGlvbnNoaXAgaXMgY2xlYXI6IGBYRFBfU09DS0VUU2AgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlcmVmb3JlLCBlbmFibGluZyBgWERQX1NPQ0tFVFNgIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuTm93LCBiZWZvcmUgSSBqdW1wIGludG8gdGhhdCwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb2RlYmFzZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIGFtIGludGVyZXN0ZWQgaW4gdGhpcyBiZWNhdXNlIHRoZXNlIHdvdWxkIGJlIGV4dGVybmFsIHBvaW50cyBvZiBjb250YWN0IHdpdGggdGhlIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIGBYRFBfU09DS0VUU2AuIEkgY2FuIHRoZW4gY29uc2lkZXIgb3RoZXIgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvbiBvdGhlciBzdWJzeXN0ZW1zLiBUaGF0IHF1aWNrIHNjYW4gd2lsbCBoZWxwIG1lIGF2b2lkIGFueSBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjExLjI4NDgzNDY4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxODcyNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qIHhza18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz00OT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xcbm5ldC94ZHAveHNrLmMtNTAtXFxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy01Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTU5PUVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy02MC1cXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NzY9RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTc3LVxcbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy03OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTg2PUVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTg3LVxcbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEwMz1FWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy0xMDQtXFxubmV0L3hkcC94c2suYzoxMDU6Ym9vbCB4c2tfdXNlc19uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTEwNi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEwOT1FWFBPUlRfU1lNQk9MKHhza191c2VzX25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTExMC1cXG5uZXQveGRwL3hzay5jOjExMTpzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX2dldF9wb29sX2Zyb21fcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3hkcC94c2suYy0xMTItXFx0XFx0XFx0XFx0XFx0ICAgIHUxNiBxdWV1ZV9pZClcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTIzPXN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMwLVxcbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcXG5uZXQveGRwL3hzay5jLTEzMi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE0Nz1zdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hkcC94c2suYy0xNjQtICovXFxubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy0xNjYtXFx0XFx0XFx0dTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYz0yMDg9c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE4LVxcbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG5uZXQveGRwL3hzay5jLTIyMC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTI2MD1zdGF0aWMgdm9pZCAqeHNrX2NvcHlfeGRwX3N0YXJ0KHN0cnVjdCB4ZHBfYnVmZiAqZnJvbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjY3LVxcbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcXG5uZXQveGRwL3hzay5jLTI2OS1cXHRcXHRcXHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcXG4tLVxcbm5ldC94ZHAveHNrLmM9Mjk2PXN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbi0tXFxubmV0L3hkcC94c2suYy0zODgtXFxubmV0L3hkcC94c2suYzozODk6c3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMzkwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9Mzk3PXN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDAzLVxcbm5ldC94ZHAveHNrLmM6NDA0OnN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtNDA1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDEzLVxcbm5ldC94ZHAveHNrLmM6NDE0OnN0YXRpYyBib29sIHhza19kZXZfcXVldWVfdmFsaWQoY29uc3Qgc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTQxNS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeGRwX3J4cV9pbmZvICppbmZvKVxcbi0tXFxubmV0L3hkcC94c2suYy00MzgtXFxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtNDQwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDUzLVxcbm5ldC94ZHAveHNrLmM6NDU0OnN0YXRpYyB2b2lkIHhza19mbHVzaChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtNDU1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDYwLVxcbm5ldC94ZHAveHNrLmM6NDYxOmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00NjIte1xcbi0tXFxubmV0L3hkcC94c2suYy00NzYtXFxubmV0L3hkcC94c2suYzo0Nzc6c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC94ZHAveHNrLmMtNDc4LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NTE0PXZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXFxuLS1cXG5uZXQveGRwL3hzay5jLTUyMy1cXG5uZXQveGRwL3hzay5jOjUyNDp2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxcbm5ldC94ZHAveHNrLmMtNTI1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NTQ1PUVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxubmV0L3hkcC94c2suYy01NDYtXFxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTU0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTU1Nj1FWFBPUlRfU1lNQk9MKHhza190eF9yZWxlYXNlKTtcXG5uZXQveGRwL3hzay5jLTU1Ny1cXG5uZXQveGRwL3hzay5jOjU1ODpib29sIHhza190eF9wZWVrX2Rlc2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG5uZXQveGRwL3hzay5jLTU1OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTYwND1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX2Rlc2MpO1xcbm5ldC94ZHAveHNrLmMtNjA1LVxcbm5ldC94ZHAveHNrLmM6NjA2OnN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyaWVzKVxcbm5ldC94ZHAveHNrLmMtNjA3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNjE3LVxcbm5ldC94ZHAveHNrLmM6NjE4OnN0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy02MTktXFx0XFx0XFx0XFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXFxuLS1cXG5uZXQveGRwL3hzay5jPTY2OT14c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxcbi0tXFxubmV0L3hkcC94c2suYy03NDMtXFxubmV0L3hkcC94c2suYzo3NDQ6dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxubmV0L3hkcC94c2suYy03NDUte1xcbi0tXFxubmV0L3hkcC94c2suYz03OTE9RVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpO1xcbm5ldC94ZHAveHNrLmMtNzkyLVxcbm5ldC94ZHAveHNrLmM6NzkzOnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcXG5uZXQveGRwL3hzay5jLTc5NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTc5OS1cXG5uZXQveGRwL3hzay5jOjgwMDpzdGF0aWMgaW50IHhza19jcV9yZXNlcnZlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTgwMS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgxMC1cXG5uZXQveGRwL3hzay5jOjgxMTpzdGF0aWMgYm9vbCB4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODEyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODE1LVxcbm5ldC94ZHAveHNrLmM6ODE2OnN0YXRpYyB1NjQgeHNrX3NrYl9kZXN0cnVjdG9yX2dldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04MTcte1xcbi0tXFxubmV0L3hkcC94c2suYy04MjAtXFxubmV0L3hkcC94c2suYzo4MjE6c3RhdGljIHN0cnVjdCB4c2tfYWRkcnMgKl9feHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxcbm5ldC94ZHAveHNrLmMtODIyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODMzLVxcbm5ldC94ZHAveHNrLmM6ODM0OnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTgzNS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg0Ni1cXG5uZXQveGRwL3hzay5jOjg0NzpzdGF0aWMgaW50IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcXG5uZXQveGRwL3hzay5jLTg0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg1OC1cXG5uZXQveGRwL3hzay5jOjg1OTpzdGF0aWMgdm9pZCB4c2tfaW5jX251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04NjAte1xcbi0tXFxubmV0L3hkcC94c2suYy04NjgtXFxubmV0L3hkcC94c2suYzo4Njk6c3RhdGljIHUzMiB4c2tfZ2V0X251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04NzAte1xcbi0tXFxubmV0L3hkcC94c2suYy04ODAtXFxubmV0L3hkcC94c2suYzo4ODE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTg4Mi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hkcC94c2suYy05MTAtXFxubmV0L3hkcC94c2suYzo5MTE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy05MTItXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTkyMy1cXG5uZXQveGRwL3hzay5jOjkyNDpzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXFxubmV0L3hkcC94c2suYy05MjUte1xcbi0tXFxubmV0L3hkcC94c2suYz05MzE9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG5uZXQveGRwL3hzay5jOjkzMjp2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTkzMy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTk0NC1cXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy05NDYtXFx0XFx0XFx0ICAgICB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTYwLVxcbm5ldC94ZHAveHNrLmM6OTYxOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTc4LVxcbm5ldC94ZHAveHNrLmM6OTc5OnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTgwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTg3LVxcbm5ldC94ZHAveHNrLmM6OTg4OnN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXFxubmV0L3hkcC94c2suYy05ODktXFx0XFx0XFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQveGRwL3hzay5jPTEyMTU9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMzI5LVxcbm5ldC94ZHAveHNrLmM6MTMzMDpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTMzMS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNDItXFxubmV0L3hkcC94c2suYzoxMzQzOnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTM0NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNTMtXFxubmV0L3hkcC94c2suYzoxMzU0OnN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMTM1NS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEzNjQ9c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTQtXFxubmV0L3hkcC94c2suYzoxMzk1OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5uZXQveGRwL3hzay5jLTEzOTYte1xcbi0tXFxubmV0L3hkcC94c2suYz0xNDA2PXN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MzEtXFxubmV0L3hkcC94c2suYzoxNDMyOnN0YXRpYyBpbnQgeHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtMTQzMy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NDItXFxubmV0L3hkcC94c2suYzoxNDQzOnN0YXRpYyBfX3BvbGxfdCB4c2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQveGRwL3hzay5jLTE0NDQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NzUtXFxubmV0L3hkcC94c2suYzoxNDc2OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG5uZXQveGRwL3hzay5jLTE0NzctXFx0XFx0XFx0ICBib29sIHVtZW1fcXVldWUpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0OTMtXFxubmV0L3hkcC94c2suYzoxNDk0OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDk1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUwNy1cXG5uZXQveGRwL3hzay5jOjE1MDg6c3RhdGljIHN0cnVjdCB4c2tfbWFwICp4c2tfZ2V0X21hcF9saXN0X2VudHJ5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xNTA5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfc29jayBfX3JjdSAqKiptYXBfZW50cnkpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE1MjctXFxubmV0L3hkcC94c2suYzoxNTI4OnN0YXRpYyB2b2lkIHhza19kZWxldGVfZnJvbV9tYXBzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNTI5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU1My1cXG5uZXQveGRwL3hzay5jOjE1NTQ6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC94ZHAveHNrLmMtMTU1NS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE1OTI9c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNjA4LVxcbm5ldC94ZHAveHNrLmM6MTYwOTpzdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNjEwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxMy1cXG5uZXQveGRwL3hzay5jOjE2MTQ6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTYxNS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE4MDU9c3RydWN0IHhkcF91bWVtX3JlZ192MSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MTEtXFxubmV0L3hkcC94c2suYzoxODEyOnN0YXRpYyBpbnQgeHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQveGRwL3hzay5jLTE4MTMtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3hkcC94c2suYy0xOTM0LVxcbm5ldC94ZHAveHNrLmM6MTkzNTpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXFxubmV0L3hkcC94c2suYy0xOTM2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk0MS1cXG5uZXQveGRwL3hzay5jOjE5NDI6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxcbm5ldC94ZHAveHNrLmMtMTk0My17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE5NDk9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk1NC1cXG5uZXQveGRwL3hzay5jOjE5NTU6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC94ZHAveHNrLmMtMTk1Ni1cXHRcXHRcXHQgIHNvY2tvcHRfdCAqb3B0KVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDgyLVxcbm5ldC94ZHAveHNrLmM6MjA4MzpzdGF0aWMgaW50IHhza19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC94ZHAveHNrLmMtMjA4NC1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMjAtXFxubmV0L3hkcC94c2suYzoyMTIxOnN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQveGRwL3hzay5jLTIxMjItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjE1OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMTc4LVxcbm5ldC94ZHAveHNrLmM6MjE3OTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMjE4MC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxODktXFxubmV0L3hkcC94c2suYzoyMTkwOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQveGRwL3hzay5jLTIxOTEtXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQveGRwL3hzay5jPTIyNDM9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjQ2LVxcbm5ldC94ZHAveHNrLmM6MjI0NzpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGRwL3hzay5jLTIyNDgte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjUzLVxcbm5ldC94ZHAveHNrLmM6MjI1NDpzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhza19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hkcC94c2suYy0yMjU1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjI1OT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHhza19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjYzLVxcbm5ldC94ZHAveHNrLmM6MjI2NDpzdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxcbm5ldC94ZHAveHNrLmMtMjI2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjExLjM1MTAyNzA5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg3ODExNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFhTSyBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYHhza19nZW5lcmljX3JjdmAg4oCTIHRoYXQgZmVlbHMgcmlnaHQsIHRoYXQncyBhIGtleSBmb2N1cyBzeW1ib2wgZm9yIHRoaXMuIEFuZCBgeHNrX3JjdmAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCwgYnV0IGdvb2QgdG8ga25vdyBmb3IgY29udGV4dC4gQWhhLCBidXQgYF9feHNrX21hcF9yZWRpcmVjdGAgKmlzKiBleHBvcnRlZCwgaXQncyBub24tc3RhdGljISBFeGNlbGxlbnQuIExldCdzIGNvbmZpcm0gdGhhdCBgX194c2tfbWFwX3JlZGlyZWN0YCBpcyBpbmRlZWQgZGVmaW5lZCB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLiBZZXAsIGl0J3MgcmlnaHQgdGhlcmUsIGF0IGxpbmUgNDk3LlxuXG5TbywgdGFraW5nIHN0b2NrLCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHk6XG5cbiogICBgeHNrX2dlbmVyaWNfcmN2YFxuKiAgIGBfX3hza19tYXBfcmVkaXJlY3RgXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQuIFdlJ2xsIG5lZWQgYFhEUF9TT0NLRVRTYCwgb2J2aW91c2x5LiBBbmQgc2luY2UgWERQIHNvY2tldHMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIHVzaW5nIEJQRiBpbnRlcm5hbGx5LCBgQlBGX1NZU0NBTExgIGlzIGltcGxpZWQsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGV4cGxpY2l0IGFib3V0IGl0LlxuXG5UaW1lIGZvciBhIHF1aWNrIHNhbml0eSBjaGVjayBpbiBgbmV0L3hkcC9LY29uZmlnYC4gTGV0J3MgY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBjb25maWdzIGF0IHBsYXkgaGVyZS4gWXVwLCBqdXN0IGBYRFBfU09DS0VUU2AuXG5cbk5vdywgdGltZSB0byBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UgaXRzZWxmLCBzcGVjaWZpY2FsbHksIGBuZXQveGRwL3hzay5jYCwgYW5kIHRob3JvdWdobHkgZXhhbWluZSBib3RoIGB4c2tfZ2VuZXJpY19yY3ZgIGFuZCBgX194c2tfbWFwX3JlZGlyZWN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MTcuNzM4ODQyNTYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU1MTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgeHNrX2dlbmVyaWNfcmN2fGludCBfX3hza19tYXBfcmVkaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTQ1ND1zdGF0aWMgdm9pZCB4c2tfZmx1c2goc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDYwLVxcbm5ldC94ZHAveHNrLmM6NDYxOmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00NjIte1xcbi0tXFxubmV0L3hkcC94c2suYz00Nzc9c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxubmV0L3hkcC94c2suYy00OTYtXFxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjE3Ljc4MzQwMTc2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQ0MjA3MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVhbGluZyB3aXRoIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBfX3hza19yY3ZgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hkcC94c2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLlxuXG5Fc3NlbnRpYWxseSwgd2hhdCdzIGhhcHBlbmluZyBpcyB0aGV5J3JlIG1vZGlmeWluZyB0aGUgY29kZSB0byAqcHJlLWFsbG9jYXRlKiBhbGwgdGhlIGJ1ZmZlcnMgbmVlZGVkIGZvciBhIG11bHRpLWJ1ZmZlciBYRFAgcGFja2V0ICpiZWZvcmUqIHByb2Nlc3NpbmcgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgdGhvc2UgbmFzdHkgcGFydGlhbCBwYWNrZXQgZGVsaXZlcmllcyBpZiB0aGVyZSdzIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gSWYgYW4gYWxsb2NhdGlvbiBmYWlscyAqYW55d2hlcmUqIGFsb25nIHRoZSBsaW5lLCBpdCBpbW1lZGlhdGVseSBmcmVlcyBldmVyeXRoaW5nIGl0ICpkaWQqIG1hbmFnZSB0byBhbGxvY2F0ZSBhbmQgZHJvcHMgdGhlIHBhY2tldCwgcmV0dXJuaW5nIGAtRU5PTUVNYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IG1lbW9yeSBsZWFrcyBhbmQgYXZvaWRzIGFueSBjb3JydXB0ZWQgc3RhdGUgdGhhdCBtaWdodCBoYXBwZW4gd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gb3V0LW9mLW1lbW9yeSAoT09NKSBzaXR1YXRpb24gZHVyaW5nIG11bHRpLWJ1ZmZlciBwYWNrZXQgcmVjZXB0aW9uLiBTbWFydC5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgY29yZSBBRl9YRFAgcmVjZWl2ZSBwYXRoLiBJdCdzIGFjY2Vzc2libGUgdmlhIGJvdGggYHhza19nZW5lcmljX3JjdmAgYW5kIGBfX3hza19tYXBfcmVkaXJlY3RgLCBzbyBJJ2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLiBBbmQgaXQncyBkZXBlbmRlbnQgb24gdGhlIGBYRFBfU09DS0VUU2AgY29uZmlnIG9wdGlvbiBiZWluZyBlbmFibGVkLlxuXG5HaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgeHNrX2dlbmVyaWNfcmN2YCBhbmQgYF9feHNrX21hcF9yZWRpcmVjdGAsIHNvIEknbGwgc2V0IGBGb2N1c1N5bWJvbHM9W1wieHNrX2dlbmVyaWNfcmN2XCIsIFwiX194c2tfbWFwX3JlZGlyZWN0XCJdYC4gSSdsbCBhbHNvIGVuc3VyZSB0aGF0IGBFbmFibGVDb25maWdzPVtcIlhEUF9TT0NLRVRTXCJdYCBpcyBzZXQuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGgsIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoLCB0byBwcmUtYWxsb2NhdGUgYnVmZmVycywgd2hpY2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBpdCBoYW5kbGVzIE9PTSBzY2VuYXJpb3Mgd2l0aCBtdWx0aS1idWZmZXIgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIG9mdGVuIHJldmVhbCBpbnRlcmVzdGluZyBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3NywiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDoyNC42Mjc2MTEyMjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk3NTczMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZ2VuZXJpY19yY3ZcIixcbiAgICBcIl9feHNrX21hcF9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoIHRvIHByZS1hbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IGJ1ZmZlcnMgZm9yIG11bHRpLWJ1ZmZlciBwYWNrZXRzLCBwcmV2ZW50aW5nIHBhcnRpYWwgcGFja2V0IGRlbGl2ZXJ5IG9uIE9PTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZ2VuZXJpY19yY3ZcIixcbiAgICBcIl9feHNrX21hcF9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgcmVjZWl2ZSBwYXRoIHRvIHByZS1hbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IGJ1ZmZlcnMgZm9yIG11bHRpLWJ1ZmZlciBwYWNrZXRzLCBwcmV2ZW50aW5nIHBhcnRpYWwgcGFja2V0IGRlbGl2ZXJ5IG9uIE9PTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjI0LjcwMjU5NDczM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MTE0MzIwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDoyNC43MDMxNDIwNzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjM5MTA4ODAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3hza19yY3ZgIGluIGBuZXQveGRwL3hzay5jYCB0byBwcmUtYWxsb2NhdGUgYWxsIHJlcXVpcmVkIFhEUCBidWZmZXJzIGJlZm9yZSBjb3B5aW5nIGRhdGEgaW50byB0aGVtLiBUaGlzIHByZXZlbnRzIHBhcnRpYWwgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2ggYSBtdWx0aS1idWZmZXIgcGFja2V0LiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgc2FmZXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVmZmVyJ3MgbGlzdCBub2RlIGlzIGVtcHR5IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHRlbXBvcmFyeSBsaXN0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxpc3QgaW50ZWdyaXR5IGlzc3VlcyAod2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgbGlzdCBkZWJ1Z2dpbmcpLCBhbmQgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjYjIwOTAyNDJkZmE3MDFlNTU3YzgyN2NhZDFkMzI4ODRmODRjYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMjozMzozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCA3ODU1ZWUwOWM0YjY0Li4zMzQ3NWIxODBlYTZmIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTI5OCw5ICsyOTgsMTEgQEAgc3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG4gXHR1MzIgZnJhbWVfc2l6ZSA9IF9feHNrX3Bvb2xfZ2V0X3J4X2ZyYW1lX3NpemUoeHMtXHUwMDNlcG9vbCk7XG4gXHR2b2lkICpjb3B5X2Zyb20gPSB4c2tfY29weV94ZHBfc3RhcnQoeGRwKSwgKmNvcHlfdG87XG4gXHR1MzIgZnJvbV9sZW4sIG1ldGFfbGVuLCByZW0sIG51bV9kZXNjO1xuLVx0c3RydWN0IHhkcF9idWZmX3hzayAqeHNrYjtcbitcdHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsICp0bXA7XG4gXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhza194ZHA7XG4rXHRMSVNUX0hFQUQoeHNrX2J1ZmZzKTtcbiBcdHNrYl9mcmFnX3QgKmZyYWc7XG4rXHR1MzIgaTtcbiBcbiBcdGZyb21fbGVuID0geGRwLVx1MDAzZWRhdGFfZW5kIC0gY29weV9mcm9tO1xuIFx0bWV0YV9sZW4gPSB4ZHAtXHUwMDNlZGF0YSAtIGNvcHlfZnJvbTtcbkBAIC0zNDMsMjMgKzM0NSw0NSBAQCBzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbiBcdFx0ZnJhZyA9ICBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1swXTtcbiBcdH1cbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9kZXNjOyBpKyspIHtcbitcdFx0eHNrX3hkcCA9IHhza19idWZmX2FsbG9jKHhzLVx1MDAzZXBvb2wpO1xuK1x0XHRpZiAoIXhza194ZHApXG4rXHRcdFx0Z290byBlcnJfYWxsb2M7XG4rXG4rXHRcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcbitcdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpXG4rXHRcdFx0Z290byBlcnJfYWxsb2M7XG4rXG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2eHNrYi1cdTAwM2VsaXN0X25vZGUsIFx1MDAyNnhza19idWZmcyk7XG4rXHR9XG4rXG4gXHRkbyB7XG4gXHRcdHUzMiB0b19sZW4gPSBmcmFtZV9zaXplICsgbWV0YV9sZW47XG4gXHRcdHUzMiBjb3BpZWQ7XG4gXG4tXHRcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKTtcbitcdFx0eHNrYiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2eHNrX2J1ZmZzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrLFxuK1x0XHRcdFx0XHRsaXN0X25vZGUpO1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKTtcbitcdFx0eHNrX3hkcCA9IFx1MDAyNnhza2ItXHUwMDNleGRwO1xuIFx0XHRjb3B5X3RvID0geHNrX3hkcC1cdTAwM2VkYXRhIC0gbWV0YV9sZW47XG4gXG4gXHRcdGNvcGllZCA9IHhza19jb3B5X3hkcChjb3B5X3RvLCBcdTAwMjZjb3B5X2Zyb20sIHRvX2xlbiwgXHUwMDI2ZnJvbV9sZW4sIFx1MDAyNmZyYWcsIHJlbSk7XG4gXHRcdHJlbSAtPSBjb3BpZWQ7XG4gXG4tXHRcdHhza2IgPSBjb250YWluZXJfb2YoeHNrX3hkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcbiBcdFx0X194c2tfcmN2X3pjX3NhZmUoeHMsIHhza2IsIGNvcGllZCAtIG1ldGFfbGVuLFxuIFx0XHRcdFx0ICByZW0gPyBYRFBfUEtUX0NPTlREIDogMCk7XG4gXHRcdG1ldGFfbGVuID0gMDtcbiBcdH0gd2hpbGUgKHJlbSk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfYWxsb2M6XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeHNrYiwgdG1wLCBcdTAwMjZ4c2tfYnVmZnMsIGxpc3Rfbm9kZSkge1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKTtcbitcdFx0eHNrX2J1ZmZfZnJlZShcdTAwMjZ4c2tiLVx1MDAzZXhkcCk7XG4rXHR9XG4rXHR4cy1cdTAwM2VyeF9kcm9wcGVkKys7XG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MjQuNzAzMTQyNzUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjQ3NzQ5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYU0sgQnVmZmVyIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBfX3hza19yY3ZgIHdpdGhpbiBgbmV0L3hkcC94c2suY2AuIFRoZSBjb3JlIHNlZW1zIHRvIGJlIGFib3V0IHByZS1hbGxvY2F0aW5nIGJ1ZmZlcnMsIHNwZWNpZmljYWxseSB1c2luZyBhIGBMSVNUX0hFQUQoeHNrX2J1ZmZzKWAgYW5kIGB4c2tfYnVmZl9hbGxvYyh4cy1cdTAwM2Vwb29sKWAgZm9yIGEgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIChgbnVtX2Rlc2NgKS4gSSBzZWUgdGhlIGAtRU5PTUVNYCBlcnJvciBoYW5kbGluZyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIFRoZSBhbGxvY2F0aW9uIGlzIGZvbGxvd2VkIGJ5IGEgY29weSBvcGVyYXRpb24gYW5kIGEgY2FsbCB0byBgX194c2tfcmN2X3pjX3NhZmVgLiBUaGF0IGFsbCBtYWtlcyBzZW5zZS5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSdtIHNlZWluZyBhIGNoZWNrOiBgaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpIGdvdG8gZXJyX2FsbG9jO2AuIFRoYXQncyB0byBjb25maXJtIHRoYXQgdGhlIGxpc3Qgbm9kZSBpcyBlbXB0eSBiZWZvcmUgaXQncyBhZGRlZCB0byB0aGUgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEknbSBqdXN0IHF1aWNrbHkgdGhpbmtpbmcgaWYgdGhlcmUgYXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlIGFyZSBhbGxvY2F0aW5nIGB4ZHBfYnVmZmAgdGhyb3VnaCBgeHNrX2J1ZmZfYWxsb2NgLlxuXG5Ob3csIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMgb2YgYHhza19idWZmX2FsbG9jYCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaXNzdWUgdGhhdCBJJ20gbWlzc2luZy4gVGltZSB0byBkaXZlIGludG8gYG5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jYCBvciBtYXliZSBpdCdzIGluIGBuZXQveGRwL3hzay5jYCBpdHNlbGYuIEdvdHRhIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MjkuMjY3OTIwMzM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzMjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfYnVmZl9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTI5Nj1zdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzEzLVxcbm5ldC94ZHAveHNrLmM6MzE0OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zMTUtXFx0XFx0aWYgKCF4c2tfeGRwKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTM0OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2Rlc2M7IGkrKykge1xcbm5ldC94ZHAveHNrLmM6MzQ5OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zNTAtXFx0XFx0aWYgKCF4c2tfeGRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDoyOS4zMTA0NTgwMzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MzY4MTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgeHNrX2J1ZmZfYWxsb2MgRGV0YWlscyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgeHNrX2J1ZmZfYWxsb2NgIHRob3JvdWdobHkuIEl0J3MgdGhlIGNvcm5lcnN0b25lIG9mIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFja2V0IGJ1ZmZlcnMgaW4gWERQLCBhbmQgYSBzb2xpZCBncmFzcCBvbiBpdCBpcyBub24tbmVnb3RpYWJsZSBmb3Igb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFueSBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIHBvaW50cywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhlIE5JQyBhbmQgdGhlIGhvc3QuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipNZW1vcnkgYWxpZ25tZW50Kio6IFdoYXQgYXJlIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBidWZmZXJzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgZHVlIHRvIHRoZSBhbGlnbm1lbnQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdmFyaW91cyBOSUMgb2ZmbG9hZHMgb3IgRE1BIG9wZXJhdGlvbnM/XG4qICAgKipCdWZmZXIgcG9vbCBtYW5hZ2VtZW50Kio6IEhvdyBhcmUgdGhlc2UgYnVmZmVycyBtYW5hZ2VkIGludGVybmFsbHk/IElzIGl0IGEgc2ltcGxlIGZyZWVsaXN0LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byB3YXRjaCBvdXQgZm9yLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQ/IEhvdyBkb2VzIHRoaXMgcG9vbCB3b3JrIHdpdGggdGhlIHJpbmdzIGFuZCBob3cgYXJlIHRoZXkgbGlua2VkP1xuKiAgICoqQ29udGVudGlvbioqOiBXaGVyZSBhcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb25zPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MgaW4gdGhlIGFsbG9jYXRpb24gcGF0aD8gQXJlIHRoZXJlIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGhhemFyZHMgdG8gdGhlIGB4c2tfYnVmZl9hbGxvY2AgdGhhdCBjb3VsZCBiZSBjb25zaWRlcmVkP1xuKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgb2YgYHhza19idWZmX2FsbG9jYD8gQXJlIHRoZXJlIHByb3BlciByZXNvdXJjZSBleGhhdXN0aW9uIGNoZWNrcyBhbmQgZmFpbHVyZSBwYXRod2F5cyBvciBwb3RlbnRpYWwgbGVha3MgdG8gYWRkcmVzcz9cbiogICAqKkludGVyYWN0aW9uIHdpdGggWERQIHJpbmdzKio6IExldCdzIHNlZSBob3cgYHhza19idWZmX2FsbG9jYCB3b3JrcyB3aXRoIHRoZSByaW5ncy4gSSBuZWVkIHRvIHZpc3VhbGl6ZSB0aGUgY29tcGxldGUgZmxvdyBvZiBwYWNrZXRzLCBmcm9tIE5JQyB0byBgeHNrX2J1ZmZfYWxsb2NgLCBhbmQgdGhlbiBob3cgdGhleSBhcmUgbGlua2VkIGludG8gdGhlIHJpbmdzLlxuKiAgICoqQWx0ZXJuYXRpdmUgYWxsb2NhdG9ycyoqOiBBcmUgdGhlcmUgcG90ZW50aWFsIGFsdGVybmF0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB0byBjb25zaWRlciwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS9OSUMgYW5kIHVzZSBjYXNlPyBDb3VsZCBjdXN0b20gYWxsb2NhdG9ycywgb3IgZXZlbiBsZXZlcmFnaW5nIHRoZSBrZXJuZWwncyBzbGFiIGFsbG9jYXRvcnMsIG9mZmVyIGFkdmFudGFnZXMgaW4gY2VydGFpbiBzY2VuYXJpb3M/XG4qICAgKipQZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMqKjogTG9va2luZyBhdCB0aGUgY29kZSBpdHNlbGYsIGNhbiBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IGJlIHNwb3R0ZWQ/XG5JIG5lZWQgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUsIHRyYWNlIHRoZSBjb250cm9sIGZsb3csIGFuZCB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBsaW5lLCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLi4uIG9yIHdoZXJlIHRoZSBidWdzIGhpZGUuIEknbSBnb2luZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzU0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjMzLjY4NDE0MjMxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxNzExNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1ZmZfYWxsb2NcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTI5Nj1zdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzEzLVxcbm5ldC94ZHAveHNrLmM6MzE0OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zMTUtXFx0XFx0aWYgKCF4c2tfeGRwKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTM0OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2Rlc2M7IGkrKykge1xcbm5ldC94ZHAveHNrLmM6MzQ5OlxcdFxcdHhza194ZHAgPSB4c2tfYnVmZl9hbGxvYyh4cy1cXHUwMDNlcG9vbCk7XFxubmV0L3hkcC94c2suYy0zNTAtXFx0XFx0aWYgKCF4c2tfeGRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMjozNDozMy43MzczMjM4NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MDg1NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRlYnVnZ2luZyBhIFN1c3BlY3RlZCBJbmxpbmUgRnVuY3Rpb24gSXNzdWUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIGNvZGUgaXNuJ3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBJJ20gc3VzcGVjdGluZyBpdCBtaWdodCBiZSB0aGUgc291cmNlIG9mIHRoZSB0cm91YmxlIGNvdWxkIGJlIGFuIGlubGluZSBmdW5jdGlvbi4gSW5saW5lIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIHRyaWNreSB0byBkZWJ1ZyBiZWNhdXNlIHRoZSBjb21waWxlciBvZnRlbiBoYW5kbGVzIHRoZW0gaW4gYSB3YXkgdGhhdCBvYnNjdXJlcyB0aGUgZGlyZWN0IHNvdXJjZSBjb2RlIGV4ZWN1dGlvbiwgaXQncyBub3QgZXhhY3RseSBlYXN5IHRvIHRyYWNlIHRoZWlyIGZsb3cgaW4gdGhlIHNhbWUgd2F5IGFzIGEgcmVndWxhciBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gbG9vaywgYmVjYXVzZSBpdCdzIGEgY29tbW9uIGFyZWEgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgY29tcGxleCBsb2dpYyBvciBzaWRlIGVmZmVjdHMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGhlYWRlciBmaWxlcyB0byBzZWUgaWYgSSBmaW5kIGFueSBzdXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjM2LjkxODE4MzA4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTUyNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19idWZmX2FsbG9jXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9MTEzPXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCB4c2tfYnVmZl94ZHBfZ2V0X2ZyYW1lX2RtYShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTExOS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoxMjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgeGRwX2J1ZmYgKnhza19idWZmX2FsbG9jKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTEyMS17XFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00NDM9c3RhdGljIGlubGluZSBkbWFfYWRkcl90IHhza19idWZmX3hkcF9nZXRfZnJhbWVfZG1hKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDQ3LVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oOjQ0ODpzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZHBfYnVmZiAqeHNrX2J1ZmZfYWxsb2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6MzcuMDUwMzQxODQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTYyODcwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHhza19idWZmX2FsbG9jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdpdGggYHhza19idWZmX2FsbG9jYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29ybmVyc3RvbmUgb2YgaG93IFhEUCBtYW5hZ2VzIG1lbW9yeSBmb3IgcGFja2V0IGRhdGEuIEkgYWxyZWFkeSBrbm93IHRoZSBoaWdoLWxldmVsIGRldGFpbHMg4oCTIGl0J3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSByaW5nIGJ1ZmZlcnMgdXNlZCB0byBleGNoYW5nZSBwYWNrZXRzIGJldHdlZW4gdGhlIFhEUCBwcm9ncmFtIGFuZCB0aGUgaG9zdCBrZXJuZWwuIEJ1dCBub3cgSSB3YW50IGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBudWFuY2VzIGluIHRoaXMgcHJvY2Vzcy4gSSBuZWVkIHRvIGtub3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhlIHN5c3RlbSwgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXQgbWlnaHQgaW50cm9kdWNlIGluIGhpZ2gtcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBzY2hlbWUgcGxheXMgb3V0LiBIb3cgZG9lcyBpdCBtYW5hZ2UgdGhlIGB4c2tfdW1lbWAsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBkZXNpZ24gb24gdGhpbmdzIGxpa2UgY2FjaGUgZWZmaWNpZW5jeSBhbmQgZnJhZ21lbnRhdGlvbj8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgaXNzdWVzIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIHZ5aW5nIGZvciByZXNvdXJjZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzg4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjI6MzQ6NDAuMzA2NjMxNzkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiID0gY29udGFpbmVyX29mKHhkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0cmV0dXJuIHhwX2dldF9mcmFtZV9kbWEoeHNrYik7XFxuIDExODpcXHR9XFxuIDExOTpcXHRcXG4gMTIwOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHhkcF9idWZmICp4c2tfYnVmZl9hbGxvYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4gMTIxOlxcdHtcXG4gMTIyOlxcdFxcdHJldHVybiB4cF9hbGxvYyhwb29sKTtcXG4gMTIzOlxcdH1cXG4gMTI0OlxcdFxcbiAxMjU6XFx0c3RhdGljIGlubGluZSBib29sIHhza19pc19lb3BfZGVzYyhjb25zdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHRyZXR1cm4gIXhwX21iX2Rlc2MoZGVzYyk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qIFJldHVybnMgYXMgbWFueSBlbnRyaWVzIGFzIHBvc3NpYmxlIHVwIHRvIG1heC4gMCBcXHUwMDNjPSBOIFxcdTAwM2M9IG1heC4gKi9cXG4gMTMxOlxcdHN0YXRpYyBpbmxpbmUgdTMyIHhza19idWZmX2FsbG9jX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2J1ZmYgKip4ZHAsIHUzMiBtYXgpXFxuIDEzMjpcXHR7XFxuIDEzMzpcXHRcXHRyZXR1cm4geHBfYWxsb2NfYmF0Y2gocG9vbCwgeGRwLCBtYXgpO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgeHNrX2J1ZmZfY2FuX2FsbG9jKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgY291bnQpXFxuIDEzNzpcXHR7XFxuIDEzODpcXHRcXHRyZXR1cm4geHBfY2FuX2FsbG9jKHBvb2wsIGNvdW50KTtcXG4gMTM5OlxcdH1cXG4gMTQwOlxcdFxcbiAxNDE6XFx0c3RhdGljIGlubGluZSB2b2lkIHhza19idWZmX2ZyZWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIDE0MjpcXHR7XFxuIDE0MzpcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiID0gY29udGFpbmVyX29mKHhkcCwgc3RydWN0IHhkcF9idWZmX3hzaywgeGRwKTtcXG4gMTQ0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnhza2JfbGlzdCA9IFxcdTAwMjZ4c2tiLVxcdTAwM2Vwb29sLVxcdTAwM2V4c2tiX2xpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjQwLjMwNjcwOTgzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA3MjkwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBCdWZmZXIgUHJlLWFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgX194c2tfcmN2YCB0byBwcmUtYWxsb2NhdGUgYWxsIG9mIHRoZSBgeHNrX3hkcGAgYnVmZmVycyAqYmVmb3JlKiBjb3B5aW5nIGFueSBkYXRhIGludG8gdGhlbS4gVGhlIGdvYWwgaGVyZSBpcyB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIGFuIGFsbG9jYXRpb24gZmFpbHMgbWlkLXBhY2tldCwgcGFydGljdWxhcmx5IHdpdGggbXVsdGktYnVmZmVyIFhEUCwgd2hpY2ggd291bGQgbGVhZCB0byBhIHBhcnRpYWwgY29weSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdCBkYXRhLiBJZiBhbiBhbGxvY2F0aW9uICpkb2VzKiBmYWlsLCBpdCBjbGVhbnMgdXAgYnkgZnJlZWluZyBhbnkgYnVmZmVycyBpdCAqZGlkKiBtYW5hZ2UgdG8gYWxsb2NhdGUgYW5kIHJldHVybnMgYC1FTk9NRU1gLiBJdCBzZWVtcyB0byBtZSB0aGlzIGlzIHByaW1hcmlseSBhIGJ1ZyBmaXgsIGxpa2VseSBhZGRyZXNzaW5nIGVpdGhlciBhIG1lbW9yeSBsZWFrLCBwYWNrZXQgZHJvcCBkdWUgdG8gaW5jb21wbGV0ZSBjb3B5LCBvciBwb3NzaWJseSBhIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbiBzY2VuYXJpby5cblxuQWgsIGhhbmcgb24gYSBzZWNvbmQuIEkgc2VlIHRoaXMgYWRkaXRpb246XG5cbmBgYGNcblx0XHR4c2tiID0gY29udGFpbmVyX29mKHhza194ZHAsIHN0cnVjdCB4ZHBfYnVmZl94c2ssIHhkcCk7XG5cdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnhza2ItXHUwMDNlbGlzdF9ub2RlKSkpXG5cdFx0XHRnb3RvIGVycl9hbGxvYztcbmBgYFxuXG5UaGlzICpyZWFsbHkqIGxvb2tzIGxpa2UgYSBjaGVjayBvbiB3aGV0aGVyIGBsaXN0X25vZGVgIGlzIGVtcHR5LiBJZiBub3QsIGl0IGJhaWxzIG91dCB0byBgZXJyX2FsbG9jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGlzIGFpbWVkIGF0IGZpeGluZyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSDigJMgZGVmaW5pdGVseSBhIG1lbW9yeSBzYWZldHkgcHJvYmxlbSB0aGF0IGNvdWxkIHByb2JhYmx5IGJlIGNhdWdodCBieSBLQVNBTiBvciB0aGUgc3RhbmRhcmQgbGlzdCBkZWJ1Z2dpbmcuIEJ1dCBpdCBpcyBzdGlsbCBhIGdvb2QgY2hlY2sgdG8gaGF2ZS5cblxuU28sIGxldCdzIG5haWwgdGhpcyBkb3duLiBEb2VzIHRoaXMgcGF0Y2ggZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgY2hhbmdlcyB0aGUgKmFsbG9jYXRpb24gc3RyYXRlZ3kqIHRvIHByZS1hbGxvY2F0ZSBhbmQgYWRkcyB0aGlzIHNhZmV0eSBjaGVjaywgdGhhdCdzIGFsbC4gRG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEFic29sdXRlbHkgbm90LiBJdCdzIGNvcHlpbmcgZGF0YSBmcm9tIHdoYXQgc2hvdWxkIGJlIGEgZnVsbHkgaW5pdGlhbGl6ZWQgc291cmNlIGJ1ZmZlciAodGhlIGluY29taW5nIHBhY2tldCkgaW50byB0aGUgcHJlLWFsbG9jYXRlZCBidWZmZXJzLiBUaGlzIGlzbid0IGEgY2FzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQgaXMgZml4aW5nIGEgbGlzdCBjb3JydXB0aW9uIG9yIG1lbW9yeSBsZWFrLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU49ZmFsc2VgIGZsYWcgaXMgY29ycmVjdCBoZXJlLiBUaGlzIGRvZXNuJ3Qgc2VlbSBsaWtlIGl0IG5lZWRzIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTk3LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIyOjM0OjQ4LjYxNDAwMjg4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXIncyBsaXN0IG5vZGUgaXMgZW1wdHkgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgdGVtcG9yYXJ5IGxpc3QuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlzdCBpbnRlZ3JpdHkgaXNzdWVzICh3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBsaXN0IGRlYnVnZ2luZyksIGFuZCBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9feHNrX3JjdmAgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHByZS1hbGxvY2F0ZSBhbGwgcmVxdWlyZWQgWERQIGJ1ZmZlcnMgYmVmb3JlIGNvcHlpbmcgZGF0YSBpbnRvIHRoZW0uIFRoaXMgcHJldmVudHMgcGFydGlhbCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBsaXN0IGNvcnJ1cHRpb24gaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCBhIG11bHRpLWJ1ZmZlciBwYWNrZXQuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBzYWZldHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWZmZXIncyBsaXN0IG5vZGUgaXMgZW1wdHkgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgdGVtcG9yYXJ5IGxpc3QuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbGlzdCBpbnRlZ3JpdHkgaXNzdWVzICh3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBsaXN0IGRlYnVnZ2luZyksIGFuZCBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[1] Phase: Succeeded StartedAt: 2026-08-13 22:35:12 +0000 UTC FinishedAt: 2026-08-13 22:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 22:35:12 +0000 UTC FinishedAt: 2026-08-13 22:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2] Phase: Succeeded StartedAt: 2026-08-13 22:35:12 +0000 UTC FinishedAt: 2026-08-14 02:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 22:35:12 +0000 UTC FinishedAt: 2026-08-14 02:21:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 22:35:12 +0000 UTC FinishedAt: 2026-08-13 22:35:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 22:35:12 +0000 UTC FinishedAt: 2026-08-13 22:35:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowd5tc7/series-workflowd5tc7-convert-artifact-2497860348/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 22:35:22 +0000 UTC FinishedAt: 2026-08-13 22:55:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 22:35:22 +0000 UTC FinishedAt: 2026-08-13 22:55:05 +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:*e351cd68-7801-4fd7-936f-6131c7c12352,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-workflowd5tc7/series-workflowd5tc7-convert-artifact-2497860348/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": "9ce25aa5-7127-4f7b-9664-236dae036560", "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-workflowd5tc7/series-workflowd5tc7-build-action-395202090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 22:35:22 +0000 UTC FinishedAt: 2026-08-13 22:55:01 +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:*e351cd68-7801-4fd7-936f-6131c7c12352,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-workflowd5tc7/series-workflowd5tc7-convert-artifact-2497860348/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": "9ce25aa5-7127-4f7b-9664-236dae036560", "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-workflowd5tc7/series-workflowd5tc7-build-action-395202090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 22:55:05 +0000 UTC FinishedAt: 2026-08-13 22:55:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 22:55:05 +0000 UTC FinishedAt: 2026-08-13 22:55:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 22:55:05 +0000 UTC FinishedAt: 2026-08-13 22:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 22:55:05 +0000 UTC FinishedAt: 2026-08-13 22:55:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowd5tc7/series-workflowd5tc7-convert-artifact-1107838523/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 22:55:15 +0000 UTC FinishedAt: 2026-08-13 22:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 22:55:15 +0000 UTC FinishedAt: 2026-08-13 22:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ce25aa5-7127-4f7b-9664-236dae036560,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-workflowd5tc7/series-workflowd5tc7-build-action-395202090/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-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 22:57:25 +0000 UTC FinishedAt: 2026-08-13 22:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 22:57:25 +0000 UTC FinishedAt: 2026-08-13 22:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 22:57:25 +0000 UTC FinishedAt: 2026-08-13 23:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 22:57:25 +0000 UTC FinishedAt: 2026-08-13 23:16:26 +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:*e351cd68-7801-4fd7-936f-6131c7c12352,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-workflowd5tc7/series-workflowd5tc7-convert-artifact-1107838523/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": "550f990d-9783-4825-b5e4-b03918505398", "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-workflowd5tc7/series-workflowd5tc7-build-action-421577055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 22:57:25 +0000 UTC FinishedAt: 2026-08-13 23:16:16 +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:*e351cd68-7801-4fd7-936f-6131c7c12352,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-workflowd5tc7/series-workflowd5tc7-convert-artifact-1107838523/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": "550f990d-9783-4825-b5e4-b03918505398", "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-workflowd5tc7/series-workflowd5tc7-build-action-421577055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 23:16:26 +0000 UTC FinishedAt: 2026-08-13 23:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 23:16:26 +0000 UTC FinishedAt: 2026-08-13 23:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 23:16:26 +0000 UTC FinishedAt: 2026-08-13 23:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 23:16:26 +0000 UTC FinishedAt: 2026-08-13 23:18:26 +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:*550f990d-9783-4825-b5e4-b03918505398,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-workflowd5tc7/series-workflowd5tc7-build-action-421577055/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-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 23:18:35 +0000 UTC FinishedAt: 2026-08-14 02:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 23:18:35 +0000 UTC FinishedAt: 2026-08-14 02:21:47 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"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:*9ce25aa5-7127-4f7b-9664-236dae036560,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*550f990d-9783-4825-b5e4-b03918505398,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-workflowd5tc7/series-workflowd5tc7-build-action-395202090/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-workflowd5tc7/series-workflowd5tc7-build-action-421577055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 23:18:35 +0000 UTC FinishedAt: 2026-08-13 23:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 23:18:35 +0000 UTC FinishedAt: 2026-08-13 23:18:40 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"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-workflowd5tc7/series-workflowd5tc7-convert-artifact-2409567796/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 23:18:35 +0000 UTC FinishedAt: 2026-08-13 23:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 23:18:35 +0000 UTC FinishedAt: 2026-08-13 23:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 23:18:35 +0000 UTC FinishedAt: 2026-08-13 23:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 23:18:46 +0000 UTC FinishedAt: 2026-08-14 02:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5tc7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_generic_rcv","__xsk_map_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"8aec947c-494d-4f3d-8592-97658f086812","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 23:18:46 +0000 UTC FinishedAt: 2026-08-14 02:21:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ce25aa5-7127-4f7b-9664-236dae036560,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*550f990d-9783-4825-b5e4-b03918505398,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-workflowd5tc7/series-workflowd5tc7-build-action-395202090/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-workflowd5tc7/series-workflowd5tc7-build-action-421577055/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-workflowd5tc7/series-workflowd5tc7-convert-artifact-2409567796/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,}