Name: series-workflowkrwlx Phase: Succeeded StartedAt: 2026-07-18 00:44:22 +0000 UTC FinishedAt: 2026-07-18 05:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[0] Phase: Succeeded StartedAt: 2026-07-18 00:44:22 +0000 UTC FinishedAt: 2026-07-18 01:08:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 00:44:22 +0000 UTC FinishedAt: 2026-07-18 01:08:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO", "IPV6_ROUTER_PREF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO", "IPV6_ROUTER_PREF" ], "series_id": "c2f93b3a-6db9-45ce-a6c2-b04d0a355f62" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "fib6_del", "inet6_rt_notify", "rt6_route_rcv", "addrconf_prefix_rcv", "ndisc_router_discovery", "fib6_gc_table" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7ZmliNl9nY190YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY2MzAyOTQzZmIyZTU5YTE2YzhkODMwOTg0ZGMyM2E1ZDA3OWM3Y2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTowODoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5pbmRleCAzMzE5NWRiOTY3NDZjNi4uZDVmNjgyNDEyN2MyZTQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcbiAgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIG5hbWUtcHJlZml4OiBydGEtZGVsLXJlYXNvbi1cbiYjNDM7ICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb25cbiYjNDM7ICAgIGVudHJpZXM6XG4mIzQzOyAgICAgIC0gdW5zcGVjXG4mIzQzOyAgICAgIC0gZXhwaXJlZFxuJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3blxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE4NSw2ICYjNDM7MTk0LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgICAgIHR5cGU6IHU4XG4mIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4mIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMjIsMyAmIzQzOzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI0XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZGVscm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI1XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7XG4mIzQzO21jYXN0LWdyb3VwczpcbiYjNDM7ICBsaXN0OlxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDdcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4mIzQzOyAgICAgIHZhbHVlOiAxMVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuaW5kZXggOWNkMjdlMWI5YjY5MjMuLmM5M2E5OTdiYjQxZWJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw3IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHU4IGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMxLDcgJiM0Mzs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiB9XG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Mi4uYmY2YjM5ZWFhYTIwZDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0xMjgsNiAmIzQzOzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgdTggZGVsX3JlYXNvbik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0XHRcdCAgICAgYm9vbCBza2lwX25vdGlmeSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmM5Li44NmI0MDdiZWY0Y2VhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbiYjNDM7XHRSVEFfREVMX1JFQVNPTixcbiBcdF9fUlRBX01BWFxuIH07XG4gXG5AQCAtNDA3LDYgJiM0Mzs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHU4LlxuJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uXG4mIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuJiM0MzsgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XG4mIzQzOyAqIHRyZWF0IFwmIzM0O2Fic2VudFwmIzM0OyBhbmQgXCYjMzQ7dW5zcGVjXCYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbiYjNDM7ICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cbiYjNDM7ICovXG4mIzQzO2VudW0gcnRhX2RlbF9yZWFzb24ge1xuJiM0MztcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcdFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXG4mIzQzO1x0UlRBX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4mIzQzO1x0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuJiM0MztcdF9fUlRBX0RFTF9SRUFTT05fTUFYXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUQV9ERUxfUkVBU09OX01BWCAoX19SVEFfREVMX1JFQVNPTl9NQVggLSAxKVxuJiM0MztcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxuICAqXG4gICogXCYjMzQ7c3RydWN0IHJ0bmV4dGhvcFwmIzM0OyBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmVlLi4yYzliY2UzMjEzYjczNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTI4Niw3ICYjNDM7MTI4Niw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cdTAwM2VmaWI2X25vZGUsIGZuKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcbiYjNDM7XHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcnRfZW50cmllcyYjNDM7JiM0Mzs7XG4gXG4gXHRcdGlmICghKGZuLVx1MDAzZWZuX2ZsYWdzIFx1MDAyNiBSVE5fUlRJTkZPKSkge1xuQEAgLTEzMTcsNyAmIzQzOzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRydC1cdTAwM2VmaWI2X25leHQgPSBpdGVyLVx1MDAzZWZpYjZfbmV4dDtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFKTtcbiYjNDM7XHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UsXG4mIzQzO1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcm91dGVfbm9kZXMmIzQzOyYjNDM7O1xuIFx0XHRcdGZuLVx1MDAzZWZuX2ZsYWdzIHw9IFJUTl9SVElORk87XG5AQCAtMTk2Niw3ICYjNDM7MTk2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCAgIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgJiM0MzsyMDU4LDEzIEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbiYjNDM7XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcbiBcbiBcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcbiB9XG4gXG4gLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcbkBAIC0yMDkwLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4mIzQzO1x0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRydHBfbmV4dCA9IFx1MDAyNmN1ci1cdTAwM2VmaWI2X25leHQ7XG5AQCAtMjI1Miw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiBcdFx0cmVzID0gYy1cdTAwM2VmdW5jKHJ0LCBjLVx1MDAzZWFyZyk7XG4gXHRcdGlmIChyZXMgPT0gLTEpIHtcbiBcdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbi1cdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcblwmIzM0OyxcbkBAIC0yNDAwLDcgJiM0MzsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5jMzUzN2ZjMGVjNjNiMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEzOTYsNyAmIzQzOzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fVxuIFxuIFx0aWYgKHJ0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IGExMzAxMzM0ZGE0OGMwLi5lZTdiYTU4ZTgzYzc0NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKTtcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLCBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0dTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTM5OTQsMTQgJiM0MzszOTk1LDIwIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgdTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xuIFx0XHQubmxfbmV0ID0gbmV0LFxuLVx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuJiM0MztcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyAmIzQzOzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0fVxuIFxuIFx0aWYgKHJ0KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4mIzQzO1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbiYjNDM7XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICYjNDM7NTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbiBcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xuQEAgLTU5NTQsNiAmIzQzOzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiYjNDM7XHRpZiAodHlwZSA9PSBSVE1fREVMUk9VVEUgXHUwMDI2XHUwMDI2IGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBubGFfcHV0X3U4KHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuJiM0MztcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzQzO1xuIFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuQEAgLTYwNTUsNyAmIzQzOzYwNzEsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyAmIzQzOzYxMjAsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbkBAIC02MzM2LDEyICYjNDM7NjM1NCwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuJiM0MztcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU4LDcgJiM0Mzs2Mzc4LDcgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gfVxuIFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxuJiM0MztcdFx0XHQgICAgZGVsX3JlYXNvbik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cbkBAIC02NDEwLDcgJiM0Mzs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgJiM0Mzs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuJiM0MztcdFx0XHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYWQuLjM0OTM1ODg2YjZhZGZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2NlLi4wOGRlZmY3NTZmMjliMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XG4gXG4gX19hbGxfXyA9IFtcbiAgICAgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDssIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7U1BFQ19QQVRIXCYjMzQ7LFxuLSAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OyxcbiYjNDM7ICAgIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O1BTUEZhbWlseVwmIzM0OyxcbiBdXG5AQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4mIzQzO1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAwYzY3YzdjMDBkODQxYy4uODc3M2U4OGI5MzRiMGYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICYjNDM7NSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbkBAIC0xMzQsOCAmIzQzOzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwmIzM0OylcbiBcbiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4mIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgcmV0dXJuIHJ0bmxcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgcmV0dXJuIGF0dHJzXG4mIzQzOyAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBzZWVuID0ge31cbiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4mIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdXG4mIzQzOyAgICAgICAga2V5ID0gKGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10sIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSlcbiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDpcbiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbiYjNDM7ICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICByZXR1cm4gc2VlblxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuJiM0MzsgICAgd2l0aCBvcGVuKGZcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCYjMzQ7LCBcJiMzNDt3XCYjMzQ7KSBhcyBmOlxuJiM0MzsgICAgICAgIGYud3JpdGUoZlwmIzM0O3t2YWx1ZX1cXG5cJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWxcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4mIzQzOyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4mIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbiYjNDM7ICAgIHNvY2suc2VuZHRvKHJhLCAoJiMzOTtmZjAyOjoxJiMzOTssIDAsIDAsIGlmaW5kZXgpKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsXG4mIzQzOyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4mIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4mIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtuZXdyb3V0ZS1udGYmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZWVuLmtleXMoKSwgZGVhZGxpbmU9MikpXG4mIzQzOyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgIHJldHVybiBzZWVuXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXG4mIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmdcJiMzNDssIDApXG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCYjMzQ7LCA2NClcbiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZFwmIzM0OywgMClcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXBcJiMzNDssIG5zPXN0cihuc19oKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXBcJiMzNDssIG5zPXN0cihuc19yKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCYjMzQ7dmV0aDFcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpXG4mIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuXG4mIzQzO1xuJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLFxuJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKVxuJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcylcbiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7ZmliNl9nY190YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjYzMDI5NDNmYjJlNTlhMTZjOGQ4MzA5ODRkYzIzYTVkMDc5YzdjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDE4IDAxOjA4OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbAppbmRleCAzMzE5NWRiOTY3NDZjNi4uZDVmNjgyNDEyN2MyZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IHJ0YS11c2VkCiAgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBkZWwtcmVhc29uCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLQomIzQzOyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSB1bnNwZWMKJiM0MzsgICAgICAtIGV4cGlyZWQKJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3bgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuCiAgICAgICAgIGRpc3BsYXktaGludDogaGV4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAgIGVudW06IGRlbC1yZWFzb24KICAgLQogICAgIG5hbWU6IG1ldHJpY3MKICAgICBuYW1lLXByZWZpeDogcnRheC0KQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gZHBvcnQKICAgICAgICAgICAgIC0gbmgtaWQKICAgICAgICAgICAgIC0gZmxvd2xhYmVsCiYjNDM7ICAgICAgICAgICAgLSBkZWwtcmVhc29uCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNgpAQCAtMzIyLDMgJiM0MzszMzYsMjIgQEAgb3BlcmF0aW9uczoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKICAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBuZXdyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI0CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZGVscm91dGUtbnRmCiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLgomIzQzOyAgICAgIHZhbHVlOiAyNQomIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGUKJiM0MzsKJiM0MzttY2FzdC1ncm91cHM6CiYjNDM7ICBsaXN0OgomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDcKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZQomIzQzOyAgICAgIHZhbHVlOiAxMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IDljZDI3ZTFiOWI2OTIzLi5jOTNhOTk3YmI0MWViYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMxLDcgJiM0Mzs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIH0KICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCi0JCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKTsKIAogdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLAogCQkJIHVuc2lnbmVkIGxvbmcgbm93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NTIuLmJmNmIzOWVhYWEyMGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMTI4LDYgJiM0MzsxMjgsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLAogaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7CiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LAomIzQzOwkJICAgICAgdTggZGVsX3JlYXNvbik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAkJCSAgICAgYm9vbCBza2lwX25vdGlmeSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAyNzI2NWZkMzFlNWZjOS4uODZiNDA3YmVmNGNlYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKQEAgLTM5OSw2ICYjNDM7Mzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHsKIAlSVEFfRFBPUlQsCiAJUlRBX05IX0lELAogCVJUQV9GTE9XTEFCRUwsCiYjNDM7CVJUQV9ERUxfUkVBU09OLAogCV9fUlRBX01BWAogfTsKIApAQCAtNDA3LDYgJiM0Mzs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHsKICNkZWZpbmUgUlRNX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICYjNDM7IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpCiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSkKIAomIzQzOy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTguCiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvbgomIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYQomIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3QKJiM0MzsgKiB0cmVhdCAmIzM0O2Fic2VudCYjMzQ7IGFuZCAmIzM0O3Vuc3BlYyYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4KJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLgomIzQzOyAqLwomIzQzO2VudW0gcnRhX2RlbF9yZWFzb24gewomIzQzOwlSVEFfREVMX1JFQVNPTl9VTlNQRUMsCQkvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi8KJiM0MzsJUlRBX0RFTF9SRUFTT05fRVhQSVJFRCwJCS8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqLwomIzQzOwlSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sCS8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi8KJiM0MzsJX19SVEFfREVMX1JFQVNPTl9NQVgKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpCiYjNDM7CiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLgogICoKICAqICYjMzQ7c3RydWN0IHJ0bmV4dGhvcCYjMzQ7IGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLAomIzQzOwkJCQkJCSAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJCQlydCA9IE5VTEw7CiAJCQl9IGVsc2UgewogCQkJCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggYTEzMGNkZmFlYmZiZWUuLjJjOWJjZTMyMTNiNzM1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC0xMjg2LDcgJiM0MzsxMjg2LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0LSZndDtmaWI2X25vZGUsIGZuKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTsKIAkJaWYgKCFpbmZvLSZndDtza2lwX25vdGlmeSkKLQkJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTsKJiM0MzsJCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncywKJiM0MzsJCQkJCVJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWluZm8tJmd0O25sX25ldC0mZ3Q7aXB2Ni5ydDZfc3RhdHMtJmd0O2ZpYl9ydF9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAoIShmbi0mZ3Q7Zm5fZmxhZ3MgJmFtcDsgUlROX1JUSU5GTykpIHsKQEAgLTEzMTcsNyAmIzQzOzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlydC0mZ3Q7ZmliNl9uZXh0ID0gaXRlci0mZ3Q7ZmliNl9uZXh0OwogCQlyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpOwogCQlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCQkJUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJaWYgKCEoZm4tJmd0O2ZuX2ZsYWdzICZhbXA7IFJUTl9SVElORk8pKSB7CiAJCQlpbmZvLSZndDtubF9uZXQtJmd0O2lwdjYucnQ2X3N0YXRzLSZndDtmaWJfcm91dGVfbm9kZXMmIzQzOyYjNDM7OwogCQkJZm4tJmd0O2ZuX2ZsYWdzIHw9IFJUTl9SVElORk87CkBAIC0xOTY2LDcgJiM0MzsxOTY4LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LAogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLAotCQkJICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7CQkJICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkJICAgdTggZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NSwxMyAmIzQzOzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiAKIAlmaWI2X2luZm9fcmVsZWFzZShydCk7CiB9CiAKIC8qIE5lZWQgdG8gb3duIHRhYmxlLSZndDt0YjZfbG9jayAqLwotaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwOwpAQCAtMjA5MCw3ICYjNDM7MjA5Myw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAJCWlmIChydCA9PSBjdXIpIHsKIAkJCWlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKQogCQkJCWZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLSZndDtubF9uZXQpOwotCQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pOwomIzQzOwkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXJ0cF9uZXh0ID0gJmFtcDtjdXItJmd0O2ZpYjZfbmV4dDsKQEAgLTIyNTIsNyAmIzQzOzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpCiAJCXJlcyA9IGMtJmd0O2Z1bmMocnQsIGMtJmd0O2FyZyk7CiAJCWlmIChyZXMgPT0gLTEpIHsKIAkJCXctJmd0O2xlYWYgPSBydDsKLQkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAocmVzKSB7CiAjaWYgUlQ2X0RFQlVHICZndDs9IDIKIAkJCQlwcl9kZWJ1ZygmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcbiYjMzQ7LApAQCAtMjQwMCw3ICYjNDM7MjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgJmFtcDt0YjYtJmd0O3RiNl9nY19obGlzdCwgZ2NfbGluaykKIAkJaWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSkKLQkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmODY3ZWM4ZDNkOTA1MS4uYzM1MzdmYzBlYzYzYjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTM2MSw3ICYjNDM7MTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpCiAJZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LSZndDtjbmYucmFfZGVmcnRyX21ldHJpYzsKIAkvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqLwogCWlmIChydCAmYW1wOyZhbXA7IChsaWZldGltZSA9PSAwIHx8IHJ0LSZndDtmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwKJiM0MzsJCQkJICBsaWZldGltZSA9PSAwID8gUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDoKJiM0MzsJCQkJCQkgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCXJ0ID0gTlVMTDsKIAl9CiAKQEAgLTEzOTYsNyAmIzQzOzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJLm5sX25ldCA9IG5ldCwKIAkJfTsKIAkJcnQtJmd0O2ZpYjZfZmxhZ3MgPSAocnQtJmd0O2ZpYjZfZmxhZ3MgJmFtcDsgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7Ci0JCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCAmYW1wO25saW5mbywgTkxNX0ZfUkVQTEFDRSk7CiYjNDM7CQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgJmFtcDtubGluZm8sIE5MTV9GX1JFUExBQ0UsCiYjNDM7CQkJCVJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfQogCiAJaWYgKHJ0KSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBhMTMwMTMzNGRhNDhjMC4uZWU3YmE1OGU4M2M3NDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzOwkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pOwogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLAogCQkJCQlnd2FkZHIsIGRldik7CiAKIAlpZiAocnQgJmFtcDsmYW1wOyAhbGlmZXRpbWUpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQl1OCBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCiAJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIAogb3V0OgpAQCAtMzk5NCwxNCAmIzQzOzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCXJldHVybiBlcnI7CiB9CiAKLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpCiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksCiYjNDM7CQkgICAgICB1OCBkZWxfcmVhc29uKQogewogCXN0cnVjdCBubF9pbmZvIGluZm8gPSB7CiAJCS5ubF9uZXQgPSBuZXQsCi0JCS5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5CiYjNDM7CQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeSwKIAl9OwogCi0JcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvKTsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBkZWxfcmVhc29uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKJiM0Mzt7CiYjNDM7CXJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIH0KIAogc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQpAQCAtNDAyOCw3ICYjNDM7NDAzNSw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAogCQkJaWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLAogCQkJCQkgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSwKLQkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCkgJmx0OyAwKSB7CiYjNDM7CQkJCQkgIGluZm8tJmd0O3BvcnRpZCwgc2VxLCAwLAomIzQzOwkJCQkJICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpICZsdDsgMCkgewogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQl9IGVsc2UKQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZywKIAkJCQkJICZhbXA7cnQtJmd0O2ZpYjZfc2libGluZ3MsCiAJCQkJCSBmaWI2X3NpYmxpbmdzKSB7Ci0JCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTsKJiM0MzsJCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAl9CiAKLQllcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7CiYjNDM7CWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiBvdXRfcHV0OgpAQCAtNDE5Niw3ICYjNDM7NDIwNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAkJCQlpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKQogCQkJCQljb250aW51ZTsKIAotCQkJCWVyciA9ICBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjZmctJmd0O2ZjX25oX2lkKQpAQCAtNDIxNSw3ICYjNDM7NDIyNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAogCQkJLyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovCiAJCQlpZiAoY2ZnLSZndDtmY19mbGFncyAmYW1wOyBSVEZfR0FURVdBWSkKLQkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCWVsc2UKIAkJCQllcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7CiAJCQlicmVhazsKQEAgLTUzODEsNyAmIzQzOzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCX0KIAogCWlmIChydCkKLQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpOwomIzQzOwkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsCiYjNDM7CQkJCVJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTU3MzksNiAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSkKIAkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSkKIAkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi8KIAkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi8KJiM0MzsJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9ERUxfUkVBU09OICovCiAJICAgICAgICYjNDM7IG5leHRob3BfbGVuOwogfQogCkBAIC01Nzc1LDcgJiM0Mzs1Nzg3LDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzOwkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTsKIAlzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYzsKQEAgLTU5NTQsNiAmIzQzOzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtJmd0O2Vycm9yIDogMCkgJmx0OyAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwlpZiAodHlwZSA9PSBSVE1fREVMUk9VVEUgJmFtcDsmYW1wOyBkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3U4KHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcxLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIwLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkgewogCQkJCXJldHVybiAwOwogCQkJfQogCQkJY291bnQmIzQzOyYjNDM7OwpAQCAtNjMzNiwxMiAmIzQzOzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICAgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTgsNyAmIzQzOzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIH0KIAogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCi0JCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTggZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTYzNzcsNyAmIzQzOzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwKLQkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7CiYjNDM7CQkJICAgIGV2ZW50LCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLAomIzQzOwkJCSAgICBkZWxfcmVhc29uKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovCkBAIC02NDEwLDcgJiM0Mzs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CkBAIC02NDYzLDcgJiM0Mzs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLAogCX0KIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGY2aSwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgUlRNX05FV1JPVVRFLCAwLAotCQkJICAgIDAsIDApOwomIzQzOwkJCSAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQppbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQpAQCAtMTcsNyAmIzQzOzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXAogICAgIHdhaXRfZmlsZSwgdG9vbCwgdGMKIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkcwogZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXAotICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHkKJiM0MzsgICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rCiAKIF9fYWxsX18gPSBbJiMzNDtLU1JDJiMzNDssCkBAIC0zNCw0ICYjNDM7MzQsNCBAQCBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LAogICAgICAgICAgICAmIzM0O05ldGRldlNpbSYjMzQ7LCAmIzM0O05ldGRldlNpbURldiYjMzQ7LAogICAgICAgICAgICAmIzM0O05ldHNoYXBlckZhbWlseSYjMzQ7LCAmIzM0O0RldmxpbmtGYW1pbHkmIzM0OywgJiMzNDtQU1BGYW1pbHkmIzM0OywgJiMzNDtObEVycm9yJiMzNDssCiAgICAgICAgICAgICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O05ldGRldkZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywKLSAgICAgICAgICAgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0O10KJiM0MzsgICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtSdG5sUm91dGVGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5CmluZGV4IDJlNTY3MDYyYWE2Y2NlLi4wOGRlZmY3NTZmMjliMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6CiAKIF9fYWxsX18gPSBbCiAgICAgJiMzNDtObEVycm9yJiMzNDssICYjMzQ7TmxQb2xpY3kmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDssICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7U1BFQ19QQVRIJiMzNDssCi0gICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssCiYjNDM7ICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LAogICAgICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LAogICAgICYjMzQ7UFNQRmFtaWx5JiMzNDssCiBdCkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKIAomIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgomIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LXJvdXRlLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQomIzQzOwogY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMGM2N2M3YzAwZDg0MWMuLjg3NzNlODhiOTM0YjBmIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmUKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwpAQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICBrc2Z0X3RydWUoZiYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uJiMzNDsgaW4gY21kX29iai5zdGRvdXQsCiAgICAgICAgICAgICAgIGYmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfSYjMzQ7KQogCiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKQomIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoJiMzNDtydG5sZ3JwLWlwdjYtcm91dGUmIzM0OykKJiM0MzsgICAgcmV0dXJuIHJ0bmwKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOgomIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XQomIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBhdHRycwomIzQzOyAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzOwomIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpCiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDoKJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRycwomIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6CiYjNDM7ICAgIHdpdGggb3BlbihmJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9JiMzNDssICYjMzQ7dyYjMzQ7KSBhcyBmOgomIzQzOyAgICAgICAgZi53cml0ZShmJiMzNDt7dmFsdWV9XG4mIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtyb3V0ZS9nY19pbnRlcnZhbCYjMzQ7LCAyKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMiYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSwKJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lcgomIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKQomIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpbwomIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF0KJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW8KJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcikKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMCkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KQomIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpCiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSkKJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsCiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZWVuLmtleXMoKSwgZGVhZGxpbmU9MikpCiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjEKJiM0MzsgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUCiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6CiYjNDM7ICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn0mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOgomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhJiMzNDssIDIpCiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9mb3J3YXJkaW5nJiMzNDssIDApCiYjNDM7ICAgICAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuJiMzNDssIDY0KQomIzQzOyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk8mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheQomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZCYjMzQ7LCAwKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXAmIzM0OywgbnM9c3RyKG5zX2gpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXAmIzM0OywgbnM9c3RyKG5zX3IpKQomIzQzOwomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKQomIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCAmIzM0O3ZldGgxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCA2MDApKQomIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZCYjMzQ7KQomIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczoKJiM0MzsgICAgICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLAomIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpCiYjNDM7ICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCByb3V0ZXMpCiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczoKJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSkKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9JiMzNDspCiYjNDM7ICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpCiYjNDM7ICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cCYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoxOjomIzM5OykKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjQmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvbiYjMzQ7KQomIzQzOwomIzQzOwogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSkKJiM0MzsgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKICAgICBrc2Z0X2V4aXQoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQ2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIElQdjYgUm91dGUgRGVsZXRpb24gUmVhc29uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGEgYFJUQV9ERUxfUkVBU09OYCBhdHRyaWJ1dGUgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gSVB2NiByb3V0aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvaXB2Ni9gLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIFRoZSBhZGRpdGlvbiBhbGxvd3MgZm9yIHNwZWNpZnlpbmcgcmVhc29ucyBsaWtlIGBSVEFfREVMX1JFQVNPTl9VTlNQRUNgLCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAsIGFuZCBgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYCBpbiBgUlRNX0RFTFJPVVRFYCBtZXNzYWdlcy4KCkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLiBMb29raW5nIGF0IHRoZSBtb2RpZmllZCBmaWxlcywgSSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0OiBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYGZpYjZfZGVsYCwgYGZpYjZfY2xlYW5fbm9kZWAsIGBmaWI2X2djX3RhYmxlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgcnQ2X2ZpbGxfbm9kZWAsIGBydDZfcm91dGVfcmN2YCwgYF9faXA2X2RlbF9ydGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBpcDZfcm91dGVfZGVsYCwgYGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnlgLCBgcnQ2X25sbXNnX3NpemVgLCBgcnQ2X25oX2R1bXBfZXhjZXB0aW9uc2AsIGBydDZfZHVtcF9yb3V0ZWAsIGBpbmV0Nl9ydG1fZ2V0cm91dGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYGZpYjZfcnRfdXBkYXRlYCwgYW5kIGBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0YC4gVGhhdCYjMzk7cyBhIGxvdCEKCkkgdGhpbmsgYGZpYjZfZGVsYCBhbmQgYGlwNl9kZWxfcnRfcmVhc29uYCBhcmUgcGFydGljdWxhcmx5IGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IHNlZW0gdG8gYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcm91dGUgZGVsZXRpb24gcmVhc29uLiBBbHNvLCBgcnQ2X2ZpbGxfbm9kZWAgaXMgaG90LXBhdGggZm9yIGR1bXBpbmcgYW5kIG5vdGlmaWNhdGlvbiwgYWxzbyBgaW5ldDZfcnRfbm90aWZ5YCBhcmUgaW1wb3J0YW50IGZvciBub3RpZmljYXRpb24uIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGxvb2sgcHJvbWlzaW5nIGZvciBSQSAoUm91dGVyIEFkdmVydGlzZW1lbnQpIHByb2Nlc3NpbmcsIGFuZCBgcnQ2X3JvdXRlX3JjdmAgc2VlbXMgaW1wb3J0YW50LCB0b28uCgpOb3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLiBTaW5jZSB0aGlzIGlzIGluIGBuZXQvaXB2Ni9gLCBgQ09ORklHX0lQVjZgIGlzLCBvYnZpb3VzbHksIHJlcXVpcmVkLiBUaGUgc2VsZnRlc3QgbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIHdpdGggdGhpcyBsaW5lOiBgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbiYjMzQ7LCA2NClgLiAgU28gbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgdGhlbiB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgb3V0IHdoYXQgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lIGZvciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc9NDg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWc9NTk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnOjYwOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnLTYxLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE1Mj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE1MzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTU0LUNPTkZJR19JTkVUNl9BSD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0xNjg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNjk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTE3MC1DT05GSUdfSU5FVDZfQUg9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc9NTI9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzo1MzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNTQtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWc9NTQ9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo1NTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctNTYtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnPTQwPUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnOjQxOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl82NF9kZWZjb25maWctNDItQ09ORklHX0lORVQ2X0FIPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZz0zNj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZzozNzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnLTM4LUNPTkZJR19JTkVUNl9BSD1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9yNGtfZGVmY29uZmlnPTM1PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZzozNjpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZy0zNy1DT05GSUdfSU5FVDZfQUg9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnPTM5PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjQwOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWctNDEtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTM2PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnOjM3OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWctMzgtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnPTM2PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnOjM3OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWctMzgtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz00NT1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctNDctQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZzo1MDpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNTEtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz00OD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc6NDk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNTAtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZz0zMj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWc6MzM6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWctMzQtQ09ORklHX0lORVQ2X0FIPW1cbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTEwOD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnOjEwOTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctMTEwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc9NDg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01MS1cdF9fczMyXHRcdHJ0cl9wcm9iZV9pbnRlcnZhbDtcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjUyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01My1cdF9fczMyXHRcdGFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuO1xuLS1cbmluY2x1ZGUvbmV0L25kaXNjLmg9MTAwPXN0cnVjdCBuZGlzY19vcHRpb25zIHtcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAxLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdF9hcnJheVtfX05EX09QVF9BUlJBWV9NQVhdO1xuaW5jbHVkZS9uZXQvbmRpc2MuaDoxMDI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAzLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdHNfcmk7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjExLVx0LnJ0cl9wcm9iZV9pbnRlcnZhbFx0PSA2MCAqIEhaLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMTI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjEzLVx0LmFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuID0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc2LVx0LnJ0cl9wcm9iZV9pbnRlcnZhbFx0PSA2MCAqIEhaLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzc6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc4LVx0LmFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuID0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjQ9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MDMtXHRcdGppZmZpZXNfdG9fbXNlY3MoUkVBRF9PTkNFKGNuZi1cdTAwM2VydHJfcHJvYmVfaW50ZXJ2YWwpKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcwNDojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvYWRkcmNvbmYuYy01NzA1LVx0YXJyYXlbREVWQ09ORl9BQ0NFUFRfUkFfUlRfSU5GT19NSU5fUExFTl0gPVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODYtXHR9LFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3MDg3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODgtXHR7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0yMjA9c3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTI1Ni1cdFx0XHRicmVhaztcbm5ldC9pcHY2L25kaXNjLmM6MjU3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9uZGlzYy5jLTI1OC1cdFx0Y2FzZSBORF9PUFRfUk9VVEVfSU5GTzpcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE0OTctXG5uZXQvaXB2Ni9uZGlzYy5jOjE0OTg6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L25kaXNjLmMtMTQ5OS1cdGlmICghUkVBRF9PTkNFKGluNl9kZXYtXHUwMDNlY25mLmFjY2VwdF9yYV9mcm9tX2xvY2FsKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTExNT1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xMTgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjExOTojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvcm91dGUuYy0xMjAtc3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKnJ0Nl9hZGRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTk2OC1cbm5ldC9pcHY2L3JvdXRlLmM6OTY5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jLTk3MC1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NDIzOT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00MzgxLVxubmV0L2lwdjYvcm91dGUuYzo0MzgyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODMtc3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKnJ0Nl9nZXRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTE0PUNPTkZJR19JUFY2X01JUDY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTE1OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQtMTE2LUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbj0xMDU9Q09ORklHX0lQVjZfTUlQNj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoxMDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi0xMDctQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc9NDU9Q09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTQ3LUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTI0Nj1kZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTI2Mi0gICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5OjI2MzogICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS0yNjQtICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5NgoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVB2NiBSb3V0ZSBJbmZvcm1hdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBhbmQgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXIgd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBGaXJzdCwgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGlzIGRlZmluaXRlbHkga2V5IGhlcmUuIEl0IHNlZW1zIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhhdCBmb3IgdGhlIGZ1enppbmcuIEl0JiMzOTtzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYENPTkZJR19JUFY2X1JPVVRFUl9QUkVGYCBvZnRlbiBnb2VzIGhhbmQtaW4taGFuZCB3aXRoIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCwgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEkmIzM5O2xsIGFkZCBib3RoIGBJUFY2X1JPVVRFX0lORk9gIGFuZCBgSVBWNl9ST1VURVJfUFJFRmAgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGUgY29kZSBhbmQgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIG5ldzogYGlwNl9kZWxfcnRfcmVhc29uYCBpcyBicmFuZCBuZXcsIHNvIHRoYXQmIzM5O3MgYSBwcmltZSBzdXNwZWN0LiBgZmliNl9kZWxgIG5vdyB0YWtlcyBgZGVsX3JlYXNvbmAsIGFuZCBgaW5ldDZfcnRfbm90aWZ5YCBhbHNvIHRha2VzIGBkZWxfcmVhc29uYCwgYW5kIEkmIzM5O3ZlIGFsc28gbm90ZWQgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbW9kaWZpZWQgdG8gdGFrZSBgZGVsX3JlYXNvbmAuIEZ1cnRoZXIsIEkgc2VlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGFsbCBjYWxsaW5nIGBpcDZfZGVsX3J0X3JlYXNvbmAuIGBmaWI2X2djX3RhYmxlYCBpcyBjYWxsaW5nIGBmaWI2X2RlbGAgd2l0aCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAuCgpTbywgYmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb246IGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYGZpYjZfZ2NfdGFibGVgLgoKSSBzaG91bGQgbm90ZSB0aGF0IGBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgYSBsaXR0bGUgbGVzcyBhY2Nlc3NpYmxlLCBidXQgaXQmIzM5O3Mgc3RpbGwgZ29vZCB0byBoYXZlIG9uIHRoZSBsaXN0LiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgZ2xvYmFsOyBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAgaXMgc3RhdGljLgoKSSBjaGVja2VkIGZvciByZWFjaGFiaWxpdHkuIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgaXA2X2RlbF9ydGAuIGBmaWI2X2RlbGAgaXMgY2FsbGVkIGZyb20gYF9faXA2X2RlbF9ydGAsIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgLCBgZmliNl9jbGVhbl9ub2RlYCwgYW5kIGBmaWI2X2djX3RhYmxlYC4KCkFmdGVyIHRoaXMgZGVlcGVyIGRpdmUsIEkmIzM5O20gY29uZmlkZW50IGluIHJlZmluaW5nIG15IGxpc3Qgb2YgZnV6emluZyB0YXJnZXRzLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBmaWI2X2djX3RhYmxlYC4KCkEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHJlYWxpemUgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AgaXMgZW5hYmxlZC4gVGhhdCBqdXN0IHJlaW5mb3JjZXMgdGhlIGltcG9ydGFuY2Ugb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlIHRoZSBvYnZpb3VzIGNvbmZpZ3MuIGBDT05GSUdfSVBWNmAgaXMgYSBuby1icmFpbmVyLCBhbmQsIGFzIG1lbnRpb25lZCBlYXJsaWVyLCBgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUZgIGlzIG9mdGVuIHJlcXVpcmVkIGZvciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBwbGFuIGluIHBsYWNlLiBOb3csIEkmIzM5O2xsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoaXMga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfbm90aWZ5JiMzNDssCiAgICAmIzM0O3J0Nl9yb3V0ZV9yY3YmIzM0OywKICAgICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICAgJiMzNDtuZGlzY19yb3V0ZXJfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZ2NfdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBsb2dpYywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnQgcHJvY2Vzc2luZyB0byBzdXBwbHkgdGhlIGRlbGV0aW9uIHJlYXNvbi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7ZmliNl9nY190YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE1LjEyOTA5MzQwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTc5MDUzODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yb3V0ZXJfZGlzY292ZXJ5XCIsXG4gICAgXCJmaWI2X2djX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBsb2dpYywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnQgcHJvY2Vzc2luZyB0byBzdXBwbHkgdGhlIGRlbGV0aW9uIHJlYXNvbi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE1LjEyOTA5ODg2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc5NjQ2MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjYzMDI5NDNmYjJlNTlhMTZjOGQ4MzA5ODRkYzIzYTVkMDc5YzdjYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTowODoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuaW5kZXggMzMxOTVkYjk2NzQ2YzYuLmQ1ZjY4MjQxMjdjMmU0IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5AQCAtNzgsNiArNzgsMTUgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgIC1cXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIG5hbWUtcHJlZml4OiBydGEtZGVsLXJlYXNvbi1cXG4rICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb25cXG4rICAgIGVudHJpZXM6XFxuKyAgICAgIC0gdW5zcGVjXFxuKyAgICAgIC0gZXhwaXJlZFxcbisgICAgICAtIHJhLXdpdGhkcmF3blxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xODUsNiArMTk0LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxcbisgICAgICAgIHR5cGU6IHU4XFxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxcbiAgIC1cXG4gICAgIG5hbWU6IG1ldHJpY3NcXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxcbkBAIC0yOTksNiArMzEyLDcgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgICAgICAgLSBkcG9ydFxcbiAgICAgICAgICAgICAtIG5oLWlkXFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjZcXG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjVcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgIC1cXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI0XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rICAgIC1cXG4rICAgICAgbmFtZTogZGVscm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI1XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcXG4rICAgICAgdmFsdWU6IDdcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXFxuKyAgICAgIHZhbHVlOiAxMVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uYzkzYTk5N2JiNDFlYmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHU4IGRlbF9yZWFzb24pO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuQEAgLTUzMSw3ICs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gfVxcbiAjZW5kaWZcXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pO1xcbiBcXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBub3cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmJmNmIzOWVhYWEyMGQ0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5AQCAtMTI4LDYgKzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXFxuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxcbitcXHRcXHQgICAgICB1OCBkZWxfcmVhc29uKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0XFx0XFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uODZiNDA3YmVmNGNlYWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiBcXHRSVEFfRFBPUlQsXFxuIFxcdFJUQV9OSF9JRCxcXG4gXFx0UlRBX0ZMT1dMQUJFTCxcXG4rXFx0UlRBX0RFTF9SRUFTT04sXFxuIFxcdF9fUlRBX01BWFxcbiB9O1xcbiBcXG5AQCAtNDA3LDYgKzQwOCwyMiBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXFxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxcbiBcXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1OC5cXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxcbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcXG4rICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxcbisgKiB0cmVhdCBcXFwiYWJzZW50XFxcIiBhbmQgXFxcInVuc3BlY1xcXCIgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxcbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxcbisgKi9cXG4rZW51bSBydGFfZGVsX3JlYXNvbiB7XFxuK1xcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcXHRcXHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFxcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cXG4rXFx0X19SVEFfREVMX1JFQVNPTl9NQVhcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXFxuK1xcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxcbiAgKlxcbiAgKiBcXFwic3RydWN0IHJ0bmV4dGhvcFxcXCIgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5pbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuIFxcdFxcdGlmIChydCkge1xcbiBcXHRcXHRcXHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cXG4gXFx0XFx0XFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xcbiBcXHRcXHRcXHRcXHRydCA9IE5VTEw7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdHRhYmxlID0gcnQtXFx1MDAzZWZpYjZfdGFibGU7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbmluZGV4IGExMzBjZGZhZWJmYmVlLi4yYzliY2UzMjEzYjczNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5AQCAtMTI4Niw3ICsxMjg2LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVxcdTAwM2VmaWI2X25vZGUsIGZuKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcXG4gXFx0XFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpO1xcbitcXHRcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlbmxfbmV0LVxcdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cXHUwMDNlZmliX3J0X2VudHJpZXMrKztcXG4gXFxuIFxcdFxcdGlmICghKGZuLVxcdTAwM2Vmbl9mbGFncyBcXHUwMDI2IFJUTl9SVElORk8pKSB7XFxuQEAgLTEzMTcsNyArMTMxOCw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdHJ0LVxcdTAwM2VmaWI2X25leHQgPSBpdGVyLVxcdTAwM2VmaWI2X25leHQ7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XFxuIFxcdFxcdGlmICghaW5mby1cXHUwMDNlc2tpcF9ub3RpZnkpXFxuLVxcdFxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGlmICghKGZuLVxcdTAwM2Vmbl9mbGFncyBcXHUwMDI2IFJUTl9SVElORk8pKSB7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZW5sX25ldC1cXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXFx1MDAzZWZpYl9yb3V0ZV9ub2RlcysrO1xcbiBcXHRcXHRcXHRmbi1cXHUwMDNlZm5fZmxhZ3MgfD0gUlROX1JUSU5GTztcXG5AQCAtMTk2Niw3ICsxOTY4LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCAgIHU4IGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxuQEAgLTIwNTUsMTMgKzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4gXFx0XFx0XFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XFxuIFxcdH1cXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xcbitcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XFxuIFxcbiBcXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XFxuIH1cXG4gXFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVxcdTAwM2V0YjZfbG9jayAqL1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcXG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJ0ID09IGN1cikge1xcbiBcXHRcXHRcXHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcXG4gXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxuLVxcdFxcdFxcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRydHBfbmV4dCA9IFxcdTAwMjZjdXItXFx1MDAzZWZpYjZfbmV4dDtcXG5AQCAtMjI1Miw3ICsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiBcXHRcXHRyZXMgPSBjLVxcdTAwM2VmdW5jKHJ0LCBjLVxcdTAwM2VhcmcpO1xcbiBcXHRcXHRpZiAocmVzID09IC0xKSB7XFxuIFxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG4tXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRpZiAocmVzKSB7XFxuICNpZiBSVDZfREVCVUcgXFx1MDAzZT0gMlxcbiBcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcXFxuXFxcIixcXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcXHUwMDI2dGI2LVxcdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXFxuIFxcdFxcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXFxuLVxcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmODY3ZWM4ZDNkOTA1MS4uYzM1MzdmYzBlYzYzYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LVxcdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcXG4gXFx0LyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi9cXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVxcdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTM5Niw3ICsxMzk4LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0Lm5sX25ldCA9IG5ldCxcXG4gXFx0XFx0fTtcXG4gXFx0XFx0cnQtXFx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXFx1MDAzZWZpYjZfZmxhZ3MgXFx1MDAyNiB+UlRGX1BSRUZfTUFTSykgfCBSVEZfUFJFRihwcmVmKTtcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFxcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xcbitcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcXG4rXFx0XFx0XFx0XFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJ0KSB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggYTEzMDEzMzRkYTQ4YzAuLmVlN2JhNThlODNjNzQ1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncyk7XFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pO1xcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRnd2FkZHIsIGRldik7XFxuIFxcbiBcXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgIWxpZmV0aW1lKSB7XFxuLVxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0dTggZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcXG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0dGFibGUgPSBydC1cXHUwMDNlZmliNl90YWJsZTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRhYmxlLVxcdTAwM2V0YjZfbG9jayk7XFxuIFxcbiBvdXQ6XFxuQEAgLTM5OTQsMTQgKzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcXG4rXFx0XFx0ICAgICAgdTggZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xcbiBcXHRcXHQubmxfbmV0ID0gbmV0LFxcbi1cXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxcbitcXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeSxcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbitpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbit7XFxuK1xcdHJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4gXFx0XFx0XFx0fSBlbHNlXFxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJ0LVxcdTAwM2VmaWI2X3NpYmxpbmdzLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmliNl9zaWJsaW5ncykge1xcbi1cXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcXG4rXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChjZmctXFx1MDAzZWZjX25oX2lkKVxcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcbiBcXHRcXHRcXHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfZmxhZ3MgXFx1MDAyNiBSVEZfR0FURVdBWSlcXG4tXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC01MzgxLDcgKzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocnQpXFxuLVxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcXG4rXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbkBAIC01NzM5LDYgKzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cXG4rXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX0RFTF9SRUFTT04gKi9cXG4gXFx0ICAgICAgICsgbmV4dGhvcF9sZW47XFxuIH1cXG4gXFxuQEAgLTU3NzUsNyArNTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbiBcXHRcXHRcXHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcXG4gXFx0XFx0XFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XFxuIFxcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xcbkBAIC01OTU0LDYgKzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVxcdTAwM2VlcnJvciA6IDApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbitcXHRpZiAodHlwZSA9PSBSVE1fREVMUk9VVEUgXFx1MDAyNlxcdTAwMjYgZGVsX3JlYXNvbiAhPSBSVEFfREVMX1JFQVNPTl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXFxuK1xcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4gXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG5AQCAtNjA1NSw3ICs2MDcxLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ0Nl9leC1cXHUwMDNlcnQ2aS1cXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgTkVUTElOS19DQihkdW1wLVxcdTAwM2VjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkdW1wLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIHctXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5AQCAtNjEwMyw3ICs2MTIwLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXFxuIFxcdFxcdFxcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVxcdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgIDAsIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBORVRMSU5LX0NCKGFyZy1cXHUwMDNlY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGFyZy1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkge1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbkBAIC02MzM2LDEyICs2MzU0LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXFx1MDAyNmZsNi5kYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZXJyID0gLUVORVRVTlJFQUNIO1xcbiBcXHR9XFxuQEAgLTYzNTgsNyArNjM3OCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiB9XFxuIFxcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4tXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHU4IGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcXG4tXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxcbitcXHRcXHRcXHQgICAgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XFxuK1xcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxcbitcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcXG4tXFx0XFx0XFx0ICAgIDAsIDApO1xcbitcXHRcXHRcXHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXFxuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XFxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGlua1xcbiBcXG4gX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuICAgICAgICAgICAgXFxcIk5ldGRldlNpbVxcXCIsIFxcXCJOZXRkZXZTaW1EZXZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsIFxcXCJQU1BGYW1pbHlcXFwiLCBcXFwiTmxFcnJvclxcXCIsXFxuICAgICAgICAgICAgXFxcIllubEZhbWlseVxcXCIsIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIixcXG4tICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbisgICAgICAgICAgIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxcbiBcXG4gX19hbGxfXyA9IFtcXG4gICAgIFxcXCJObEVycm9yXFxcIiwgXFxcIk5sUG9saWN5XFxcIiwgXFxcIk5ldGxpbmtcXFwiLCBcXFwiWW5sRmFtaWx5XFxcIiwgXFxcIlNQRUNfUEFUSFxcXCIsXFxuLSAgICBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIixcXG4rICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIixcXG4gICAgIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJEZXZsaW5rRmFtaWx5XFxcIixcXG4gICAgIFxcXCJQU1BGYW1pbHlcXFwiLFxcbiBdXFxuQEAgLTU0LDYgKzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuIFxcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtcm91dGUueWFtbCcpKS5hc19wb3NpeCgpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxcbitcXG4gY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6XFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLjg3NzNlODhiOTM0YjBmIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIFxcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xcXFx4ZTBcXFxceDAwXFxcXHgwMFxcXFx4MDEnXFxuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xcXFx4ZWZcXFxceDAxXFxcXHgwMVxcXFx4MDEnXFxuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfdHJ1ZShmXFxcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblxcXCIgaW4gY21kX29iai5zdGRvdXQsXFxuICAgICAgICAgICAgICAgZlxcXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XFxcIilcXG4gXFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFxcXCJydG5sZ3JwLWlwdjYtcm91dGVcXFwiKVxcbisgICAgcmV0dXJuIHJ0bmxcXG4rXFxuK1xcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBhdHRyc1xcbisgICAgcmV0dXJuIE5vbmVcXG4rXFxuK1xcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XFxuKyAgICB3aXRoIG9wZW4oZlxcXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XFxcIiwgXFxcIndcXFwiKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoZlxcXCJ7dmFsdWV9XFxcXG5cXFwiKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwicm91dGUvZ2NfaW50ZXJ2YWxcXFwiLCAyKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxcbitcXG4rXFxuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXFxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xcbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXFxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcXG4rXFxuK1xcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXFxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXFxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXFxuK1xcbitcXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXFxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XFxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2Vlbi5rZXlzKCksIGRlYWRsaW5lPTIpKVxcbisgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICByZXR1cm4gc2VlblxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcXG4rICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XFxuKyAgICAgICAgaXAoZlxcXCJsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cXFwiKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhXFxcIiwgMilcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcXFwiLCAwKVxcbisgICAgICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cXFwiLCA2NClcXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XFxuKyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlcidzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXFxcIiwgMClcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IHZldGgwIHVwXFxcIiwgbnM9c3RyKG5zX2gpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcXFwiLCBucz1zdHIobnNfcikpXFxuK1xcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFxcXCJ2ZXRoMVxcXCIpXFxuK1xcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcXFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcXFwiKVxcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XFxuKyAgICAgICAgICAgIHJldHVyblxcbitcXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXFxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XFxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXFxcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cXFwiKVxcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rXFxuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcXFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXFxcIilcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxcbiAgICAga3NmdF9leGl0KClcXG4gXFxuIGlmIF9fbmFtZV9fID09IFxcXCJfX21haW5fX1xcXCI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE2LjAwOTM4MjMyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwOTg3NTY1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcIm5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlcIixcbiAgICBcImZpYjZfZ2NfdGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNjMwMjk0M2ZiMmU1OWExNmM4ZDgzMDk4NGRjMjNhNWQwNzljN2NhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDE6MDg6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5pbmRleCAzMzE5NWRiOTY3NDZjNi4uZDVmNjgyNDEyN2MyZTQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICs3OCwxNSBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4rICAtXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgdHlwZTogZW51bVxuKyAgICBuYW1lLXByZWZpeDogcnRhLWRlbC1yZWFzb24tXG4rICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb25cbisgICAgZW50cmllczpcbisgICAgICAtIHVuc3BlY1xuKyAgICAgIC0gZXhwaXJlZFxuKyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4rICAgICAgICB0eXBlOiB1OFxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uYzkzYTk5N2JiNDFlYmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHU4IGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMxLDcgKzUzMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIH1cbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncywgdTggZGVsX3JlYXNvbik7XG4gXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIG5vdyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmJmNmIzOWVhYWEyMGQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDYgKzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXG4rXHRcdCAgICAgIHU4IGRlbF9yZWFzb24pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiBcdFx0XHQgICAgIGJvb2wgc2tpcF9ub3RpZnkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uODZiNDA3YmVmNGNlYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbitcdFJUQV9ERUxfUkVBU09OLFxuIFx0X19SVEFfTUFYXG4gfTtcbiBcbkBAIC00MDcsNiArNDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTguXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqL1xuK2VudW0gcnRhX2RlbF9yZWFzb24ge1xuK1x0UlRBX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuK1x0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuK1x0X19SVEFfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXG4rXG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cbiAgKlxuICAqIFwic3RydWN0IHJ0bmV4dGhvcFwiIGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGYxZmU5ZWRlMWVkYjM3Li4xY2E5ZDgyYjU3MjFlNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC0yODc0LDcgKzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggYTEzMGNkZmFlYmZiZWUuLjJjOWJjZTMyMTNiNzM1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbkBAIC0xMjg2LDcgKzEyODYsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocnQtXHUwMDNlZmliNl9ub2RlLCBmbik7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XG4gXHRcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4rXHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4rXHRcdFx0XHRcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGluZm8tXHUwMDNlbmxfbmV0LVx1MDAzZWlwdjYucnQ2X3N0YXRzLVx1MDAzZWZpYl9ydF9lbnRyaWVzKys7XG4gXG4gXHRcdGlmICghKGZuLVx1MDAzZWZuX2ZsYWdzIFx1MDAyNiBSVE5fUlRJTkZPKSkge1xuQEAgLTEzMTcsNyArMTMxOCw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdHJ0LVx1MDAzZWZpYjZfbmV4dCA9IGl0ZXItXHUwMDNlZmliNl9uZXh0O1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpO1xuIFx0XHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcm91dGVfbm9kZXMrKztcbiBcdFx0XHRmbi1cdTAwM2Vmbl9mbGFncyB8PSBSVE5fUlRJTkZPO1xuQEAgLTE5NjYsNyArMTk2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICB1OCBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU1LDEzICsyMDU4LDEzIEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbitcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNTEuLmMzNTM3ZmMwZWM2M2IxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuK1x0XHRcdFx0ICBsaWZldGltZSA9PSAwID8gUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0xMzk2LDcgKzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXHUwMDI2bmxpbmZvLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH1cbiBcbiBcdGlmIChydCkge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBhMTMwMTMzNGRhNDhjMC4uZWU3YmE1OGU4M2M3NDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pO1xuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLCBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0dTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgKzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXG4gXHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuK1x0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuIFxuIG91dDpcbkBAIC0zOTk0LDE0ICszOTk1LDIwIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksXG4rXHRcdCAgICAgIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5sX2luZm8gaW5mbyA9IHtcbiBcdFx0Lm5sX25ldCA9IG5ldCxcbi1cdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbitcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbit9XG4rXG4raW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbit7XG4rXHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxuIFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4rXHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxuIFx0XHRcdFx0XHQgXHUwMDI2cnQtXHUwMDNlZmliNl9zaWJsaW5ncyxcbiBcdFx0XHRcdFx0IGZpYjZfc2libGluZ3MpIHtcbi1cdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcbitcdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXHRcdFx0XHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXG4gXHRcdFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgUlRGX0dBVEVXQVkpXG4tXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyArNTM5MSw4IEBAIHN0YXRpYyB2b2lkIGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHR9XG4gXG4gXHRpZiAocnQpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcbitcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4rXHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiArNTc1MCw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODcsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbiBcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xuQEAgLTU5NTQsNiArNTk2NiwxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVx1MDAzZWVycm9yIDogMCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuK1x0aWYgKHR5cGUgPT0gUlRNX0RFTFJPVVRFIFx1MDAyNlx1MDAyNiBkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3U4KHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgKzYwNzEsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuK1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02MTAzLDcgKzYxMjAsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4rXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuK1x0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQykpIHtcbiBcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdH1cbiBcdFx0XHRjb3VudCsrO1xuQEAgLTYzMzYsMTIgKzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgTlVMTCwgTlVMTCwgTlVMTCxcbiBcdFx0XHRcdFx0ICAgIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuK1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbitcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU4LDcgKzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiB9XG4gXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLCB1OCBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsXG4rXHRcdFx0ICAgIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuK1x0XHRcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLjg3NzNlODhiOTM0YjBmIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXHhlMFxceDAwXFx4MDBcXHgwMSdcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXHhlZlxceDAxXFx4MDFcXHgwMSdcbkBAIC0xMzQsOCArMTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF90cnVlKGZcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblwiIGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwiTm8gJ2ZvcndhcmRpbmcgb24nIG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwiKVxuIFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFwicnRubGdycC1pcHY2LXJvdXRlXCIpXG4rICAgIHJldHVybiBydG5sXG4rXG4rXG4rZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cIlwiXCJcbitcbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJ2RzdCcpICE9IGRzdDpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgcmV0dXJuIGF0dHJzXG4rICAgIHJldHVybiBOb25lXG4rXG4rXG4rZGVmIF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgbmFtZSwgd2FudCwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCJcIlwiXG4rXG4rICAgIHNlZW4gPSB7fVxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXG4rICAgICAgICBpZiBrZXkgaW4gd2FudDpcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4rICAgICAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XG4rICAgIHdpdGggb3BlbihmXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCIsIFwid1wiKSBhcyBmOlxuKyAgICAgICAgZi53cml0ZShmXCJ7dmFsdWV9XFxuXCIpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJyb3V0ZS9nY19pbnRlcnZhbFwiLCAyKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6Mjo6JyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXG4rXG4rXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuKyAgICBcIlwiXCJUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLlwiXCJcIlxuK1xuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4rICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXJcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4rICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxuKyAgICBzb2NrLnNlbmR0byhyYSwgKCdmZjAyOjoxJywgMCwgMCwgaWZpbmRleCkpXG4rXG4rXG4rZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KVxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbitcbitcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbisgICAgXCJcIlwiXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXG4rICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXG4rICAgIFwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2Vlbi5rZXlzKCksIGRlYWRsaW5lPTIpKVxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbisgICAgICAgIGlwKGZcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcIiwgMClcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcIiwgMClcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgwIHVwXCIsIG5zPXN0cihuc19oKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgxIHVwXCIsIG5zPXN0cihuc19yKSlcbitcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCJ2ZXRoMVwiKVxuK1xuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxuKyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwiKVxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbisgICAgICAgICAgICByZXR1cm5cbitcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcbisgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCAwKSlcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbisgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXCJubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCIpXG4rICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cIilcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE2LjAwOTM4MzUyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NjA4NjcxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgSVB2NiBSb3V0ZSBEZWxldGlvbiBSZWFzb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGEgYFJUQV9ERUxfUkVBU09OYCBhdHRyaWJ1dGUgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIEl0J3MgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBJUHY2IHJvdXRpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9pcHY2L2AsIHNvIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6LiBUaGUgYWRkaXRpb24gYWxsb3dzIGZvciBzcGVjaWZ5aW5nIHJlYXNvbnMgbGlrZSBgUlRBX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUQV9ERUxfUkVBU09OX0VYUElSRURgLCBhbmQgYFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmAgaW4gYFJUTV9ERUxST1VURWAgbWVzc2FnZXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLiBMb29raW5nIGF0IHRoZSBtb2RpZmllZCBmaWxlcywgSSd2ZSBnb3QgYSBnb29kIGxpc3Q6IGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYGZpYjZfYWRkX3J0Mm5vZGVgLCBgZmliNl9kZWxfcm91dGVgLCBgZmliNl9kZWxgLCBgZmliNl9jbGVhbl9ub2RlYCwgYGZpYjZfZ2NfdGFibGVgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfZmlsbF9ub2RlYCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgX19pcDZfZGVsX3J0YCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGlwNl9kZWxfcnRgLCBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYCwgYGlwNl9yb3V0ZV9kZWxgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGBydDZfbmxtc2dfc2l6ZWAsIGBydDZfbmhfZHVtcF9leGNlcHRpb25zYCwgYHJ0Nl9kdW1wX3JvdXRlYCwgYGluZXQ2X3J0bV9nZXRyb3V0ZWAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgZmliNl9ydF91cGRhdGVgLCBhbmQgYGZpYjZfaW5mb19od19mbGFnc19zZXRgLiBUaGF0J3MgYSBsb3QhXG5cbkkgdGhpbmsgYGZpYjZfZGVsYCBhbmQgYGlwNl9kZWxfcnRfcmVhc29uYCBhcmUgcGFydGljdWxhcmx5IGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IHNlZW0gdG8gYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcm91dGUgZGVsZXRpb24gcmVhc29uLiBBbHNvLCBgcnQ2X2ZpbGxfbm9kZWAgaXMgaG90LXBhdGggZm9yIGR1bXBpbmcgYW5kIG5vdGlmaWNhdGlvbiwgYWxzbyBgaW5ldDZfcnRfbm90aWZ5YCBhcmUgaW1wb3J0YW50IGZvciBub3RpZmljYXRpb24uIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGxvb2sgcHJvbWlzaW5nIGZvciBSQSAoUm91dGVyIEFkdmVydGlzZW1lbnQpIHByb2Nlc3NpbmcsIGFuZCBgcnQ2X3JvdXRlX3JjdmAgc2VlbXMgaW1wb3J0YW50LCB0b28uXG5cbk5vdyBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uIFNpbmNlIHRoaXMgaXMgaW4gYG5ldC9pcHY2L2AsIGBDT05GSUdfSVBWNmAgaXMsIG9idmlvdXNseSwgcmVxdWlyZWQuIFRoZSBzZWxmdGVzdCBtZW50aW9ucyBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2Agd2l0aCB0aGlzIGxpbmU6IGBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCIsIDY0KWAuICBTbyBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgaW4gYG5ldC9pcHY2L0tjb25maWdgIGFuZCB0aGVuIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBvdXQgd2hhdCBkZXBlbmRzIG9uIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgZm9yIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzQ2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MDg6MjQuOTcwMjUyNjg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI0MTU2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9ST1VURV9JTkZPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZz00OD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZy01MC1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWc9NTk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZzo2MDpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWctNjEtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xNTI9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTUzOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTU0LUNPTkZJR19JTkVUNl9BSD1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE2OD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNjk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xNzAtQ09ORklHX0lORVQ2X0FIPW1cXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc9NTI9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc6NTM6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZy01NC1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnPTU0PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnOjU1OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctNTYtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl82NF9kZWZjb25maWc9NDA9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnOjQxOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnLTQyLUNPTkZJR19JTkVUNl9BSD1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZz0zNj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWc6Mzc6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWctMzgtQ09ORklHX0lORVQ2X0FIPW1cXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZz0zNT1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9yNGtfZGVmY29uZmlnOjM2OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZy0zNy1DT05GSUdfSU5FVDZfQUg9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWc9Mzk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjQwOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnLTQxLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTM2PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZzozNzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZy0zOC1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZz0zNj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWc6Mzc6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWctMzgtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnPTQ1PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnLTQ3LUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6NTA6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZy01MS1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc9NDg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZzo0OTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNTAtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnPTMyPUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWc6MzM6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnLTM0LUNPTkZJR19JTkVUNl9BSD1tXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTEwOD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzoxMDk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZy0xMTAtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnPTQ4PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc6NDk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcXG4tLVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oPTEzPXN0cnVjdCBpcHY2X2RldmNvbmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pcHY2LmgtNTEtXFx0X19zMzJcXHRcXHRydHJfcHJvYmVfaW50ZXJ2YWw7XFxuaW5jbHVkZS9saW51eC9pcHY2Lmg6NTI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01My1cXHRfX3MzMlxcdFxcdGFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmRpc2MuaD0xMDA9c3RydWN0IG5kaXNjX29wdGlvbnMge1xcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAxLVxcdHN0cnVjdCBuZF9vcHRfaGRyICpuZF9vcHRfYXJyYXlbX19ORF9PUFRfQVJSQVlfTUFYXTtcXG5pbmNsdWRlL25ldC9uZGlzYy5oOjEwMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAzLVxcdHN0cnVjdCBuZF9vcHRfaGRyICpuZF9vcHRzX3JpO1xcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTEtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIxMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjEzLVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzYtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc4LVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjQ9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwMy1cXHRcXHRqaWZmaWVzX3RvX21zZWNzKFJFQURfT05DRShjbmYtXFx1MDAzZXJ0cl9wcm9iZV9pbnRlcnZhbCkpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcwNDojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwNS1cXHRhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9SVF9JTkZPX01JTl9QTEVOXSA9XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODYtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcwODc6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODgtXFx0e1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0yMjA9c3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjU2LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L25kaXNjLmM6MjU3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvbmRpc2MuYy0yNTgtXFx0XFx0Y2FzZSBORF9PUFRfUk9VVEVfSU5GTzpcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNDk3LVxcbm5ldC9pcHY2L25kaXNjLmM6MTQ5ODojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L25kaXNjLmMtMTQ5OS1cXHRpZiAoIVJFQURfT05DRShpbjZfZGV2LVxcdTAwM2VjbmYuYWNjZXB0X3JhX2Zyb21fbG9jYWwpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTExNT1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTExOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjExOTojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L3JvdXRlLmMtMTIwLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtOTY4LVxcbm5ldC9pcHY2L3JvdXRlLmM6OTY5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy05NzAtaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDIzOT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODEtXFxubmV0L2lwdjYvcm91dGUuYzo0MzgyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy00MzgzLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTE0PUNPTkZJR19JUFY2X01JUDY9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjExNTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0xMTYtQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249MTA1PUNPTkZJR19JUFY2X01JUDY9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjEwNjpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi0xMDctQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz00NT1DT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZy00Ny1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTI0Nj1kZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cXHUwMDNlIE5vbmU6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTI2Mi0gICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weToyNjM6ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktMjY0LSAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjI4LjI2MjY3NjMzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzI4MDg2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQdjYgUm91dGUgSW5mb3JtYXRpb24gYW5kIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBpdCdzIGJlY29taW5nIGNsZWFyIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gRmlyc3QsIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCBpcyBkZWZpbml0ZWx5IGtleSBoZXJlLiBJdCBzZWVtcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0aGUgZnVuY3Rpb25hbGl0eSB3ZSdyZSBpbnRlcmVzdGVkIGluLCBhbmQgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGF0IGZvciB0aGUgZnV6emluZy4gSXQncyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IGBDT05GSUdfSVBWNl9ST1VURVJfUFJFRmAgb2Z0ZW4gZ29lcyBoYW5kLWluLWhhbmQgd2l0aCBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AsIHNvIEknbGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEknbGwgYWRkIGJvdGggYElQVjZfUk9VVEVfSU5GT2AgYW5kIGBJUFY2X1JPVVRFUl9QUkVGYCB0byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIGFuZCB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhcmUgbmV3OiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGJyYW5kIG5ldywgc28gdGhhdCdzIGEgcHJpbWUgc3VzcGVjdC4gYGZpYjZfZGVsYCBub3cgdGFrZXMgYGRlbF9yZWFzb25gLCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgYWxzbyB0YWtlcyBgZGVsX3JlYXNvbmAsIGFuZCBJJ3ZlIGFsc28gbm90ZWQgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbW9kaWZpZWQgdG8gdGFrZSBgZGVsX3JlYXNvbmAuIEZ1cnRoZXIsIEkgc2VlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGFsbCBjYWxsaW5nIGBpcDZfZGVsX3J0X3JlYXNvbmAuIGBmaWI2X2djX3RhYmxlYCBpcyBjYWxsaW5nIGBmaWI2X2RlbGAgd2l0aCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAuXG5cblNvLCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcmV2aWV3LCBJJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBmaWI2X2djX3RhYmxlYC5cblxuSSBzaG91bGQgbm90ZSB0aGF0IGBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgYSBsaXR0bGUgbGVzcyBhY2Nlc3NpYmxlLCBidXQgaXQncyBzdGlsbCBnb29kIHRvIGhhdmUgb24gdGhlIGxpc3QuIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBnbG9iYWw7IGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBpcyBzdGF0aWMuXG5cbkkgY2hlY2tlZCBmb3IgcmVhY2hhYmlsaXR5LiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgaXA2X2RlbF9ydGAuIGBmaWI2X2RlbGAgaXMgY2FsbGVkIGZyb20gYF9faXA2X2RlbF9ydGAsIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgLCBgZmliNl9jbGVhbl9ub2RlYCwgYW5kIGBmaWI2X2djX3RhYmxlYC5cblxuQWZ0ZXIgdGhpcyBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCBpbiByZWZpbmluZyBteSBsaXN0IG9mIGZ1enppbmcgdGFyZ2V0cy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbjogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgZmliNl9nY190YWJsZWAuXG5cbkEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHJlYWxpemUgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AgaXMgZW5hYmxlZC4gVGhhdCBqdXN0IHJlaW5mb3JjZXMgdGhlIGltcG9ydGFuY2Ugb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlIHRoZSBvYnZpb3VzIGNvbmZpZ3MuIGBDT05GSUdfSVBWNmAgaXMgYSBuby1icmFpbmVyLCBhbmQsIGFzIG1lbnRpb25lZCBlYXJsaWVyLCBgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUZgIGlzIG9mdGVuIHJlcXVpcmVkIGZvciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuXG5cbkFscmlnaHQsIEkndmUgZ290IGEgc29saWQgcGxhbiBpbiBwbGFjZS4gTm93LCBJJ2xsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoaXMga25vd2xlZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5NiwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MDg6MzguOTkwNzY2NTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczNjgxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yb3V0ZXJfZGlzY292ZXJ5XCIsXG4gICAgXCJmaWI2X2djX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBsb2dpYywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnQgcHJvY2Vzc2luZyB0byBzdXBwbHkgdGhlIGRlbGV0aW9uIHJlYXNvbi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcIm5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlcIixcbiAgICBcImZpYjZfZ2NfdGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowkrwlx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 00:44:22 +0000 UTC FinishedAt: 2026-07-18 01:08:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO", "IPV6_ROUTER_PREF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO", "IPV6_ROUTER_PREF" ], "series_id": "c2f93b3a-6db9-45ce-a6c2-b04d0a355f62" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "fib6_del", "inet6_rt_notify", "rt6_route_rcv", "addrconf_prefix_rcv", "ndisc_router_discovery", "fib6_gc_table" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7ZmliNl9nY190YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY2MzAyOTQzZmIyZTU5YTE2YzhkODMwOTg0ZGMyM2E1ZDA3OWM3Y2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTowODoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5pbmRleCAzMzE5NWRiOTY3NDZjNi4uZDVmNjgyNDEyN2MyZTQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcbiAgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIG5hbWUtcHJlZml4OiBydGEtZGVsLXJlYXNvbi1cbiYjNDM7ICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb25cbiYjNDM7ICAgIGVudHJpZXM6XG4mIzQzOyAgICAgIC0gdW5zcGVjXG4mIzQzOyAgICAgIC0gZXhwaXJlZFxuJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3blxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE4NSw2ICYjNDM7MTk0LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgICAgIHR5cGU6IHU4XG4mIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4mIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMjIsMyAmIzQzOzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI0XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZGVscm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI1XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7XG4mIzQzO21jYXN0LWdyb3VwczpcbiYjNDM7ICBsaXN0OlxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDdcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4mIzQzOyAgICAgIHZhbHVlOiAxMVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuaW5kZXggOWNkMjdlMWI5YjY5MjMuLmM5M2E5OTdiYjQxZWJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw3IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHU4IGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMxLDcgJiM0Mzs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiB9XG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Mi4uYmY2YjM5ZWFhYTIwZDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0xMjgsNiAmIzQzOzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgdTggZGVsX3JlYXNvbik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0XHRcdCAgICAgYm9vbCBza2lwX25vdGlmeSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmM5Li44NmI0MDdiZWY0Y2VhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbiYjNDM7XHRSVEFfREVMX1JFQVNPTixcbiBcdF9fUlRBX01BWFxuIH07XG4gXG5AQCAtNDA3LDYgJiM0Mzs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHU4LlxuJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uXG4mIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuJiM0MzsgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XG4mIzQzOyAqIHRyZWF0IFwmIzM0O2Fic2VudFwmIzM0OyBhbmQgXCYjMzQ7dW5zcGVjXCYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbiYjNDM7ICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cbiYjNDM7ICovXG4mIzQzO2VudW0gcnRhX2RlbF9yZWFzb24ge1xuJiM0MztcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcdFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXG4mIzQzO1x0UlRBX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4mIzQzO1x0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuJiM0MztcdF9fUlRBX0RFTF9SRUFTT05fTUFYXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUQV9ERUxfUkVBU09OX01BWCAoX19SVEFfREVMX1JFQVNPTl9NQVggLSAxKVxuJiM0MztcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxuICAqXG4gICogXCYjMzQ7c3RydWN0IHJ0bmV4dGhvcFwmIzM0OyBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmVlLi4yYzliY2UzMjEzYjczNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTI4Niw3ICYjNDM7MTI4Niw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cdTAwM2VmaWI2X25vZGUsIGZuKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcbiYjNDM7XHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcnRfZW50cmllcyYjNDM7JiM0Mzs7XG4gXG4gXHRcdGlmICghKGZuLVx1MDAzZWZuX2ZsYWdzIFx1MDAyNiBSVE5fUlRJTkZPKSkge1xuQEAgLTEzMTcsNyAmIzQzOzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRydC1cdTAwM2VmaWI2X25leHQgPSBpdGVyLVx1MDAzZWZpYjZfbmV4dDtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFKTtcbiYjNDM7XHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UsXG4mIzQzO1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcm91dGVfbm9kZXMmIzQzOyYjNDM7O1xuIFx0XHRcdGZuLVx1MDAzZWZuX2ZsYWdzIHw9IFJUTl9SVElORk87XG5AQCAtMTk2Niw3ICYjNDM7MTk2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCAgIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgJiM0MzsyMDU4LDEzIEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbiYjNDM7XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcbiBcbiBcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcbiB9XG4gXG4gLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcbkBAIC0yMDkwLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4mIzQzO1x0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRydHBfbmV4dCA9IFx1MDAyNmN1ci1cdTAwM2VmaWI2X25leHQ7XG5AQCAtMjI1Miw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiBcdFx0cmVzID0gYy1cdTAwM2VmdW5jKHJ0LCBjLVx1MDAzZWFyZyk7XG4gXHRcdGlmIChyZXMgPT0gLTEpIHtcbiBcdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbi1cdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcblwmIzM0OyxcbkBAIC0yNDAwLDcgJiM0MzsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5jMzUzN2ZjMGVjNjNiMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEzOTYsNyAmIzQzOzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fVxuIFxuIFx0aWYgKHJ0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IGExMzAxMzM0ZGE0OGMwLi5lZTdiYTU4ZTgzYzc0NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKTtcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLCBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0dTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTM5OTQsMTQgJiM0MzszOTk1LDIwIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgdTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xuIFx0XHQubmxfbmV0ID0gbmV0LFxuLVx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuJiM0MztcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyAmIzQzOzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0fVxuIFxuIFx0aWYgKHJ0KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4mIzQzO1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbiYjNDM7XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICYjNDM7NTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbiBcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xuQEAgLTU5NTQsNiAmIzQzOzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiYjNDM7XHRpZiAodHlwZSA9PSBSVE1fREVMUk9VVEUgXHUwMDI2XHUwMDI2IGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBubGFfcHV0X3U4KHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuJiM0MztcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzQzO1xuIFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuQEAgLTYwNTUsNyAmIzQzOzYwNzEsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyAmIzQzOzYxMjAsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbkBAIC02MzM2LDEyICYjNDM7NjM1NCwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuJiM0MztcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU4LDcgJiM0Mzs2Mzc4LDcgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gfVxuIFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxuJiM0MztcdFx0XHQgICAgZGVsX3JlYXNvbik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cbkBAIC02NDEwLDcgJiM0Mzs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgJiM0Mzs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuJiM0MztcdFx0XHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYWQuLjM0OTM1ODg2YjZhZGZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2NlLi4wOGRlZmY3NTZmMjliMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XG4gXG4gX19hbGxfXyA9IFtcbiAgICAgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDssIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7U1BFQ19QQVRIXCYjMzQ7LFxuLSAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OyxcbiYjNDM7ICAgIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O1BTUEZhbWlseVwmIzM0OyxcbiBdXG5AQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4mIzQzO1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAwYzY3YzdjMDBkODQxYy4uODc3M2U4OGI5MzRiMGYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICYjNDM7NSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbkBAIC0xMzQsOCAmIzQzOzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwmIzM0OylcbiBcbiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4mIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgcmV0dXJuIHJ0bmxcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgcmV0dXJuIGF0dHJzXG4mIzQzOyAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBzZWVuID0ge31cbiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4mIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdXG4mIzQzOyAgICAgICAga2V5ID0gKGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10sIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSlcbiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDpcbiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbiYjNDM7ICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICByZXR1cm4gc2VlblxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuJiM0MzsgICAgd2l0aCBvcGVuKGZcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCYjMzQ7LCBcJiMzNDt3XCYjMzQ7KSBhcyBmOlxuJiM0MzsgICAgICAgIGYud3JpdGUoZlwmIzM0O3t2YWx1ZX1cXG5cJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWxcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4mIzQzOyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4mIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbiYjNDM7ICAgIHNvY2suc2VuZHRvKHJhLCAoJiMzOTtmZjAyOjoxJiMzOTssIDAsIDAsIGlmaW5kZXgpKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsXG4mIzQzOyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4mIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4mIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtuZXdyb3V0ZS1udGYmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZWVuLmtleXMoKSwgZGVhZGxpbmU9MikpXG4mIzQzOyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgIHJldHVybiBzZWVuXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXG4mIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmdcJiMzNDssIDApXG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCYjMzQ7LCA2NClcbiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZFwmIzM0OywgMClcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXBcJiMzNDssIG5zPXN0cihuc19oKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXBcJiMzNDssIG5zPXN0cihuc19yKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCYjMzQ7dmV0aDFcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpXG4mIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuXG4mIzQzO1xuJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLFxuJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKVxuJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcylcbiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7ZmliNl9nY190YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjYzMDI5NDNmYjJlNTlhMTZjOGQ4MzA5ODRkYzIzYTVkMDc5YzdjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDE4IDAxOjA4OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbAppbmRleCAzMzE5NWRiOTY3NDZjNi4uZDVmNjgyNDEyN2MyZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IHJ0YS11c2VkCiAgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBkZWwtcmVhc29uCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLQomIzQzOyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSB1bnNwZWMKJiM0MzsgICAgICAtIGV4cGlyZWQKJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3bgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuCiAgICAgICAgIGRpc3BsYXktaGludDogaGV4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAgIGVudW06IGRlbC1yZWFzb24KICAgLQogICAgIG5hbWU6IG1ldHJpY3MKICAgICBuYW1lLXByZWZpeDogcnRheC0KQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gZHBvcnQKICAgICAgICAgICAgIC0gbmgtaWQKICAgICAgICAgICAgIC0gZmxvd2xhYmVsCiYjNDM7ICAgICAgICAgICAgLSBkZWwtcmVhc29uCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNgpAQCAtMzIyLDMgJiM0MzszMzYsMjIgQEAgb3BlcmF0aW9uczoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKICAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBuZXdyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI0CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZGVscm91dGUtbnRmCiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLgomIzQzOyAgICAgIHZhbHVlOiAyNQomIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGUKJiM0MzsKJiM0MzttY2FzdC1ncm91cHM6CiYjNDM7ICBsaXN0OgomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDcKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZQomIzQzOyAgICAgIHZhbHVlOiAxMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IDljZDI3ZTFiOWI2OTIzLi5jOTNhOTk3YmI0MWViYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMxLDcgJiM0Mzs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIH0KICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCi0JCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKTsKIAogdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLAogCQkJIHVuc2lnbmVkIGxvbmcgbm93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NTIuLmJmNmIzOWVhYWEyMGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMTI4LDYgJiM0MzsxMjgsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLAogaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7CiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LAomIzQzOwkJICAgICAgdTggZGVsX3JlYXNvbik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAkJCSAgICAgYm9vbCBza2lwX25vdGlmeSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAyNzI2NWZkMzFlNWZjOS4uODZiNDA3YmVmNGNlYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKQEAgLTM5OSw2ICYjNDM7Mzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHsKIAlSVEFfRFBPUlQsCiAJUlRBX05IX0lELAogCVJUQV9GTE9XTEFCRUwsCiYjNDM7CVJUQV9ERUxfUkVBU09OLAogCV9fUlRBX01BWAogfTsKIApAQCAtNDA3LDYgJiM0Mzs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHsKICNkZWZpbmUgUlRNX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICYjNDM7IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpCiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSkKIAomIzQzOy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTguCiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvbgomIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYQomIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3QKJiM0MzsgKiB0cmVhdCAmIzM0O2Fic2VudCYjMzQ7IGFuZCAmIzM0O3Vuc3BlYyYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4KJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLgomIzQzOyAqLwomIzQzO2VudW0gcnRhX2RlbF9yZWFzb24gewomIzQzOwlSVEFfREVMX1JFQVNPTl9VTlNQRUMsCQkvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi8KJiM0MzsJUlRBX0RFTF9SRUFTT05fRVhQSVJFRCwJCS8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqLwomIzQzOwlSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sCS8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi8KJiM0MzsJX19SVEFfREVMX1JFQVNPTl9NQVgKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpCiYjNDM7CiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLgogICoKICAqICYjMzQ7c3RydWN0IHJ0bmV4dGhvcCYjMzQ7IGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLAomIzQzOwkJCQkJCSAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJCQlydCA9IE5VTEw7CiAJCQl9IGVsc2UgewogCQkJCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggYTEzMGNkZmFlYmZiZWUuLjJjOWJjZTMyMTNiNzM1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC0xMjg2LDcgJiM0MzsxMjg2LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0LSZndDtmaWI2X25vZGUsIGZuKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTsKIAkJaWYgKCFpbmZvLSZndDtza2lwX25vdGlmeSkKLQkJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTsKJiM0MzsJCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncywKJiM0MzsJCQkJCVJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWluZm8tJmd0O25sX25ldC0mZ3Q7aXB2Ni5ydDZfc3RhdHMtJmd0O2ZpYl9ydF9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAoIShmbi0mZ3Q7Zm5fZmxhZ3MgJmFtcDsgUlROX1JUSU5GTykpIHsKQEAgLTEzMTcsNyAmIzQzOzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlydC0mZ3Q7ZmliNl9uZXh0ID0gaXRlci0mZ3Q7ZmliNl9uZXh0OwogCQlyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpOwogCQlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCQkJUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJaWYgKCEoZm4tJmd0O2ZuX2ZsYWdzICZhbXA7IFJUTl9SVElORk8pKSB7CiAJCQlpbmZvLSZndDtubF9uZXQtJmd0O2lwdjYucnQ2X3N0YXRzLSZndDtmaWJfcm91dGVfbm9kZXMmIzQzOyYjNDM7OwogCQkJZm4tJmd0O2ZuX2ZsYWdzIHw9IFJUTl9SVElORk87CkBAIC0xOTY2LDcgJiM0MzsxOTY4LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LAogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLAotCQkJICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7CQkJICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkJICAgdTggZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NSwxMyAmIzQzOzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiAKIAlmaWI2X2luZm9fcmVsZWFzZShydCk7CiB9CiAKIC8qIE5lZWQgdG8gb3duIHRhYmxlLSZndDt0YjZfbG9jayAqLwotaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwOwpAQCAtMjA5MCw3ICYjNDM7MjA5Myw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAJCWlmIChydCA9PSBjdXIpIHsKIAkJCWlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKQogCQkJCWZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLSZndDtubF9uZXQpOwotCQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pOwomIzQzOwkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXJ0cF9uZXh0ID0gJmFtcDtjdXItJmd0O2ZpYjZfbmV4dDsKQEAgLTIyNTIsNyAmIzQzOzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpCiAJCXJlcyA9IGMtJmd0O2Z1bmMocnQsIGMtJmd0O2FyZyk7CiAJCWlmIChyZXMgPT0gLTEpIHsKIAkJCXctJmd0O2xlYWYgPSBydDsKLQkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAocmVzKSB7CiAjaWYgUlQ2X0RFQlVHICZndDs9IDIKIAkJCQlwcl9kZWJ1ZygmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcbiYjMzQ7LApAQCAtMjQwMCw3ICYjNDM7MjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgJmFtcDt0YjYtJmd0O3RiNl9nY19obGlzdCwgZ2NfbGluaykKIAkJaWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSkKLQkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmODY3ZWM4ZDNkOTA1MS4uYzM1MzdmYzBlYzYzYjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTM2MSw3ICYjNDM7MTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpCiAJZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LSZndDtjbmYucmFfZGVmcnRyX21ldHJpYzsKIAkvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqLwogCWlmIChydCAmYW1wOyZhbXA7IChsaWZldGltZSA9PSAwIHx8IHJ0LSZndDtmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwKJiM0MzsJCQkJICBsaWZldGltZSA9PSAwID8gUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDoKJiM0MzsJCQkJCQkgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCXJ0ID0gTlVMTDsKIAl9CiAKQEAgLTEzOTYsNyAmIzQzOzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJLm5sX25ldCA9IG5ldCwKIAkJfTsKIAkJcnQtJmd0O2ZpYjZfZmxhZ3MgPSAocnQtJmd0O2ZpYjZfZmxhZ3MgJmFtcDsgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7Ci0JCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCAmYW1wO25saW5mbywgTkxNX0ZfUkVQTEFDRSk7CiYjNDM7CQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgJmFtcDtubGluZm8sIE5MTV9GX1JFUExBQ0UsCiYjNDM7CQkJCVJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfQogCiAJaWYgKHJ0KSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBhMTMwMTMzNGRhNDhjMC4uZWU3YmE1OGU4M2M3NDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzOwkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pOwogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLAogCQkJCQlnd2FkZHIsIGRldik7CiAKIAlpZiAocnQgJmFtcDsmYW1wOyAhbGlmZXRpbWUpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQl1OCBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCiAJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIAogb3V0OgpAQCAtMzk5NCwxNCAmIzQzOzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCXJldHVybiBlcnI7CiB9CiAKLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpCiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksCiYjNDM7CQkgICAgICB1OCBkZWxfcmVhc29uKQogewogCXN0cnVjdCBubF9pbmZvIGluZm8gPSB7CiAJCS5ubF9uZXQgPSBuZXQsCi0JCS5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5CiYjNDM7CQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeSwKIAl9OwogCi0JcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvKTsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBkZWxfcmVhc29uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKJiM0Mzt7CiYjNDM7CXJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIH0KIAogc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQpAQCAtNDAyOCw3ICYjNDM7NDAzNSw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAogCQkJaWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLAogCQkJCQkgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSwKLQkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCkgJmx0OyAwKSB7CiYjNDM7CQkJCQkgIGluZm8tJmd0O3BvcnRpZCwgc2VxLCAwLAomIzQzOwkJCQkJICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpICZsdDsgMCkgewogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQl9IGVsc2UKQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZywKIAkJCQkJICZhbXA7cnQtJmd0O2ZpYjZfc2libGluZ3MsCiAJCQkJCSBmaWI2X3NpYmxpbmdzKSB7Ci0JCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTsKJiM0MzsJCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAl9CiAKLQllcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7CiYjNDM7CWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiBvdXRfcHV0OgpAQCAtNDE5Niw3ICYjNDM7NDIwNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAkJCQlpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKQogCQkJCQljb250aW51ZTsKIAotCQkJCWVyciA9ICBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjZmctJmd0O2ZjX25oX2lkKQpAQCAtNDIxNSw3ICYjNDM7NDIyNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAogCQkJLyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovCiAJCQlpZiAoY2ZnLSZndDtmY19mbGFncyAmYW1wOyBSVEZfR0FURVdBWSkKLQkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCWVsc2UKIAkJCQllcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7CiAJCQlicmVhazsKQEAgLTUzODEsNyAmIzQzOzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCX0KIAogCWlmIChydCkKLQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpOwomIzQzOwkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsCiYjNDM7CQkJCVJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTU3MzksNiAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSkKIAkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSkKIAkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi8KIAkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi8KJiM0MzsJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9ERUxfUkVBU09OICovCiAJICAgICAgICYjNDM7IG5leHRob3BfbGVuOwogfQogCkBAIC01Nzc1LDcgJiM0Mzs1Nzg3LDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzOwkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTsKIAlzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYzsKQEAgLTU5NTQsNiAmIzQzOzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtJmd0O2Vycm9yIDogMCkgJmx0OyAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwlpZiAodHlwZSA9PSBSVE1fREVMUk9VVEUgJmFtcDsmYW1wOyBkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3U4KHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcxLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIwLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkgewogCQkJCXJldHVybiAwOwogCQkJfQogCQkJY291bnQmIzQzOyYjNDM7OwpAQCAtNjMzNiwxMiAmIzQzOzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICAgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTgsNyAmIzQzOzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIH0KIAogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCi0JCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTggZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTYzNzcsNyAmIzQzOzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwKLQkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7CiYjNDM7CQkJICAgIGV2ZW50LCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLAomIzQzOwkJCSAgICBkZWxfcmVhc29uKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovCkBAIC02NDEwLDcgJiM0Mzs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CkBAIC02NDYzLDcgJiM0Mzs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLAogCX0KIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGY2aSwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgUlRNX05FV1JPVVRFLCAwLAotCQkJICAgIDAsIDApOwomIzQzOwkJCSAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQppbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQpAQCAtMTcsNyAmIzQzOzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXAogICAgIHdhaXRfZmlsZSwgdG9vbCwgdGMKIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkcwogZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXAotICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHkKJiM0MzsgICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rCiAKIF9fYWxsX18gPSBbJiMzNDtLU1JDJiMzNDssCkBAIC0zNCw0ICYjNDM7MzQsNCBAQCBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LAogICAgICAgICAgICAmIzM0O05ldGRldlNpbSYjMzQ7LCAmIzM0O05ldGRldlNpbURldiYjMzQ7LAogICAgICAgICAgICAmIzM0O05ldHNoYXBlckZhbWlseSYjMzQ7LCAmIzM0O0RldmxpbmtGYW1pbHkmIzM0OywgJiMzNDtQU1BGYW1pbHkmIzM0OywgJiMzNDtObEVycm9yJiMzNDssCiAgICAgICAgICAgICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O05ldGRldkZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywKLSAgICAgICAgICAgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0O10KJiM0MzsgICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtSdG5sUm91dGVGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5CmluZGV4IDJlNTY3MDYyYWE2Y2NlLi4wOGRlZmY3NTZmMjliMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6CiAKIF9fYWxsX18gPSBbCiAgICAgJiMzNDtObEVycm9yJiMzNDssICYjMzQ7TmxQb2xpY3kmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDssICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7U1BFQ19QQVRIJiMzNDssCi0gICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssCiYjNDM7ICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LAogICAgICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LAogICAgICYjMzQ7UFNQRmFtaWx5JiMzNDssCiBdCkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKIAomIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgomIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LXJvdXRlLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQomIzQzOwogY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMGM2N2M3YzAwZDg0MWMuLjg3NzNlODhiOTM0YjBmIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmUKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwpAQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICBrc2Z0X3RydWUoZiYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uJiMzNDsgaW4gY21kX29iai5zdGRvdXQsCiAgICAgICAgICAgICAgIGYmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfSYjMzQ7KQogCiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKQomIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoJiMzNDtydG5sZ3JwLWlwdjYtcm91dGUmIzM0OykKJiM0MzsgICAgcmV0dXJuIHJ0bmwKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOgomIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XQomIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBhdHRycwomIzQzOyAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzOwomIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpCiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDoKJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRycwomIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6CiYjNDM7ICAgIHdpdGggb3BlbihmJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9JiMzNDssICYjMzQ7dyYjMzQ7KSBhcyBmOgomIzQzOyAgICAgICAgZi53cml0ZShmJiMzNDt7dmFsdWV9XG4mIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtyb3V0ZS9nY19pbnRlcnZhbCYjMzQ7LCAyKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMiYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSwKJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lcgomIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKQomIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpbwomIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF0KJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW8KJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcikKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMCkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KQomIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpCiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSkKJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsCiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZWVuLmtleXMoKSwgZGVhZGxpbmU9MikpCiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjEKJiM0MzsgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUCiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6CiYjNDM7ICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn0mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOgomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhJiMzNDssIDIpCiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9mb3J3YXJkaW5nJiMzNDssIDApCiYjNDM7ICAgICAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuJiMzNDssIDY0KQomIzQzOyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk8mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheQomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZCYjMzQ7LCAwKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXAmIzM0OywgbnM9c3RyKG5zX2gpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXAmIzM0OywgbnM9c3RyKG5zX3IpKQomIzQzOwomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKQomIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCAmIzM0O3ZldGgxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCA2MDApKQomIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZCYjMzQ7KQomIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczoKJiM0MzsgICAgICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLAomIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpCiYjNDM7ICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCByb3V0ZXMpCiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczoKJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSkKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9JiMzNDspCiYjNDM7ICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpCiYjNDM7ICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cCYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoxOjomIzM5OykKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjQmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvbiYjMzQ7KQomIzQzOwomIzQzOwogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSkKJiM0MzsgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKICAgICBrc2Z0X2V4aXQoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQ2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIElQdjYgUm91dGUgRGVsZXRpb24gUmVhc29uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGEgYFJUQV9ERUxfUkVBU09OYCBhdHRyaWJ1dGUgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gSVB2NiByb3V0aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvaXB2Ni9gLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIFRoZSBhZGRpdGlvbiBhbGxvd3MgZm9yIHNwZWNpZnlpbmcgcmVhc29ucyBsaWtlIGBSVEFfREVMX1JFQVNPTl9VTlNQRUNgLCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAsIGFuZCBgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYCBpbiBgUlRNX0RFTFJPVVRFYCBtZXNzYWdlcy4KCkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLiBMb29raW5nIGF0IHRoZSBtb2RpZmllZCBmaWxlcywgSSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0OiBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYGZpYjZfZGVsYCwgYGZpYjZfY2xlYW5fbm9kZWAsIGBmaWI2X2djX3RhYmxlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgcnQ2X2ZpbGxfbm9kZWAsIGBydDZfcm91dGVfcmN2YCwgYF9faXA2X2RlbF9ydGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBpcDZfcm91dGVfZGVsYCwgYGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnlgLCBgcnQ2X25sbXNnX3NpemVgLCBgcnQ2X25oX2R1bXBfZXhjZXB0aW9uc2AsIGBydDZfZHVtcF9yb3V0ZWAsIGBpbmV0Nl9ydG1fZ2V0cm91dGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYGZpYjZfcnRfdXBkYXRlYCwgYW5kIGBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0YC4gVGhhdCYjMzk7cyBhIGxvdCEKCkkgdGhpbmsgYGZpYjZfZGVsYCBhbmQgYGlwNl9kZWxfcnRfcmVhc29uYCBhcmUgcGFydGljdWxhcmx5IGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IHNlZW0gdG8gYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcm91dGUgZGVsZXRpb24gcmVhc29uLiBBbHNvLCBgcnQ2X2ZpbGxfbm9kZWAgaXMgaG90LXBhdGggZm9yIGR1bXBpbmcgYW5kIG5vdGlmaWNhdGlvbiwgYWxzbyBgaW5ldDZfcnRfbm90aWZ5YCBhcmUgaW1wb3J0YW50IGZvciBub3RpZmljYXRpb24uIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGxvb2sgcHJvbWlzaW5nIGZvciBSQSAoUm91dGVyIEFkdmVydGlzZW1lbnQpIHByb2Nlc3NpbmcsIGFuZCBgcnQ2X3JvdXRlX3JjdmAgc2VlbXMgaW1wb3J0YW50LCB0b28uCgpOb3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLiBTaW5jZSB0aGlzIGlzIGluIGBuZXQvaXB2Ni9gLCBgQ09ORklHX0lQVjZgIGlzLCBvYnZpb3VzbHksIHJlcXVpcmVkLiBUaGUgc2VsZnRlc3QgbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIHdpdGggdGhpcyBsaW5lOiBgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbiYjMzQ7LCA2NClgLiAgU28gbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgdGhlbiB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgb3V0IHdoYXQgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lIGZvciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc9NDg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWc9NTk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnOjYwOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnLTYxLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE1Mj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE1MzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTU0LUNPTkZJR19JTkVUNl9BSD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0xNjg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNjk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTE3MC1DT05GSUdfSU5FVDZfQUg9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc9NTI9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzo1MzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNTQtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWc9NTQ9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo1NTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctNTYtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnPTQwPUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnOjQxOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl82NF9kZWZjb25maWctNDItQ09ORklHX0lORVQ2X0FIPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZz0zNj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZzozNzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnLTM4LUNPTkZJR19JTkVUNl9BSD1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9yNGtfZGVmY29uZmlnPTM1PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZzozNjpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZy0zNy1DT05GSUdfSU5FVDZfQUg9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnPTM5PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjQwOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWctNDEtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTM2PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnOjM3OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWctMzgtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnPTM2PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnOjM3OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWctMzgtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz00NT1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctNDctQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZzo1MDpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNTEtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz00OD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc6NDk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNTAtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZz0zMj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWc6MzM6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWctMzQtQ09ORklHX0lORVQ2X0FIPW1cbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTEwOD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnOjEwOTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctMTEwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc9NDg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01MS1cdF9fczMyXHRcdHJ0cl9wcm9iZV9pbnRlcnZhbDtcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjUyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01My1cdF9fczMyXHRcdGFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuO1xuLS1cbmluY2x1ZGUvbmV0L25kaXNjLmg9MTAwPXN0cnVjdCBuZGlzY19vcHRpb25zIHtcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAxLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdF9hcnJheVtfX05EX09QVF9BUlJBWV9NQVhdO1xuaW5jbHVkZS9uZXQvbmRpc2MuaDoxMDI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAzLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdHNfcmk7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjExLVx0LnJ0cl9wcm9iZV9pbnRlcnZhbFx0PSA2MCAqIEhaLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMTI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjEzLVx0LmFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuID0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc2LVx0LnJ0cl9wcm9iZV9pbnRlcnZhbFx0PSA2MCAqIEhaLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzc6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc4LVx0LmFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuID0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjQ9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MDMtXHRcdGppZmZpZXNfdG9fbXNlY3MoUkVBRF9PTkNFKGNuZi1cdTAwM2VydHJfcHJvYmVfaW50ZXJ2YWwpKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcwNDojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvYWRkcmNvbmYuYy01NzA1LVx0YXJyYXlbREVWQ09ORl9BQ0NFUFRfUkFfUlRfSU5GT19NSU5fUExFTl0gPVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODYtXHR9LFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3MDg3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODgtXHR7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0yMjA9c3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTI1Ni1cdFx0XHRicmVhaztcbm5ldC9pcHY2L25kaXNjLmM6MjU3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9uZGlzYy5jLTI1OC1cdFx0Y2FzZSBORF9PUFRfUk9VVEVfSU5GTzpcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE0OTctXG5uZXQvaXB2Ni9uZGlzYy5jOjE0OTg6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L25kaXNjLmMtMTQ5OS1cdGlmICghUkVBRF9PTkNFKGluNl9kZXYtXHUwMDNlY25mLmFjY2VwdF9yYV9mcm9tX2xvY2FsKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTExNT1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xMTgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjExOTojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvcm91dGUuYy0xMjAtc3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKnJ0Nl9hZGRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTk2OC1cbm5ldC9pcHY2L3JvdXRlLmM6OTY5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jLTk3MC1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NDIzOT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00MzgxLVxubmV0L2lwdjYvcm91dGUuYzo0MzgyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODMtc3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKnJ0Nl9nZXRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTE0PUNPTkZJR19JUFY2X01JUDY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTE1OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQtMTE2LUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbj0xMDU9Q09ORklHX0lQVjZfTUlQNj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoxMDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi0xMDctQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc9NDU9Q09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTQ3LUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTI0Nj1kZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTI2Mi0gICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5OjI2MzogICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS0yNjQtICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5NgoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVB2NiBSb3V0ZSBJbmZvcm1hdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBhbmQgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXIgd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBGaXJzdCwgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGlzIGRlZmluaXRlbHkga2V5IGhlcmUuIEl0IHNlZW1zIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhhdCBmb3IgdGhlIGZ1enppbmcuIEl0JiMzOTtzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYENPTkZJR19JUFY2X1JPVVRFUl9QUkVGYCBvZnRlbiBnb2VzIGhhbmQtaW4taGFuZCB3aXRoIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCwgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEkmIzM5O2xsIGFkZCBib3RoIGBJUFY2X1JPVVRFX0lORk9gIGFuZCBgSVBWNl9ST1VURVJfUFJFRmAgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGUgY29kZSBhbmQgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIG5ldzogYGlwNl9kZWxfcnRfcmVhc29uYCBpcyBicmFuZCBuZXcsIHNvIHRoYXQmIzM5O3MgYSBwcmltZSBzdXNwZWN0LiBgZmliNl9kZWxgIG5vdyB0YWtlcyBgZGVsX3JlYXNvbmAsIGFuZCBgaW5ldDZfcnRfbm90aWZ5YCBhbHNvIHRha2VzIGBkZWxfcmVhc29uYCwgYW5kIEkmIzM5O3ZlIGFsc28gbm90ZWQgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbW9kaWZpZWQgdG8gdGFrZSBgZGVsX3JlYXNvbmAuIEZ1cnRoZXIsIEkgc2VlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGFsbCBjYWxsaW5nIGBpcDZfZGVsX3J0X3JlYXNvbmAuIGBmaWI2X2djX3RhYmxlYCBpcyBjYWxsaW5nIGBmaWI2X2RlbGAgd2l0aCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAuCgpTbywgYmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb246IGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYGZpYjZfZ2NfdGFibGVgLgoKSSBzaG91bGQgbm90ZSB0aGF0IGBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgYSBsaXR0bGUgbGVzcyBhY2Nlc3NpYmxlLCBidXQgaXQmIzM5O3Mgc3RpbGwgZ29vZCB0byBoYXZlIG9uIHRoZSBsaXN0LiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgZ2xvYmFsOyBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAgaXMgc3RhdGljLgoKSSBjaGVja2VkIGZvciByZWFjaGFiaWxpdHkuIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgaXA2X2RlbF9ydGAuIGBmaWI2X2RlbGAgaXMgY2FsbGVkIGZyb20gYF9faXA2X2RlbF9ydGAsIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgLCBgZmliNl9jbGVhbl9ub2RlYCwgYW5kIGBmaWI2X2djX3RhYmxlYC4KCkFmdGVyIHRoaXMgZGVlcGVyIGRpdmUsIEkmIzM5O20gY29uZmlkZW50IGluIHJlZmluaW5nIG15IGxpc3Qgb2YgZnV6emluZyB0YXJnZXRzLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBmaWI2X2djX3RhYmxlYC4KCkEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHJlYWxpemUgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AgaXMgZW5hYmxlZC4gVGhhdCBqdXN0IHJlaW5mb3JjZXMgdGhlIGltcG9ydGFuY2Ugb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlIHRoZSBvYnZpb3VzIGNvbmZpZ3MuIGBDT05GSUdfSVBWNmAgaXMgYSBuby1icmFpbmVyLCBhbmQsIGFzIG1lbnRpb25lZCBlYXJsaWVyLCBgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUZgIGlzIG9mdGVuIHJlcXVpcmVkIGZvciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBwbGFuIGluIHBsYWNlLiBOb3csIEkmIzM5O2xsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoaXMga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfbm90aWZ5JiMzNDssCiAgICAmIzM0O3J0Nl9yb3V0ZV9yY3YmIzM0OywKICAgICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICAgJiMzNDtuZGlzY19yb3V0ZXJfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZ2NfdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBsb2dpYywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnQgcHJvY2Vzc2luZyB0byBzdXBwbHkgdGhlIGRlbGV0aW9uIHJlYXNvbi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7ZmliNl9nY190YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE1LjEyOTA5MzQwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTc5MDUzODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yb3V0ZXJfZGlzY292ZXJ5XCIsXG4gICAgXCJmaWI2X2djX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBsb2dpYywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnQgcHJvY2Vzc2luZyB0byBzdXBwbHkgdGhlIGRlbGV0aW9uIHJlYXNvbi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE1LjEyOTA5ODg2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc5NjQ2MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjYzMDI5NDNmYjJlNTlhMTZjOGQ4MzA5ODRkYzIzYTVkMDc5YzdjYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTowODoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuaW5kZXggMzMxOTVkYjk2NzQ2YzYuLmQ1ZjY4MjQxMjdjMmU0IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5AQCAtNzgsNiArNzgsMTUgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgIC1cXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIG5hbWUtcHJlZml4OiBydGEtZGVsLXJlYXNvbi1cXG4rICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb25cXG4rICAgIGVudHJpZXM6XFxuKyAgICAgIC0gdW5zcGVjXFxuKyAgICAgIC0gZXhwaXJlZFxcbisgICAgICAtIHJhLXdpdGhkcmF3blxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xODUsNiArMTk0LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxcbisgICAgICAgIHR5cGU6IHU4XFxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxcbiAgIC1cXG4gICAgIG5hbWU6IG1ldHJpY3NcXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxcbkBAIC0yOTksNiArMzEyLDcgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgICAgICAgLSBkcG9ydFxcbiAgICAgICAgICAgICAtIG5oLWlkXFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjZcXG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjVcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgIC1cXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI0XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rICAgIC1cXG4rICAgICAgbmFtZTogZGVscm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI1XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcXG4rICAgICAgdmFsdWU6IDdcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXFxuKyAgICAgIHZhbHVlOiAxMVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uYzkzYTk5N2JiNDFlYmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHU4IGRlbF9yZWFzb24pO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuQEAgLTUzMSw3ICs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gfVxcbiAjZW5kaWZcXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pO1xcbiBcXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBub3cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmJmNmIzOWVhYWEyMGQ0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5AQCAtMTI4LDYgKzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXFxuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxcbitcXHRcXHQgICAgICB1OCBkZWxfcmVhc29uKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0XFx0XFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uODZiNDA3YmVmNGNlYWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiBcXHRSVEFfRFBPUlQsXFxuIFxcdFJUQV9OSF9JRCxcXG4gXFx0UlRBX0ZMT1dMQUJFTCxcXG4rXFx0UlRBX0RFTF9SRUFTT04sXFxuIFxcdF9fUlRBX01BWFxcbiB9O1xcbiBcXG5AQCAtNDA3LDYgKzQwOCwyMiBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXFxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxcbiBcXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1OC5cXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxcbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcXG4rICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxcbisgKiB0cmVhdCBcXFwiYWJzZW50XFxcIiBhbmQgXFxcInVuc3BlY1xcXCIgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxcbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxcbisgKi9cXG4rZW51bSBydGFfZGVsX3JlYXNvbiB7XFxuK1xcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcXHRcXHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFxcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cXG4rXFx0X19SVEFfREVMX1JFQVNPTl9NQVhcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXFxuK1xcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxcbiAgKlxcbiAgKiBcXFwic3RydWN0IHJ0bmV4dGhvcFxcXCIgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5pbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuIFxcdFxcdGlmIChydCkge1xcbiBcXHRcXHRcXHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cXG4gXFx0XFx0XFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xcbiBcXHRcXHRcXHRcXHRydCA9IE5VTEw7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdHRhYmxlID0gcnQtXFx1MDAzZWZpYjZfdGFibGU7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbmluZGV4IGExMzBjZGZhZWJmYmVlLi4yYzliY2UzMjEzYjczNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5AQCAtMTI4Niw3ICsxMjg2LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVxcdTAwM2VmaWI2X25vZGUsIGZuKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcXG4gXFx0XFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpO1xcbitcXHRcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlbmxfbmV0LVxcdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cXHUwMDNlZmliX3J0X2VudHJpZXMrKztcXG4gXFxuIFxcdFxcdGlmICghKGZuLVxcdTAwM2Vmbl9mbGFncyBcXHUwMDI2IFJUTl9SVElORk8pKSB7XFxuQEAgLTEzMTcsNyArMTMxOCw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdHJ0LVxcdTAwM2VmaWI2X25leHQgPSBpdGVyLVxcdTAwM2VmaWI2X25leHQ7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XFxuIFxcdFxcdGlmICghaW5mby1cXHUwMDNlc2tpcF9ub3RpZnkpXFxuLVxcdFxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGlmICghKGZuLVxcdTAwM2Vmbl9mbGFncyBcXHUwMDI2IFJUTl9SVElORk8pKSB7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZW5sX25ldC1cXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXFx1MDAzZWZpYl9yb3V0ZV9ub2RlcysrO1xcbiBcXHRcXHRcXHRmbi1cXHUwMDNlZm5fZmxhZ3MgfD0gUlROX1JUSU5GTztcXG5AQCAtMTk2Niw3ICsxOTY4LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCAgIHU4IGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxuQEAgLTIwNTUsMTMgKzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4gXFx0XFx0XFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XFxuIFxcdH1cXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xcbitcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XFxuIFxcbiBcXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XFxuIH1cXG4gXFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVxcdTAwM2V0YjZfbG9jayAqL1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1OCBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcXG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJ0ID09IGN1cikge1xcbiBcXHRcXHRcXHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcXG4gXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxuLVxcdFxcdFxcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRydHBfbmV4dCA9IFxcdTAwMjZjdXItXFx1MDAzZWZpYjZfbmV4dDtcXG5AQCAtMjI1Miw3ICsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiBcXHRcXHRyZXMgPSBjLVxcdTAwM2VmdW5jKHJ0LCBjLVxcdTAwM2VhcmcpO1xcbiBcXHRcXHRpZiAocmVzID09IC0xKSB7XFxuIFxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG4tXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRpZiAocmVzKSB7XFxuICNpZiBSVDZfREVCVUcgXFx1MDAzZT0gMlxcbiBcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcXFxuXFxcIixcXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcXHUwMDI2dGI2LVxcdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXFxuIFxcdFxcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXFxuLVxcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmODY3ZWM4ZDNkOTA1MS4uYzM1MzdmYzBlYzYzYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LVxcdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcXG4gXFx0LyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi9cXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVxcdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTM5Niw3ICsxMzk4LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0Lm5sX25ldCA9IG5ldCxcXG4gXFx0XFx0fTtcXG4gXFx0XFx0cnQtXFx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXFx1MDAzZWZpYjZfZmxhZ3MgXFx1MDAyNiB+UlRGX1BSRUZfTUFTSykgfCBSVEZfUFJFRihwcmVmKTtcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFxcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xcbitcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcXG4rXFx0XFx0XFx0XFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJ0KSB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggYTEzMDEzMzRkYTQ4YzAuLmVlN2JhNThlODNjNzQ1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncyk7XFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pO1xcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRnd2FkZHIsIGRldik7XFxuIFxcbiBcXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgIWxpZmV0aW1lKSB7XFxuLVxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0dTggZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcXG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0dGFibGUgPSBydC1cXHUwMDNlZmliNl90YWJsZTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRhYmxlLVxcdTAwM2V0YjZfbG9jayk7XFxuIFxcbiBvdXQ6XFxuQEAgLTM5OTQsMTQgKzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcXG4rXFx0XFx0ICAgICAgdTggZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xcbiBcXHRcXHQubmxfbmV0ID0gbmV0LFxcbi1cXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxcbitcXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeSxcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbitpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbit7XFxuK1xcdHJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4gXFx0XFx0XFx0fSBlbHNlXFxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJ0LVxcdTAwM2VmaWI2X3NpYmxpbmdzLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmliNl9zaWJsaW5ncykge1xcbi1cXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcXG4rXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChjZmctXFx1MDAzZWZjX25oX2lkKVxcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcbiBcXHRcXHRcXHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfZmxhZ3MgXFx1MDAyNiBSVEZfR0FURVdBWSlcXG4tXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC01MzgxLDcgKzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocnQpXFxuLVxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcXG4rXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbkBAIC01NzM5LDYgKzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cXG4rXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX0RFTF9SRUFTT04gKi9cXG4gXFx0ICAgICAgICsgbmV4dGhvcF9sZW47XFxuIH1cXG4gXFxuQEAgLTU3NzUsNyArNTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbiBcXHRcXHRcXHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcXG4gXFx0XFx0XFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCB1OCBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XFxuIFxcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xcbkBAIC01OTU0LDYgKzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVxcdTAwM2VlcnJvciA6IDApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbitcXHRpZiAodHlwZSA9PSBSVE1fREVMUk9VVEUgXFx1MDAyNlxcdTAwMjYgZGVsX3JlYXNvbiAhPSBSVEFfREVMX1JFQVNPTl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXFxuK1xcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4gXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG5AQCAtNjA1NSw3ICs2MDcxLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ0Nl9leC1cXHUwMDNlcnQ2aS1cXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgTkVUTElOS19DQihkdW1wLVxcdTAwM2VjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkdW1wLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIHctXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5AQCAtNjEwMyw3ICs2MTIwLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXFxuIFxcdFxcdFxcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVxcdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgIDAsIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBORVRMSU5LX0NCKGFyZy1cXHUwMDNlY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGFyZy1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkge1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbkBAIC02MzM2LDEyICs2MzU0LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXFx1MDAyNmZsNi5kYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZXJyID0gLUVORVRVTlJFQUNIO1xcbiBcXHR9XFxuQEAgLTYzNTgsNyArNjM3OCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiB9XFxuIFxcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4tXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHU4IGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcXG4tXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxcbitcXHRcXHRcXHQgICAgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XFxuK1xcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxcbitcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcXG4tXFx0XFx0XFx0ICAgIDAsIDApO1xcbitcXHRcXHRcXHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXFxuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XFxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGlua1xcbiBcXG4gX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuICAgICAgICAgICAgXFxcIk5ldGRldlNpbVxcXCIsIFxcXCJOZXRkZXZTaW1EZXZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsIFxcXCJQU1BGYW1pbHlcXFwiLCBcXFwiTmxFcnJvclxcXCIsXFxuICAgICAgICAgICAgXFxcIllubEZhbWlseVxcXCIsIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIixcXG4tICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbisgICAgICAgICAgIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxcbiBcXG4gX19hbGxfXyA9IFtcXG4gICAgIFxcXCJObEVycm9yXFxcIiwgXFxcIk5sUG9saWN5XFxcIiwgXFxcIk5ldGxpbmtcXFwiLCBcXFwiWW5sRmFtaWx5XFxcIiwgXFxcIlNQRUNfUEFUSFxcXCIsXFxuLSAgICBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIixcXG4rICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIixcXG4gICAgIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJEZXZsaW5rRmFtaWx5XFxcIixcXG4gICAgIFxcXCJQU1BGYW1pbHlcXFwiLFxcbiBdXFxuQEAgLTU0LDYgKzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuIFxcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtcm91dGUueWFtbCcpKS5hc19wb3NpeCgpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxcbitcXG4gY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6XFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLjg3NzNlODhiOTM0YjBmIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIFxcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xcXFx4ZTBcXFxceDAwXFxcXHgwMFxcXFx4MDEnXFxuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xcXFx4ZWZcXFxceDAxXFxcXHgwMVxcXFx4MDEnXFxuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfdHJ1ZShmXFxcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblxcXCIgaW4gY21kX29iai5zdGRvdXQsXFxuICAgICAgICAgICAgICAgZlxcXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XFxcIilcXG4gXFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFxcXCJydG5sZ3JwLWlwdjYtcm91dGVcXFwiKVxcbisgICAgcmV0dXJuIHJ0bmxcXG4rXFxuK1xcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBhdHRyc1xcbisgICAgcmV0dXJuIE5vbmVcXG4rXFxuK1xcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XFxuKyAgICB3aXRoIG9wZW4oZlxcXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XFxcIiwgXFxcIndcXFwiKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoZlxcXCJ7dmFsdWV9XFxcXG5cXFwiKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwicm91dGUvZ2NfaW50ZXJ2YWxcXFwiLCAyKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxcbitcXG4rXFxuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXFxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xcbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXFxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcXG4rXFxuK1xcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXFxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXFxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXFxuK1xcbitcXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXFxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XFxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2Vlbi5rZXlzKCksIGRlYWRsaW5lPTIpKVxcbisgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICByZXR1cm4gc2VlblxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcXG4rICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XFxuKyAgICAgICAgaXAoZlxcXCJsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cXFwiKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhXFxcIiwgMilcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcXFwiLCAwKVxcbisgICAgICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cXFwiLCA2NClcXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XFxuKyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlcidzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXFxcIiwgMClcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IHZldGgwIHVwXFxcIiwgbnM9c3RyKG5zX2gpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcXFwiLCBucz1zdHIobnNfcikpXFxuK1xcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFxcXCJ2ZXRoMVxcXCIpXFxuK1xcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcXFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcXFwiKVxcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XFxuKyAgICAgICAgICAgIHJldHVyblxcbitcXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXFxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XFxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXFxcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cXFwiKVxcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rXFxuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcXFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXFxcIilcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxcbiAgICAga3NmdF9leGl0KClcXG4gXFxuIGlmIF9fbmFtZV9fID09IFxcXCJfX21haW5fX1xcXCI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE2LjAwOTM4MjMyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwOTg3NTY1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcIm5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlcIixcbiAgICBcImZpYjZfZ2NfdGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNjMwMjk0M2ZiMmU1OWExNmM4ZDgzMDk4NGRjMjNhNWQwNzljN2NhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDE6MDg6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5pbmRleCAzMzE5NWRiOTY3NDZjNi4uZDVmNjgyNDEyN2MyZTQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICs3OCwxNSBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4rICAtXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgdHlwZTogZW51bVxuKyAgICBuYW1lLXByZWZpeDogcnRhLWRlbC1yZWFzb24tXG4rICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb25cbisgICAgZW50cmllczpcbisgICAgICAtIHVuc3BlY1xuKyAgICAgIC0gZXhwaXJlZFxuKyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4rICAgICAgICB0eXBlOiB1OFxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uYzkzYTk5N2JiNDFlYmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHU4IGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMxLDcgKzUzMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIH1cbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncywgdTggZGVsX3JlYXNvbik7XG4gXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIG5vdyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmJmNmIzOWVhYWEyMGQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDYgKzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXG4rXHRcdCAgICAgIHU4IGRlbF9yZWFzb24pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiBcdFx0XHQgICAgIGJvb2wgc2tpcF9ub3RpZnkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uODZiNDA3YmVmNGNlYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbitcdFJUQV9ERUxfUkVBU09OLFxuIFx0X19SVEFfTUFYXG4gfTtcbiBcbkBAIC00MDcsNiArNDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTguXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqL1xuK2VudW0gcnRhX2RlbF9yZWFzb24ge1xuK1x0UlRBX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuK1x0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuK1x0X19SVEFfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXG4rXG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cbiAgKlxuICAqIFwic3RydWN0IHJ0bmV4dGhvcFwiIGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGYxZmU5ZWRlMWVkYjM3Li4xY2E5ZDgyYjU3MjFlNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC0yODc0LDcgKzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggYTEzMGNkZmFlYmZiZWUuLjJjOWJjZTMyMTNiNzM1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbkBAIC0xMjg2LDcgKzEyODYsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocnQtXHUwMDNlZmliNl9ub2RlLCBmbik7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XG4gXHRcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4rXHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4rXHRcdFx0XHRcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGluZm8tXHUwMDNlbmxfbmV0LVx1MDAzZWlwdjYucnQ2X3N0YXRzLVx1MDAzZWZpYl9ydF9lbnRyaWVzKys7XG4gXG4gXHRcdGlmICghKGZuLVx1MDAzZWZuX2ZsYWdzIFx1MDAyNiBSVE5fUlRJTkZPKSkge1xuQEAgLTEzMTcsNyArMTMxOCw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdHJ0LVx1MDAzZWZpYjZfbmV4dCA9IGl0ZXItXHUwMDNlZmliNl9uZXh0O1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpO1xuIFx0XHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcm91dGVfbm9kZXMrKztcbiBcdFx0XHRmbi1cdTAwM2Vmbl9mbGFncyB8PSBSVE5fUlRJTkZPO1xuQEAgLTE5NjYsNyArMTk2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICB1OCBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU1LDEzICsyMDU4LDEzIEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbitcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNTEuLmMzNTM3ZmMwZWM2M2IxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuK1x0XHRcdFx0ICBsaWZldGltZSA9PSAwID8gUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0xMzk2LDcgKzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXHUwMDI2bmxpbmZvLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH1cbiBcbiBcdGlmIChydCkge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBhMTMwMTMzNGRhNDhjMC4uZWU3YmE1OGU4M2M3NDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pO1xuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLCBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0dTggZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgKzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXG4gXHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuK1x0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuIFxuIG91dDpcbkBAIC0zOTk0LDE0ICszOTk1LDIwIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksXG4rXHRcdCAgICAgIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5sX2luZm8gaW5mbyA9IHtcbiBcdFx0Lm5sX25ldCA9IG5ldCxcbi1cdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbitcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbit9XG4rXG4raW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbit7XG4rXHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxuIFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4rXHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxuIFx0XHRcdFx0XHQgXHUwMDI2cnQtXHUwMDNlZmliNl9zaWJsaW5ncyxcbiBcdFx0XHRcdFx0IGZpYjZfc2libGluZ3MpIHtcbi1cdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcbitcdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXHRcdFx0XHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXG4gXHRcdFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgUlRGX0dBVEVXQVkpXG4tXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyArNTM5MSw4IEBAIHN0YXRpYyB2b2lkIGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHR9XG4gXG4gXHRpZiAocnQpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcbitcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4rXHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiArNTc1MCw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODcsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHU4IGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbiBcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xuQEAgLTU5NTQsNiArNTk2NiwxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVx1MDAzZWVycm9yIDogMCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuK1x0aWYgKHR5cGUgPT0gUlRNX0RFTFJPVVRFIFx1MDAyNlx1MDAyNiBkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3U4KHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgKzYwNzEsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuK1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02MTAzLDcgKzYxMjAsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4rXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuK1x0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQykpIHtcbiBcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdH1cbiBcdFx0XHRjb3VudCsrO1xuQEAgLTYzMzYsMTIgKzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgTlVMTCwgTlVMTCwgTlVMTCxcbiBcdFx0XHRcdFx0ICAgIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuK1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbitcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU4LDcgKzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiB9XG4gXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLCB1OCBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsXG4rXHRcdFx0ICAgIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuK1x0XHRcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLjg3NzNlODhiOTM0YjBmIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXHhlMFxceDAwXFx4MDBcXHgwMSdcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXHhlZlxceDAxXFx4MDFcXHgwMSdcbkBAIC0xMzQsOCArMTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF90cnVlKGZcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblwiIGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwiTm8gJ2ZvcndhcmRpbmcgb24nIG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwiKVxuIFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFwicnRubGdycC1pcHY2LXJvdXRlXCIpXG4rICAgIHJldHVybiBydG5sXG4rXG4rXG4rZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cIlwiXCJcbitcbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJ2RzdCcpICE9IGRzdDpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgcmV0dXJuIGF0dHJzXG4rICAgIHJldHVybiBOb25lXG4rXG4rXG4rZGVmIF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgbmFtZSwgd2FudCwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCJcIlwiXG4rXG4rICAgIHNlZW4gPSB7fVxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXG4rICAgICAgICBpZiBrZXkgaW4gd2FudDpcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4rICAgICAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XG4rICAgIHdpdGggb3BlbihmXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCIsIFwid1wiKSBhcyBmOlxuKyAgICAgICAgZi53cml0ZShmXCJ7dmFsdWV9XFxuXCIpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJyb3V0ZS9nY19pbnRlcnZhbFwiLCAyKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6Mjo6JyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXG4rXG4rXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuKyAgICBcIlwiXCJUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLlwiXCJcIlxuK1xuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4rICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXJcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4rICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxuKyAgICBzb2NrLnNlbmR0byhyYSwgKCdmZjAyOjoxJywgMCwgMCwgaWZpbmRleCkpXG4rXG4rXG4rZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KVxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbitcbitcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbisgICAgXCJcIlwiXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXG4rICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXG4rICAgIFwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2Vlbi5rZXlzKCksIGRlYWRsaW5lPTIpKVxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbisgICAgICAgIGlwKGZcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcIiwgMClcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcIiwgMClcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgwIHVwXCIsIG5zPXN0cihuc19oKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgxIHVwXCIsIG5zPXN0cihuc19yKSlcbitcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCJ2ZXRoMVwiKVxuK1xuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxuKyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwiKVxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbisgICAgICAgICAgICByZXR1cm5cbitcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcbisgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCAwKSlcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbisgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXCJubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCIpXG4rICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cIilcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjE2LjAwOTM4MzUyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NjA4NjcxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgSVB2NiBSb3V0ZSBEZWxldGlvbiBSZWFzb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGEgYFJUQV9ERUxfUkVBU09OYCBhdHRyaWJ1dGUgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIEl0J3MgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBJUHY2IHJvdXRpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9pcHY2L2AsIHNvIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6LiBUaGUgYWRkaXRpb24gYWxsb3dzIGZvciBzcGVjaWZ5aW5nIHJlYXNvbnMgbGlrZSBgUlRBX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUQV9ERUxfUkVBU09OX0VYUElSRURgLCBhbmQgYFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmAgaW4gYFJUTV9ERUxST1VURWAgbWVzc2FnZXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLiBMb29raW5nIGF0IHRoZSBtb2RpZmllZCBmaWxlcywgSSd2ZSBnb3QgYSBnb29kIGxpc3Q6IGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYGZpYjZfYWRkX3J0Mm5vZGVgLCBgZmliNl9kZWxfcm91dGVgLCBgZmliNl9kZWxgLCBgZmliNl9jbGVhbl9ub2RlYCwgYGZpYjZfZ2NfdGFibGVgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfZmlsbF9ub2RlYCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgX19pcDZfZGVsX3J0YCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGlwNl9kZWxfcnRgLCBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYCwgYGlwNl9yb3V0ZV9kZWxgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGBydDZfbmxtc2dfc2l6ZWAsIGBydDZfbmhfZHVtcF9leGNlcHRpb25zYCwgYHJ0Nl9kdW1wX3JvdXRlYCwgYGluZXQ2X3J0bV9nZXRyb3V0ZWAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgZmliNl9ydF91cGRhdGVgLCBhbmQgYGZpYjZfaW5mb19od19mbGFnc19zZXRgLiBUaGF0J3MgYSBsb3QhXG5cbkkgdGhpbmsgYGZpYjZfZGVsYCBhbmQgYGlwNl9kZWxfcnRfcmVhc29uYCBhcmUgcGFydGljdWxhcmx5IGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IHNlZW0gdG8gYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcm91dGUgZGVsZXRpb24gcmVhc29uLiBBbHNvLCBgcnQ2X2ZpbGxfbm9kZWAgaXMgaG90LXBhdGggZm9yIGR1bXBpbmcgYW5kIG5vdGlmaWNhdGlvbiwgYWxzbyBgaW5ldDZfcnRfbm90aWZ5YCBhcmUgaW1wb3J0YW50IGZvciBub3RpZmljYXRpb24uIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGxvb2sgcHJvbWlzaW5nIGZvciBSQSAoUm91dGVyIEFkdmVydGlzZW1lbnQpIHByb2Nlc3NpbmcsIGFuZCBgcnQ2X3JvdXRlX3JjdmAgc2VlbXMgaW1wb3J0YW50LCB0b28uXG5cbk5vdyBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uIFNpbmNlIHRoaXMgaXMgaW4gYG5ldC9pcHY2L2AsIGBDT05GSUdfSVBWNmAgaXMsIG9idmlvdXNseSwgcmVxdWlyZWQuIFRoZSBzZWxmdGVzdCBtZW50aW9ucyBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2Agd2l0aCB0aGlzIGxpbmU6IGBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCIsIDY0KWAuICBTbyBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgaW4gYG5ldC9pcHY2L0tjb25maWdgIGFuZCB0aGVuIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBvdXQgd2hhdCBkZXBlbmRzIG9uIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgZm9yIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzQ2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MDg6MjQuOTcwMjUyNjg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI0MTU2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9ST1VURV9JTkZPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZz00OD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZy01MC1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWc9NTk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZzo2MDpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWctNjEtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xNTI9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTUzOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTU0LUNPTkZJR19JTkVUNl9BSD1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE2OD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNjk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xNzAtQ09ORklHX0lORVQ2X0FIPW1cXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc9NTI9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc6NTM6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZy01NC1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnPTU0PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnOjU1OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctNTYtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl82NF9kZWZjb25maWc9NDA9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnOjQxOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fNjRfZGVmY29uZmlnLTQyLUNPTkZJR19JTkVUNl9BSD1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZz0zNj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWc6Mzc6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWctMzgtQ09ORklHX0lORVQ2X0FIPW1cXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZz0zNT1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9yNGtfZGVmY29uZmlnOjM2OkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fcjRrX2RlZmNvbmZpZy0zNy1DT05GSUdfSU5FVDZfQUg9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWc9Mzk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjQwOkNPTkZJR19JUFY2X1JPVVRFX0lORk89eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnLTQxLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTM2PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZzozNzpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZy0zOC1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZz0zNj1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWc6Mzc6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWctMzgtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnPTQ1PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnLTQ3LUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDk9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6NTA6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZy01MS1DT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc9NDg9Q09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZzo0OTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNTAtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnPTMyPUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWc6MzM6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnLTM0LUNPTkZJR19JTkVUNl9BSD1tXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTEwOD1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzoxMDk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZy0xMTAtQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eVxcbi0tXFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnPTQ4PUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXlcXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc6NDk6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXlcXG4tLVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oPTEzPXN0cnVjdCBpcHY2X2RldmNvbmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pcHY2LmgtNTEtXFx0X19zMzJcXHRcXHRydHJfcHJvYmVfaW50ZXJ2YWw7XFxuaW5jbHVkZS9saW51eC9pcHY2Lmg6NTI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01My1cXHRfX3MzMlxcdFxcdGFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmRpc2MuaD0xMDA9c3RydWN0IG5kaXNjX29wdGlvbnMge1xcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAxLVxcdHN0cnVjdCBuZF9vcHRfaGRyICpuZF9vcHRfYXJyYXlbX19ORF9PUFRfQVJSQVlfTUFYXTtcXG5pbmNsdWRlL25ldC9uZGlzYy5oOjEwMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAzLVxcdHN0cnVjdCBuZF9vcHRfaGRyICpuZF9vcHRzX3JpO1xcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTEtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIxMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjEzLVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzYtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc4LVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjQ9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwMy1cXHRcXHRqaWZmaWVzX3RvX21zZWNzKFJFQURfT05DRShjbmYtXFx1MDAzZXJ0cl9wcm9iZV9pbnRlcnZhbCkpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcwNDojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwNS1cXHRhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9SVF9JTkZPX01JTl9QTEVOXSA9XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODYtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcwODc6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwODgtXFx0e1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0yMjA9c3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjU2LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L25kaXNjLmM6MjU3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvbmRpc2MuYy0yNTgtXFx0XFx0Y2FzZSBORF9PUFRfUk9VVEVfSU5GTzpcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNDk3LVxcbm5ldC9pcHY2L25kaXNjLmM6MTQ5ODojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L25kaXNjLmMtMTQ5OS1cXHRpZiAoIVJFQURfT05DRShpbjZfZGV2LVxcdTAwM2VjbmYuYWNjZXB0X3JhX2Zyb21fbG9jYWwpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTExNT1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTExOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjExOTojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L3JvdXRlLmMtMTIwLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtOTY4LVxcbm5ldC9pcHY2L3JvdXRlLmM6OTY5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy05NzAtaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDIzOT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODEtXFxubmV0L2lwdjYvcm91dGUuYzo0MzgyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy00MzgzLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTE0PUNPTkZJR19JUFY2X01JUDY9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjExNTpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0xMTYtQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249MTA1PUNPTkZJR19JUFY2X01JUDY9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjEwNjpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi0xMDctQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz00NT1DT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDY6Q09ORklHX0lQVjZfUk9VVEVfSU5GTz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZy00Ny1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTI0Nj1kZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cXHUwMDNlIE5vbmU6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTI2Mi0gICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weToyNjM6ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktMjY0LSAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjA4OjI4LjI2MjY3NjMzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzI4MDg2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQdjYgUm91dGUgSW5mb3JtYXRpb24gYW5kIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBpdCdzIGJlY29taW5nIGNsZWFyIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gRmlyc3QsIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCBpcyBkZWZpbml0ZWx5IGtleSBoZXJlLiBJdCBzZWVtcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0aGUgZnVuY3Rpb25hbGl0eSB3ZSdyZSBpbnRlcmVzdGVkIGluLCBhbmQgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGF0IGZvciB0aGUgZnV6emluZy4gSXQncyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IGBDT05GSUdfSVBWNl9ST1VURVJfUFJFRmAgb2Z0ZW4gZ29lcyBoYW5kLWluLWhhbmQgd2l0aCBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AsIHNvIEknbGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEknbGwgYWRkIGJvdGggYElQVjZfUk9VVEVfSU5GT2AgYW5kIGBJUFY2X1JPVVRFUl9QUkVGYCB0byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIGFuZCB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhcmUgbmV3OiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGJyYW5kIG5ldywgc28gdGhhdCdzIGEgcHJpbWUgc3VzcGVjdC4gYGZpYjZfZGVsYCBub3cgdGFrZXMgYGRlbF9yZWFzb25gLCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgYWxzbyB0YWtlcyBgZGVsX3JlYXNvbmAsIGFuZCBJJ3ZlIGFsc28gbm90ZWQgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbW9kaWZpZWQgdG8gdGFrZSBgZGVsX3JlYXNvbmAuIEZ1cnRoZXIsIEkgc2VlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGFsbCBjYWxsaW5nIGBpcDZfZGVsX3J0X3JlYXNvbmAuIGBmaWI2X2djX3RhYmxlYCBpcyBjYWxsaW5nIGBmaWI2X2RlbGAgd2l0aCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAuXG5cblNvLCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcmV2aWV3LCBJJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBmaWI2X2djX3RhYmxlYC5cblxuSSBzaG91bGQgbm90ZSB0aGF0IGBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgYSBsaXR0bGUgbGVzcyBhY2Nlc3NpYmxlLCBidXQgaXQncyBzdGlsbCBnb29kIHRvIGhhdmUgb24gdGhlIGxpc3QuIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBnbG9iYWw7IGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBpcyBzdGF0aWMuXG5cbkkgY2hlY2tlZCBmb3IgcmVhY2hhYmlsaXR5LiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgaXA2X2RlbF9ydGAuIGBmaWI2X2RlbGAgaXMgY2FsbGVkIGZyb20gYF9faXA2X2RlbF9ydGAsIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgLCBgZmliNl9jbGVhbl9ub2RlYCwgYW5kIGBmaWI2X2djX3RhYmxlYC5cblxuQWZ0ZXIgdGhpcyBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCBpbiByZWZpbmluZyBteSBsaXN0IG9mIGZ1enppbmcgdGFyZ2V0cy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbjogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgZmliNl9nY190YWJsZWAuXG5cbkEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHJlYWxpemUgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AgaXMgZW5hYmxlZC4gVGhhdCBqdXN0IHJlaW5mb3JjZXMgdGhlIGltcG9ydGFuY2Ugb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlIHRoZSBvYnZpb3VzIGNvbmZpZ3MuIGBDT05GSUdfSVBWNmAgaXMgYSBuby1icmFpbmVyLCBhbmQsIGFzIG1lbnRpb25lZCBlYXJsaWVyLCBgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUZgIGlzIG9mdGVuIHJlcXVpcmVkIGZvciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuXG5cbkFscmlnaHQsIEkndmUgZ290IGEgc29saWQgcGxhbiBpbiBwbGFjZS4gTm93LCBJJ2xsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoaXMga25vd2xlZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5NiwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MDg6MzguOTkwNzY2NTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczNjgxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yb3V0ZXJfZGlzY292ZXJ5XCIsXG4gICAgXCJmaWI2X2djX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBsb2dpYywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnQgcHJvY2Vzc2luZyB0byBzdXBwbHkgdGhlIGRlbGV0aW9uIHJlYXNvbi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcIm5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlcIixcbiAgICBcImZpYjZfZ2NfdGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBwcm9jZXNzaW5nIHRvIHN1cHBseSB0aGUgZGVsZXRpb24gcmVhc29uLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowkrwlx[1] Phase: Succeeded StartedAt: 2026-07-18 01:08:50 +0000 UTC FinishedAt: 2026-07-18 01:08:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-18 01:08:50 +0000 UTC FinishedAt: 2026-07-18 01:08:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2] Phase: Succeeded StartedAt: 2026-07-18 01:08:50 +0000 UTC FinishedAt: 2026-07-18 05:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-18 01:08:50 +0000 UTC FinishedAt: 2026-07-18 05:40:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-18 01:08:50 +0000 UTC FinishedAt: 2026-07-18 01:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-18 01:08:50 +0000 UTC FinishedAt: 2026-07-18 01:09:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkrwlx/series-workflowkrwlx-convert-artifact-3918596134/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-18 01:09:13 +0000 UTC FinishedAt: 2026-07-18 02:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-18 01:09:13 +0000 UTC FinishedAt: 2026-07-18 02:04:37 +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:*8005cb53-d05c-4106-8b51-b23eb13ecf2c,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-workflowkrwlx/series-workflowkrwlx-convert-artifact-3918596134/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": "830bdc53-00c0-4cc6-a5e7-ed65b3fcff97", "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-workflowkrwlx/series-workflowkrwlx-build-action-458696892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-18 01:09:13 +0000 UTC FinishedAt: 2026-07-18 02:04:27 +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:*8005cb53-d05c-4106-8b51-b23eb13ecf2c,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-workflowkrwlx/series-workflowkrwlx-convert-artifact-3918596134/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": "830bdc53-00c0-4cc6-a5e7-ed65b3fcff97", "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-workflowkrwlx/series-workflowkrwlx-build-action-458696892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-18 02:04:37 +0000 UTC FinishedAt: 2026-07-18 02:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-18 02:04:37 +0000 UTC FinishedAt: 2026-07-18 02:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-18 02:04:37 +0000 UTC FinishedAt: 2026-07-18 02:04:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-18 02:04:37 +0000 UTC FinishedAt: 2026-07-18 02:04:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkrwlx/series-workflowkrwlx-convert-artifact-482056057/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-18 02:04:47 +0000 UTC FinishedAt: 2026-07-18 02:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-18 02:04:47 +0000 UTC FinishedAt: 2026-07-18 02:07:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*830bdc53-00c0-4cc6-a5e7-ed65b3fcff97,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-workflowkrwlx/series-workflowkrwlx-build-action-458696892/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-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-18 02:07:20 +0000 UTC FinishedAt: 2026-07-18 02:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-18 02:07:20 +0000 UTC FinishedAt: 2026-07-18 02:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-18 02:07:20 +0000 UTC FinishedAt: 2026-07-18 02:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-18 02:07:20 +0000 UTC FinishedAt: 2026-07-18 02:35:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8005cb53-d05c-4106-8b51-b23eb13ecf2c,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-workflowkrwlx/series-workflowkrwlx-convert-artifact-482056057/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": "e070a87b-9dad-40ac-ba8b-8d4560c4c45c", "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-workflowkrwlx/series-workflowkrwlx-build-action-3759626581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-18 02:07:20 +0000 UTC FinishedAt: 2026-07-18 02:35:21 +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:*8005cb53-d05c-4106-8b51-b23eb13ecf2c,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-workflowkrwlx/series-workflowkrwlx-convert-artifact-482056057/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": "e070a87b-9dad-40ac-ba8b-8d4560c4c45c", "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-workflowkrwlx/series-workflowkrwlx-build-action-3759626581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-18 02:35:45 +0000 UTC FinishedAt: 2026-07-18 02:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-18 02:35:45 +0000 UTC FinishedAt: 2026-07-18 02:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-18 02:35:45 +0000 UTC FinishedAt: 2026-07-18 02:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-18 02:35:45 +0000 UTC FinishedAt: 2026-07-18 02:37:42 +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:*e070a87b-9dad-40ac-ba8b-8d4560c4c45c,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-workflowkrwlx/series-workflowkrwlx-build-action-3759626581/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-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-18 02:37:54 +0000 UTC FinishedAt: 2026-07-18 05:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-18 02:37:54 +0000 UTC FinishedAt: 2026-07-18 05:40:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"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:*830bdc53-00c0-4cc6-a5e7-ed65b3fcff97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e070a87b-9dad-40ac-ba8b-8d4560c4c45c,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-workflowkrwlx/series-workflowkrwlx-build-action-458696892/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-workflowkrwlx/series-workflowkrwlx-build-action-3759626581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-18 02:37:54 +0000 UTC FinishedAt: 2026-07-18 02:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-18 02:37:54 +0000 UTC FinishedAt: 2026-07-18 02:37:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"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-workflowkrwlx/series-workflowkrwlx-convert-artifact-3821845486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-18 02:37:54 +0000 UTC FinishedAt: 2026-07-18 02:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-18 02:37:54 +0000 UTC FinishedAt: 2026-07-18 02:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-18 02:37:54 +0000 UTC FinishedAt: 2026-07-18 02:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-18 02:38:08 +0000 UTC FinishedAt: 2026-07-18 05:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrwlx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_router_discovery","fib6_gc_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO","IPV6_ROUTER_PREF"],"series_id":"c2f93b3a-6db9-45ce-a6c2-b04d0a355f62","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-18 02:38:08 +0000 UTC FinishedAt: 2026-07-18 05:40:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*830bdc53-00c0-4cc6-a5e7-ed65b3fcff97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e070a87b-9dad-40ac-ba8b-8d4560c4c45c,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-workflowkrwlx/series-workflowkrwlx-build-action-458696892/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-workflowkrwlx/series-workflowkrwlx-build-action-3759626581/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-workflowkrwlx/series-workflowkrwlx-convert-artifact-3821845486/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,}