Name: series-workflowm44bm Phase: Succeeded StartedAt: 2026-09-01 04:12:18 +0000 UTC FinishedAt: 2026-09-01 08:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[0] Phase: Succeeded StartedAt: 2026-09-01 04:12:18 +0000 UTC FinishedAt: 2026-09-01 04:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 04:12:18 +0000 UTC FinishedAt: 2026-09-01 04:29:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CACHE", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CACHE", "SMP" ], "series_id": "ae15fe8a-8467-4268-84dc-d7904404badd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sched_cache_exec_done" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NBQ0hFJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjaGVkX2NhY2hlX2V4ZWNfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxpZmV0aW1lIGlzc3VlIChwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9mIGBvbGRfbW1gKSwgd2hpY2ggZmFsbHMgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBsb2dpYyBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4YTI2NzI0ZDVlNWUzMTRlYjkxNTk2ZDhhZjZhNDQxOWUwYjNhYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjI3OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNjE5NGMzODgwNzk4MCAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtOTE2LDYgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKVxuIHtcbiBcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VtYXhyc3MsIG9sZF9tbSk7XG4gXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xuJiM0MztcdHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpO1xuIFx0bW1wdXQob2xkX21tKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi42YWUzMWJmZmUwNDllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0yNDE1LDEwICYjNDM7MjQxNSwxNCBAQCBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7XG4gXHRpbnQgY3B1O1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcbiYjNDM7dm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCk7XG4mIzQzO1xuICNlbHNlXG4gXG4gc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgeyB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpIHsgfVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjaWZuZGVmIE1PRFVMRVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li5hM2QwMTg1NzE3ZjdiIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTE5ODksNiAmIzQzOzE5ODksMTggQEAgdm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHAtXHUwMDNlcHJlZmVycmVkX2xsYyA9IC0xO1xuIH1cbiBcbiYjNDM7LyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xuJiM0Mzt2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhY2NvdW50X21tX3NjaGVkKCkgZGVyZWZlcmVuY2VzIHJxLVx1MDAzZWN1cnItXHUwMDNlbW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLFxuJiM0MztcdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxuJiM0MztcdCAqIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIGlzIHRoZXJlZm9yZSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXG4mIzQzO1x0ICogc2VjdGlvbiwgc28gd2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgYmVmb3JlIHRoZSBtbSBnb2VzIGF3YXkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO31cbiYjNDM7XG4gI2Vsc2UgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NBQ0hFJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjaGVkX2NhY2hlX2V4ZWNfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpIGR1cmluZyBleGVjX21tX3B1dF9vbGQoKSBpbiB0aGUgZXhlY3ZlIHBhdGggdG8gd2FpdCBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZCBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCBtbV9zdHJ1Y3QuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlcmUgcmVtb3RlIENQVXMgZXhlY3V0aW5nIGFjY291bnRfbW1fc2NoZWQoKSB1bmRlciBDT05GSUdfU0NIRURfQ0FDSEUgYWNjZXNzIHRoZSBvbGQgbW0uIEl0IGlzIGEgcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBleGVjIGNoYW5nZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzhhMjY3MjRkNWU1ZTMxNGViOTE1OTZkOGFmNmE0NDE5ZTBiM2FiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mjc6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uNjE5NGMzODgwNzk4MCAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtOTE2LDYgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKQogewogCXNldG1heF9tbV9oaXdhdGVyX3JzcygmYW1wO2N1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bWF4cnNzLCBvbGRfbW0pOwogCW1tX3VwZGF0ZV9uZXh0X293bmVyKG9sZF9tbSk7CiYjNDM7CXNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpOwogCW1tcHV0KG9sZF9tbSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA4YjNkNDdhMzI1Y2NhLi42YWUzMWJmZmUwNDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0yNDE1LDEwICYjNDM7MjQxNSwxNCBAQCBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7CiAJaW50IGNwdTsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAomIzQzO3ZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpOwomIzQzOwogI2Vsc2UKIAogc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgeyB9OwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKSB7IH0KJiM0MzsKICNlbmRpZgogCiAjaWZuZGVmIE1PRFVMRQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKaW5kZXggOGRmZjM3MDU5ZmFmNy4uYTNkMDE4NTcxN2Y3YiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZmFpci5jCkBAIC0xOTg5LDYgJiM0MzsxOTg5LDE4IEBAIHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJcC0mZ3Q7cHJlZmVycmVkX2xsYyA9IC0xOwogfQogCiYjNDM7LyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqLwomIzQzO3ZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBhY2NvdW50X21tX3NjaGVkKCkgZGVyZWZlcmVuY2VzIHJxLSZndDtjdXJyLSZndDttbSB3aXRoIHRoZSBycSBsb2NrIGhlbGQsCiYjNDM7CSAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aAomIzQzOwkgKiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCBpcyB0aGVyZWZvcmUgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAomIzQzOwkgKiBzZWN0aW9uLCBzbyB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCBiZWZvcmUgdGhlIG1tIGdvZXMgYXdheS4KJiM0MzsJICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzO30KJiM0MzsKICNlbHNlIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Qgb24gdGhlIFNjaGVkdWxlciBDYWNoZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYSBtb2RpZmljYXRpb24gdG91Y2hpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIHJlbGF0ZWQgdG8gcHJvY2VzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHNjaGVkdWxlciBjYWNoZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHN0cmF0ZWdpY2FsbHkgcGxhY2luZyBhIGNhbGwgdG8gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd2hlbiBleGVjdXRpbmcgYSBuZXcgcHJvZ3JhbSBpbWFnZS4gTm93LCBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGl0c2VsZiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gT2YgY291cnNlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uLiBJZiBgQ09ORklHX1NDSEVEX0NBQ0hFYCBpcyAqbm90KiBlbmFibGVkLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGFuIGVtcHR5IGlubGluZSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgdGhlIHdob2xlIHRoaW5nIGEgbm8tb3AgdW5kZXIgc3VjaCBjaXJjdW1zdGFuY2VzLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBjb25maWd1cmVkLiBBc3N1bWluZyBgQ09ORklHX1NDSEVEX0NBQ0hFYCAqaXMqIGVuYWJsZWQsIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBpcyBpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AsIHdoZXJlIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgYWN0dWFsbHkgaW1wbGVtZW50cyBhIGNhbGwgdG8gYHN5bmNocm9uaXplX3JjdSgpYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uIGJlaGluZCB0aGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiB0aGUgY29udGV4dCBvZiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgUkNVIHN5bmNocm9uaXphdGlvbiBwb2ludC4gTGV0JiMzOTtzIGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWAgYW5kIGluc3BlY3QpIHRoZSByZWxldmFudCBmaWxlczogYGluY2x1ZGUvbGludXgvc2NoZWQuaGAsIGBrZXJuZWwvc2NoZWQvZmFpci5jYCwgYW5kIHRoZSBLY29uZmlnIGZvciBgQ09ORklHX1NDSEVEX0NBQ0hFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjYWNoZSBpbnZhbGlkYXRpb24sIG9yIGNsZWFudXAgbWVjaGFuaXNtLiBJIGV4cGVjdCB0byBzZWUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIHNjaGVkdWxlciYjMzk7cyBmYWlyIHNjaGVkdWxpbmcgbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIFJDVSYjMzk7cyBxdWllc2NlbnQgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0NIRURfQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE2MTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbW1fY2lkX3NpemUodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTYyNS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNjI2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNjI3LXZvaWQgbW1faW5pdF9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTY0ND1zdGF0aWMgaW5saW5lIHZvaWQgbW1fZGVzdHJveV9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY0OC19XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTY0OTojZWxzZSAvKiAhQ09ORklHX1NDSEVEX0NBQ0hFICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1MC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTY1Mj1zdGF0aWMgaW5saW5lIHZvaWQgbW1fZGVzdHJveV9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1My1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNjU0OiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNjU1LVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MzU9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTQzMy1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNDM0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNDM1LVx0c3RydWN0IGNhbGxiYWNrX2hlYWRcdFx0Y2FjaGVfd29yaztcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjM5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCB0YXNrX21tX2NpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTI0MDAtXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MjQwMTojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjQwMi1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg9NjY9c3RydWN0IHNjaGVkX2RvbWFpbl9zaGFyZWQge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC04NC1cdH07XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg6ODU6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTg2LVx0dW5zaWduZWQgbG9uZ1x0dXRpbF9hdmc7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oPTkxPXN0cnVjdCBzY2hlZF9kb21haW4ge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0xMTktXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg6MTIwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0xMjEtXHR1bnNpZ25lZCBpbnQgbGxjX21heDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg9Mjc4PXN0YXRpYyBpbmxpbmUgaW50IHRhc2tfbm9kZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTI4Mi1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaDoyODM6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTI4NC1leHRlcm4gdm9pZCBzY2hlZF91cGRhdGVfbGxjX2J5dGVzKHVuc2lnbmVkIGludCBjcHUpO1xuLS1cbmluaXQvS2NvbmZpZz0xMDIxPWNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xuLS1cbmluaXQvS2NvbmZpZy0xMDMzLVxuaW5pdC9LY29uZmlnOjEwMzQ6Y29uZmlnIFNDSEVEX0NBQ0hFXG5pbml0L0tjb25maWctMTAzNS1cdGJvb2wgXCYjMzQ7Q2FjaGUgYXdhcmUgbG9hZCBiYWxhbmNlXCYjMzQ7XG4tLVxuaW5pdC9pbml0X3Rhc2suYz0xMDU9c3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0ge1xuLS1cbmluaXQvaW5pdF90YXNrLmMtMjMwLSNlbmRpZlxuaW5pdC9pbml0X3Rhc2suYzoyMzE6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxuaW5pdC9pbml0X3Rhc2suYy0yMzItXHQucHJlZmVycmVkX2xsYyAgPSAtMSxcbi0tXG5rZXJuZWwvZXhpdC5jPTQ5MT12b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9leGl0LmMtNTQ5LVxua2VybmVsL2V4aXQuYzo1NTA6I2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX0NBQ0hFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQV9CQUxBTkNJTkcpXG5rZXJuZWwvZXhpdC5jLTU1MS0vKlxuLS1cbmtlcm5lbC9leGl0LmM9NTcxPXN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X21tX3NjaGVkX2NhY2hlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9leGl0LmMtNTczLX1cbmtlcm5lbC9leGl0LmM6NTc0OiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0FDSEUgQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG5rZXJuZWwvZXhpdC5jLTU3NS1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA5NS0jZW5kaWZcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTA5NjojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwOTctXHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZycS1cdTAwM2VjcHVfZXBvY2hfbG9jayk7XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9MjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX3NjYWxpbmdfZm9wcyA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMTItXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyMTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjE0LXN0YXRpYyBzc2l6ZV90XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NDYtXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NDc6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzQ4LVx0bGxjID0gZGVidWdmc19jcmVhdGVfZGlyKFwmIzM0O2xsY19iYWxhbmNpbmdcJiMzNDssIGRlYnVnZnNfc2NoZWQpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM5Nj1zdGF0aWMgczY0IHVwZGF0ZV9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MzctXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0Mzg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDM5LVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTk5Mz12b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwMy1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAwNDojZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNS1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTIwMjE9c3RhdGljIHZvaWQgYWNjb3VudF9sbGNfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XG5rZXJuZWwvc2NoZWQvZmFpci5jLTIwMjItXG5rZXJuZWwvc2NoZWQvZmFpci5jOjIwMjM6I2VuZGlmIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDI0LVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzY5Nj1zdGF0aWMgdm9pZCB0YXNrX251bWFfcGxhY2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM3NzktXHRcdFx0fVxua2VybmVsL3NjaGVkL2ZhaXIuYzozNzgwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzc4MS1cdFx0XHQvKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA1NDM9c3RhdGljIGlubGluZSBpbnQgdGFza19pc19pbmVsaWdpYmxlX29uX2RzdF9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZGVzdF9jcHUpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDU1My1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA1NTQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDU1NS0vKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTEzOTM9c3RydWN0IHNnX2xiX3N0YXRzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExNDEyLSNlbmRpZlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTQxMzojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExNDE0LVx0dW5zaWduZWQgaW50IG5yX3ByZWZfZHN0X2xsYztcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExODE4PXNjaGVkX3JlZHVjZWRfY2FwYWNpdHkoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTgyOS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4MzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTgzMS0vKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE5Mzc9c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3QgbGJfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2NC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE5NjU6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2Ni1cdFx0aWYgKHNjaGVkX2NhY2hlX2VuYWJsZWQoKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTI3MzA9c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9pbWJhbGFuY2Uoc3RydWN0IGxiX2VudiAqZW52LCBzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyNzY5LVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjc3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyNzcxLVx0aWYgKGJ1c2llc3QtXHUwMDNlZ3JvdXBfdHlwZSA9PSBncm91cF9sbGNfYmFsYW5jZSkge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTMwODA9c3RhdGljIHN0cnVjdCBycSAqc2NoZWRfYmFsYW5jZV9maW5kX3NyY19ycShzdHJ1Y3QgbGJfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzIzMS1cdFx0Y2FzZSBtaWdyYXRlX2xsY190YXNrOlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzIzMjojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEzMjMzLVx0XHRcdHNkX3RtcCA9IHJjdV9kZXJlZmVyZW5jZV9hbGwocnEtXHUwMDNlc2QpO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjE3LSNlbmRpZlxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxODojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjE5LVx0cmF3X3NwaW5sb2NrX3RcdFx0Y3B1X2Vwb2NoX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMzYtXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjM3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMzgtXHR1bnNpZ25lZCBpbnRcdFx0bnJfcHJlZl9sbGNfcnVubmluZztcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9jaWRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSB7IH1cbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTMyLVxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzMzojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTM0LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9wcmVzZW50KTtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz02MzI9c3RhdGljIHZvaWQgZGVzdHJveV9zY2hlZF9kb21haW4oc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjQxLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6NjQyOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY0My1cdC8qIG9ubHkgdGhlIGJvdHRvbSBzZCBoYXMgbGxjX2NvdW50cyBhcnJheSAqL1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTc0Nj1jcHVfYXR0YWNoX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgc3RydWN0IHJvb3RfZG9tYWluICpyZCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy03OTctXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo3OTg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNzk5LVx0XHRcdC8qIG1vdmUgYnVmZmVyIHRvIHBhcmVudCBhcyBjaGlsZCBpcyBiZWluZyBkZXN0cm95ZWQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NDctXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NDg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODQ5LS8qIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGNhY2hlIGF3YXJlIHNjaGVkdWxpbmcgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIENPTkZJR19TQ0hFRF9DQUNIRSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19TQ0hFRF9DQUNIRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIHRoZSBkZWZpbml0aXZlIGd1aWRlIGluIHRoZXNlIHNpdHVhdGlvbnM6IGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIOKAkyB0aGUgZGVmYXVsdCB2YWx1ZXMsIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjaGVkdWxlciBjYWNoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIGFuIGVkdWNhdGVkIGFzc2Vzc21lbnQgb24gaXRzIHJlbGV2YW5jZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdFx0ICBpdCBoYXMgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSB0aGUgdGFzayBpcyBydW5uaW5nIG9uLlxuMTAzMTpcdFxuMTAzMjpcdFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxuMTAzMzpcdFxuMTAzNDpcdGNvbmZpZyBTQ0hFRF9DQUNIRVxuMTAzNTpcdFx0Ym9vbCBcJiMzNDtDYWNoZSBhd2FyZSBsb2FkIGJhbGFuY2VcJiMzNDtcbjEwMzY6XHRcdGRlZmF1bHQgeVxuMTAzNzpcdFx0ZGVwZW5kcyBvbiBTTVBcbjEwMzg6XHRcdGhlbHBcbjEwMzk6XHRcdCAgV2hlbiBlbmFibGVkLCB0aGUgc2NoZWR1bGVyIHdpbGwgYXR0ZW1wdCB0byBhZ2dyZWdhdGUgdGFza3MgZnJvbVxuMTA0MDpcdFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxuMTA0MTpcdFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcbjEwNDI6XHRcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcbjEwNDM6XHRcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cbjEwNDQ6XHRcbjEwNDU6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDQ2Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDQ3Olx0XHRkZWZhdWx0IHlcbjEwNDg6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwNDk6XHRcdGhlbHBcbjEwNTA6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDUxOlx0XHQgIG1hY2hpbmUuXG4xMDUyOlx0XG4xMDUzOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA1NDpcdFx0Ym9vbFxuMTA1NTpcdFxuMTA1NjpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA1NzpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNTg6XHRcdHNlbGVjdCBLRVJORlNcbjEwNTk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWw6IENvZGUgTG9jYXRpb25zIHRvIEV4cGxvcmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBzcGVjaWZpYyBjb2RlIGxvY2F0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL2V4ZWMuY2AgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5MTYuIFRoYXQgYXJlYSBsaWtlbHkgaGFuZGxlcyB0aGUgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uLCBzbyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBTaW11bHRhbmVvdXNseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBga2VybmVsL3NjaGVkL2ZhaXIuY2AgYXJvdW5kIGxpbmUgMTk4OS4gVGhpcyBzaG91bGQgZ2l2ZSBzb21lIGluc2lnaHQgaW50byBzY2hlZHVsaW5nIGFuZCBwb3NzaWJseSBob3cgZXhlY3V0aW9uIHByaW9yaXR5IG9yIHJlc291cmNlIGFsbG9jYXRpb24gbWlnaHQgcGxheSBhIHJvbGUgaW4gd2hhdGV2ZXImIzM5O3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGVzZSB0d28gYXJlYXMgdG8gcHJvdmlkZSB0aGUgbW9zdCByZWxldmFudCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MDU6XHRcdFx0LyogRGVmZXIgdGVhcmRvd24gdG8gc2V0dXBfbmV3X2V4ZWMoKSwgb3V0c2lkZSB0aGUgZXhlYyBsb2Nrcy4gKi9cbiA5MDY6XHRcdFx0YnBybS1cdTAwM2VvbGRfbW0gPSBvbGRfbW07XG4gOTA3Olx0XHR9IGVsc2Uge1xuIDkwODpcdFx0XHRtbWRyb3BfbGF6eV90bGIoYWN0aXZlX21tKTtcbiA5MDk6XHRcdH1cbiA5MTA6XHRcdGZ1dGV4X2V4ZWNfZG9uZSh0c2spO1xuIDkxMTpcdFx0cmV0dXJuIDA7XG4gOTEyOlx0fVxuIDkxMzpcdFxuIDkxNDpcdC8qIFJlbGVhc2UgdGhlIGFkZHJlc3Mgc3BhY2UgcmVwbGFjZWQgYnkgZXhlYywgb3V0c2lkZSB0aGUgZXhlYyBsb2Nrcy4gKi9cbiA5MTU6XHRzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKVxuIDkxNjpcdHtcbiA5MTc6XHRcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VtYXhyc3MsIG9sZF9tbSk7XG4gOTE4Olx0XHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xuIDkxOTpcdFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XG4gOTIwOlx0XHRtbXB1dChvbGRfbW0pO1xuIDkyMTpcdH1cbiA5MjI6XHRcbiA5MjM6XHRzdGF0aWMgaW50IGRlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA5MjQ6XHR7XG4gOTI1Olx0XHRzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdHNrLVx1MDAzZXNpZ25hbDtcbiA5MjY6XHRcdHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqb2xkc2lnaGFuZCA9IHRzay1cdTAwM2VzaWdoYW5kO1xuIDkyNzpcdFx0c3BpbmxvY2tfdCAqbG9jayA9IFx1MDAyNm9sZHNpZ2hhbmQtXHUwMDNlc2lnbG9jaztcbiA5Mjg6XHRcbiA5Mjk6XHRcdGlmICh0aHJlYWRfZ3JvdXBfZW1wdHkodHNrKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENGUyBTY2hlZHVsZXIqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBDb21wbGV0ZWx5IEZhaXIgU2NoZWR1bGVyIChDRlMpLiBUaW1lIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBDRlMgbWFnaWMgaGFwcGVucy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIHNjcnV0aW55IGFyb3VuZCBsaW5lcyAxOTcwIHRvIDIwMjAuIFRoYXQgcmFuZ2UgdXN1YWxseSBjb3ZlcnMgY29yZSBsb2dpYyBhcm91bmTigKYgd2VsbCwgSSYjMzk7bGwgZmlndXJlIGl0IG91dCBvbmNlIEkmIzM5O20gaW4gdGhlcmUuIEhvcGVmdWxseSwgdGhhdCByYW5nZSB3aWxsIGJlIHJlbGV2YW50IHRvIHdoYXRldmVyIGlzc3VlIEkgaGF2ZSBpbiBtaW5kLiBOb3csIGxldCYjMzk7cyBvcGVuIHVwIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2ZhaXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk3MDpcdFx0XHQgKiAgICB0aGUgb3B0aW1hbCBwZXJmb3JtYW5jZSBnYWluIHNvIGZhci5cbjE5NzE6XHRcdFx0ICovXG4xOTcyOlx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlc2Nfc3RhdC5jcHUsIG1fYV9jcHUpO1xuMTk3MzpcdFx0fVxuMTk3NDpcdFxuMTk3NTpcdFx0dXBkYXRlX2F2Z19zY2FsZShcdTAwMjZtbS1cdTAwM2VzY19zdGF0Lm5yX3J1bm5pbmdfYXZnLCBucl9ydW5uaW5nKTtcbjE5NzY6XHRcdGZyZWVfY3B1bWFza192YXIoY3B1cyk7XG4xOTc3Olx0fVxuMTk3ODpcdFxuMTk3OTpcdHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4xOTgwOlx0e1xuMTk4MTpcdFx0c3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmsgPSBcdTAwMjZwLVx1MDAzZWNhY2hlX3dvcms7XG4xOTgyOlx0XG4xOTgzOlx0XHRpbml0X3Rhc2tfd29yayh3b3JrLCB0YXNrX2NhY2hlX3dvcmspO1xuMTk4NDpcdFx0d29yay1cdTAwM2VuZXh0ID0gd29yaztcbjE5ODU6XHRcdC8qXG4xOTg2Olx0XHQgKiBSZXNldCBuZXcgdGFzayYjMzk7cyBwcmVmZXJlbmNlIHRvIGF2b2lkXG4xOTg3Olx0XHQgKiBwb2xsdXRpbmcgYWNjb3VudF9sbGNfZW5xdWV1ZSgpLlxuMTk4ODpcdFx0ICovXG4xOTg5Olx0XHRwLVx1MDAzZXByZWZlcnJlZF9sbGMgPSAtMTtcbjE5OTA6XHR9XG4xOTkxOlx0XG4xOTkyOlx0LyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xuMTk5MzpcdHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXG4xOTk0Olx0e1xuMTk5NTpcdFx0LypcbjE5OTY6XHRcdCAqIGFjY291bnRfbW1fc2NoZWQoKSBkZXJlZmVyZW5jZXMgcnEtXHUwMDNlY3Vyci1cdTAwM2VtbSB3aXRoIHRoZSBycSBsb2NrIGhlbGQsXG4xOTk3Olx0XHQgKiBzbyBhIHJlbW90ZSBDUFUgY2FuIHN0aWxsIGJlIHVzaW5nIHRoZSBvbGQgbW0uIFRoYXQgc2VjdGlvbiBydW5zIHdpdGhcbjE5OTg6XHRcdCAqIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIGlzIHRoZXJlZm9yZSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXG4xOTk5Olx0XHQgKiBzZWN0aW9uLCBzbyB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCBiZWZvcmUgdGhlIG1tIGdvZXMgYXdheS5cbjIwMDA6XHRcdCAqL1xuMjAwMTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4yMDAyOlx0fVxuMjAwMzpcdFxuMjAwNDpcdCNlbHNlIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqL1xuMjAwNTpcdFxuMjAwNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X21tX3NjaGVkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbjIwMDc6XHRcdFx0XHRcdCAgICBzNjQgZGVsdGFfZXhlYykgeyB9XG4yMDA4Olx0XG4yMDA5Olx0dm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyB9XG4yMDEwOlx0XG4yMDExOlx0c3RhdGljIHZvaWQgdGFza190aWNrX2NhY2hlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyB9XG4yMDEyOlx0XG4yMDEzOlx0c3RhdGljIGlubGluZSBpbnQgZ2V0X3ByZWZfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbjIwMTQ6XHRcdFx0XHQgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4yMDE1Olx0e1xuMjAxNjpcdFx0cmV0dXJuIC0xO1xuMjAxNzpcdH1cbjIwMTg6XHRcbjIwMTk6XHRzdGF0aWMgdm9pZCBhY2NvdW50X2xsY19lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nICp3aGF0KiB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kICp3aHkqIGl0JiMzOTtzIGJlZW4gYWRkZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgaW4gdGhlIGBleGVjdmVgIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4ZWMuY2AsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHVwIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGUga2V5IGlzIGBleGVjX21tX3B1dF9vbGQoKWAgYmVpbmcgY2FsbGVkIHdpdGhpbiBgc2V0dXBfbmV3X2V4ZWMoKWAuIFdoZW4gYSB0YXNrIGV4ZWN1dGVzIGBleGVjdmVgLCBpdCBzd2l0Y2hlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dCAoYG1tYCkgdG8gYSBuZXcgb25lIGFuZCB0aGVuIHRoZSBvbGQgb25lIGdvZXMgdG8gYGV4ZWNfbW1fcHV0X29sZCgpYC4gVGhpcyBjYWxscyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBkb2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBiZWZvcmUgY2FsbGluZyBgbW1wdXQob2xkX21tKWAuCgpTbywgd2hhdCYjMzk7cyBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCAqYWN0dWFsbHkqIGRvaW5nPyBJdCYjMzk7cyBhZGRpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIGJlZm9yZSBmcmVlaW5nIHRoZSBvbGQgYG1tYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IGFueSByZW1vdGUgQ1BVIHJ1bm5pbmcgYGFjY291bnRfbW1fc2NoZWQoKWAg4oCTIHdoaWNoIHVzZXMgYHJxLSZndDtjdXJyLSZndDttbWAgdW5kZXIgYW4gUkNVIHJlYWQgbG9jayDigJMgZmluaXNoZXMgd2l0aCBpdHMgYWNjZXNzIHRvIHRoZSBgb2xkX21tYCBiZWZvcmUgdGhhdCBgb2xkX21tYCBnZXRzIGZyZWVkLiBJdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLgoKTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBhcHBseSB0aGUgZnV6emluZyBjcml0ZXJpYS4gVGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBmcy9leGVjLmNgICh0aGUgYGV4ZWN2ZWAgcGF0aCkgYW5kIHRoZSBzY2hlZHVsZXIgKGBrZXJuZWwvc2NoZWQvZmFpci5jYCkuIFRoZSBjb2RlIG1vZGlmaWVzIGFuZCBhZGRzIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2hpY2ggaXMgYSBzeW5jaHJvbml6YXRpb24gc3RlcCwgc28gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZXZlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gU28sIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgKldvcnRoRnV6emluZyA9IHRydWUqLiBJdCYjMzk7cyBub3QganVzdCBkb2N1bWVudGF0aW9uIG9yIGxvZ2dpbmcsIGl0JiMzOTtzIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGNoYW5nZS4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBpZiB0aGVyZSBhcmUgZm9jdXMgc3ltYm9scy4gV2hhdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHNob3VsZCBJIGhlYXZpbHkgZnV6ej8KCmBzY2hlZF9jYWNoZV9leGVjX2RvbmVgIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbiAoYHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpYCkgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gVGhpcyBtZWFucyBpdCYjMzk7cyBhbiBBUEkgZW50cnlwb2ludC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHBhdGguCgpTbywgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgc2VlbXMgbGlrZSBhIHByaW1hcnkgY2FuZGlkYXRlIGZvciBoZWF2eSBmdXp6aW5nLCBhcyBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgc3luY2hyb25pemF0aW9uIHBvaW50IGJlaW5nIGludHJvZHVjZWQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHN1Y2ggYXMgYGV4ZWNfbW1fcHV0X29sZGAsIG9yIG90aGVyIGZ1bmN0aW9ucyBjYWxsZWQgaW4gaXRzIHBhdGgsIGFyZSByZWxldmFudCB0byBmdXp6IGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4ZWNfbW1fcHV0X29sZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9ODQzPXN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTkxNC0vKiBSZWxlYXNlIHRoZSBhZGRyZXNzIHNwYWNlIHJlcGxhY2VkIGJ5IGV4ZWMsIG91dHNpZGUgdGhlIGV4ZWMgbG9ja3MuICovXG5mcy9leGVjLmM6OTE1OnN0YXRpYyB2b2lkIGV4ZWNfbW1fcHV0X29sZChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0pXG5mcy9leGVjLmMtOTE2LXtcbi0tXG5mcy9leGVjLmM9MTM2Mj12b2lkIHNldHVwX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxuLS1cbmZzL2V4ZWMuYy0xMzgwLVx0aWYgKGJwcm0tXHUwMDNlb2xkX21tKSB7XG5mcy9leGVjLmM6MTM4MTpcdFx0ZXhlY19tbV9wdXRfb2xkKGJwcm0tXHUwMDNlb2xkX21tKTtcbmZzL2V4ZWMuYy0xMzgyLVx0XHRicHJtLVx1MDAzZW9sZF9tbSA9IE5VTEw7XG4tLVxuZnMvZXhlYy5jPTE0NTg9c3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE0NzQtXHRpZiAoYnBybS1cdTAwM2VvbGRfbW0pXG5mcy9leGVjLmM6MTQ3NTpcdFx0ZXhlY19tbV9wdXRfb2xkKGJwcm0tXHUwMDNlb2xkX21tKTtcbmZzL2V4ZWMuYy0xNDc2LVx0ZG9fY2xvc2VfZXhlY2F0KGJwcm0tXHUwMDNlZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBTY2hlZHVsZXIgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHdvdWxkIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBhY2NvdW50IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgc2NoZWR1bGVyLCBlc3BlY2lhbGx5IHRoZSBmYWlyIHNjaGVkdWxlciwgYmUgaGFuZGxlZD8gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBzb21ld2hlcmUgd2l0aGluIHRoZSBga2VybmVsL3NjaGVkL2ZhaXIuY2AgZmlsZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciB0aGUgQ0ZTLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGFueSBtZW1vcnkgYWNjb3VudGluZyByZWxhdGVkIHRvIHNjaGVkdWxpbmcgd291bGQgYmUgcGx1bWJlZCB0aHJvdWdoIHRoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBkaXZpbmcgaW50byB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgYWNjb3VudF9tbV9zY2hlZGAgZnVuY3Rpb24sIG9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBsb29rIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcuIEkgc3VzcGVjdCBJIG1pZ2h0IGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY2NvdW50X21tX3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9mYWlyLmM9MTM1Nj12b2lkIHBvc3RfaW5pdF9lbnRpdHlfdXRpbF9hdmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5My1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5NDpzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM5Nj1zdGF0aWMgczY0IHVwZGF0ZV9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MTctXHRcdGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKHJ1bm5pbmcsIGRlbHRhX2V4ZWMpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDE4Olx0XHRhY2NvdW50X21tX3NjaGVkKHJxLCBydW5uaW5nLCBkZWx0YV9leGVjKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQxOS1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2OTI9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3MDgtXHRcdCAqIGNhbGxlZCwgaG93ZXZlciBpdCBpcyBub3QgbXVjaCBvZiBhbiBpc3N1ZVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzA5Olx0XHQgKiBiZWNhdXNlIHdlIGV4cGVjdCBhY2NvdW50X21tX3NjaGVkKCkgdG8gZ2V0XG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3MTAtXHRcdCAqIGNhbGxlZCBmYWlybHkgcmVndWxhcmx5IC0tIGF0IGEgaGlnaGVyIHJhdGVcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE3MjY9c3RhdGljIGlubGluZVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzI3OnZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzI4LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE5OTM9dm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTUtXHQvKlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxOTk2Olx0ICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS1cdTAwM2VjdXJyLVx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTk5Ny1cdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAwNjpzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG5rZXJuZWwvc2NoZWQvZmFpci5jLTIwMDctXHRcdFx0XHQgICAgczY0IGRlbHRhX2V4ZWMpIHsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBNeSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGlzIGNvZGUgY2hhbmdlIGFuZCBmaWd1cmUgb3V0IHRoZSBvcHRpbWFsIGFwcHJvYWNoIGZvciBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgc2V0dXBfbmV3X2V4ZWNgIGluIGBmcy9leGVjLmNgLiBJdCYjMzk7cyBhIG5vbi1zdGF0aWMgQVBJIGZ1bmN0aW9uLCBgdm9pZCBzZXR1cF9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKWAsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgdG8gc3RhcnQgd2l0aC4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSBpZiBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBpcyB0aGUgcmlnaHQgY2hvaWNlLiBNeSBtZW50YWwgY2hlY2tsaXN0IGZvciBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcyBwb3BzIHVwOiBzcGVjaWZpYyBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9ucywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBvbmVzIHRvIHByZXZlbnQgc2tld2VkIHRlc3RpbmcsIGFuZCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KCkFoYSEgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgdGhhdCBuZXcgbm9uLXN0YXRpYywgbm9uLWlubGluZSBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEdpdmVuIHRoZSBjcml0ZXJpYSwgdGhhdCBsb29rcyBwcm9taXNpbmchIFRoZW4gdGhlcmUgaXMgYHNldHVwX25ld19leGVjYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBiaW5hcnkgZXhlY3V0aW9uLgoKU28sIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgIHNlZW1zIHRvIGJlIHRoZSBrZXkgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBMZXQmIzM5O3MgbWFrZSB0aGF0IHRoZSBwcmltYXJ5IHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCwgYW5kIGBrZXJuZWwvc2NoZWQvZmFpci5jYCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFYC4gUXVpY2sgY2hlY2sgaW4gYGluaXQvS2NvbmZpZ2AgY29uZmlybXMgYENPTkZJR19TQ0hFRF9DQUNIRWAgaXMgYSBib29sZWFuLCBkZWZhdWx0cyB0byAmIzM0O3kmIzM0OywgYW5kIGRlcGVuZHMgb24gYFNNUGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfU0NIRURfQ0FDSEVgIGFuZCBgU01QYCBhcmUgZW5hYmxlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byBiZSByZWxldmFudC4KClRpbWUgdG8gZG91YmxlLWNoZWNrIGFsbCB0aG9zZSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBTQ0hFRF9DQUNIRWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ0hFRF9DQUNIRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAyMT1jb25maWcgTlVNQV9CQUxBTkNJTkdcbi0tXG5pbml0L0tjb25maWctMTAzMy1cbmluaXQvS2NvbmZpZzoxMDM0OmNvbmZpZyBTQ0hFRF9DQUNIRVxuaW5pdC9LY29uZmlnLTEwMzUtXHRib29sIFwmIzM0O0NhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1MAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleGVjdmVgIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHBvaW50cyB0byBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIGBleGVjdmVgLiBJIHNlZSB0aGF0IGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgaXMgdW5jb25kaXRpb25hbGx5IGNhbGxlZCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gQSBxdWljayBjcm9zcy1yZWZlcmVuY2Ugc2hvd3MgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZGVmaW5lZCBpZiBgQ09ORklHX1NDSEVEX0NBQ0hFYCBpcyBlbmFibGVkLCBhbmQgYENPTkZJR19TQ0hFRF9DQUNIRWAgaW4gdHVybiBkZXBlbmRzIG9uIGBDT05GSUdfU01QYC4gU28sIHRoZSBjb250ZXh0IGZvciB0aGlzIGNoZWNrIHRvIGJlIHJlbGV2YW50IGlzIGlmIGJvdGggYXJlIGVuYWJsZWQuCgpUaGVyZWZvcmUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBkZWZpbml0aXZlbHkgYFNDSEVEX0NBQ0hFYCBhbmQgYFNNUGAuIFRoZXNlIHdpbGwgYmUgZXNzZW50aWFsIGluIHJlY3JlYXRpbmcgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBhIGJ1ZyB0byBiZSB0cmlnZ2VyZWQuIEZ1cnRoZXIsIHRoZSBwcmltYXJ5IHN5bWJvbCBvZiBjb25jZXJuIGlzIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgLCBhcyB0aGF0IGlzIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHRoZSBzb3VyY2Ugb2Ygb3VyIHByb2JsZW0uIFRoaXMgaXMgYSBwb2ludCB0byBmb2N1cyBhbmFseXNpcy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjb3JlIGlzc3VlIGhlcmUgcmVsYXRlcyB0byB0aGUgc3luY2hyb25pemF0aW9uIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBleGVjdmVgIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBzeW5jaHJvbml6YXRpb24gd2hlbiB0aGUgYG9sZF9tbWAgaXMgZnJlZWQgd2hpbGUgaXQmIzM5O3MgcG90ZW50aWFsbHkgYmVpbmcgYWNjZXNzZWQgb24gb3RoZXIgQ1BVcyBiZWNhdXNlIG9mIGBTQ0hFRF9DQUNIRWAuIFRoaXMgc291bmRzIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCBtYWtpbmcgaXQgYSBoaWdoIHByaW9yaXR5IGZvciBpbnZlc3RpZ2F0aW9uLgoKQ29uc2lkZXJpbmcgZXZlcnl0aGluZywgSSB0aGluayB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gVGhlIHN5bmNocm9uaXphdGlvbiBoZXJlLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MgYW5kIGNhY2hlLWF3YXJlIHNjaGVkdWxpbmcsIGlzIGNvbXBsZXggZW5vdWdoIHRoYXQgZnV6emluZyBjb3VsZCBxdWlja2x5IHVuY292ZXIgaGlkZGVuIGNvcm5lciBjYXNlcy4KClNvLCBzZXR0aW5nIHRoZSByZXN1bHRzLCBJJiMzOTtsbCBuZWVkIGBFbmFibGVDb25maWdzYCBhcyBgWyYjMzQ7U0NIRURfQ0FDSEUmIzM0OywgJiMzNDtTTVAmIzM0O11gLCBgRm9jdXNTeW1ib2xzYCBhcyBgWyYjMzQ7c2NoZWRfY2FjaGVfZXhlY19kb25lJiMzNDtdYCwgYW5kIGEgYFJlYXNvbmluZ2AgdGhhdCBleHBsaWNpdGx5IGV4cGxhaW5zIHRoZSBSQ1Ugc3luY2hyb25pemF0aW9uIGFkZGVkIGJ5IHRoZSBwYXRjaCB3aGVuIGRyb3BwaW5nIHRoZSBvbGQgYG1tYCBkdXJpbmcgYGV4ZWNgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUvcmFjZXMgaW4gY2FjaGUtYXdhcmUgc2NoZWR1bGluZyAoYENPTkZJR19TQ0hFRF9DQUNIRWApLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DQUNIRSYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY2hlZF9jYWNoZV9leGVjX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0NIRURfQ0FDSEUmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2NoZWRfY2FjaGVfZXhlY19kb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2NoZWRfY2FjaGVfZXhlY19kb25lKCkgZHVyaW5nIGV4ZWNfbW1fcHV0X29sZCgpIGluIHRoZSBleGVjdmUgcGF0aCB0byB3YWl0IGZvciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGJlZm9yZSBkcm9wcGluZyB0aGUgb2xkIG1tX3N0cnVjdC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVyZSByZW1vdGUgQ1BVcyBleGVjdXRpbmcgYWNjb3VudF9tbV9zY2hlZCgpIHVuZGVyIENPTkZJR19TQ0hFRF9DQUNIRSBhY2Nlc3MgdGhlIG9sZCBtbS4gSXQgaXMgYSByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIGV4ZWMgY2hhbmdlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAsIHdoaWNoIGludm9rZXMgYHN5bmNocm9uaXplX3JjdSgpYCBpbiBgZXhlY19tbV9wdXRfb2xkKClgIGJlZm9yZSBgbW1wdXQob2xkX21tKWAgdG8gZW5zdXJlIHJlbW90ZSBDUFVzIGZpbmlzaCBkZXJlZmVyZW5jaW5nIHRoZSBvbGQgYG1tX3N0cnVjdGAgaW4gYGFjY291bnRfbW1fc2NoZWQoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBsaWZldGltZSBpc3N1ZSAocHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvZiBgb2xkX21tYCksIHdoaWNoIGZhbGxzIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgbG9naWMgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4YTI2NzI0ZDVlNWUzMTRlYjkxNTk2ZDhhZjZhNDQxOWUwYjNhYjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDA0OjI3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjYxOTRjMzg4MDc5ODAgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTkxNiw2ICYjNDM7OTE2LDcgQEAgc3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSkKIHsKIAlzZXRtYXhfbW1faGl3YXRlcl9yc3MoJmFtcDtjdXJyZW50LSZndDtzaWduYWwtJmd0O21heHJzcywgb2xkX21tKTsKIAltbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pOwomIzQzOwlzY2hlZF9jYWNoZV9leGVjX2RvbmUoKTsKIAltbXB1dChvbGRfbW0pOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggOGIzZDQ3YTMyNWNjYS4uNmFlMzFiZmZlMDQ5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMjQxNSwxMCAmIzQzOzI0MTUsMTQgQEAgc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgewogCWludCBjcHU7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKJiM0Mzt2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKTsKJiM0MzsKICNlbHNlCiAKIHN0cnVjdCBzY2hlZF9jYWNoZV9zdGF0IHsgfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCkgeyB9CiYjNDM7CiAjZW5kaWYKIAogI2lmbmRlZiBNT0RVTEUKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jCmluZGV4IDhkZmYzNzA1OWZhZjcuLmEzZDAxODU3MTdmN2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2ZhaXIuYwpAQCAtMTk4OSw2ICYjNDM7MTk4OSwxOCBAQCB2b2lkIGluaXRfc2NoZWRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXAtJmd0O3ByZWZlcnJlZF9sbGMgPSAtMTsKIH0KIAomIzQzOy8qIGV4ZWMoKSBoYXMgc3dpdGNoZWQgdG8gdGhlIG5ldyBtbSBhbmQgaXMgYWJvdXQgdG8gZHJvcCB0aGUgb2xkIG9uZS4gKi8KJiM0Mzt2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS0mZ3Q7Y3Vyci0mZ3Q7bW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLAomIzQzOwkgKiBzbyBhIHJlbW90ZSBDUFUgY2FuIHN0aWxsIGJlIHVzaW5nIHRoZSBvbGQgbW0uIFRoYXQgc2VjdGlvbiBydW5zIHdpdGgKJiM0MzsJICogcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgaXMgdGhlcmVmb3JlIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKJiM0MzsJICogc2VjdGlvbiwgc28gd2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgYmVmb3JlIHRoZSBtbSBnb2VzIGF3YXkuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0Mzt9CiYjNDM7CiAjZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBOZWVkKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBkaWZmLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGFkZGluZyBhIGNhbGwgdG8gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGlzLCBhZnRlciBgZXhlYygpYCBoYXMgc3VjY2Vzc2Z1bGx5IHN3aXRjaGVkIHRvIGEgbmV3IG1lbW9yeSBtb2RlbCAoYG1tYCksIHRvIGRlYWwgd2l0aCB0aGUgb2xkIG9uZS4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGEgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB0aGF0IGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoZSBjb21tZW50IHdpdGhpbiBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGlzIGtleS4gSXQmIzM5O3MgdGFsa2luZyBhYm91dCBob3cgYGFjY291bnRfbW1fc2NoZWQoKWAgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1gIG9uIGEgcmVtb3RlIENQVSBldmVuIGFmdGVyIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHVzaW5nIHRoZSBuZXcgbWVtb3J5IG1vZGVsLiBTcGVjaWZpY2FsbHksIGEgc2VjdGlvbiBydW5uaW5nIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCBpcyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZSBgc3luY2hyb25pemVfcmN1KClgIGlzIHRvIHdhaXQgZm9yIGFueSBsaW5nZXJpbmcgYWNjZXNzZXMgdG8gdGhlIG9sZCBgbW1gIGJlZm9yZSBpdCYjMzk7cyBkZWFsbG9jYXRlZCwgcHJlc3VtYWJseSB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLgoKSSBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB3aGF0IGBzY2hlZF9jYWNoZWAgaXMgYWN0dWFsbHkgYWJvdXQgYW5kIHdoYXQgYGFjY291bnRfbW1fc2NoZWRgIGlzIHVwIHRvIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGlzIHdvcnRoIHRoZSBleHRyYSBmZXcgbW9tZW50cyB0byBjaGVjayB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgbGlrZWx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYC4gQXJlIHRoZXNlIGRhdGEgc3RydWN0dXJlcyBvciBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBiZWluZyBzaGFyZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgY29uY3VycmVudCBhY2Nlc3M/IEJhc2VkIG9uIHRoZSBjb21tZW50LCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgaW50ZW5kZWQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiBvbiBgbW1gLiBJZiB0aGUgYG1tYCBpcyByZWxlYXNlZCBiZWZvcmUgdGhpcyBoYXBwZW5zLCBpdCBpcyB2ZXJ5IGxpa2VseSB0byBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgd2hpY2ggaXMgcmlnaHQgaW4gS01TQU4mIzM5O3Mgd2hlZWxob3VzZS4gSSYjMzk7ZCBleHBlY3QgdGhhdCBpZiB0aGlzIGNhbiBnbyB3cm9uZywgS01TQU4gd291bGQgaGF2ZSBhbHJlYWR5IGZvdW5kIGl0LCBob3dldmVyLCBpdCBpcyBiZXN0IHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBzaW1pbGFyIHBhdHRlcm5zLiBUaGlzIGlzIHNvbWV0aGluZyBLTVNBTiBjb3VsZCBkZWZpbml0ZWx5IGNhdGNoIGlmIHRoZXJlICppcyogYSByYWNlIG9uIHRoZSBgbW1gISBJdCB3b3VsZCBiZSBnb29kIHRvIHNlZSB3aGF0IHRoZSBmdXp6aW5nIHJlcG9ydHMgbG9vayBsaWtlIGluIHRoaXMgYXJlYSwgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2hlZF9jYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZGVidWcuYz0yMTQ9c3RhdGljIHNzaXplX3Rcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIxNTpzY2hlZF9jYWNoZV9lbmFibGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjE2LVx0XHRcdCBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjI0LVxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjI1Olx0c3lzY3RsX3NjaGVkX2NhY2hlX3VzZXIgPSB2YWw7XG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjYtXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyMjc6XHRzY2hlZF9jYWNoZV9hY3RpdmVfc2V0KCk7XG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjgtXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjMzLVxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjM0OnN0YXRpYyBpbnQgc2NoZWRfY2FjaGVfZW5hYmxlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjM1LXtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIzNjpcdHNlcV9wcmludGYobSwgXCYjMzQ7JWRcXG5cJiMzNDssIHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyKTtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIzNy1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIzOS1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0MDpzdGF0aWMgaW50IHNjaGVkX2NhY2hlX2VuYWJsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yNDEtXHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlscClcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0Mi17XG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyNDM6XHRyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgc2NoZWRfY2FjaGVfZW5hYmxlX3Nob3csIE5VTEwpO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQ0LX1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0NS1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2hlZF9jYWNoZV9lbmFibGVfZm9wcyA9IHtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0NzpcdC5vcGVuICAgICAgICAgICA9IHNjaGVkX2NhY2hlX2VuYWJsZV9vcGVuLFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjQ4Olx0LndyaXRlICAgICAgICAgID0gc2NoZWRfY2FjaGVfZW5hYmxlX3dyaXRlLFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQ5LVx0LnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NDktXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2VuYWJsZWRcJiMzNDssIDA2NDQsIGxsYywgTlVMTCxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjc1MDpcdFx0XHQgICAgXHUwMDI2c2NoZWRfY2FjaGVfZW5hYmxlX2ZvcHMpO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtNzUxLVx0ZGVidWdmc19jcmVhdGVfdTMyKFwmIzM0O2FnZ3JfdG9sZXJhbmNlXCYjMzQ7LCAwNjQ0LCBsbGMsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNDUyPXN0YXRpYyBpbnQgbGxjX2lkKGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDU5LVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDYwOnN0YXRpYyBpbmxpbmUgaW50IGdldF9zY2hlZF9jYWNoZV9zY2FsZShpbnQgbXVsKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDYxLXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0NzM9c3RhdGljIGJvb2wgZXhjZWVkX2xsY19jYXBhY2l0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1MTAtXHRcdCAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTExOlx0XHRzY2FsZSA9IGdldF9zY2hlZF9jYWNoZV9zY2FsZSgyNTYpO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTEyLVx0XHRpZiAoc2NhbGUgPT0gSU5UX01BWClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE1MjE9c3RhdGljIGJvb2wgaW52YWxpZF9sbGNfbnIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1MzItXHQgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTUzMzpcdHNjYWxlID0gZ2V0X3NjaGVkX2NhY2hlX3NjYWxlKDEpO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTM0LVx0aWYgKHNjYWxlID09IElOVF9NQVgpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNjE0PXZvaWQgbW1faW5pdF9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTYxNTpcdFx0ICAgc3RydWN0IHNjaGVkX2NhY2hlX3RpbWUgX19wZXJjcHUgKl9wY3B1X3NjaGVkKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjE2LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2MjAtXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxNjIxOlx0XHRzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZCA9IHBlcl9jcHVfcHRyKF9wY3B1X3NjaGVkLCBpKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTYyMi1cdFx0c3RydWN0IHJxICpycSA9IGNwdV9ycShpKTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2NTQ9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX21tX3NjaGVkKHN0cnVjdCBycSAqcnEsXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NTU6XHRcdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9jYWNoZV90aW1lICpwY3B1X3NjaGVkKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjU2LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2Nzc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZnJhY3Rpb25fbW1fc2NoZWQoc3RydWN0IHJxICpycSxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTY3ODpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZClcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTY3OS17XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzI3PXZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzI4LXtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTcyOTpcdHN0cnVjdCBzY2hlZF9jYWNoZV90aW1lICpwY3B1X3NjaGVkO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzMwLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwLVx1MDAzZW1tO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTczMy1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTczNDpcdGlmICghc2NoZWRfY2FjaGVfZW5hYmxlZCgpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzM1LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzc3PXN0YXRpYyB2b2lkIHRhc2tfdGlja19jYWNoZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzgyLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzgzOlx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3ODQtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE5Nzk9dm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTItLyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxOTkzOnZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTQte1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3NTM9YWxiX2JyZWFrX2xsYyhzdHJ1Y3QgbGJfZW52ICplbnYpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzU0LXtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3NTU6XHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NTYtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNzkyPXN0YXRpYyBib29sIG1pZ3JhdGVfZGVncmFkZXNfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGxiX2VudiAqZW52KVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc5My17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzk0Olx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzk1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTgzNj1zdGF0aWMgdm9pZCByZWNvcmRfc2dfbGxjX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODQyLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTg0MzpcdGlmICghc2NoZWRfY2FjaGVfZW5hYmxlZCgpIHx8IGVudi1cdTAwM2VpZGxlID09IENQVV9ORVdMWV9JRExFKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg0NC1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE4NzU9c3RhdGljIGlubGluZSBib29sIGxsY19iYWxhbmNlKHN0cnVjdCBsYl9lbnYgKmVudiwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg3Ny17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjExODc4Olx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODc5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTkzNz1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExOTY1LSNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE5NjY6XHRcdGlmIChzY2hlZF9jYWNoZV9lbmFibGVkKCkpIHtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE5NjctXHRcdFx0c3RydWN0IHNjaGVkX2RvbWFpbiAqc2RfdG1wO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTQxMzA9c3RhdGljIGlubGluZSB2b2lkIG1tX2NpZF9zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpIHsgfVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxMzMtI2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzNDpERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoc2NoZWRfY2FjaGVfcHJlc2VudCk7XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTM1OkRFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9hY3RpdmUpO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzNjpleHRlcm4gaW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtNDEzNy1leHRlcm4gdW5zaWduZWQgaW50IGxsY19hZ2dyX3RvbGVyYW5jZTtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTQxPWV4dGVybiB1bnNpZ25lZCBpbnQgbGxjX292ZXJhZ2dyX3BjdDtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDItXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTQzOnN0YXRpYyBpbmxpbmUgYm9vbCBzY2hlZF9jYWNoZV9lbmFibGVkKHZvaWQpXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQ0LXtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxNDU6XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZzY2hlZF9jYWNoZV9hY3RpdmUpO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtNDE0Ni19XG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQ3LVxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDE0ODpleHRlcm4gdm9pZCBzY2hlZF9jYWNoZV9hY3RpdmVfc2V0KHZvaWQpO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtNDE0OS1cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NDktLyogaGFyZHdhcmUgc3VwcG9ydCBmb3IgY2FjaGUgYXdhcmUgc2NoZWR1bGluZyAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6ODUwOkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX3ByZXNlbnQpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODUxLS8qXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODU0LSAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6ODU1OkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX2FjdGl2ZSk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NTYtLyogdXNlciB3YW50cyBjYWNoZSBhd2FyZSBzY2hlZHVsaW5nIFswIG9yIDFdICovXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NTc6aW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyID0gMTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg1OC1cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04OTE9c3RhdGljIGJvb2wgYWxsb2Nfc2RfbGxjKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLFxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk0Ni0gKi9cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk0NzpzdGF0aWMgdm9pZCBfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTQ4LXtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTItXHQvKiBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0ICovXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo5NTM6XHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpKSB7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo5NTQ6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNnNjaGVkX2NhY2hlX2FjdGl2ZSk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTUtXHRcdGlmIChzY2hlZF9kZWJ1ZygpKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk2NS1cdCAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTY2Olx0aWYgKHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyKSB7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo5Njc6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk2OC1cdFx0aWYgKHNjaGVkX2RlYnVnKCkpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTcwLVx0fSBlbHNlIHtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk3MTpcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk3Mi1cdFx0aWYgKHNjaGVkX2RlYnVnKCkpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTc3LS8qIHVzZWQgYnkgZGVidWdmcyAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTc4OnZvaWQgc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTc5LXtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05ODEtXHRzY2hlZF9kb21haW5zX211dGV4X2xvY2soKTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk4MjpcdF9zY2hlZF9jYWNoZV9hY3RpdmVfc2V0KCk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05ODMtXHRzY2hlZF9kb21haW5zX211dGV4X3VubG9jaygpO1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTk5OT12b2lkIHNjaGVkX3VwZGF0ZV9sbGNfYnl0ZXModW5zaWduZWQgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDI3LVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MTAyODpzdGF0aWMgdm9pZCBzY2hlZF9jYWNoZV9zZXQoYm9vbCBoYXNfbXVsdGlfbGxjcylcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMjkte1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMzQtXHRpZiAoaGFzX211bHRpX2xsY3MpXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDM1Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTAzNi1cdGVsc2Vcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMzc6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTAzOC1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMzk6XHRfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCgpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTA0MC19XG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9MTA0Mj1zdGF0aWMgYm9vbCBhbGxvY19zZF9sbGMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTA0Ni19XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDQ3OnN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9zZXQoYm9vbCBoYXNfbXVsdGlfbGxjcykgeyB9XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDQ4LSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTMyODI9aW50IF9faW5pdCBzY2hlZF9pbml0X2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzMwMC1cdGlmICghZXJyKVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MzMwMTpcdFx0c2NoZWRfY2FjaGVfc2V0KG11bHRpX2xsY3MpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzMwMi1cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz0zMzcwPXN0YXRpYyB2b2lkIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zX2xvY2tlZChpbnQgbmRvbXNfbmV3LCBjcHVtYXNrX3Zhcl90IGRvbXNfbmV3W10sXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzQzMy1cdFx0XHRcdCAqIGFuZCBhIG5ldyBzaW5nbGUtTExDIHBhcnRpdGlvbiBpcyBidWlsdCxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjM0MzQ6XHRcdFx0XHQgKiBzY2hlZF9jYWNoZV9zZXQoZmFsc2UpIGRpc2FibGVzIGNhY2hlLWF3YXJlXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDM1LVx0XHRcdFx0ICogc2NoZWR1bGluZyBnbG9iYWxseSBkZXNwaXRlIHRoZSByZXVzZWRcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDU3LVx0fVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MzQ1ODpcdHNjaGVkX2NhY2hlX3NldChoYXNfbXVsdGlfbGxjcyk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBpc3N1ZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2lkZSBvZiB0aGluZ3MuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGxvb2sgYXQgdHdvIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG9mdGVuIGNvbWUgdXAgaW4gdGhpcyBraW5kIG9mIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBleGVjX21tX3B1dF9vbGRgIGFuZCBgYWNjb3VudF9tbV9zY2hlZGAuIFRob3NlIGFyZSB1c3VhbGx5IHRoZSBjdWxwcml0cyB3aGVuIEkmIzM5O20gY2hhc2luZyBkb3duIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBpbiBleGVjdXRpb24gYW5kIHNjaGVkdWxpbmcuIEhvcGVmdWxseSwgdW5kZXJzdGFuZGluZyBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2lsbCBzaGVkIHNvbWUgbGlnaHQuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGV5IGhhbmRsZSBwcm9jZXNzIG1lbW9yeSBjb250ZXh0cywgdGhlIGFjY291bnRpbmcgdGhleSYjMzk7cmUgZG9pbmcgYW5kIGxvb2sgZm9yIGFueSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxMDpcdFx0ZnV0ZXhfZXhlY19kb25lKHRzayk7XG4gOTExOlx0XHRyZXR1cm4gMDtcbiA5MTI6XHR9XG4gOTEzOlx0XG4gOTE0Olx0LyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xuIDkxNTpcdHN0YXRpYyB2b2lkIGV4ZWNfbW1fcHV0X29sZChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0pXG4gOTE2Olx0e1xuIDkxNzpcdFx0c2V0bWF4X21tX2hpd2F0ZXJfcnNzKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW1heHJzcywgb2xkX21tKTtcbiA5MTg6XHRcdG1tX3VwZGF0ZV9uZXh0X293bmVyKG9sZF9tbSk7XG4gOTE5Olx0XHRzY2hlZF9jYWNoZV9leGVjX2RvbmUoKTtcbiA5MjA6XHRcdG1tcHV0KG9sZF9tbSk7XG4gOTIxOlx0fVxuIDkyMjpcdFxuIDkyMzpcdHN0YXRpYyBpbnQgZGVfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIDkyNDpcdHtcbiA5MjU6XHRcdHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stXHUwMDNlc2lnbmFsO1xuIDkyNjpcdFx0c3RydWN0IHNpZ2hhbmRfc3RydWN0ICpvbGRzaWdoYW5kID0gdHNrLVx1MDAzZXNpZ2hhbmQ7XG4gOTI3Olx0XHRzcGlubG9ja190ICpsb2NrID0gXHUwMDI2b2xkc2lnaGFuZC1cdTAwM2VzaWdsb2NrO1xuIDkyODpcdFxuIDkyOTpcdFx0aWYgKHRocmVhZF9ncm91cF9lbXB0eSh0c2spKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU1CgkJCQkJCQlvdXRwdXQ6IDE3NgoJCQkJCQkJdGhvdWdodHM6IDU2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBQYXRjaCYjMzk7cyBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCwgYnV0IGxldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcyByaWdvcm91c2x5LgoKRmlyc3QsIEkgc2VlIHRoYXQgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBpcyB1c2luZyBgc3luY2hyb25pemVfcmN1KClgIGJlZm9yZSBjYWxsaW5nIGBtbXB1dChvbGRfbW0pYC4gVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBgYWNjb3VudF9tbV9zY2hlZCgpYCBvbiBhbm90aGVyIENQVSBtaWdodCBiZSBkZXJlZmVyZW5jaW5nIGBvbGRfbW1gIHdoaWxlIHRoZSBjb2RlIGlzIHJ1bm5pbmcgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkIG9yIHRoZSBydW5xdWV1ZSBsb2NrIGhlbGQuIElmIGBtbXB1dChvbGRfbW0pYCB3ZXJlIHRvIGZyZWUgdGhlIG1lbW9yeSBpbW1lZGlhdGVseSwgYSBVQUYgY291bGQgb2NjdXIsIHRyaWdnZXJpbmcgS0FTQU4uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkgc2VlIG5vIG5ldyBidWZmZXJzLCBzdHJ1Y3RzLCBzdGFjayB2YXJpYWJsZXMsIG9yIGZpZWxkcyBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3Mgbm8gcmVsaWFuY2Ugb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgd2l0aGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIGBzeW5jaHJvbml6ZV9yY3UoKWAgdG8gcHJldmVudCB0aGUgZGVzY3JpYmVkIHJhY2UuIFRoaXMgaXMgYWxsIGFib3V0IHNhZmVndWFyZGluZyB0aGUgbGlmZXRpbWUgb2YgYG9sZF9tbWAgYW5kIGVuc3VyaW5nIHNhZmUgY29uY3VycmVudCBhY2Nlc3MuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIG15IGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTmA6IHRoaXMgZmxhZyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHRoaW5ncyBsaWtlOiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzLCBvciBjaGFuZ2VzIGluIGhvdyB3ZSBkbyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoaXMgcGF0Y2ggaXMgbm9uZSBvZiB0aG9zZSB0aGluZ3MuIEl0JiMzOTtzIHNvbGVseSBhYm91dCBzeW5jaHJvbml6aW5nIGFjY2VzcyB0byBhIGBtbV9zdHJ1Y3RgIHRvIGF2b2lkIGEgVUFGLiBUaGlzIHBhdGNoIGlzIHRhY2tsaW5nIGEgY2xhc3NpYyBsaWZldGltZSBpc3N1ZSwgd2hpY2ggS0FTQU4sIExPQ0tERVAgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nLgoKSW4gc2hvcnQsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gSXQmIzM5O3MgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBwcmV2ZW50aW5nIGFuIHVuc2FmZSBkZXJlZmVyZW5jZSwgZGlyZWN0bHkgaW4gbGluZSB3aXRoIEtBU0FOJiMzOTtzIHJlc3BvbnNpYmlsaXRpZXMuIFRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBiZWNhdXNlIHRoZSBwYXRjaCYjMzk7cyBzb2xlIHB1cnBvc2UgaXMgdG8gc3luY2hyb25pemUgbWVtb3J5IGFjY2VzcyB0byBhdm9pZCB0aGlzIFVBRi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkmIzM5O20gcmVhZHkgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBpbnZva2VzIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBiZWZvcmUgYG1tcHV0KG9sZF9tbSlgIHRvIGVuc3VyZSByZW1vdGUgQ1BVcyBmaW5pc2ggZGVyZWZlcmVuY2luZyB0aGUgb2xkIGBtbV9zdHJ1Y3RgIGluIGBhY2NvdW50X21tX3NjaGVkKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBpbnZva2VzIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBiZWZvcmUgYG1tcHV0KG9sZF9tbSlgIHRvIGVuc3VyZSByZW1vdGUgQ1BVcyBmaW5pc2ggZGVyZWZlcmVuY2luZyB0aGUgb2xkIGBtbV9zdHJ1Y3RgIGluIGBhY2NvdW50X21tX3NjaGVkKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo0OS4yMjQ4MjQ4NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NTg5NzQ3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0FDSEVcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjaGVkX2NhY2hlX2V4ZWNfZG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBpbnZva2VzIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBiZWZvcmUgYG1tcHV0KG9sZF9tbSlgIHRvIGVuc3VyZSByZW1vdGUgQ1BVcyBmaW5pc2ggZGVyZWZlcmVuY2luZyB0aGUgb2xkIGBtbV9zdHJ1Y3RgIGluIGBhY2NvdW50X21tX3NjaGVkKClgLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBsaWZldGltZSBpc3N1ZSAocHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvZiBgb2xkX21tYCksIHdoaWNoIGZhbGxzIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgbG9naWMgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjc6NDkuMjI0ODI5NTQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5MTQ5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOGEyNjcyNGQ1ZTVlMzE0ZWI5MTU5NmQ4YWY2YTQ0MTllMGIzYWIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mjc6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXFxuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNjE5NGMzODgwNzk4MCAxMDA2NDRcXG4tLS0gYS9mcy9leGVjLmNcXG4rKysgYi9mcy9leGVjLmNcXG5AQCAtOTE2LDYgKzkxNiw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNfbW1fcHV0X29sZChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0pXFxuIHtcXG4gXFx0c2V0bWF4X21tX2hpd2F0ZXJfcnNzKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW1heHJzcywgb2xkX21tKTtcXG4gXFx0bW1fdXBkYXRlX25leHRfb3duZXIob2xkX21tKTtcXG4rXFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XFxuIFxcdG1tcHV0KG9sZF9tbSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLjZhZTMxYmZmZTA0OWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuQEAgLTI0MTUsMTAgKzI0MTUsMTQgQEAgc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQge1xcbiBcXHRpbnQgY3B1O1xcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIFxcbit2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKTtcXG4rXFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7IH07XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpIHsgfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjaWZuZGVmIE1PRFVMRVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xcbmluZGV4IDhkZmYzNzA1OWZhZjcuLmEzZDAxODU3MTdmN2IgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xcbisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG5AQCAtMTk4OSw2ICsxOTg5LDE4IEBAIHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdHAtXFx1MDAzZXByZWZlcnJlZF9sbGMgPSAtMTtcXG4gfVxcbiBcXG4rLyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xcbit2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIGFjY291bnRfbW1fc2NoZWQoKSBkZXJlZmVyZW5jZXMgcnEtXFx1MDAzZWN1cnItXFx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcXG4rXFx0ICogc28gYSByZW1vdGUgQ1BVIGNhbiBzdGlsbCBiZSB1c2luZyB0aGUgb2xkIG1tLiBUaGF0IHNlY3Rpb24gcnVucyB3aXRoXFxuK1xcdCAqIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIGlzIHRoZXJlZm9yZSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXFxuK1xcdCAqIHNlY3Rpb24sIHNvIHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIGJlZm9yZSB0aGUgbW0gZ29lcyBhd2F5LlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK31cXG4rXFxuICNlbHNlIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqL1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo0OS42ODAzNDM5NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwMTIxMDUzMTEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DQUNIRVwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NoZWRfY2FjaGVfZXhlY19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzhhMjY3MjRkNWU1ZTMxNGViOTE1OTZkOGFmNmE0NDE5ZTBiM2FiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mjc6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjYxOTRjMzg4MDc5ODAgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTkxNiw2ICs5MTYsNyBAQCBzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKVxuIHtcbiBcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VtYXhyc3MsIG9sZF9tbSk7XG4gXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xuK1x0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XG4gXHRtbXB1dChvbGRfbW0pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLjZhZTMxYmZmZTA0OWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTI0MTUsMTAgKzI0MTUsMTQgQEAgc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQge1xuIFx0aW50IGNwdTtcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4rdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCk7XG4rXG4gI2Vsc2VcbiBcbiBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7IH07XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKSB7IH1cbitcbiAjZW5kaWZcbiBcbiAjaWZuZGVmIE1PRFVMRVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li5hM2QwMTg1NzE3ZjdiIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuKysrIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTE5ODksNiArMTk4OSwxOCBAQCB2b2lkIGluaXRfc2NoZWRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0cC1cdTAwM2VwcmVmZXJyZWRfbGxjID0gLTE7XG4gfVxuIFxuKy8qIGV4ZWMoKSBoYXMgc3dpdGNoZWQgdG8gdGhlIG5ldyBtbSBhbmQgaXMgYWJvdXQgdG8gZHJvcCB0aGUgb2xkIG9uZS4gKi9cbit2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBhY2NvdW50X21tX3NjaGVkKCkgZGVyZWZlcmVuY2VzIHJxLVx1MDAzZWN1cnItXHUwMDNlbW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLFxuK1x0ICogc28gYSByZW1vdGUgQ1BVIGNhbiBzdGlsbCBiZSB1c2luZyB0aGUgb2xkIG1tLiBUaGF0IHNlY3Rpb24gcnVucyB3aXRoXG4rXHQgKiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCBpcyB0aGVyZWZvcmUgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbFxuK1x0ICogc2VjdGlvbiwgc28gd2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgYmVmb3JlIHRoZSBtbSBnb2VzIGF3YXkuXG4rXHQgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK31cbitcbiAjZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo0OS42ODAzNDUyNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTk4MDA0Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gdGhlIFNjaGVkdWxlciBDYWNoZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGEgbW9kaWZpY2F0aW9uIHRvdWNoaW5nIHRoZSBleGVjdXRpb24gcGF0aCByZWxhdGVkIHRvIHByb2Nlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBzY2hlZHVsZXIgY2FjaGUuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzdHJhdGVnaWNhbGx5IHBsYWNpbmcgYSBjYWxsIHRvIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgd2l0aGluIGBleGVjX21tX3B1dF9vbGQoKWAgaW4gYGZzL2V4ZWMuY2AuIFRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd2hlbiBleGVjdXRpbmcgYSBuZXcgcHJvZ3JhbSBpbWFnZS4gTm93LCBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGl0c2VsZiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gT2YgY291cnNlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uLiBJZiBgQ09ORklHX1NDSEVEX0NBQ0hFYCBpcyAqbm90KiBlbmFibGVkLCBpdCdzIGRlZmluZWQgYXMgYW4gZW1wdHkgaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyB0aGUgd2hvbGUgdGhpbmcgYSBuby1vcCB1bmRlciBzdWNoIGNpcmN1bXN0YW5jZXMuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgdG8gc2VlIGhvdyB0aGF0J3MgY29uZmlndXJlZC4gQXNzdW1pbmcgYENPTkZJR19TQ0hFRF9DQUNIRWAgKmlzKiBlbmFibGVkLCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBvcGVyYXRpb24gaXMgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgLCB3aGVyZSBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGFjdHVhbGx5IGltcGxlbWVudHMgYSBjYWxsIHRvIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFNvLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uIGJlaGluZCB0aGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiB0aGUgY29udGV4dCBvZiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgUkNVIHN5bmNocm9uaXphdGlvbiBwb2ludC4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgKG9yIHVzZSBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdCkgdGhlIHJlbGV2YW50IGZpbGVzOiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCwgYGtlcm5lbC9zY2hlZC9mYWlyLmNgLCBhbmQgdGhlIEtjb25maWcgZm9yIGBDT05GSUdfU0NIRURfQ0FDSEVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhY2hlIGludmFsaWRhdGlvbiwgb3IgY2xlYW51cCBtZWNoYW5pc20uIEkgZXhwZWN0IHRvIHNlZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgc2NoZWR1bGVyJ3MgZmFpciBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBob3cgaXQgcmVsYXRlcyB0byBSQ1UncyBxdWllc2NlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo1NS44NzgzNTMzNjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjQwNjI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTQ0hFRF9DQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTYxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtbV9jaWRfc2l6ZSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE2MjUtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE2MjY6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNjI3LXZvaWQgbW1faW5pdF9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9kZXN0cm95X3NjaGVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE2NDgtfVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNjQ5OiNlbHNlIC8qICFDT05GSUdfU0NIRURfQ0FDSEUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNjUyPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9kZXN0cm95X3NjaGVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1My1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTY1NDojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE2NTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODM1PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTQzMy1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTQzNDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0MzUtXFx0c3RydWN0IGNhbGxiYWNrX2hlYWRcXHRcXHRjYWNoZV93b3JrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTIzOTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGFza19tbV9jaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTI0MDAtXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjI0MDE6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yNDAyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oPTY2PXN0cnVjdCBzY2hlZF9kb21haW5fc2hhcmVkIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC04NC1cXHR9O1xcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaDo4NTojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTg2LVxcdHVuc2lnbmVkIGxvbmdcXHR1dGlsX2F2ZztcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD05MT1zdHJ1Y3Qgc2NoZWRfZG9tYWluIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0xMTktXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjEyMDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTEyMS1cXHR1bnNpZ25lZCBpbnQgbGxjX21heDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD0yNzg9c3RhdGljIGlubGluZSBpbnQgdGFza19ub2RlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0yODItXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjI4MzojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTI4NC1leHRlcm4gdm9pZCBzY2hlZF91cGRhdGVfbGxjX2J5dGVzKHVuc2lnbmVkIGludCBjcHUpO1xcbi0tXFxuaW5pdC9LY29uZmlnPTEwMjE9Y29uZmlnIE5VTUFfQkFMQU5DSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTAzMy1cXG5pbml0L0tjb25maWc6MTAzNDpjb25maWcgU0NIRURfQ0FDSEVcXG5pbml0L0tjb25maWctMTAzNS1cXHRib29sIFxcXCJDYWNoZSBhd2FyZSBsb2FkIGJhbGFuY2VcXFwiXFxuLS1cXG5pbml0L2luaXRfdGFzay5jPTEwNT1zdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrIF9fYWxpZ25lZChMMV9DQUNIRV9CWVRFUykgPSB7XFxuLS1cXG5pbml0L2luaXRfdGFzay5jLTIzMC0jZW5kaWZcXG5pbml0L2luaXRfdGFzay5jOjIzMTojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5pdC9pbml0X3Rhc2suYy0yMzItXFx0LnByZWZlcnJlZF9sbGMgID0gLTEsXFxuLS1cXG5rZXJuZWwvZXhpdC5jPTQ5MT12b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2V4aXQuYy01NDktXFxua2VybmVsL2V4aXQuYzo1NTA6I2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX0NBQ0hFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BX0JBTEFOQ0lORylcXG5rZXJuZWwvZXhpdC5jLTU1MS0vKlxcbi0tXFxua2VybmVsL2V4aXQuYz01NzE9c3RhdGljIGlubGluZSB2b2lkIGV4aXRfbW1fc2NoZWRfY2FjaGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTU3My19XFxua2VybmVsL2V4aXQuYzo1NzQ6I2VuZGlmIC8qIENPTkZJR19TQ0hFRF9DQUNIRSBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cXG5rZXJuZWwvZXhpdC5jLTU3NS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk1MT12b2lkIF9faW5pdCBzY2hlZF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwOTUtI2VuZGlmXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwOTctXFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZycS1cXHUwMDNlY3B1X2Vwb2NoX2xvY2spO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9MjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX3NjYWxpbmdfZm9wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIxMi1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyMTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIxNC1zdGF0aWMgc3NpemVfdFxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc0Ni1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NDc6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc0OC1cXHRsbGMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcImxsY19iYWxhbmNpbmdcXFwiLCBkZWJ1Z2ZzX3NjaGVkKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM5Nj1zdGF0aWMgczY0IHVwZGF0ZV9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQzNy1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0Mzg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQzOS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTk5Mz12b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDAzLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAwNDojZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTIwMDUtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTIwMjE9c3RhdGljIHZvaWQgYWNjb3VudF9sbGNfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDIyLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAyMzojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDI0LVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0zNjk2PXN0YXRpYyB2b2lkIHRhc2tfbnVtYV9wbGFjZW1lbnQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zNzc5LVxcdFxcdFxcdH1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjM3ODA6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzc4MS1cXHRcXHRcXHQvKlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDU0Mz1zdGF0aWMgaW5saW5lIGludCB0YXNrX2lzX2luZWxpZ2libGVfb25fZHN0X2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBkZXN0X2NwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA1NTMtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDU1NDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDU1NS0vKlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTM5Mz1zdHJ1Y3Qgc2dfbGJfc3RhdHMge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTQxMi0jZW5kaWZcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjExNDEzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExNDE0LVxcdHVuc2lnbmVkIGludCBucl9wcmVmX2RzdF9sbGM7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExODE4PXNjaGVkX3JlZHVjZWRfY2FwYWNpdHkoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODI5LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4MzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4MzEtLypcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE5Mzc9c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3QgbGJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExOTY0LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE5NjU6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE5NjYtXFx0XFx0aWYgKHNjaGVkX2NhY2hlX2VuYWJsZWQoKSkge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMjczMD1zdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlX2ltYmFsYW5jZShzdHJ1Y3QgbGJfZW52ICplbnYsIHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjc2OS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyNzcwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyNzcxLVxcdGlmIChidXNpZXN0LVxcdTAwM2Vncm91cF90eXBlID09IGdyb3VwX2xsY19iYWxhbmNlKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEzMDgwPXN0YXRpYyBzdHJ1Y3QgcnEgKnNjaGVkX2JhbGFuY2VfZmluZF9zcmNfcnEoc3RydWN0IGxiX2VudiAqZW52LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzIzMS1cXHRcXHRjYXNlIG1pZ3JhdGVfbGxjX3Rhc2s6XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzIzMjojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzIzMy1cXHRcXHRcXHRzZF90bXAgPSByY3VfZGVyZWZlcmVuY2VfYWxsKHJxLVxcdTAwM2VzZCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xMTU5PXN0cnVjdCBycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjE3LSNlbmRpZlxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjEyMTg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMTktXFx0cmF3X3NwaW5sb2NrX3RcXHRcXHRjcHVfZXBvY2hfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjM2LVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjEyMzc6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMzgtXFx0dW5zaWduZWQgaW50XFx0XFx0bnJfcHJlZl9sbGNfcnVubmluZztcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTQxMzA9c3RhdGljIGlubGluZSB2b2lkIG1tX2NpZF9zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpIHsgfVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtNDEzMi1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTMzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTM0LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9wcmVzZW50KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTYzMj1zdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZClcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY0MS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo2NDI6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY0My1cXHQvKiBvbmx5IHRoZSBib3R0b20gc2QgaGFzIGxsY19jb3VudHMgYXJyYXkgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTc0Nj1jcHVfYXR0YWNoX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgc3RydWN0IHJvb3RfZG9tYWluICpyZCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTc5Ny1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo3OTg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTc5OS1cXHRcXHRcXHQvKiBtb3ZlIGJ1ZmZlciB0byBwYXJlbnQgYXMgY2hpbGQgaXMgYmVpbmcgZGVzdHJveWVkICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg0Ny1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NDg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg0OS0vKiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjYWNoZSBhd2FyZSBzY2hlZHVsaW5nICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI3OjU3LjQyMDc2NTA4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzY3MzkxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDT05GSUdfU0NIRURfQ0FDSEUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19TQ0hFRF9DQUNIRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIHRoZSBkZWZpbml0aXZlIGd1aWRlIGluIHRoZXNlIHNpdHVhdGlvbnM6IGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyDigJMgdGhlIGRlZmF1bHQgdmFsdWVzLCBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2hlZHVsZXIgY2FjaGUgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBhbiBlZHVjYXRlZCBhc3Nlc3NtZW50IG9uIGl0cyByZWxldmFuY2UuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODowMy44NTc1MDYzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzA6XFx0XFx0ICBpdCBoYXMgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSB0aGUgdGFzayBpcyBydW5uaW5nIG9uLlxcbjEwMzE6XFx0XFxuMTAzMjpcXHRcXHQgIFRoaXMgc3lzdGVtIHdpbGwgYmUgaW5hY3RpdmUgb24gVU1BIHN5c3RlbXMuXFxuMTAzMzpcXHRcXG4xMDM0OlxcdGNvbmZpZyBTQ0hFRF9DQUNIRVxcbjEwMzU6XFx0XFx0Ym9vbCBcXFwiQ2FjaGUgYXdhcmUgbG9hZCBiYWxhbmNlXFxcIlxcbjEwMzY6XFx0XFx0ZGVmYXVsdCB5XFxuMTAzNzpcXHRcXHRkZXBlbmRzIG9uIFNNUFxcbjEwMzg6XFx0XFx0aGVscFxcbjEwMzk6XFx0XFx0ICBXaGVuIGVuYWJsZWQsIHRoZSBzY2hlZHVsZXIgd2lsbCBhdHRlbXB0IHRvIGFnZ3JlZ2F0ZSB0YXNrcyBmcm9tXFxuMTA0MDpcXHRcXHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXFxuMTA0MTpcXHRcXHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxcbjEwNDI6XFx0XFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxcbjEwNDM6XFx0XFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTA0NjpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDQ3OlxcdFxcdGRlZmF1bHQgeVxcbjEwNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwNDk6XFx0XFx0aGVscFxcbjEwNTA6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDUxOlxcdFxcdCAgbWFjaGluZS5cXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNTQ6XFx0XFx0Ym9vbFxcbjEwNTU6XFx0XFxuMTA1NjpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDU3OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDU4OlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDU5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjg6MDMuODU3NjIzNjA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2NTYyOTE2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsOiBDb2RlIExvY2F0aW9ucyB0byBFeHBsb3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBzcGVjaWZpYyBjb2RlIGxvY2F0aW9ucy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvZXhlYy5jYCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDkxNi4gVGhhdCBhcmVhIGxpa2VseSBoYW5kbGVzIHRoZSBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBkdXJpbmcgcHJvY2VzcyBleGVjdXRpb24sIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFNpbXVsdGFuZW91c2x5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYGtlcm5lbC9zY2hlZC9mYWlyLmNgIGFyb3VuZCBsaW5lIDE5ODkuIFRoaXMgc2hvdWxkIGdpdmUgc29tZSBpbnNpZ2h0IGludG8gc2NoZWR1bGluZyBhbmQgcG9zc2libHkgaG93IGV4ZWN1dGlvbiBwcmlvcml0eSBvciByZXNvdXJjZSBhbGxvY2F0aW9uIG1pZ2h0IHBsYXkgYSByb2xlIGluIHdoYXRldmVyJ3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGVzZSB0d28gYXJlYXMgdG8gcHJvdmlkZSB0aGUgbW9zdCByZWxldmFudCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODoxOC41MTM5MTczNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwNTpcXHRcXHRcXHQvKiBEZWZlciB0ZWFyZG93biB0byBzZXR1cF9uZXdfZXhlYygpLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbiA5MDY6XFx0XFx0XFx0YnBybS1cXHUwMDNlb2xkX21tID0gb2xkX21tO1xcbiA5MDc6XFx0XFx0fSBlbHNlIHtcXG4gOTA4OlxcdFxcdFxcdG1tZHJvcF9sYXp5X3RsYihhY3RpdmVfbW0pO1xcbiA5MDk6XFx0XFx0fVxcbiA5MTA6XFx0XFx0ZnV0ZXhfZXhlY19kb25lKHRzayk7XFxuIDkxMTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEyOlxcdH1cXG4gOTEzOlxcdFxcbiA5MTQ6XFx0LyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbiA5MTU6XFx0c3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcXG4gOTE2OlxcdHtcXG4gOTE3OlxcdFxcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VtYXhyc3MsIG9sZF9tbSk7XFxuIDkxODpcXHRcXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xcbiA5MTk6XFx0XFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XFxuIDkyMDpcXHRcXHRtbXB1dChvbGRfbW0pO1xcbiA5MjE6XFx0fVxcbiA5MjI6XFx0XFxuIDkyMzpcXHRzdGF0aWMgaW50IGRlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcdHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stXFx1MDAzZXNpZ25hbDtcXG4gOTI2OlxcdFxcdHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqb2xkc2lnaGFuZCA9IHRzay1cXHUwMDNlc2lnaGFuZDtcXG4gOTI3OlxcdFxcdHNwaW5sb2NrX3QgKmxvY2sgPSBcXHUwMDI2b2xkc2lnaGFuZC1cXHUwMDNlc2lnbG9jaztcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9lbXB0eSh0c2spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODoxOC41MTQwMjQ5NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg0NzA3NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ0ZTIFNjaGVkdWxlcioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQ29tcGxldGVseSBGYWlyIFNjaGVkdWxlciAoQ0ZTKS4gVGltZSB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIENGUyBtYWdpYyBoYXBwZW5zLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBzY3J1dGlueSBhcm91bmQgbGluZXMgMTk3MCB0byAyMDIwLiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIGNvcmUgbG9naWMgYXJvdW5k4oCmIHdlbGwsIEknbGwgZmlndXJlIGl0IG91dCBvbmNlIEknbSBpbiB0aGVyZS4gSG9wZWZ1bGx5LCB0aGF0IHJhbmdlIHdpbGwgYmUgcmVsZXZhbnQgdG8gd2hhdGV2ZXIgaXNzdWUgSSBoYXZlIGluIG1pbmQuIE5vdywgbGV0J3Mgb3BlbiB1cCB0aGF0IGZpbGUgYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODoyMC41OTg3MzUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM5MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXHRcXHQgKiAgICB0aGUgb3B0aW1hbCBwZXJmb3JtYW5jZSBnYWluIHNvIGZhci5cXG4xOTcxOlxcdFxcdFxcdCAqL1xcbjE5NzI6XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlc2Nfc3RhdC5jcHUsIG1fYV9jcHUpO1xcbjE5NzM6XFx0XFx0fVxcbjE5NzQ6XFx0XFxuMTk3NTpcXHRcXHR1cGRhdGVfYXZnX3NjYWxlKFxcdTAwMjZtbS1cXHUwMDNlc2Nfc3RhdC5ucl9ydW5uaW5nX2F2ZywgbnJfcnVubmluZyk7XFxuMTk3NjpcXHRcXHRmcmVlX2NwdW1hc2tfdmFyKGNwdXMpO1xcbjE5Nzc6XFx0fVxcbjE5Nzg6XFx0XFxuMTk3OTpcXHR2b2lkIGluaXRfc2NoZWRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbjE5ODA6XFx0e1xcbjE5ODE6XFx0XFx0c3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmsgPSBcXHUwMDI2cC1cXHUwMDNlY2FjaGVfd29yaztcXG4xOTgyOlxcdFxcbjE5ODM6XFx0XFx0aW5pdF90YXNrX3dvcmsod29yaywgdGFza19jYWNoZV93b3JrKTtcXG4xOTg0OlxcdFxcdHdvcmstXFx1MDAzZW5leHQgPSB3b3JrO1xcbjE5ODU6XFx0XFx0LypcXG4xOTg2OlxcdFxcdCAqIFJlc2V0IG5ldyB0YXNrJ3MgcHJlZmVyZW5jZSB0byBhdm9pZFxcbjE5ODc6XFx0XFx0ICogcG9sbHV0aW5nIGFjY291bnRfbGxjX2VucXVldWUoKS5cXG4xOTg4OlxcdFxcdCAqL1xcbjE5ODk6XFx0XFx0cC1cXHUwMDNlcHJlZmVycmVkX2xsYyA9IC0xO1xcbjE5OTA6XFx0fVxcbjE5OTE6XFx0XFxuMTk5MjpcXHQvKiBleGVjKCkgaGFzIHN3aXRjaGVkIHRvIHRoZSBuZXcgbW0gYW5kIGlzIGFib3V0IHRvIGRyb3AgdGhlIG9sZCBvbmUuICovXFxuMTk5MzpcXHR2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxcbjE5OTQ6XFx0e1xcbjE5OTU6XFx0XFx0LypcXG4xOTk2OlxcdFxcdCAqIGFjY291bnRfbW1fc2NoZWQoKSBkZXJlZmVyZW5jZXMgcnEtXFx1MDAzZWN1cnItXFx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcXG4xOTk3OlxcdFxcdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxcbjE5OTg6XFx0XFx0ICogcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgaXMgdGhlcmVmb3JlIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWxcXG4xOTk5OlxcdFxcdCAqIHNlY3Rpb24sIHNvIHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIGJlZm9yZSB0aGUgbW0gZ29lcyBhd2F5LlxcbjIwMDA6XFx0XFx0ICovXFxuMjAwMTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4yMDAyOlxcdH1cXG4yMDAzOlxcdFxcbjIwMDQ6XFx0I2Vsc2UgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXFxuMjAwNTpcXHRcXG4yMDA2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X21tX3NjaGVkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4yMDA3OlxcdFxcdFxcdFxcdFxcdCAgICBzNjQgZGVsdGFfZXhlYykgeyB9XFxuMjAwODpcXHRcXG4yMDA5OlxcdHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgfVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRzdGF0aWMgdm9pZCB0YXNrX3RpY2tfY2FjaGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7IH1cXG4yMDEyOlxcdFxcbjIwMTM6XFx0c3RhdGljIGlubGluZSBpbnQgZ2V0X3ByZWZfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4yMDE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4yMDE1OlxcdHtcXG4yMDE2OlxcdFxcdHJldHVybiAtMTtcXG4yMDE3OlxcdH1cXG4yMDE4OlxcdFxcbjIwMTk6XFx0c3RhdGljIHZvaWQgYWNjb3VudF9sbGNfZW5xdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI4OjIwLjYwMDg4MTE0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYxMzUxMzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGlzIHVuZGVyc3RhbmRpbmcgKndoYXQqIHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgKndoeSogaXQncyBiZWVuIGFkZGVkLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgaW4gdGhlIGBleGVjdmVgIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4ZWMuY2AsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHVwIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGUga2V5IGlzIGBleGVjX21tX3B1dF9vbGQoKWAgYmVpbmcgY2FsbGVkIHdpdGhpbiBgc2V0dXBfbmV3X2V4ZWMoKWAuIFdoZW4gYSB0YXNrIGV4ZWN1dGVzIGBleGVjdmVgLCBpdCBzd2l0Y2hlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dCAoYG1tYCkgdG8gYSBuZXcgb25lIGFuZCB0aGVuIHRoZSBvbGQgb25lIGdvZXMgdG8gYGV4ZWNfbW1fcHV0X29sZCgpYC4gVGhpcyBjYWxscyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBkb2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBiZWZvcmUgY2FsbGluZyBgbW1wdXQob2xkX21tKWAuXG5cblNvLCB3aGF0J3MgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgKmFjdHVhbGx5KiBkb2luZz8gSXQncyBhZGRpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIGJlZm9yZSBmcmVlaW5nIHRoZSBvbGQgYG1tYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IGFueSByZW1vdGUgQ1BVIHJ1bm5pbmcgYGFjY291bnRfbW1fc2NoZWQoKWAg4oCTIHdoaWNoIHVzZXMgYHJxLVx1MDAzZWN1cnItXHUwMDNlbW1gIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sg4oCTIGZpbmlzaGVzIHdpdGggaXRzIGFjY2VzcyB0byB0aGUgYG9sZF9tbWAgYmVmb3JlIHRoYXQgYG9sZF9tbWAgZ2V0cyBmcmVlZC4gSXQncyBhIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gSSBuZWVkIHRvIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGZzL2V4ZWMuY2AgKHRoZSBgZXhlY3ZlYCBwYXRoKSBhbmQgdGhlIHNjaGVkdWxlciAoYGtlcm5lbC9zY2hlZC9mYWlyLmNgKS4gVGhlIGNvZGUgbW9kaWZpZXMgYW5kIGFkZHMgYHN5bmNocm9uaXplX3JjdSgpYCB3aGljaCBpcyBhIHN5bmNocm9uaXphdGlvbiBzdGVwLCBzbyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBldmVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBTbywgYmFzZWQgb24gdGhlIGNyaXRlcmlhLCAqV29ydGhGdXp6aW5nID0gdHJ1ZSouIEl0J3Mgbm90IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBsb2dnaW5nLCBpdCdzIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGNoYW5nZS5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBmb2N1cyBzeW1ib2xzLiBXaGF0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgc2hvdWxkIEkgaGVhdmlseSBmdXp6P1xuXG5gc2NoZWRfY2FjaGVfZXhlY19kb25lYCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0J3MgYSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbiAoYHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpYCkgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gVGhpcyBtZWFucyBpdCdzIGFuIEFQSSBlbnRyeXBvaW50LiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgcGF0aC5cblxuU28sIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBmb3IgaGVhdnkgZnV6emluZywgYXMgaXQncyB0aGUgc3BlY2lmaWMgc3luY2hyb25pemF0aW9uIHBvaW50IGJlaW5nIGludHJvZHVjZWQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHN1Y2ggYXMgYGV4ZWNfbW1fcHV0X29sZGAsIG9yIG90aGVyIGZ1bmN0aW9ucyBjYWxsZWQgaW4gaXRzIHBhdGgsIGFyZSByZWxldmFudCB0byBmdXp6IGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODo0NS4yMTQzOTc3MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI1Mzg0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY19tbV9wdXRfb2xkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz04NDM9c3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy05MTQtLyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbmZzL2V4ZWMuYzo5MTU6c3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcXG5mcy9leGVjLmMtOTE2LXtcXG4tLVxcbmZzL2V4ZWMuYz0xMzYyPXZvaWQgc2V0dXBfbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTM4MC1cXHRpZiAoYnBybS1cXHUwMDNlb2xkX21tKSB7XFxuZnMvZXhlYy5jOjEzODE6XFx0XFx0ZXhlY19tbV9wdXRfb2xkKGJwcm0tXFx1MDAzZW9sZF9tbSk7XFxuZnMvZXhlYy5jLTEzODItXFx0XFx0YnBybS1cXHUwMDNlb2xkX21tID0gTlVMTDtcXG4tLVxcbmZzL2V4ZWMuYz0xNDU4PXN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTE0NzQtXFx0aWYgKGJwcm0tXFx1MDAzZW9sZF9tbSlcXG5mcy9leGVjLmM6MTQ3NTpcXHRcXHRleGVjX21tX3B1dF9vbGQoYnBybS1cXHUwMDNlb2xkX21tKTtcXG5mcy9leGVjLmMtMTQ3Ni1cXHRkb19jbG9zZV9leGVjYXQoYnBybS1cXHUwMDNlZmlsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI4OjQ2Ljg3Njk0MTgzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODk5NDY0NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBTY2hlZHVsZXIgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgYWNjb3VudCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIHNjaGVkdWxlciwgZXNwZWNpYWxseSB0aGUgZmFpciBzY2hlZHVsZXIsIGJlIGhhbmRsZWQ/IE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBnb2luZyB0byBiZSBzb21ld2hlcmUgd2l0aGluIHRoZSBga2VybmVsL3NjaGVkL2ZhaXIuY2AgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBDRlMsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYW55IG1lbW9yeSBhY2NvdW50aW5nIHJlbGF0ZWQgdG8gc2NoZWR1bGluZyB3b3VsZCBiZSBwbHVtYmVkIHRocm91Z2ggdGhlcmUuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGRpdmluZyBpbnRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBhY2NvdW50X21tX3NjaGVkYCBmdW5jdGlvbiwgb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGxvb2sgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZy4gSSBzdXNwZWN0IEkgbWlnaHQgZmluZCBzb21lIGNydWNpYWwgbG9naWMgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODo1Mi43NzY0MDg3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDIwOTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY2NvdW50X21tX3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmM9MTM1Nj12b2lkIHBvc3RfaW5pdF9lbnRpdHlfdXRpbF9hdmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzkzLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5NDpzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEzOTUtXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMzk2PXN0YXRpYyBzNjQgdXBkYXRlX3NlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDE3LVxcdFxcdGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKHJ1bm5pbmcsIGRlbHRhX2V4ZWMpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTQxODpcXHRcXHRhY2NvdW50X21tX3NjaGVkKHJxLCBydW5uaW5nLCBkZWx0YV9leGVjKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MTktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2OTI9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTcwOC1cXHRcXHQgKiBjYWxsZWQsIGhvd2V2ZXIgaXQgaXMgbm90IG11Y2ggb2YgYW4gaXNzdWVcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE3MDk6XFx0XFx0ICogYmVjYXVzZSB3ZSBleHBlY3QgYWNjb3VudF9tbV9zY2hlZCgpIHRvIGdldFxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTcxMC1cXHRcXHQgKiBjYWxsZWQgZmFpcmx5IHJlZ3VsYXJseSAtLSBhdCBhIGhpZ2hlciByYXRlXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE3MjY9c3RhdGljIGlubGluZVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTcyNzp2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzNjQgZGVsdGFfZXhlYylcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3Mjgte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xOTkzPXZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTUtXFx0LypcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE5OTY6XFx0ICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS1cXHUwMDNlY3Vyci1cXHUwMDNlbW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLFxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTk5Ny1cXHQgKiBzbyBhIHJlbW90ZSBDUFUgY2FuIHN0aWxsIGJlIHVzaW5nIHRoZSBvbGQgbW0uIFRoYXQgc2VjdGlvbiBydW5zIHdpdGhcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjIwMDY6c3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNy1cXHRcXHRcXHRcXHQgICAgczY0IGRlbHRhX2V4ZWMpIHsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODo1NC4yNzY2MjM1MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4MjY2MjQyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgTXkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgY29kZSBjaGFuZ2UgYW5kIGZpZ3VyZSBvdXQgdGhlIG9wdGltYWwgYXBwcm9hY2ggZm9yIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBzZXR1cF9uZXdfZXhlY2AgaW4gYGZzL2V4ZWMuY2AuIEl0J3MgYSBub24tc3RhdGljIEFQSSBmdW5jdGlvbiwgYHZvaWQgc2V0dXBfbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlgLCB3aGljaCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIHRvIHN0YXJ0IHdpdGguIFRoZW4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgdGhlIHJpZ2h0IGNob2ljZS4gTXkgbWVudGFsIGNoZWNrbGlzdCBmb3IgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgcG9wcyB1cDogc3BlY2lmaWMgbm9uLWhvdC1wYXRoIGtlcm5lbCBmdW5jdGlvbnMsIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggb25lcyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0aW5nLCBhbmQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuXG5cbkFoYSEgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgdGhhdCBuZXcgbm9uLXN0YXRpYywgbm9uLWlubGluZSBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEdpdmVuIHRoZSBjcml0ZXJpYSwgdGhhdCBsb29rcyBwcm9taXNpbmchIFRoZW4gdGhlcmUgaXMgYHNldHVwX25ld19leGVjYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBiaW5hcnkgZXhlY3V0aW9uLlxuXG5TbywgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIExldCdzIG1ha2UgdGhhdCB0aGUgcHJpbWFyeSB0YXJnZXQuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEluIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgLCBhbmQgYGtlcm5lbC9zY2hlZC9mYWlyLmNgLCBpdCdzIGNsZWFyIHRoYXQgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRWAuIFF1aWNrIGNoZWNrIGluIGBpbml0L0tjb25maWdgIGNvbmZpcm1zIGBDT05GSUdfU0NIRURfQ0FDSEVgIGlzIGEgYm9vbGVhbiwgZGVmYXVsdHMgdG8gXCJ5XCIsIGFuZCBkZXBlbmRzIG9uIGBTTVBgLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX1NDSEVEX0NBQ0hFYCBhbmQgYFNNUGAgYXJlIGVuYWJsZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgcmVsZXZhbnQuXG5cblRpbWUgdG8gZG91YmxlLWNoZWNrIGFsbCB0aG9zZSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBTQ0hFRF9DQUNIRWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MjMuMTAzMjUxNjQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NjI0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ0hFRF9DQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAyMT1jb25maWcgTlVNQV9CQUxBTkNJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDMzLVxcbmluaXQvS2NvbmZpZzoxMDM0OmNvbmZpZyBTQ0hFRF9DQUNIRVxcbmluaXQvS2NvbmZpZy0xMDM1LVxcdGJvb2wgXFxcIkNhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MjQuNjE3ODgwOTg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxOTg1NzkzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleGVjdmVgIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBwb2ludHMgdG8gYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGR1cmluZyBgZXhlY3ZlYC4gSSBzZWUgdGhhdCBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGlzIHVuY29uZGl0aW9uYWxseSBjYWxsZWQgd2l0aGluIGBleGVjX21tX3B1dF9vbGQoKWAgaW4gYGZzL2V4ZWMuY2AuIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHNob3dzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGRlZmluZWQgaWYgYENPTkZJR19TQ0hFRF9DQUNIRWAgaXMgZW5hYmxlZCwgYW5kIGBDT05GSUdfU0NIRURfQ0FDSEVgIGluIHR1cm4gZGVwZW5kcyBvbiBgQ09ORklHX1NNUGAuIFNvLCB0aGUgY29udGV4dCBmb3IgdGhpcyBjaGVjayB0byBiZSByZWxldmFudCBpcyBpZiBib3RoIGFyZSBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBkZWZpbml0aXZlbHkgYFNDSEVEX0NBQ0hFYCBhbmQgYFNNUGAuIFRoZXNlIHdpbGwgYmUgZXNzZW50aWFsIGluIHJlY3JlYXRpbmcgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBhIGJ1ZyB0byBiZSB0cmlnZ2VyZWQuIEZ1cnRoZXIsIHRoZSBwcmltYXJ5IHN5bWJvbCBvZiBjb25jZXJuIGlzIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgLCBhcyB0aGF0IGlzIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHRoZSBzb3VyY2Ugb2Ygb3VyIHByb2JsZW0uIFRoaXMgaXMgYSBwb2ludCB0byBmb2N1cyBhbmFseXNpcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY29yZSBpc3N1ZSBoZXJlIHJlbGF0ZXMgdG8gdGhlIHN5bmNocm9uaXphdGlvbiBoYXBwZW5pbmcgd2l0aGluIHRoZSBgZXhlY3ZlYCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgc3luY2hyb25pemF0aW9uIHdoZW4gdGhlIGBvbGRfbW1gIGlzIGZyZWVkIHdoaWxlIGl0J3MgcG90ZW50aWFsbHkgYmVpbmcgYWNjZXNzZWQgb24gb3RoZXIgQ1BVcyBiZWNhdXNlIG9mIGBTQ0hFRF9DQUNIRWAuIFRoaXMgc291bmRzIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCBtYWtpbmcgaXQgYSBoaWdoIHByaW9yaXR5IGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5Db25zaWRlcmluZyBldmVyeXRoaW5nLCBJIHRoaW5rIHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgc3luY2hyb25pemF0aW9uIGhlcmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgY2FjaGUtYXdhcmUgc2NoZWR1bGluZywgaXMgY29tcGxleCBlbm91Z2ggdGhhdCBmdXp6aW5nIGNvdWxkIHF1aWNrbHkgdW5jb3ZlciBoaWRkZW4gY29ybmVyIGNhc2VzLlxuXG5Tbywgc2V0dGluZyB0aGUgcmVzdWx0cywgSSdsbCBuZWVkIGBFbmFibGVDb25maWdzYCBhcyBgW1wiU0NIRURfQ0FDSEVcIiwgXCJTTVBcIl1gLCBgRm9jdXNTeW1ib2xzYCBhcyBgW1wic2NoZWRfY2FjaGVfZXhlY19kb25lXCJdYCwgYW5kIGEgYFJlYXNvbmluZ2AgdGhhdCBleHBsaWNpdGx5IGV4cGxhaW5zIHRoZSBSQ1Ugc3luY2hyb25pemF0aW9uIGFkZGVkIGJ5IHRoZSBwYXRjaCB3aGVuIGRyb3BwaW5nIHRoZSBvbGQgYG1tYCBkdXJpbmcgYGV4ZWNgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUvcmFjZXMgaW4gY2FjaGUtYXdhcmUgc2NoZWR1bGluZyAoYENPTkZJR19TQ0hFRF9DQUNIRWApLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NTAsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI5OjMwLjgxNjQ2Mjg3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDA4MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DQUNIRVwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NoZWRfY2FjaGVfZXhlY19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DQUNIRVwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NoZWRfY2FjaGVfZXhlY19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MzAuODkwODc5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTI5MDQwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozMC44OTE1Nzc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY5OTIyMDA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4YTI2NzI0ZDVlNWUzMTRlYjkxNTk2ZDhhZjZhNDQxOWUwYjNhYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjI3OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA3NDVmNmViNTI3OWU2Li42MTk0YzM4ODA3OTgwIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4rKysgYi9mcy9leGVjLmNcbkBAIC05MTYsNiArOTE2LDcgQEAgc3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcbiB7XG4gXHRzZXRtYXhfbW1faGl3YXRlcl9yc3MoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbWF4cnNzLCBvbGRfbW0pO1xuIFx0bW1fdXBkYXRlX25leHRfb3duZXIob2xkX21tKTtcbitcdHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpO1xuIFx0bW1wdXQob2xkX21tKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi42YWUzMWJmZmUwNDllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0yNDE1LDEwICsyNDE1LDE0IEBAIHN0cnVjdCBzY2hlZF9jYWNoZV9zdGF0IHtcbiBcdGludCBjcHU7XG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuK3ZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpO1xuK1xuICNlbHNlXG4gXG4gc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgeyB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCkgeyB9XG4rXG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBNT0RVTEVcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuaW5kZXggOGRmZjM3MDU5ZmFmNy4uYTNkMDE4NTcxN2Y3YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbkBAIC0xOTg5LDYgKzE5ODksMTggQEAgdm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHAtXHUwMDNlcHJlZmVycmVkX2xsYyA9IC0xO1xuIH1cbiBcbisvKiBleGVjKCkgaGFzIHN3aXRjaGVkIHRvIHRoZSBuZXcgbW0gYW5kIGlzIGFib3V0IHRvIGRyb3AgdGhlIG9sZCBvbmUuICovXG4rdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZClcbit7XG4rXHQvKlxuK1x0ICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS1cdTAwM2VjdXJyLVx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcbitcdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxuK1x0ICogcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgaXMgdGhlcmVmb3JlIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWxcbitcdCAqIHNlY3Rpb24sIHNvIHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIGJlZm9yZSB0aGUgbW0gZ29lcyBhd2F5LlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbit9XG4rXG4gI2Vsc2UgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MzAuODkxNTc5MTI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MjI3OTg3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBOZWVkKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIEtNU0FOIGZ1enppbmcuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgZGlmZiwgaXQncyBjbGVhciB0aGlzIGlzIGFkZGluZyBhIGNhbGwgdG8gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gVGhhdCBmdW5jdGlvbidzIHB1cnBvc2UgaXMsIGFmdGVyIGBleGVjKClgIGhhcyBzdWNjZXNzZnVsbHkgc3dpdGNoZWQgdG8gYSBuZXcgbWVtb3J5IG1vZGVsIChgbW1gKSwgdG8gZGVhbCB3aXRoIHRoZSBvbGQgb25lLiBXZSdyZSBhbHNvIHNlZWluZyBhIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgdGhhdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGUgY29tbWVudCB3aXRoaW4gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBpcyBrZXkuIEl0J3MgdGFsa2luZyBhYm91dCBob3cgYGFjY291bnRfbW1fc2NoZWQoKWAgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1gIG9uIGEgcmVtb3RlIENQVSBldmVuIGFmdGVyIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHVzaW5nIHRoZSBuZXcgbWVtb3J5IG1vZGVsLiBTcGVjaWZpY2FsbHksIGEgc2VjdGlvbiBydW5uaW5nIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCBpcyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZSBgc3luY2hyb25pemVfcmN1KClgIGlzIHRvIHdhaXQgZm9yIGFueSBsaW5nZXJpbmcgYWNjZXNzZXMgdG8gdGhlIG9sZCBgbW1gIGJlZm9yZSBpdCdzIGRlYWxsb2NhdGVkLCBwcmVzdW1hYmx5IHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24uXG5cbkkgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgd2hhdCBgc2NoZWRfY2FjaGVgIGlzIGFjdHVhbGx5IGFib3V0IGFuZCB3aGF0IGBhY2NvdW50X21tX3NjaGVkYCBpcyB1cCB0byBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBpcyB3b3J0aCB0aGUgZXh0cmEgZmV3IG1vbWVudHMgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGxpa2VseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAuIEFyZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgb3IgbWVtb3J5IHJlZ2lvbnMgdGhhdCBhcmUgYmVpbmcgc2hhcmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIGNvbmN1cnJlbnQgYWNjZXNzPyBCYXNlZCBvbiB0aGUgY29tbWVudCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGludGVuZGVkIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gb24gYG1tYC4gSWYgdGhlIGBtbWAgaXMgcmVsZWFzZWQgYmVmb3JlIHRoaXMgaGFwcGVucywgaXQgaXMgdmVyeSBsaWtlbHkgdG8gY2F1c2UgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzIHJpZ2h0IGluIEtNU0FOJ3Mgd2hlZWxob3VzZS4gSSdkIGV4cGVjdCB0aGF0IGlmIHRoaXMgY2FuIGdvIHdyb25nLCBLTVNBTiB3b3VsZCBoYXZlIGFscmVhZHkgZm91bmQgaXQsIGhvd2V2ZXIsIGl0IGlzIGJlc3QgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHNpbWlsYXIgcGF0dGVybnMuIFRoaXMgaXMgc29tZXRoaW5nIEtNU0FOIGNvdWxkIGRlZmluaXRlbHkgY2F0Y2ggaWYgdGhlcmUgKmlzKiBhIHJhY2Ugb24gdGhlIGBtbWAhIEl0IHdvdWxkIGJlIGdvb2QgdG8gc2VlIHdoYXQgdGhlIGZ1enppbmcgcmVwb3J0cyBsb29rIGxpa2UgaW4gdGhpcyBhcmVhLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozNi4zMTQzODE4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzU4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoZWRfY2FjaGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTIxND1zdGF0aWMgc3NpemVfdFxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIxNTpzY2hlZF9jYWNoZV9lbmFibGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIxNi1cXHRcXHRcXHQgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjI0LVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIyNTpcXHRzeXNjdGxfc2NoZWRfY2FjaGVfdXNlciA9IHZhbDtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjYtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjI3OlxcdHNjaGVkX2NhY2hlX2FjdGl2ZV9zZXQoKTtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMzMtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjM0OnN0YXRpYyBpbnQgc2NoZWRfY2FjaGVfZW5hYmxlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIzNS17XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjM2OlxcdHNlcV9wcmludGYobSwgXFxcIiVkXFxcXG5cXFwiLCBzeXNjdGxfc2NoZWRfY2FjaGVfdXNlcik7XFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjM3LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjM5LVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0MDpzdGF0aWMgaW50IHNjaGVkX2NhY2hlX2VuYWJsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxwKVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0Mi17XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjQzOlxcdHJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBzY2hlZF9jYWNoZV9lbmFibGVfc2hvdywgTlVMTCk7XFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQ0LX1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yNDUtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX2NhY2hlX2VuYWJsZV9mb3BzID0ge1xcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0NzpcXHQub3BlbiAgICAgICAgICAgPSBzY2hlZF9jYWNoZV9lbmFibGVfb3BlbixcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyNDg6XFx0LndyaXRlICAgICAgICAgID0gc2NoZWRfY2FjaGVfZW5hYmxlX3dyaXRlLFxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0OS1cXHQucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTcxMj1zdGF0aWMgX19pbml0IGludCBzY2hlZF9pbml0X2RlYnVnKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NDktXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZW5hYmxlZFxcXCIsIDA2NDQsIGxsYywgTlVMTCxcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NTA6XFx0XFx0XFx0ICAgIFxcdTAwMjZzY2hlZF9jYWNoZV9lbmFibGVfZm9wcyk7XFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzUxLVxcdGRlYnVnZnNfY3JlYXRlX3UzMihcXFwiYWdncl90b2xlcmFuY2VcXFwiLCAwNjQ0LCBsbGMsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0NTI9c3RhdGljIGludCBsbGNfaWQoaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQ1OS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0NjA6c3RhdGljIGlubGluZSBpbnQgZ2V0X3NjaGVkX2NhY2hlX3NjYWxlKGludCBtdWwpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDYxLXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTQ3Mz1zdGF0aWMgYm9vbCBleGNlZWRfbGxjX2NhcGFjaXR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTEwLVxcdFxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTUxMTpcXHRcXHRzY2FsZSA9IGdldF9zY2hlZF9jYWNoZV9zY2FsZSgyNTYpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTUxMi1cXHRcXHRpZiAoc2NhbGUgPT0gSU5UX01BWClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTUyMT1zdGF0aWMgYm9vbCBpbnZhbGlkX2xsY19ucihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTMyLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTUzMzpcXHRzY2FsZSA9IGdldF9zY2hlZF9jYWNoZV9zY2FsZSgxKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1MzQtXFx0aWYgKHNjYWxlID09IElOVF9NQVgpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2MTQ9dm9pZCBtbV9pbml0X3NjaGVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTYxNTpcXHRcXHQgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSBfX3BlcmNwdSAqX3BjcHVfc2NoZWQpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjE2LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTYyMC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTYyMTpcXHRcXHRzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZCA9IHBlcl9jcHVfcHRyKF9wY3B1X3NjaGVkLCBpKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2MjItXFx0XFx0c3RydWN0IHJxICpycSA9IGNwdV9ycShpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTY1ND1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfbW1fc2NoZWQoc3RydWN0IHJxICpycSxcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NTU6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZClcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2NTYte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNjc3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZyYWN0aW9uX21tX3NjaGVkKHN0cnVjdCBycSAqcnEsXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNjc4OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZClcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2Nzkte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzI3PXZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTcyOC17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzI5OlxcdHN0cnVjdCBzY2hlZF9jYWNoZV90aW1lICpwY3B1X3NjaGVkO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTczMC1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHAtXFx1MDAzZW1tO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzMzLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTczNDpcXHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3MzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzc3PXN0YXRpYyB2b2lkIHRhc2tfdGlja19jYWNoZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3ODItXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzgzOlxcdGlmICghc2NoZWRfY2FjaGVfZW5hYmxlZCgpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTc4NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE5Nzk9dm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTk5Mi0vKiBleGVjKCkgaGFzIHN3aXRjaGVkIHRvIHRoZSBuZXcgbW0gYW5kIGlzIGFib3V0IHRvIGRyb3AgdGhlIG9sZCBvbmUuICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxOTkzOnZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xOTk0LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3NTM9YWxiX2JyZWFrX2xsYyhzdHJ1Y3QgbGJfZW52ICplbnYpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc1NC17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDc1NTpcXHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzU2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3OTI9c3RhdGljIGJvb2wgbWlncmF0ZV9kZWdyYWRlc19sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc5My17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDc5NDpcXHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzk1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE4MzY9c3RhdGljIHZvaWQgcmVjb3JkX3NnX2xsY19zdGF0cyhzdHJ1Y3QgbGJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODQyLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4NDM6XFx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkgfHwgZW52LVxcdTAwM2VpZGxlID09IENQVV9ORVdMWV9JRExFKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4NDQtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTg3NT1zdGF0aWMgaW5saW5lIGJvb2wgbGxjX2JhbGFuY2Uoc3RydWN0IGxiX2VudiAqZW52LCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4Nzcte1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4Nzg6XFx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg3OS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExOTM3PXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2dfbGJfc3RhdHMoc3RydWN0IGxiX2VudiAqZW52LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2NS0jaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTk2NjpcXHRcXHRpZiAoc2NoZWRfY2FjaGVfZW5hYmxlZCgpKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2Ny1cXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZF90bXA7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9jaWRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSB7IH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxMzMtI2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxMzQ6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxMzU6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX2FjdGl2ZSk7XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzNjpleHRlcm4gaW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxMzctZXh0ZXJuIHVuc2lnbmVkIGludCBsbGNfYWdncl90b2xlcmFuY2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTQxPWV4dGVybiB1bnNpZ25lZCBpbnQgbGxjX292ZXJhZ2dyX3BjdDtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQyLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxNDM6c3RhdGljIGlubGluZSBib29sIHNjaGVkX2NhY2hlX2VuYWJsZWQodm9pZClcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQ0LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTQ1OlxcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZzY2hlZF9jYWNoZV9hY3RpdmUpO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDYtfVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDctXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDE0ODpleHRlcm4gdm9pZCBzY2hlZF9jYWNoZV9hY3RpdmVfc2V0KHZvaWQpO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDktXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg0OS0vKiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjYWNoZSBhd2FyZSBzY2hlZHVsaW5nICovXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6ODUwOkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg1MS0vKlxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODU0LSAqL1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjg1NTpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9hY3RpdmUpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg1Ni0vKiB1c2VyIHdhbnRzIGNhY2hlIGF3YXJlIHNjaGVkdWxpbmcgWzAgb3IgMV0gKi9cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NTc6aW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyID0gMTtcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NTgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04OTE9c3RhdGljIGJvb2wgYWxsb2Nfc2RfbGxjKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLFxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTQ2LSAqL1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk0NzpzdGF0aWMgdm9pZCBfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk0OC17XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTItXFx0LyogaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCAqL1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk1MzpcXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZzY2hlZF9jYWNoZV9wcmVzZW50KSkge1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk1NDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTUtXFx0XFx0aWYgKHNjaGVkX2RlYnVnKCkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NjUtXFx0ICovXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTY2OlxcdGlmIChzeXNjdGxfc2NoZWRfY2FjaGVfdXNlcikge1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk2NzpcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZzY2hlZF9jYWNoZV9hY3RpdmUpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk2OC1cXHRcXHRpZiAoc2NoZWRfZGVidWcoKSlcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk3MC1cXHR9IGVsc2Uge1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk3MTpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NzItXFx0XFx0aWYgKHNjaGVkX2RlYnVnKCkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NzctLyogdXNlZCBieSBkZWJ1Z2ZzICovXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTc4OnZvaWQgc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk3OS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05ODEtXFx0c2NoZWRfZG9tYWluc19tdXRleF9sb2NrKCk7XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTgyOlxcdF9zY2hlZF9jYWNoZV9hY3RpdmVfc2V0KCk7XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTgzLVxcdHNjaGVkX2RvbWFpbnNfbXV0ZXhfdW5sb2NrKCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz05OTk9dm9pZCBzY2hlZF91cGRhdGVfbGxjX2J5dGVzKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDI3LVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMjg6c3RhdGljIHZvaWQgc2NoZWRfY2FjaGVfc2V0KGJvb2wgaGFzX211bHRpX2xsY3MpXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTAyOS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDM0LVxcdGlmIChoYXNfbXVsdGlfbGxjcylcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDM1OlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMzYtXFx0ZWxzZVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMzc6XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMzgtXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MTAzOTpcXHRfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCgpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwNDAtfVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9MTA0Mj1zdGF0aWMgYm9vbCBhbGxvY19zZF9sbGMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDQ2LX1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDQ3OnN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9zZXQoYm9vbCBoYXNfbXVsdGlfbGxjcykgeyB9XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTA0OC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTMyODI9aW50IF9faW5pdCBzY2hlZF9pbml0X2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zMzAwLVxcdGlmICghZXJyKVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjMzMDE6XFx0XFx0c2NoZWRfY2FjaGVfc2V0KG11bHRpX2xsY3MpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTMzMDItXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz0zMzcwPXN0YXRpYyB2b2lkIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zX2xvY2tlZChpbnQgbmRvbXNfbmV3LCBjcHVtYXNrX3Zhcl90IGRvbXNfbmV3W10sXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDMzLVxcdFxcdFxcdFxcdCAqIGFuZCBhIG5ldyBzaW5nbGUtTExDIHBhcnRpdGlvbiBpcyBidWlsdCxcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzozNDM0OlxcdFxcdFxcdFxcdCAqIHNjaGVkX2NhY2hlX3NldChmYWxzZSkgZGlzYWJsZXMgY2FjaGUtYXdhcmVcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDM1LVxcdFxcdFxcdFxcdCAqIHNjaGVkdWxpbmcgZ2xvYmFsbHkgZGVzcGl0ZSB0aGUgcmV1c2VkXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDU3LVxcdH1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzozNDU4OlxcdHNjaGVkX2NhY2hlX3NldChoYXNfbXVsdGlfbGxjcyk7XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzQ1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MzYuMzYxMjIyMTk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNDI4NjAzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBpc3N1ZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaWRlIG9mIHRoaW5ncy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IHR3byBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBvZnRlbiBjb21lIHVwIGluIHRoaXMga2luZCBvZiBzaXR1YXRpb24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgZXhlY19tbV9wdXRfb2xkYCBhbmQgYGFjY291bnRfbW1fc2NoZWRgLiBUaG9zZSBhcmUgdXN1YWxseSB0aGUgY3VscHJpdHMgd2hlbiBJJ20gY2hhc2luZyBkb3duIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBpbiBleGVjdXRpb24gYW5kIHNjaGVkdWxpbmcuIEhvcGVmdWxseSwgdW5kZXJzdGFuZGluZyBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2lsbCBzaGVkIHNvbWUgbGlnaHQuIEknbGwgZm9jdXMgb24gaG93IHRoZXkgaGFuZGxlIHByb2Nlc3MgbWVtb3J5IGNvbnRleHRzLCB0aGUgYWNjb3VudGluZyB0aGV5J3JlIGRvaW5nIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozOS42MDQwODYwMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTA6XFx0XFx0ZnV0ZXhfZXhlY19kb25lKHRzayk7XFxuIDkxMTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEyOlxcdH1cXG4gOTEzOlxcdFxcbiA5MTQ6XFx0LyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbiA5MTU6XFx0c3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcXG4gOTE2OlxcdHtcXG4gOTE3OlxcdFxcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VtYXhyc3MsIG9sZF9tbSk7XFxuIDkxODpcXHRcXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xcbiA5MTk6XFx0XFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XFxuIDkyMDpcXHRcXHRtbXB1dChvbGRfbW0pO1xcbiA5MjE6XFx0fVxcbiA5MjI6XFx0XFxuIDkyMzpcXHRzdGF0aWMgaW50IGRlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcdHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stXFx1MDAzZXNpZ25hbDtcXG4gOTI2OlxcdFxcdHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqb2xkc2lnaGFuZCA9IHRzay1cXHUwMDNlc2lnaGFuZDtcXG4gOTI3OlxcdFxcdHNwaW5sb2NrX3QgKmxvY2sgPSBcXHUwMDI2b2xkc2lnaGFuZC1cXHUwMDNlc2lnbG9jaztcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9lbXB0eSh0c2spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozOS42MDQxOTczNDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI3OTU1MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBQYXRjaCdzIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2Vzbid0LCBidXQgbGV0J3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMgcmlnb3JvdXNseS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBpcyB1c2luZyBgc3luY2hyb25pemVfcmN1KClgIGJlZm9yZSBjYWxsaW5nIGBtbXB1dChvbGRfbW0pYC4gVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBgYWNjb3VudF9tbV9zY2hlZCgpYCBvbiBhbm90aGVyIENQVSBtaWdodCBiZSBkZXJlZmVyZW5jaW5nIGBvbGRfbW1gIHdoaWxlIHRoZSBjb2RlIGlzIHJ1bm5pbmcgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkIG9yIHRoZSBydW5xdWV1ZSBsb2NrIGhlbGQuIElmIGBtbXB1dChvbGRfbW0pYCB3ZXJlIHRvIGZyZWUgdGhlIG1lbW9yeSBpbW1lZGlhdGVseSwgYSBVQUYgY291bGQgb2NjdXIsIHRyaWdnZXJpbmcgS0FTQU4uXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJIHNlZSBubyBuZXcgYnVmZmVycywgc3RydWN0cywgc3RhY2sgdmFyaWFibGVzLCBvciBmaWVsZHMgYmVpbmcgYWxsb2NhdGVkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlJ3Mgbm8gcmVsaWFuY2Ugb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgd2l0aGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIGBzeW5jaHJvbml6ZV9yY3UoKWAgdG8gcHJldmVudCB0aGUgZGVzY3JpYmVkIHJhY2UuIFRoaXMgaXMgYWxsIGFib3V0IHNhZmVndWFyZGluZyB0aGUgbGlmZXRpbWUgb2YgYG9sZF9tbWAgYW5kIGVuc3VyaW5nIHNhZmUgY29uY3VycmVudCBhY2Nlc3MuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBteSBjcml0ZXJpYSBmb3IgYE5lZWRzS01TQU5gOiB0aGlzIGZsYWcgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGluZ3MgbGlrZToga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcywgb3IgY2hhbmdlcyBpbiBob3cgd2UgZG8gYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGlzIHBhdGNoIGlzIG5vbmUgb2YgdGhvc2UgdGhpbmdzLiBJdCdzIHNvbGVseSBhYm91dCBzeW5jaHJvbml6aW5nIGFjY2VzcyB0byBhIGBtbV9zdHJ1Y3RgIHRvIGF2b2lkIGEgVUFGLiBUaGlzIHBhdGNoIGlzIHRhY2tsaW5nIGEgY2xhc3NpYyBsaWZldGltZSBpc3N1ZSwgd2hpY2ggS0FTQU4sIExPQ0tERVAgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nLlxuXG5JbiBzaG9ydCwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJdCdzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWUgcHJldmVudGluZyBhbiB1bnNhZmUgZGVyZWZlcmVuY2UsIGRpcmVjdGx5IGluIGxpbmUgd2l0aCBLQVNBTidzIHJlc3BvbnNpYmlsaXRpZXMuIFRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBiZWNhdXNlIHRoZSBwYXRjaCdzIHNvbGUgcHVycG9zZSBpcyB0byBzeW5jaHJvbml6ZSBtZW1vcnkgYWNjZXNzIHRvIGF2b2lkIHRoaXMgVUFGLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gcmVhZHkgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY1NSwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTo0Ny44ODM3NTI3NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 04:12:18 +0000 UTC FinishedAt: 2026-09-01 04:29:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CACHE", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CACHE", "SMP" ], "series_id": "ae15fe8a-8467-4268-84dc-d7904404badd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sched_cache_exec_done" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NBQ0hFJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjaGVkX2NhY2hlX2V4ZWNfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxpZmV0aW1lIGlzc3VlIChwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9mIGBvbGRfbW1gKSwgd2hpY2ggZmFsbHMgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBsb2dpYyBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4YTI2NzI0ZDVlNWUzMTRlYjkxNTk2ZDhhZjZhNDQxOWUwYjNhYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjI3OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNjE5NGMzODgwNzk4MCAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtOTE2LDYgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKVxuIHtcbiBcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VtYXhyc3MsIG9sZF9tbSk7XG4gXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xuJiM0MztcdHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpO1xuIFx0bW1wdXQob2xkX21tKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi42YWUzMWJmZmUwNDllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0yNDE1LDEwICYjNDM7MjQxNSwxNCBAQCBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7XG4gXHRpbnQgY3B1O1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcbiYjNDM7dm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCk7XG4mIzQzO1xuICNlbHNlXG4gXG4gc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgeyB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpIHsgfVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjaWZuZGVmIE1PRFVMRVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li5hM2QwMTg1NzE3ZjdiIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTE5ODksNiAmIzQzOzE5ODksMTggQEAgdm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHAtXHUwMDNlcHJlZmVycmVkX2xsYyA9IC0xO1xuIH1cbiBcbiYjNDM7LyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xuJiM0Mzt2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhY2NvdW50X21tX3NjaGVkKCkgZGVyZWZlcmVuY2VzIHJxLVx1MDAzZWN1cnItXHUwMDNlbW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLFxuJiM0MztcdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxuJiM0MztcdCAqIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIGlzIHRoZXJlZm9yZSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXG4mIzQzO1x0ICogc2VjdGlvbiwgc28gd2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgYmVmb3JlIHRoZSBtbSBnb2VzIGF3YXkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO31cbiYjNDM7XG4gI2Vsc2UgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NBQ0hFJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjaGVkX2NhY2hlX2V4ZWNfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpIGR1cmluZyBleGVjX21tX3B1dF9vbGQoKSBpbiB0aGUgZXhlY3ZlIHBhdGggdG8gd2FpdCBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZCBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCBtbV9zdHJ1Y3QuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlcmUgcmVtb3RlIENQVXMgZXhlY3V0aW5nIGFjY291bnRfbW1fc2NoZWQoKSB1bmRlciBDT05GSUdfU0NIRURfQ0FDSEUgYWNjZXNzIHRoZSBvbGQgbW0uIEl0IGlzIGEgcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBleGVjIGNoYW5nZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzhhMjY3MjRkNWU1ZTMxNGViOTE1OTZkOGFmNmE0NDE5ZTBiM2FiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mjc6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uNjE5NGMzODgwNzk4MCAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtOTE2LDYgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKQogewogCXNldG1heF9tbV9oaXdhdGVyX3JzcygmYW1wO2N1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bWF4cnNzLCBvbGRfbW0pOwogCW1tX3VwZGF0ZV9uZXh0X293bmVyKG9sZF9tbSk7CiYjNDM7CXNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpOwogCW1tcHV0KG9sZF9tbSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA4YjNkNDdhMzI1Y2NhLi42YWUzMWJmZmUwNDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0yNDE1LDEwICYjNDM7MjQxNSwxNCBAQCBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7CiAJaW50IGNwdTsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAomIzQzO3ZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpOwomIzQzOwogI2Vsc2UKIAogc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgeyB9OwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKSB7IH0KJiM0MzsKICNlbmRpZgogCiAjaWZuZGVmIE1PRFVMRQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKaW5kZXggOGRmZjM3MDU5ZmFmNy4uYTNkMDE4NTcxN2Y3YiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZmFpci5jCkBAIC0xOTg5LDYgJiM0MzsxOTg5LDE4IEBAIHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJcC0mZ3Q7cHJlZmVycmVkX2xsYyA9IC0xOwogfQogCiYjNDM7LyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqLwomIzQzO3ZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBhY2NvdW50X21tX3NjaGVkKCkgZGVyZWZlcmVuY2VzIHJxLSZndDtjdXJyLSZndDttbSB3aXRoIHRoZSBycSBsb2NrIGhlbGQsCiYjNDM7CSAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aAomIzQzOwkgKiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCBpcyB0aGVyZWZvcmUgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAomIzQzOwkgKiBzZWN0aW9uLCBzbyB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCBiZWZvcmUgdGhlIG1tIGdvZXMgYXdheS4KJiM0MzsJICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzO30KJiM0MzsKICNlbHNlIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Qgb24gdGhlIFNjaGVkdWxlciBDYWNoZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYSBtb2RpZmljYXRpb24gdG91Y2hpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIHJlbGF0ZWQgdG8gcHJvY2VzcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHNjaGVkdWxlciBjYWNoZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHN0cmF0ZWdpY2FsbHkgcGxhY2luZyBhIGNhbGwgdG8gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd2hlbiBleGVjdXRpbmcgYSBuZXcgcHJvZ3JhbSBpbWFnZS4gTm93LCBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGl0c2VsZiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gT2YgY291cnNlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uLiBJZiBgQ09ORklHX1NDSEVEX0NBQ0hFYCBpcyAqbm90KiBlbmFibGVkLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGFuIGVtcHR5IGlubGluZSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgdGhlIHdob2xlIHRoaW5nIGEgbm8tb3AgdW5kZXIgc3VjaCBjaXJjdW1zdGFuY2VzLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBjb25maWd1cmVkLiBBc3N1bWluZyBgQ09ORklHX1NDSEVEX0NBQ0hFYCAqaXMqIGVuYWJsZWQsIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBpcyBpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AsIHdoZXJlIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgYWN0dWFsbHkgaW1wbGVtZW50cyBhIGNhbGwgdG8gYHN5bmNocm9uaXplX3JjdSgpYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uIGJlaGluZCB0aGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiB0aGUgY29udGV4dCBvZiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgUkNVIHN5bmNocm9uaXphdGlvbiBwb2ludC4gTGV0JiMzOTtzIGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWAgYW5kIGluc3BlY3QpIHRoZSByZWxldmFudCBmaWxlczogYGluY2x1ZGUvbGludXgvc2NoZWQuaGAsIGBrZXJuZWwvc2NoZWQvZmFpci5jYCwgYW5kIHRoZSBLY29uZmlnIGZvciBgQ09ORklHX1NDSEVEX0NBQ0hFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjYWNoZSBpbnZhbGlkYXRpb24sIG9yIGNsZWFudXAgbWVjaGFuaXNtLiBJIGV4cGVjdCB0byBzZWUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIHNjaGVkdWxlciYjMzk7cyBmYWlyIHNjaGVkdWxpbmcgbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIFJDVSYjMzk7cyBxdWllc2NlbnQgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0NIRURfQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE2MTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbW1fY2lkX3NpemUodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTYyNS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNjI2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNjI3LXZvaWQgbW1faW5pdF9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTY0ND1zdGF0aWMgaW5saW5lIHZvaWQgbW1fZGVzdHJveV9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY0OC19XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTY0OTojZWxzZSAvKiAhQ09ORklHX1NDSEVEX0NBQ0hFICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1MC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTY1Mj1zdGF0aWMgaW5saW5lIHZvaWQgbW1fZGVzdHJveV9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1My1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNjU0OiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNjU1LVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MzU9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTQzMy1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNDM0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNDM1LVx0c3RydWN0IGNhbGxiYWNrX2hlYWRcdFx0Y2FjaGVfd29yaztcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjM5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCB0YXNrX21tX2NpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTI0MDAtXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MjQwMTojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjQwMi1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg9NjY9c3RydWN0IHNjaGVkX2RvbWFpbl9zaGFyZWQge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC04NC1cdH07XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg6ODU6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTg2LVx0dW5zaWduZWQgbG9uZ1x0dXRpbF9hdmc7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oPTkxPXN0cnVjdCBzY2hlZF9kb21haW4ge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0xMTktXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg6MTIwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0xMjEtXHR1bnNpZ25lZCBpbnQgbGxjX21heDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg9Mjc4PXN0YXRpYyBpbmxpbmUgaW50IHRhc2tfbm9kZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTI4Mi1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaDoyODM6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTI4NC1leHRlcm4gdm9pZCBzY2hlZF91cGRhdGVfbGxjX2J5dGVzKHVuc2lnbmVkIGludCBjcHUpO1xuLS1cbmluaXQvS2NvbmZpZz0xMDIxPWNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xuLS1cbmluaXQvS2NvbmZpZy0xMDMzLVxuaW5pdC9LY29uZmlnOjEwMzQ6Y29uZmlnIFNDSEVEX0NBQ0hFXG5pbml0L0tjb25maWctMTAzNS1cdGJvb2wgXCYjMzQ7Q2FjaGUgYXdhcmUgbG9hZCBiYWxhbmNlXCYjMzQ7XG4tLVxuaW5pdC9pbml0X3Rhc2suYz0xMDU9c3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0ge1xuLS1cbmluaXQvaW5pdF90YXNrLmMtMjMwLSNlbmRpZlxuaW5pdC9pbml0X3Rhc2suYzoyMzE6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxuaW5pdC9pbml0X3Rhc2suYy0yMzItXHQucHJlZmVycmVkX2xsYyAgPSAtMSxcbi0tXG5rZXJuZWwvZXhpdC5jPTQ5MT12b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9leGl0LmMtNTQ5LVxua2VybmVsL2V4aXQuYzo1NTA6I2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX0NBQ0hFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQV9CQUxBTkNJTkcpXG5rZXJuZWwvZXhpdC5jLTU1MS0vKlxuLS1cbmtlcm5lbC9leGl0LmM9NTcxPXN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X21tX3NjaGVkX2NhY2hlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9leGl0LmMtNTczLX1cbmtlcm5lbC9leGl0LmM6NTc0OiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0FDSEUgQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG5rZXJuZWwvZXhpdC5jLTU3NS1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA5NS0jZW5kaWZcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTA5NjojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwOTctXHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZycS1cdTAwM2VjcHVfZXBvY2hfbG9jayk7XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9MjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX3NjYWxpbmdfZm9wcyA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMTItXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyMTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjE0LXN0YXRpYyBzc2l6ZV90XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NDYtXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NDc6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzQ4LVx0bGxjID0gZGVidWdmc19jcmVhdGVfZGlyKFwmIzM0O2xsY19iYWxhbmNpbmdcJiMzNDssIGRlYnVnZnNfc2NoZWQpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM5Nj1zdGF0aWMgczY0IHVwZGF0ZV9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MzctXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0Mzg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDM5LVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTk5Mz12b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwMy1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAwNDojZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNS1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTIwMjE9c3RhdGljIHZvaWQgYWNjb3VudF9sbGNfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XG5rZXJuZWwvc2NoZWQvZmFpci5jLTIwMjItXG5rZXJuZWwvc2NoZWQvZmFpci5jOjIwMjM6I2VuZGlmIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDI0LVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzY5Nj1zdGF0aWMgdm9pZCB0YXNrX251bWFfcGxhY2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM3NzktXHRcdFx0fVxua2VybmVsL3NjaGVkL2ZhaXIuYzozNzgwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzc4MS1cdFx0XHQvKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA1NDM9c3RhdGljIGlubGluZSBpbnQgdGFza19pc19pbmVsaWdpYmxlX29uX2RzdF9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZGVzdF9jcHUpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDU1My1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA1NTQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDU1NS0vKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTEzOTM9c3RydWN0IHNnX2xiX3N0YXRzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExNDEyLSNlbmRpZlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTQxMzojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExNDE0LVx0dW5zaWduZWQgaW50IG5yX3ByZWZfZHN0X2xsYztcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExODE4PXNjaGVkX3JlZHVjZWRfY2FwYWNpdHkoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTgyOS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4MzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTgzMS0vKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE5Mzc9c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3QgbGJfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2NC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE5NjU6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2Ni1cdFx0aWYgKHNjaGVkX2NhY2hlX2VuYWJsZWQoKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTI3MzA9c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9pbWJhbGFuY2Uoc3RydWN0IGxiX2VudiAqZW52LCBzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyNzY5LVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjc3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyNzcxLVx0aWYgKGJ1c2llc3QtXHUwMDNlZ3JvdXBfdHlwZSA9PSBncm91cF9sbGNfYmFsYW5jZSkge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTMwODA9c3RhdGljIHN0cnVjdCBycSAqc2NoZWRfYmFsYW5jZV9maW5kX3NyY19ycShzdHJ1Y3QgbGJfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzIzMS1cdFx0Y2FzZSBtaWdyYXRlX2xsY190YXNrOlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzIzMjojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEzMjMzLVx0XHRcdHNkX3RtcCA9IHJjdV9kZXJlZmVyZW5jZV9hbGwocnEtXHUwMDNlc2QpO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjE3LSNlbmRpZlxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxODojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjE5LVx0cmF3X3NwaW5sb2NrX3RcdFx0Y3B1X2Vwb2NoX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMzYtXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjM3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMzgtXHR1bnNpZ25lZCBpbnRcdFx0bnJfcHJlZl9sbGNfcnVubmluZztcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9jaWRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSB7IH1cbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTMyLVxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzMzojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTM0LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9wcmVzZW50KTtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz02MzI9c3RhdGljIHZvaWQgZGVzdHJveV9zY2hlZF9kb21haW4oc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjQxLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6NjQyOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY0My1cdC8qIG9ubHkgdGhlIGJvdHRvbSBzZCBoYXMgbGxjX2NvdW50cyBhcnJheSAqL1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTc0Nj1jcHVfYXR0YWNoX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgc3RydWN0IHJvb3RfZG9tYWluICpyZCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy03OTctXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo3OTg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNzk5LVx0XHRcdC8qIG1vdmUgYnVmZmVyIHRvIHBhcmVudCBhcyBjaGlsZCBpcyBiZWluZyBkZXN0cm95ZWQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NDctXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NDg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODQ5LS8qIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGNhY2hlIGF3YXJlIHNjaGVkdWxpbmcgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIENPTkZJR19TQ0hFRF9DQUNIRSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19TQ0hFRF9DQUNIRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIHRoZSBkZWZpbml0aXZlIGd1aWRlIGluIHRoZXNlIHNpdHVhdGlvbnM6IGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIOKAkyB0aGUgZGVmYXVsdCB2YWx1ZXMsIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjaGVkdWxlciBjYWNoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIGFuIGVkdWNhdGVkIGFzc2Vzc21lbnQgb24gaXRzIHJlbGV2YW5jZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdFx0ICBpdCBoYXMgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSB0aGUgdGFzayBpcyBydW5uaW5nIG9uLlxuMTAzMTpcdFxuMTAzMjpcdFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxuMTAzMzpcdFxuMTAzNDpcdGNvbmZpZyBTQ0hFRF9DQUNIRVxuMTAzNTpcdFx0Ym9vbCBcJiMzNDtDYWNoZSBhd2FyZSBsb2FkIGJhbGFuY2VcJiMzNDtcbjEwMzY6XHRcdGRlZmF1bHQgeVxuMTAzNzpcdFx0ZGVwZW5kcyBvbiBTTVBcbjEwMzg6XHRcdGhlbHBcbjEwMzk6XHRcdCAgV2hlbiBlbmFibGVkLCB0aGUgc2NoZWR1bGVyIHdpbGwgYXR0ZW1wdCB0byBhZ2dyZWdhdGUgdGFza3MgZnJvbVxuMTA0MDpcdFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxuMTA0MTpcdFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcbjEwNDI6XHRcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcbjEwNDM6XHRcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cbjEwNDQ6XHRcbjEwNDU6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDQ2Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDQ3Olx0XHRkZWZhdWx0IHlcbjEwNDg6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwNDk6XHRcdGhlbHBcbjEwNTA6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDUxOlx0XHQgIG1hY2hpbmUuXG4xMDUyOlx0XG4xMDUzOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA1NDpcdFx0Ym9vbFxuMTA1NTpcdFxuMTA1NjpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA1NzpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNTg6XHRcdHNlbGVjdCBLRVJORlNcbjEwNTk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWw6IENvZGUgTG9jYXRpb25zIHRvIEV4cGxvcmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBzcGVjaWZpYyBjb2RlIGxvY2F0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL2V4ZWMuY2AgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5MTYuIFRoYXQgYXJlYSBsaWtlbHkgaGFuZGxlcyB0aGUgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uLCBzbyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBTaW11bHRhbmVvdXNseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBga2VybmVsL3NjaGVkL2ZhaXIuY2AgYXJvdW5kIGxpbmUgMTk4OS4gVGhpcyBzaG91bGQgZ2l2ZSBzb21lIGluc2lnaHQgaW50byBzY2hlZHVsaW5nIGFuZCBwb3NzaWJseSBob3cgZXhlY3V0aW9uIHByaW9yaXR5IG9yIHJlc291cmNlIGFsbG9jYXRpb24gbWlnaHQgcGxheSBhIHJvbGUgaW4gd2hhdGV2ZXImIzM5O3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGVzZSB0d28gYXJlYXMgdG8gcHJvdmlkZSB0aGUgbW9zdCByZWxldmFudCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MDU6XHRcdFx0LyogRGVmZXIgdGVhcmRvd24gdG8gc2V0dXBfbmV3X2V4ZWMoKSwgb3V0c2lkZSB0aGUgZXhlYyBsb2Nrcy4gKi9cbiA5MDY6XHRcdFx0YnBybS1cdTAwM2VvbGRfbW0gPSBvbGRfbW07XG4gOTA3Olx0XHR9IGVsc2Uge1xuIDkwODpcdFx0XHRtbWRyb3BfbGF6eV90bGIoYWN0aXZlX21tKTtcbiA5MDk6XHRcdH1cbiA5MTA6XHRcdGZ1dGV4X2V4ZWNfZG9uZSh0c2spO1xuIDkxMTpcdFx0cmV0dXJuIDA7XG4gOTEyOlx0fVxuIDkxMzpcdFxuIDkxNDpcdC8qIFJlbGVhc2UgdGhlIGFkZHJlc3Mgc3BhY2UgcmVwbGFjZWQgYnkgZXhlYywgb3V0c2lkZSB0aGUgZXhlYyBsb2Nrcy4gKi9cbiA5MTU6XHRzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKVxuIDkxNjpcdHtcbiA5MTc6XHRcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VtYXhyc3MsIG9sZF9tbSk7XG4gOTE4Olx0XHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xuIDkxOTpcdFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XG4gOTIwOlx0XHRtbXB1dChvbGRfbW0pO1xuIDkyMTpcdH1cbiA5MjI6XHRcbiA5MjM6XHRzdGF0aWMgaW50IGRlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA5MjQ6XHR7XG4gOTI1Olx0XHRzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdHNrLVx1MDAzZXNpZ25hbDtcbiA5MjY6XHRcdHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqb2xkc2lnaGFuZCA9IHRzay1cdTAwM2VzaWdoYW5kO1xuIDkyNzpcdFx0c3BpbmxvY2tfdCAqbG9jayA9IFx1MDAyNm9sZHNpZ2hhbmQtXHUwMDNlc2lnbG9jaztcbiA5Mjg6XHRcbiA5Mjk6XHRcdGlmICh0aHJlYWRfZ3JvdXBfZW1wdHkodHNrKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENGUyBTY2hlZHVsZXIqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBDb21wbGV0ZWx5IEZhaXIgU2NoZWR1bGVyIChDRlMpLiBUaW1lIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBDRlMgbWFnaWMgaGFwcGVucy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIHNjcnV0aW55IGFyb3VuZCBsaW5lcyAxOTcwIHRvIDIwMjAuIFRoYXQgcmFuZ2UgdXN1YWxseSBjb3ZlcnMgY29yZSBsb2dpYyBhcm91bmTigKYgd2VsbCwgSSYjMzk7bGwgZmlndXJlIGl0IG91dCBvbmNlIEkmIzM5O20gaW4gdGhlcmUuIEhvcGVmdWxseSwgdGhhdCByYW5nZSB3aWxsIGJlIHJlbGV2YW50IHRvIHdoYXRldmVyIGlzc3VlIEkgaGF2ZSBpbiBtaW5kLiBOb3csIGxldCYjMzk7cyBvcGVuIHVwIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2ZhaXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk3MDpcdFx0XHQgKiAgICB0aGUgb3B0aW1hbCBwZXJmb3JtYW5jZSBnYWluIHNvIGZhci5cbjE5NzE6XHRcdFx0ICovXG4xOTcyOlx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlc2Nfc3RhdC5jcHUsIG1fYV9jcHUpO1xuMTk3MzpcdFx0fVxuMTk3NDpcdFxuMTk3NTpcdFx0dXBkYXRlX2F2Z19zY2FsZShcdTAwMjZtbS1cdTAwM2VzY19zdGF0Lm5yX3J1bm5pbmdfYXZnLCBucl9ydW5uaW5nKTtcbjE5NzY6XHRcdGZyZWVfY3B1bWFza192YXIoY3B1cyk7XG4xOTc3Olx0fVxuMTk3ODpcdFxuMTk3OTpcdHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4xOTgwOlx0e1xuMTk4MTpcdFx0c3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmsgPSBcdTAwMjZwLVx1MDAzZWNhY2hlX3dvcms7XG4xOTgyOlx0XG4xOTgzOlx0XHRpbml0X3Rhc2tfd29yayh3b3JrLCB0YXNrX2NhY2hlX3dvcmspO1xuMTk4NDpcdFx0d29yay1cdTAwM2VuZXh0ID0gd29yaztcbjE5ODU6XHRcdC8qXG4xOTg2Olx0XHQgKiBSZXNldCBuZXcgdGFzayYjMzk7cyBwcmVmZXJlbmNlIHRvIGF2b2lkXG4xOTg3Olx0XHQgKiBwb2xsdXRpbmcgYWNjb3VudF9sbGNfZW5xdWV1ZSgpLlxuMTk4ODpcdFx0ICovXG4xOTg5Olx0XHRwLVx1MDAzZXByZWZlcnJlZF9sbGMgPSAtMTtcbjE5OTA6XHR9XG4xOTkxOlx0XG4xOTkyOlx0LyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xuMTk5MzpcdHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXG4xOTk0Olx0e1xuMTk5NTpcdFx0LypcbjE5OTY6XHRcdCAqIGFjY291bnRfbW1fc2NoZWQoKSBkZXJlZmVyZW5jZXMgcnEtXHUwMDNlY3Vyci1cdTAwM2VtbSB3aXRoIHRoZSBycSBsb2NrIGhlbGQsXG4xOTk3Olx0XHQgKiBzbyBhIHJlbW90ZSBDUFUgY2FuIHN0aWxsIGJlIHVzaW5nIHRoZSBvbGQgbW0uIFRoYXQgc2VjdGlvbiBydW5zIHdpdGhcbjE5OTg6XHRcdCAqIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIGlzIHRoZXJlZm9yZSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXG4xOTk5Olx0XHQgKiBzZWN0aW9uLCBzbyB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCBiZWZvcmUgdGhlIG1tIGdvZXMgYXdheS5cbjIwMDA6XHRcdCAqL1xuMjAwMTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4yMDAyOlx0fVxuMjAwMzpcdFxuMjAwNDpcdCNlbHNlIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqL1xuMjAwNTpcdFxuMjAwNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X21tX3NjaGVkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbjIwMDc6XHRcdFx0XHRcdCAgICBzNjQgZGVsdGFfZXhlYykgeyB9XG4yMDA4Olx0XG4yMDA5Olx0dm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyB9XG4yMDEwOlx0XG4yMDExOlx0c3RhdGljIHZvaWQgdGFza190aWNrX2NhY2hlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyB9XG4yMDEyOlx0XG4yMDEzOlx0c3RhdGljIGlubGluZSBpbnQgZ2V0X3ByZWZfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbjIwMTQ6XHRcdFx0XHQgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4yMDE1Olx0e1xuMjAxNjpcdFx0cmV0dXJuIC0xO1xuMjAxNzpcdH1cbjIwMTg6XHRcbjIwMTk6XHRzdGF0aWMgdm9pZCBhY2NvdW50X2xsY19lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nICp3aGF0KiB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kICp3aHkqIGl0JiMzOTtzIGJlZW4gYWRkZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgaW4gdGhlIGBleGVjdmVgIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4ZWMuY2AsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHVwIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGUga2V5IGlzIGBleGVjX21tX3B1dF9vbGQoKWAgYmVpbmcgY2FsbGVkIHdpdGhpbiBgc2V0dXBfbmV3X2V4ZWMoKWAuIFdoZW4gYSB0YXNrIGV4ZWN1dGVzIGBleGVjdmVgLCBpdCBzd2l0Y2hlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dCAoYG1tYCkgdG8gYSBuZXcgb25lIGFuZCB0aGVuIHRoZSBvbGQgb25lIGdvZXMgdG8gYGV4ZWNfbW1fcHV0X29sZCgpYC4gVGhpcyBjYWxscyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBkb2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBiZWZvcmUgY2FsbGluZyBgbW1wdXQob2xkX21tKWAuCgpTbywgd2hhdCYjMzk7cyBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCAqYWN0dWFsbHkqIGRvaW5nPyBJdCYjMzk7cyBhZGRpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIGJlZm9yZSBmcmVlaW5nIHRoZSBvbGQgYG1tYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IGFueSByZW1vdGUgQ1BVIHJ1bm5pbmcgYGFjY291bnRfbW1fc2NoZWQoKWAg4oCTIHdoaWNoIHVzZXMgYHJxLSZndDtjdXJyLSZndDttbWAgdW5kZXIgYW4gUkNVIHJlYWQgbG9jayDigJMgZmluaXNoZXMgd2l0aCBpdHMgYWNjZXNzIHRvIHRoZSBgb2xkX21tYCBiZWZvcmUgdGhhdCBgb2xkX21tYCBnZXRzIGZyZWVkLiBJdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLgoKTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBhcHBseSB0aGUgZnV6emluZyBjcml0ZXJpYS4gVGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBmcy9leGVjLmNgICh0aGUgYGV4ZWN2ZWAgcGF0aCkgYW5kIHRoZSBzY2hlZHVsZXIgKGBrZXJuZWwvc2NoZWQvZmFpci5jYCkuIFRoZSBjb2RlIG1vZGlmaWVzIGFuZCBhZGRzIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2hpY2ggaXMgYSBzeW5jaHJvbml6YXRpb24gc3RlcCwgc28gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZXZlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gU28sIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgKldvcnRoRnV6emluZyA9IHRydWUqLiBJdCYjMzk7cyBub3QganVzdCBkb2N1bWVudGF0aW9uIG9yIGxvZ2dpbmcsIGl0JiMzOTtzIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGNoYW5nZS4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBpZiB0aGVyZSBhcmUgZm9jdXMgc3ltYm9scy4gV2hhdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHNob3VsZCBJIGhlYXZpbHkgZnV6ej8KCmBzY2hlZF9jYWNoZV9leGVjX2RvbmVgIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbiAoYHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpYCkgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gVGhpcyBtZWFucyBpdCYjMzk7cyBhbiBBUEkgZW50cnlwb2ludC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHBhdGguCgpTbywgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgc2VlbXMgbGlrZSBhIHByaW1hcnkgY2FuZGlkYXRlIGZvciBoZWF2eSBmdXp6aW5nLCBhcyBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgc3luY2hyb25pemF0aW9uIHBvaW50IGJlaW5nIGludHJvZHVjZWQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHN1Y2ggYXMgYGV4ZWNfbW1fcHV0X29sZGAsIG9yIG90aGVyIGZ1bmN0aW9ucyBjYWxsZWQgaW4gaXRzIHBhdGgsIGFyZSByZWxldmFudCB0byBmdXp6IGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4ZWNfbW1fcHV0X29sZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9ODQzPXN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTkxNC0vKiBSZWxlYXNlIHRoZSBhZGRyZXNzIHNwYWNlIHJlcGxhY2VkIGJ5IGV4ZWMsIG91dHNpZGUgdGhlIGV4ZWMgbG9ja3MuICovXG5mcy9leGVjLmM6OTE1OnN0YXRpYyB2b2lkIGV4ZWNfbW1fcHV0X29sZChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0pXG5mcy9leGVjLmMtOTE2LXtcbi0tXG5mcy9leGVjLmM9MTM2Mj12b2lkIHNldHVwX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxuLS1cbmZzL2V4ZWMuYy0xMzgwLVx0aWYgKGJwcm0tXHUwMDNlb2xkX21tKSB7XG5mcy9leGVjLmM6MTM4MTpcdFx0ZXhlY19tbV9wdXRfb2xkKGJwcm0tXHUwMDNlb2xkX21tKTtcbmZzL2V4ZWMuYy0xMzgyLVx0XHRicHJtLVx1MDAzZW9sZF9tbSA9IE5VTEw7XG4tLVxuZnMvZXhlYy5jPTE0NTg9c3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE0NzQtXHRpZiAoYnBybS1cdTAwM2VvbGRfbW0pXG5mcy9leGVjLmM6MTQ3NTpcdFx0ZXhlY19tbV9wdXRfb2xkKGJwcm0tXHUwMDNlb2xkX21tKTtcbmZzL2V4ZWMuYy0xNDc2LVx0ZG9fY2xvc2VfZXhlY2F0KGJwcm0tXHUwMDNlZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBTY2hlZHVsZXIgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHdvdWxkIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBhY2NvdW50IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgc2NoZWR1bGVyLCBlc3BlY2lhbGx5IHRoZSBmYWlyIHNjaGVkdWxlciwgYmUgaGFuZGxlZD8gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBzb21ld2hlcmUgd2l0aGluIHRoZSBga2VybmVsL3NjaGVkL2ZhaXIuY2AgZmlsZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciB0aGUgQ0ZTLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGFueSBtZW1vcnkgYWNjb3VudGluZyByZWxhdGVkIHRvIHNjaGVkdWxpbmcgd291bGQgYmUgcGx1bWJlZCB0aHJvdWdoIHRoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBkaXZpbmcgaW50byB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgYWNjb3VudF9tbV9zY2hlZGAgZnVuY3Rpb24sIG9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBsb29rIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcuIEkgc3VzcGVjdCBJIG1pZ2h0IGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY2NvdW50X21tX3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9mYWlyLmM9MTM1Nj12b2lkIHBvc3RfaW5pdF9lbnRpdHlfdXRpbF9hdmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5My1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5NDpzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM5Nj1zdGF0aWMgczY0IHVwZGF0ZV9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MTctXHRcdGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKHJ1bm5pbmcsIGRlbHRhX2V4ZWMpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDE4Olx0XHRhY2NvdW50X21tX3NjaGVkKHJxLCBydW5uaW5nLCBkZWx0YV9leGVjKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQxOS1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2OTI9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3MDgtXHRcdCAqIGNhbGxlZCwgaG93ZXZlciBpdCBpcyBub3QgbXVjaCBvZiBhbiBpc3N1ZVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzA5Olx0XHQgKiBiZWNhdXNlIHdlIGV4cGVjdCBhY2NvdW50X21tX3NjaGVkKCkgdG8gZ2V0XG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3MTAtXHRcdCAqIGNhbGxlZCBmYWlybHkgcmVndWxhcmx5IC0tIGF0IGEgaGlnaGVyIHJhdGVcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE3MjY9c3RhdGljIGlubGluZVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzI3OnZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzI4LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE5OTM9dm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTUtXHQvKlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxOTk2Olx0ICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS1cdTAwM2VjdXJyLVx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTk5Ny1cdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAwNjpzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG5rZXJuZWwvc2NoZWQvZmFpci5jLTIwMDctXHRcdFx0XHQgICAgczY0IGRlbHRhX2V4ZWMpIHsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBNeSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGlzIGNvZGUgY2hhbmdlIGFuZCBmaWd1cmUgb3V0IHRoZSBvcHRpbWFsIGFwcHJvYWNoIGZvciBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgc2V0dXBfbmV3X2V4ZWNgIGluIGBmcy9leGVjLmNgLiBJdCYjMzk7cyBhIG5vbi1zdGF0aWMgQVBJIGZ1bmN0aW9uLCBgdm9pZCBzZXR1cF9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKWAsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgdG8gc3RhcnQgd2l0aC4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSBpZiBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBpcyB0aGUgcmlnaHQgY2hvaWNlLiBNeSBtZW50YWwgY2hlY2tsaXN0IGZvciBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcyBwb3BzIHVwOiBzcGVjaWZpYyBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9ucywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBvbmVzIHRvIHByZXZlbnQgc2tld2VkIHRlc3RpbmcsIGFuZCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KCkFoYSEgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgdGhhdCBuZXcgbm9uLXN0YXRpYywgbm9uLWlubGluZSBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEdpdmVuIHRoZSBjcml0ZXJpYSwgdGhhdCBsb29rcyBwcm9taXNpbmchIFRoZW4gdGhlcmUgaXMgYHNldHVwX25ld19leGVjYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBiaW5hcnkgZXhlY3V0aW9uLgoKU28sIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgIHNlZW1zIHRvIGJlIHRoZSBrZXkgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBMZXQmIzM5O3MgbWFrZSB0aGF0IHRoZSBwcmltYXJ5IHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCwgYW5kIGBrZXJuZWwvc2NoZWQvZmFpci5jYCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFYC4gUXVpY2sgY2hlY2sgaW4gYGluaXQvS2NvbmZpZ2AgY29uZmlybXMgYENPTkZJR19TQ0hFRF9DQUNIRWAgaXMgYSBib29sZWFuLCBkZWZhdWx0cyB0byAmIzM0O3kmIzM0OywgYW5kIGRlcGVuZHMgb24gYFNNUGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfU0NIRURfQ0FDSEVgIGFuZCBgU01QYCBhcmUgZW5hYmxlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byBiZSByZWxldmFudC4KClRpbWUgdG8gZG91YmxlLWNoZWNrIGFsbCB0aG9zZSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBTQ0hFRF9DQUNIRWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ0hFRF9DQUNIRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAyMT1jb25maWcgTlVNQV9CQUxBTkNJTkdcbi0tXG5pbml0L0tjb25maWctMTAzMy1cbmluaXQvS2NvbmZpZzoxMDM0OmNvbmZpZyBTQ0hFRF9DQUNIRVxuaW5pdC9LY29uZmlnLTEwMzUtXHRib29sIFwmIzM0O0NhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1MAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleGVjdmVgIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHBvaW50cyB0byBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIGBleGVjdmVgLiBJIHNlZSB0aGF0IGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgaXMgdW5jb25kaXRpb25hbGx5IGNhbGxlZCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gQSBxdWljayBjcm9zcy1yZWZlcmVuY2Ugc2hvd3MgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZGVmaW5lZCBpZiBgQ09ORklHX1NDSEVEX0NBQ0hFYCBpcyBlbmFibGVkLCBhbmQgYENPTkZJR19TQ0hFRF9DQUNIRWAgaW4gdHVybiBkZXBlbmRzIG9uIGBDT05GSUdfU01QYC4gU28sIHRoZSBjb250ZXh0IGZvciB0aGlzIGNoZWNrIHRvIGJlIHJlbGV2YW50IGlzIGlmIGJvdGggYXJlIGVuYWJsZWQuCgpUaGVyZWZvcmUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBkZWZpbml0aXZlbHkgYFNDSEVEX0NBQ0hFYCBhbmQgYFNNUGAuIFRoZXNlIHdpbGwgYmUgZXNzZW50aWFsIGluIHJlY3JlYXRpbmcgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBhIGJ1ZyB0byBiZSB0cmlnZ2VyZWQuIEZ1cnRoZXIsIHRoZSBwcmltYXJ5IHN5bWJvbCBvZiBjb25jZXJuIGlzIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgLCBhcyB0aGF0IGlzIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHRoZSBzb3VyY2Ugb2Ygb3VyIHByb2JsZW0uIFRoaXMgaXMgYSBwb2ludCB0byBmb2N1cyBhbmFseXNpcy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjb3JlIGlzc3VlIGhlcmUgcmVsYXRlcyB0byB0aGUgc3luY2hyb25pemF0aW9uIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBleGVjdmVgIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBzeW5jaHJvbml6YXRpb24gd2hlbiB0aGUgYG9sZF9tbWAgaXMgZnJlZWQgd2hpbGUgaXQmIzM5O3MgcG90ZW50aWFsbHkgYmVpbmcgYWNjZXNzZWQgb24gb3RoZXIgQ1BVcyBiZWNhdXNlIG9mIGBTQ0hFRF9DQUNIRWAuIFRoaXMgc291bmRzIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCBtYWtpbmcgaXQgYSBoaWdoIHByaW9yaXR5IGZvciBpbnZlc3RpZ2F0aW9uLgoKQ29uc2lkZXJpbmcgZXZlcnl0aGluZywgSSB0aGluayB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gVGhlIHN5bmNocm9uaXphdGlvbiBoZXJlLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MgYW5kIGNhY2hlLWF3YXJlIHNjaGVkdWxpbmcsIGlzIGNvbXBsZXggZW5vdWdoIHRoYXQgZnV6emluZyBjb3VsZCBxdWlja2x5IHVuY292ZXIgaGlkZGVuIGNvcm5lciBjYXNlcy4KClNvLCBzZXR0aW5nIHRoZSByZXN1bHRzLCBJJiMzOTtsbCBuZWVkIGBFbmFibGVDb25maWdzYCBhcyBgWyYjMzQ7U0NIRURfQ0FDSEUmIzM0OywgJiMzNDtTTVAmIzM0O11gLCBgRm9jdXNTeW1ib2xzYCBhcyBgWyYjMzQ7c2NoZWRfY2FjaGVfZXhlY19kb25lJiMzNDtdYCwgYW5kIGEgYFJlYXNvbmluZ2AgdGhhdCBleHBsaWNpdGx5IGV4cGxhaW5zIHRoZSBSQ1Ugc3luY2hyb25pemF0aW9uIGFkZGVkIGJ5IHRoZSBwYXRjaCB3aGVuIGRyb3BwaW5nIHRoZSBvbGQgYG1tYCBkdXJpbmcgYGV4ZWNgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUvcmFjZXMgaW4gY2FjaGUtYXdhcmUgc2NoZWR1bGluZyAoYENPTkZJR19TQ0hFRF9DQUNIRWApLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DQUNIRSYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY2hlZF9jYWNoZV9leGVjX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0NIRURfQ0FDSEUmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2NoZWRfY2FjaGVfZXhlY19kb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2NoZWRfY2FjaGVfZXhlY19kb25lKCkgZHVyaW5nIGV4ZWNfbW1fcHV0X29sZCgpIGluIHRoZSBleGVjdmUgcGF0aCB0byB3YWl0IGZvciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGJlZm9yZSBkcm9wcGluZyB0aGUgb2xkIG1tX3N0cnVjdC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVyZSByZW1vdGUgQ1BVcyBleGVjdXRpbmcgYWNjb3VudF9tbV9zY2hlZCgpIHVuZGVyIENPTkZJR19TQ0hFRF9DQUNIRSBhY2Nlc3MgdGhlIG9sZCBtbS4gSXQgaXMgYSByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIGV4ZWMgY2hhbmdlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAsIHdoaWNoIGludm9rZXMgYHN5bmNocm9uaXplX3JjdSgpYCBpbiBgZXhlY19tbV9wdXRfb2xkKClgIGJlZm9yZSBgbW1wdXQob2xkX21tKWAgdG8gZW5zdXJlIHJlbW90ZSBDUFVzIGZpbmlzaCBkZXJlZmVyZW5jaW5nIHRoZSBvbGQgYG1tX3N0cnVjdGAgaW4gYGFjY291bnRfbW1fc2NoZWQoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBsaWZldGltZSBpc3N1ZSAocHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvZiBgb2xkX21tYCksIHdoaWNoIGZhbGxzIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgbG9naWMgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4YTI2NzI0ZDVlNWUzMTRlYjkxNTk2ZDhhZjZhNDQxOWUwYjNhYjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDA0OjI3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjYxOTRjMzg4MDc5ODAgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTkxNiw2ICYjNDM7OTE2LDcgQEAgc3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSkKIHsKIAlzZXRtYXhfbW1faGl3YXRlcl9yc3MoJmFtcDtjdXJyZW50LSZndDtzaWduYWwtJmd0O21heHJzcywgb2xkX21tKTsKIAltbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pOwomIzQzOwlzY2hlZF9jYWNoZV9leGVjX2RvbmUoKTsKIAltbXB1dChvbGRfbW0pOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggOGIzZDQ3YTMyNWNjYS4uNmFlMzFiZmZlMDQ5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMjQxNSwxMCAmIzQzOzI0MTUsMTQgQEAgc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgewogCWludCBjcHU7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKJiM0Mzt2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKTsKJiM0MzsKICNlbHNlCiAKIHN0cnVjdCBzY2hlZF9jYWNoZV9zdGF0IHsgfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCkgeyB9CiYjNDM7CiAjZW5kaWYKIAogI2lmbmRlZiBNT0RVTEUKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jCmluZGV4IDhkZmYzNzA1OWZhZjcuLmEzZDAxODU3MTdmN2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2ZhaXIuYwpAQCAtMTk4OSw2ICYjNDM7MTk4OSwxOCBAQCB2b2lkIGluaXRfc2NoZWRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXAtJmd0O3ByZWZlcnJlZF9sbGMgPSAtMTsKIH0KIAomIzQzOy8qIGV4ZWMoKSBoYXMgc3dpdGNoZWQgdG8gdGhlIG5ldyBtbSBhbmQgaXMgYWJvdXQgdG8gZHJvcCB0aGUgb2xkIG9uZS4gKi8KJiM0Mzt2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS0mZ3Q7Y3Vyci0mZ3Q7bW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLAomIzQzOwkgKiBzbyBhIHJlbW90ZSBDUFUgY2FuIHN0aWxsIGJlIHVzaW5nIHRoZSBvbGQgbW0uIFRoYXQgc2VjdGlvbiBydW5zIHdpdGgKJiM0MzsJICogcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgaXMgdGhlcmVmb3JlIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKJiM0MzsJICogc2VjdGlvbiwgc28gd2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgYmVmb3JlIHRoZSBtbSBnb2VzIGF3YXkuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0Mzt9CiYjNDM7CiAjZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBOZWVkKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBkaWZmLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGFkZGluZyBhIGNhbGwgdG8gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGlzLCBhZnRlciBgZXhlYygpYCBoYXMgc3VjY2Vzc2Z1bGx5IHN3aXRjaGVkIHRvIGEgbmV3IG1lbW9yeSBtb2RlbCAoYG1tYCksIHRvIGRlYWwgd2l0aCB0aGUgb2xkIG9uZS4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGEgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB0aGF0IGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoZSBjb21tZW50IHdpdGhpbiBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGlzIGtleS4gSXQmIzM5O3MgdGFsa2luZyBhYm91dCBob3cgYGFjY291bnRfbW1fc2NoZWQoKWAgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1gIG9uIGEgcmVtb3RlIENQVSBldmVuIGFmdGVyIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHVzaW5nIHRoZSBuZXcgbWVtb3J5IG1vZGVsLiBTcGVjaWZpY2FsbHksIGEgc2VjdGlvbiBydW5uaW5nIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCBpcyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZSBgc3luY2hyb25pemVfcmN1KClgIGlzIHRvIHdhaXQgZm9yIGFueSBsaW5nZXJpbmcgYWNjZXNzZXMgdG8gdGhlIG9sZCBgbW1gIGJlZm9yZSBpdCYjMzk7cyBkZWFsbG9jYXRlZCwgcHJlc3VtYWJseSB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLgoKSSBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB3aGF0IGBzY2hlZF9jYWNoZWAgaXMgYWN0dWFsbHkgYWJvdXQgYW5kIHdoYXQgYGFjY291bnRfbW1fc2NoZWRgIGlzIHVwIHRvIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGlzIHdvcnRoIHRoZSBleHRyYSBmZXcgbW9tZW50cyB0byBjaGVjayB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgbGlrZWx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYC4gQXJlIHRoZXNlIGRhdGEgc3RydWN0dXJlcyBvciBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBiZWluZyBzaGFyZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgY29uY3VycmVudCBhY2Nlc3M/IEJhc2VkIG9uIHRoZSBjb21tZW50LCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgaW50ZW5kZWQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiBvbiBgbW1gLiBJZiB0aGUgYG1tYCBpcyByZWxlYXNlZCBiZWZvcmUgdGhpcyBoYXBwZW5zLCBpdCBpcyB2ZXJ5IGxpa2VseSB0byBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgd2hpY2ggaXMgcmlnaHQgaW4gS01TQU4mIzM5O3Mgd2hlZWxob3VzZS4gSSYjMzk7ZCBleHBlY3QgdGhhdCBpZiB0aGlzIGNhbiBnbyB3cm9uZywgS01TQU4gd291bGQgaGF2ZSBhbHJlYWR5IGZvdW5kIGl0LCBob3dldmVyLCBpdCBpcyBiZXN0IHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBzaW1pbGFyIHBhdHRlcm5zLiBUaGlzIGlzIHNvbWV0aGluZyBLTVNBTiBjb3VsZCBkZWZpbml0ZWx5IGNhdGNoIGlmIHRoZXJlICppcyogYSByYWNlIG9uIHRoZSBgbW1gISBJdCB3b3VsZCBiZSBnb29kIHRvIHNlZSB3aGF0IHRoZSBmdXp6aW5nIHJlcG9ydHMgbG9vayBsaWtlIGluIHRoaXMgYXJlYSwgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2hlZF9jYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZGVidWcuYz0yMTQ9c3RhdGljIHNzaXplX3Rcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIxNTpzY2hlZF9jYWNoZV9lbmFibGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjE2LVx0XHRcdCBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjI0LVxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjI1Olx0c3lzY3RsX3NjaGVkX2NhY2hlX3VzZXIgPSB2YWw7XG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjYtXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyMjc6XHRzY2hlZF9jYWNoZV9hY3RpdmVfc2V0KCk7XG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjgtXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjMzLVxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjM0OnN0YXRpYyBpbnQgc2NoZWRfY2FjaGVfZW5hYmxlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjM1LXtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIzNjpcdHNlcV9wcmludGYobSwgXCYjMzQ7JWRcXG5cJiMzNDssIHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyKTtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIzNy1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIzOS1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0MDpzdGF0aWMgaW50IHNjaGVkX2NhY2hlX2VuYWJsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yNDEtXHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlscClcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0Mi17XG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyNDM6XHRyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgc2NoZWRfY2FjaGVfZW5hYmxlX3Nob3csIE5VTEwpO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQ0LX1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0NS1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2hlZF9jYWNoZV9lbmFibGVfZm9wcyA9IHtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0NzpcdC5vcGVuICAgICAgICAgICA9IHNjaGVkX2NhY2hlX2VuYWJsZV9vcGVuLFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjQ4Olx0LndyaXRlICAgICAgICAgID0gc2NoZWRfY2FjaGVfZW5hYmxlX3dyaXRlLFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQ5LVx0LnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NDktXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2VuYWJsZWRcJiMzNDssIDA2NDQsIGxsYywgTlVMTCxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjc1MDpcdFx0XHQgICAgXHUwMDI2c2NoZWRfY2FjaGVfZW5hYmxlX2ZvcHMpO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtNzUxLVx0ZGVidWdmc19jcmVhdGVfdTMyKFwmIzM0O2FnZ3JfdG9sZXJhbmNlXCYjMzQ7LCAwNjQ0LCBsbGMsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNDUyPXN0YXRpYyBpbnQgbGxjX2lkKGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDU5LVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDYwOnN0YXRpYyBpbmxpbmUgaW50IGdldF9zY2hlZF9jYWNoZV9zY2FsZShpbnQgbXVsKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDYxLXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0NzM9c3RhdGljIGJvb2wgZXhjZWVkX2xsY19jYXBhY2l0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1MTAtXHRcdCAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTExOlx0XHRzY2FsZSA9IGdldF9zY2hlZF9jYWNoZV9zY2FsZSgyNTYpO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTEyLVx0XHRpZiAoc2NhbGUgPT0gSU5UX01BWClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE1MjE9c3RhdGljIGJvb2wgaW52YWxpZF9sbGNfbnIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1MzItXHQgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTUzMzpcdHNjYWxlID0gZ2V0X3NjaGVkX2NhY2hlX3NjYWxlKDEpO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTM0LVx0aWYgKHNjYWxlID09IElOVF9NQVgpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNjE0PXZvaWQgbW1faW5pdF9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTYxNTpcdFx0ICAgc3RydWN0IHNjaGVkX2NhY2hlX3RpbWUgX19wZXJjcHUgKl9wY3B1X3NjaGVkKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjE2LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2MjAtXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxNjIxOlx0XHRzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZCA9IHBlcl9jcHVfcHRyKF9wY3B1X3NjaGVkLCBpKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTYyMi1cdFx0c3RydWN0IHJxICpycSA9IGNwdV9ycShpKTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2NTQ9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX21tX3NjaGVkKHN0cnVjdCBycSAqcnEsXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NTU6XHRcdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9jYWNoZV90aW1lICpwY3B1X3NjaGVkKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjU2LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2Nzc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZnJhY3Rpb25fbW1fc2NoZWQoc3RydWN0IHJxICpycSxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTY3ODpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZClcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTY3OS17XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzI3PXZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzI4LXtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTcyOTpcdHN0cnVjdCBzY2hlZF9jYWNoZV90aW1lICpwY3B1X3NjaGVkO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzMwLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwLVx1MDAzZW1tO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTczMy1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTczNDpcdGlmICghc2NoZWRfY2FjaGVfZW5hYmxlZCgpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzM1LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzc3PXN0YXRpYyB2b2lkIHRhc2tfdGlja19jYWNoZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzgyLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzgzOlx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3ODQtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE5Nzk9dm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTItLyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxOTkzOnZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTQte1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3NTM9YWxiX2JyZWFrX2xsYyhzdHJ1Y3QgbGJfZW52ICplbnYpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzU0LXtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3NTU6XHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NTYtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNzkyPXN0YXRpYyBib29sIG1pZ3JhdGVfZGVncmFkZXNfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGxiX2VudiAqZW52KVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc5My17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzk0Olx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzk1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTgzNj1zdGF0aWMgdm9pZCByZWNvcmRfc2dfbGxjX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODQyLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTg0MzpcdGlmICghc2NoZWRfY2FjaGVfZW5hYmxlZCgpIHx8IGVudi1cdTAwM2VpZGxlID09IENQVV9ORVdMWV9JRExFKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg0NC1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE4NzU9c3RhdGljIGlubGluZSBib29sIGxsY19iYWxhbmNlKHN0cnVjdCBsYl9lbnYgKmVudiwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg3Ny17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjExODc4Olx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODc5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTkzNz1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExOTY1LSNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE5NjY6XHRcdGlmIChzY2hlZF9jYWNoZV9lbmFibGVkKCkpIHtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE5NjctXHRcdFx0c3RydWN0IHNjaGVkX2RvbWFpbiAqc2RfdG1wO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTQxMzA9c3RhdGljIGlubGluZSB2b2lkIG1tX2NpZF9zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpIHsgfVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxMzMtI2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzNDpERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoc2NoZWRfY2FjaGVfcHJlc2VudCk7XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTM1OkRFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9hY3RpdmUpO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzNjpleHRlcm4gaW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtNDEzNy1leHRlcm4gdW5zaWduZWQgaW50IGxsY19hZ2dyX3RvbGVyYW5jZTtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTQxPWV4dGVybiB1bnNpZ25lZCBpbnQgbGxjX292ZXJhZ2dyX3BjdDtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDItXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTQzOnN0YXRpYyBpbmxpbmUgYm9vbCBzY2hlZF9jYWNoZV9lbmFibGVkKHZvaWQpXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQ0LXtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxNDU6XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZzY2hlZF9jYWNoZV9hY3RpdmUpO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtNDE0Ni19XG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQ3LVxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDE0ODpleHRlcm4gdm9pZCBzY2hlZF9jYWNoZV9hY3RpdmVfc2V0KHZvaWQpO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtNDE0OS1cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NDktLyogaGFyZHdhcmUgc3VwcG9ydCBmb3IgY2FjaGUgYXdhcmUgc2NoZWR1bGluZyAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6ODUwOkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX3ByZXNlbnQpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODUxLS8qXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODU0LSAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6ODU1OkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX2FjdGl2ZSk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NTYtLyogdXNlciB3YW50cyBjYWNoZSBhd2FyZSBzY2hlZHVsaW5nIFswIG9yIDFdICovXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NTc6aW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyID0gMTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg1OC1cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04OTE9c3RhdGljIGJvb2wgYWxsb2Nfc2RfbGxjKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLFxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk0Ni0gKi9cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk0NzpzdGF0aWMgdm9pZCBfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTQ4LXtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTItXHQvKiBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0ICovXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo5NTM6XHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpKSB7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo5NTQ6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNnNjaGVkX2NhY2hlX2FjdGl2ZSk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTUtXHRcdGlmIChzY2hlZF9kZWJ1ZygpKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk2NS1cdCAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTY2Olx0aWYgKHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyKSB7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo5Njc6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk2OC1cdFx0aWYgKHNjaGVkX2RlYnVnKCkpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTcwLVx0fSBlbHNlIHtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk3MTpcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk3Mi1cdFx0aWYgKHNjaGVkX2RlYnVnKCkpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTc3LS8qIHVzZWQgYnkgZGVidWdmcyAqL1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTc4OnZvaWQgc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTc5LXtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05ODEtXHRzY2hlZF9kb21haW5zX211dGV4X2xvY2soKTtcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk4MjpcdF9zY2hlZF9jYWNoZV9hY3RpdmVfc2V0KCk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05ODMtXHRzY2hlZF9kb21haW5zX211dGV4X3VubG9jaygpO1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTk5OT12b2lkIHNjaGVkX3VwZGF0ZV9sbGNfYnl0ZXModW5zaWduZWQgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDI3LVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MTAyODpzdGF0aWMgdm9pZCBzY2hlZF9jYWNoZV9zZXQoYm9vbCBoYXNfbXVsdGlfbGxjcylcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMjkte1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMzQtXHRpZiAoaGFzX211bHRpX2xsY3MpXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDM1Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTAzNi1cdGVsc2Vcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMzc6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTAzOC1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMzk6XHRfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCgpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTA0MC19XG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9MTA0Mj1zdGF0aWMgYm9vbCBhbGxvY19zZF9sbGMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTA0Ni19XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDQ3OnN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9zZXQoYm9vbCBoYXNfbXVsdGlfbGxjcykgeyB9XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDQ4LSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTMyODI9aW50IF9faW5pdCBzY2hlZF9pbml0X2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzMwMC1cdGlmICghZXJyKVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MzMwMTpcdFx0c2NoZWRfY2FjaGVfc2V0KG11bHRpX2xsY3MpO1xua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzMwMi1cbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz0zMzcwPXN0YXRpYyB2b2lkIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zX2xvY2tlZChpbnQgbmRvbXNfbmV3LCBjcHVtYXNrX3Zhcl90IGRvbXNfbmV3W10sXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzQzMy1cdFx0XHRcdCAqIGFuZCBhIG5ldyBzaW5nbGUtTExDIHBhcnRpdGlvbiBpcyBidWlsdCxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjM0MzQ6XHRcdFx0XHQgKiBzY2hlZF9jYWNoZV9zZXQoZmFsc2UpIGRpc2FibGVzIGNhY2hlLWF3YXJlXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDM1LVx0XHRcdFx0ICogc2NoZWR1bGluZyBnbG9iYWxseSBkZXNwaXRlIHRoZSByZXVzZWRcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDU3LVx0fVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MzQ1ODpcdHNjaGVkX2NhY2hlX3NldChoYXNfbXVsdGlfbGxjcyk7XG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBpc3N1ZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2lkZSBvZiB0aGluZ3MuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGxvb2sgYXQgdHdvIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG9mdGVuIGNvbWUgdXAgaW4gdGhpcyBraW5kIG9mIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBleGVjX21tX3B1dF9vbGRgIGFuZCBgYWNjb3VudF9tbV9zY2hlZGAuIFRob3NlIGFyZSB1c3VhbGx5IHRoZSBjdWxwcml0cyB3aGVuIEkmIzM5O20gY2hhc2luZyBkb3duIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBpbiBleGVjdXRpb24gYW5kIHNjaGVkdWxpbmcuIEhvcGVmdWxseSwgdW5kZXJzdGFuZGluZyBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2lsbCBzaGVkIHNvbWUgbGlnaHQuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGV5IGhhbmRsZSBwcm9jZXNzIG1lbW9yeSBjb250ZXh0cywgdGhlIGFjY291bnRpbmcgdGhleSYjMzk7cmUgZG9pbmcgYW5kIGxvb2sgZm9yIGFueSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxMDpcdFx0ZnV0ZXhfZXhlY19kb25lKHRzayk7XG4gOTExOlx0XHRyZXR1cm4gMDtcbiA5MTI6XHR9XG4gOTEzOlx0XG4gOTE0Olx0LyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xuIDkxNTpcdHN0YXRpYyB2b2lkIGV4ZWNfbW1fcHV0X29sZChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0pXG4gOTE2Olx0e1xuIDkxNzpcdFx0c2V0bWF4X21tX2hpd2F0ZXJfcnNzKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW1heHJzcywgb2xkX21tKTtcbiA5MTg6XHRcdG1tX3VwZGF0ZV9uZXh0X293bmVyKG9sZF9tbSk7XG4gOTE5Olx0XHRzY2hlZF9jYWNoZV9leGVjX2RvbmUoKTtcbiA5MjA6XHRcdG1tcHV0KG9sZF9tbSk7XG4gOTIxOlx0fVxuIDkyMjpcdFxuIDkyMzpcdHN0YXRpYyBpbnQgZGVfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIDkyNDpcdHtcbiA5MjU6XHRcdHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stXHUwMDNlc2lnbmFsO1xuIDkyNjpcdFx0c3RydWN0IHNpZ2hhbmRfc3RydWN0ICpvbGRzaWdoYW5kID0gdHNrLVx1MDAzZXNpZ2hhbmQ7XG4gOTI3Olx0XHRzcGlubG9ja190ICpsb2NrID0gXHUwMDI2b2xkc2lnaGFuZC1cdTAwM2VzaWdsb2NrO1xuIDkyODpcdFxuIDkyOTpcdFx0aWYgKHRocmVhZF9ncm91cF9lbXB0eSh0c2spKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU1CgkJCQkJCQlvdXRwdXQ6IDE3NgoJCQkJCQkJdGhvdWdodHM6IDU2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBQYXRjaCYjMzk7cyBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCwgYnV0IGxldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcyByaWdvcm91c2x5LgoKRmlyc3QsIEkgc2VlIHRoYXQgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBpcyB1c2luZyBgc3luY2hyb25pemVfcmN1KClgIGJlZm9yZSBjYWxsaW5nIGBtbXB1dChvbGRfbW0pYC4gVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBgYWNjb3VudF9tbV9zY2hlZCgpYCBvbiBhbm90aGVyIENQVSBtaWdodCBiZSBkZXJlZmVyZW5jaW5nIGBvbGRfbW1gIHdoaWxlIHRoZSBjb2RlIGlzIHJ1bm5pbmcgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkIG9yIHRoZSBydW5xdWV1ZSBsb2NrIGhlbGQuIElmIGBtbXB1dChvbGRfbW0pYCB3ZXJlIHRvIGZyZWUgdGhlIG1lbW9yeSBpbW1lZGlhdGVseSwgYSBVQUYgY291bGQgb2NjdXIsIHRyaWdnZXJpbmcgS0FTQU4uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkgc2VlIG5vIG5ldyBidWZmZXJzLCBzdHJ1Y3RzLCBzdGFjayB2YXJpYWJsZXMsIG9yIGZpZWxkcyBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3Mgbm8gcmVsaWFuY2Ugb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgd2l0aGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIGBzeW5jaHJvbml6ZV9yY3UoKWAgdG8gcHJldmVudCB0aGUgZGVzY3JpYmVkIHJhY2UuIFRoaXMgaXMgYWxsIGFib3V0IHNhZmVndWFyZGluZyB0aGUgbGlmZXRpbWUgb2YgYG9sZF9tbWAgYW5kIGVuc3VyaW5nIHNhZmUgY29uY3VycmVudCBhY2Nlc3MuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIG15IGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTmA6IHRoaXMgZmxhZyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHRoaW5ncyBsaWtlOiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzLCBvciBjaGFuZ2VzIGluIGhvdyB3ZSBkbyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoaXMgcGF0Y2ggaXMgbm9uZSBvZiB0aG9zZSB0aGluZ3MuIEl0JiMzOTtzIHNvbGVseSBhYm91dCBzeW5jaHJvbml6aW5nIGFjY2VzcyB0byBhIGBtbV9zdHJ1Y3RgIHRvIGF2b2lkIGEgVUFGLiBUaGlzIHBhdGNoIGlzIHRhY2tsaW5nIGEgY2xhc3NpYyBsaWZldGltZSBpc3N1ZSwgd2hpY2ggS0FTQU4sIExPQ0tERVAgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nLgoKSW4gc2hvcnQsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gSXQmIzM5O3MgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBwcmV2ZW50aW5nIGFuIHVuc2FmZSBkZXJlZmVyZW5jZSwgZGlyZWN0bHkgaW4gbGluZSB3aXRoIEtBU0FOJiMzOTtzIHJlc3BvbnNpYmlsaXRpZXMuIFRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBiZWNhdXNlIHRoZSBwYXRjaCYjMzk7cyBzb2xlIHB1cnBvc2UgaXMgdG8gc3luY2hyb25pemUgbWVtb3J5IGFjY2VzcyB0byBhdm9pZCB0aGlzIFVBRi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkmIzM5O20gcmVhZHkgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBpbnZva2VzIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBiZWZvcmUgYG1tcHV0KG9sZF9tbSlgIHRvIGVuc3VyZSByZW1vdGUgQ1BVcyBmaW5pc2ggZGVyZWZlcmVuY2luZyB0aGUgb2xkIGBtbV9zdHJ1Y3RgIGluIGBhY2NvdW50X21tX3NjaGVkKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBpbnZva2VzIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBiZWZvcmUgYG1tcHV0KG9sZF9tbSlgIHRvIGVuc3VyZSByZW1vdGUgQ1BVcyBmaW5pc2ggZGVyZWZlcmVuY2luZyB0aGUgb2xkIGBtbV9zdHJ1Y3RgIGluIGBhY2NvdW50X21tX3NjaGVkKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo0OS4yMjQ4MjQ4NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NTg5NzQ3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0FDSEVcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjaGVkX2NhY2hlX2V4ZWNfZG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBpbnZva2VzIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBiZWZvcmUgYG1tcHV0KG9sZF9tbSlgIHRvIGVuc3VyZSByZW1vdGUgQ1BVcyBmaW5pc2ggZGVyZWZlcmVuY2luZyB0aGUgb2xkIGBtbV9zdHJ1Y3RgIGluIGBhY2NvdW50X21tX3NjaGVkKClgLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBsaWZldGltZSBpc3N1ZSAocHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvZiBgb2xkX21tYCksIHdoaWNoIGZhbGxzIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgbG9naWMgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjc6NDkuMjI0ODI5NTQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5MTQ5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOGEyNjcyNGQ1ZTVlMzE0ZWI5MTU5NmQ4YWY2YTQ0MTllMGIzYWIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mjc6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXFxuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNjE5NGMzODgwNzk4MCAxMDA2NDRcXG4tLS0gYS9mcy9leGVjLmNcXG4rKysgYi9mcy9leGVjLmNcXG5AQCAtOTE2LDYgKzkxNiw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNfbW1fcHV0X29sZChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0pXFxuIHtcXG4gXFx0c2V0bWF4X21tX2hpd2F0ZXJfcnNzKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW1heHJzcywgb2xkX21tKTtcXG4gXFx0bW1fdXBkYXRlX25leHRfb3duZXIob2xkX21tKTtcXG4rXFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XFxuIFxcdG1tcHV0KG9sZF9tbSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLjZhZTMxYmZmZTA0OWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuQEAgLTI0MTUsMTAgKzI0MTUsMTQgQEAgc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQge1xcbiBcXHRpbnQgY3B1O1xcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIFxcbit2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKTtcXG4rXFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7IH07XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpIHsgfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjaWZuZGVmIE1PRFVMRVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xcbmluZGV4IDhkZmYzNzA1OWZhZjcuLmEzZDAxODU3MTdmN2IgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xcbisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG5AQCAtMTk4OSw2ICsxOTg5LDE4IEBAIHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdHAtXFx1MDAzZXByZWZlcnJlZF9sbGMgPSAtMTtcXG4gfVxcbiBcXG4rLyogZXhlYygpIGhhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IG1tIGFuZCBpcyBhYm91dCB0byBkcm9wIHRoZSBvbGQgb25lLiAqL1xcbit2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIGFjY291bnRfbW1fc2NoZWQoKSBkZXJlZmVyZW5jZXMgcnEtXFx1MDAzZWN1cnItXFx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcXG4rXFx0ICogc28gYSByZW1vdGUgQ1BVIGNhbiBzdGlsbCBiZSB1c2luZyB0aGUgb2xkIG1tLiBUaGF0IHNlY3Rpb24gcnVucyB3aXRoXFxuK1xcdCAqIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIGlzIHRoZXJlZm9yZSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXFxuK1xcdCAqIHNlY3Rpb24sIHNvIHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIGJlZm9yZSB0aGUgbW0gZ29lcyBhd2F5LlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK31cXG4rXFxuICNlbHNlIC8qIENPTkZJR19TQ0hFRF9DQUNIRSAqL1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo0OS42ODAzNDM5NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwMTIxMDUzMTEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DQUNIRVwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NoZWRfY2FjaGVfZXhlY19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzhhMjY3MjRkNWU1ZTMxNGViOTE1OTZkOGFmNmE0NDE5ZTBiM2FiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mjc6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjYxOTRjMzg4MDc5ODAgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTkxNiw2ICs5MTYsNyBAQCBzdGF0aWMgdm9pZCBleGVjX21tX3B1dF9vbGQoc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tKVxuIHtcbiBcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VtYXhyc3MsIG9sZF9tbSk7XG4gXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xuK1x0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XG4gXHRtbXB1dChvbGRfbW0pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLjZhZTMxYmZmZTA0OWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTI0MTUsMTAgKzI0MTUsMTQgQEAgc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQge1xuIFx0aW50IGNwdTtcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4rdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCk7XG4rXG4gI2Vsc2VcbiBcbiBzdHJ1Y3Qgc2NoZWRfY2FjaGVfc3RhdCB7IH07XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKSB7IH1cbitcbiAjZW5kaWZcbiBcbiAjaWZuZGVmIE1PRFVMRVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li5hM2QwMTg1NzE3ZjdiIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuKysrIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTE5ODksNiArMTk4OSwxOCBAQCB2b2lkIGluaXRfc2NoZWRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0cC1cdTAwM2VwcmVmZXJyZWRfbGxjID0gLTE7XG4gfVxuIFxuKy8qIGV4ZWMoKSBoYXMgc3dpdGNoZWQgdG8gdGhlIG5ldyBtbSBhbmQgaXMgYWJvdXQgdG8gZHJvcCB0aGUgb2xkIG9uZS4gKi9cbit2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBhY2NvdW50X21tX3NjaGVkKCkgZGVyZWZlcmVuY2VzIHJxLVx1MDAzZWN1cnItXHUwMDNlbW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLFxuK1x0ICogc28gYSByZW1vdGUgQ1BVIGNhbiBzdGlsbCBiZSB1c2luZyB0aGUgb2xkIG1tLiBUaGF0IHNlY3Rpb24gcnVucyB3aXRoXG4rXHQgKiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCBpcyB0aGVyZWZvcmUgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbFxuK1x0ICogc2VjdGlvbiwgc28gd2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgYmVmb3JlIHRoZSBtbSBnb2VzIGF3YXkuXG4rXHQgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK31cbitcbiAjZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo0OS42ODAzNDUyNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTk4MDA0Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gdGhlIFNjaGVkdWxlciBDYWNoZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGEgbW9kaWZpY2F0aW9uIHRvdWNoaW5nIHRoZSBleGVjdXRpb24gcGF0aCByZWxhdGVkIHRvIHByb2Nlc3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBzY2hlZHVsZXIgY2FjaGUuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzdHJhdGVnaWNhbGx5IHBsYWNpbmcgYSBjYWxsIHRvIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgd2l0aGluIGBleGVjX21tX3B1dF9vbGQoKWAgaW4gYGZzL2V4ZWMuY2AuIFRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd2hlbiBleGVjdXRpbmcgYSBuZXcgcHJvZ3JhbSBpbWFnZS4gTm93LCBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGl0c2VsZiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gT2YgY291cnNlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uLiBJZiBgQ09ORklHX1NDSEVEX0NBQ0hFYCBpcyAqbm90KiBlbmFibGVkLCBpdCdzIGRlZmluZWQgYXMgYW4gZW1wdHkgaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyB0aGUgd2hvbGUgdGhpbmcgYSBuby1vcCB1bmRlciBzdWNoIGNpcmN1bXN0YW5jZXMuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgdG8gc2VlIGhvdyB0aGF0J3MgY29uZmlndXJlZC4gQXNzdW1pbmcgYENPTkZJR19TQ0hFRF9DQUNIRWAgKmlzKiBlbmFibGVkLCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBvcGVyYXRpb24gaXMgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgLCB3aGVyZSBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGFjdHVhbGx5IGltcGxlbWVudHMgYSBjYWxsIHRvIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFNvLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uIGJlaGluZCB0aGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiB0aGUgY29udGV4dCBvZiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgUkNVIHN5bmNocm9uaXphdGlvbiBwb2ludC4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgKG9yIHVzZSBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdCkgdGhlIHJlbGV2YW50IGZpbGVzOiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCwgYGtlcm5lbC9zY2hlZC9mYWlyLmNgLCBhbmQgdGhlIEtjb25maWcgZm9yIGBDT05GSUdfU0NIRURfQ0FDSEVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhY2hlIGludmFsaWRhdGlvbiwgb3IgY2xlYW51cCBtZWNoYW5pc20uIEkgZXhwZWN0IHRvIHNlZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgc2NoZWR1bGVyJ3MgZmFpciBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBob3cgaXQgcmVsYXRlcyB0byBSQ1UncyBxdWllc2NlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyNzo1NS44NzgzNTMzNjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjQwNjI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTQ0hFRF9DQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTYxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtbV9jaWRfc2l6ZSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE2MjUtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE2MjY6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNjI3LXZvaWQgbW1faW5pdF9zY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9kZXN0cm95X3NjaGVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE2NDgtfVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNjQ5OiNlbHNlIC8qICFDT05GSUdfU0NIRURfQ0FDSEUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNjUyPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9kZXN0cm95X3NjaGVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTY1My1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTY1NDojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE2NTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODM1PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTQzMy1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTQzNDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0MzUtXFx0c3RydWN0IGNhbGxiYWNrX2hlYWRcXHRcXHRjYWNoZV93b3JrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTIzOTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGFza19tbV9jaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTI0MDAtXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjI0MDE6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yNDAyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oPTY2PXN0cnVjdCBzY2hlZF9kb21haW5fc2hhcmVkIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC04NC1cXHR9O1xcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaDo4NTojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTg2LVxcdHVuc2lnbmVkIGxvbmdcXHR1dGlsX2F2ZztcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD05MT1zdHJ1Y3Qgc2NoZWRfZG9tYWluIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0xMTktXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjEyMDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTEyMS1cXHR1bnNpZ25lZCBpbnQgbGxjX21heDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD0yNzg9c3RhdGljIGlubGluZSBpbnQgdGFza19ub2RlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0yODItXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjI4MzojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTI4NC1leHRlcm4gdm9pZCBzY2hlZF91cGRhdGVfbGxjX2J5dGVzKHVuc2lnbmVkIGludCBjcHUpO1xcbi0tXFxuaW5pdC9LY29uZmlnPTEwMjE9Y29uZmlnIE5VTUFfQkFMQU5DSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTAzMy1cXG5pbml0L0tjb25maWc6MTAzNDpjb25maWcgU0NIRURfQ0FDSEVcXG5pbml0L0tjb25maWctMTAzNS1cXHRib29sIFxcXCJDYWNoZSBhd2FyZSBsb2FkIGJhbGFuY2VcXFwiXFxuLS1cXG5pbml0L2luaXRfdGFzay5jPTEwNT1zdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrIF9fYWxpZ25lZChMMV9DQUNIRV9CWVRFUykgPSB7XFxuLS1cXG5pbml0L2luaXRfdGFzay5jLTIzMC0jZW5kaWZcXG5pbml0L2luaXRfdGFzay5jOjIzMTojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxuaW5pdC9pbml0X3Rhc2suYy0yMzItXFx0LnByZWZlcnJlZF9sbGMgID0gLTEsXFxuLS1cXG5rZXJuZWwvZXhpdC5jPTQ5MT12b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2V4aXQuYy01NDktXFxua2VybmVsL2V4aXQuYzo1NTA6I2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX0NBQ0hFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BX0JBTEFOQ0lORylcXG5rZXJuZWwvZXhpdC5jLTU1MS0vKlxcbi0tXFxua2VybmVsL2V4aXQuYz01NzE9c3RhdGljIGlubGluZSB2b2lkIGV4aXRfbW1fc2NoZWRfY2FjaGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTU3My19XFxua2VybmVsL2V4aXQuYzo1NzQ6I2VuZGlmIC8qIENPTkZJR19TQ0hFRF9DQUNIRSBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cXG5rZXJuZWwvZXhpdC5jLTU3NS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk1MT12b2lkIF9faW5pdCBzY2hlZF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwOTUtI2VuZGlmXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwOTctXFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZycS1cXHUwMDNlY3B1X2Vwb2NoX2xvY2spO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9MjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX3NjYWxpbmdfZm9wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIxMi1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyMTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIxNC1zdGF0aWMgc3NpemVfdFxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc0Ni1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NDc6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc0OC1cXHRsbGMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcImxsY19iYWxhbmNpbmdcXFwiLCBkZWJ1Z2ZzX3NjaGVkKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM5Nj1zdGF0aWMgczY0IHVwZGF0ZV9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQzNy1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0Mzg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQzOS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTk5Mz12b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDAzLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAwNDojZWxzZSAvKiBDT05GSUdfU0NIRURfQ0FDSEUgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTIwMDUtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTIwMjE9c3RhdGljIHZvaWQgYWNjb3VudF9sbGNfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDIyLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjAyMzojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMDI0LVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0zNjk2PXN0YXRpYyB2b2lkIHRhc2tfbnVtYV9wbGFjZW1lbnQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zNzc5LVxcdFxcdFxcdH1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjM3ODA6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzc4MS1cXHRcXHRcXHQvKlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDU0Mz1zdGF0aWMgaW5saW5lIGludCB0YXNrX2lzX2luZWxpZ2libGVfb25fZHN0X2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBkZXN0X2NwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA1NTMtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDU1NDojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDU1NS0vKlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTM5Mz1zdHJ1Y3Qgc2dfbGJfc3RhdHMge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTQxMi0jZW5kaWZcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjExNDEzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExNDE0LVxcdHVuc2lnbmVkIGludCBucl9wcmVmX2RzdF9sbGM7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExODE4PXNjaGVkX3JlZHVjZWRfY2FwYWNpdHkoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODI5LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4MzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4MzEtLypcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE5Mzc9c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3QgbGJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExOTY0LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE5NjU6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE5NjYtXFx0XFx0aWYgKHNjaGVkX2NhY2hlX2VuYWJsZWQoKSkge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMjczMD1zdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlX2ltYmFsYW5jZShzdHJ1Y3QgbGJfZW52ICplbnYsIHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjc2OS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyNzcwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyNzcxLVxcdGlmIChidXNpZXN0LVxcdTAwM2Vncm91cF90eXBlID09IGdyb3VwX2xsY19iYWxhbmNlKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEzMDgwPXN0YXRpYyBzdHJ1Y3QgcnEgKnNjaGVkX2JhbGFuY2VfZmluZF9zcmNfcnEoc3RydWN0IGxiX2VudiAqZW52LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzIzMS1cXHRcXHRjYXNlIG1pZ3JhdGVfbGxjX3Rhc2s6XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzIzMjojaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzIzMy1cXHRcXHRcXHRzZF90bXAgPSByY3VfZGVyZWZlcmVuY2VfYWxsKHJxLVxcdTAwM2VzZCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xMTU5PXN0cnVjdCBycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjE3LSNlbmRpZlxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjEyMTg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMTktXFx0cmF3X3NwaW5sb2NrX3RcXHRcXHRjcHVfZXBvY2hfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjM2LVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjEyMzc6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMzgtXFx0dW5zaWduZWQgaW50XFx0XFx0bnJfcHJlZl9sbGNfcnVubmluZztcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTQxMzA9c3RhdGljIGlubGluZSB2b2lkIG1tX2NpZF9zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpIHsgfVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtNDEzMi1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTMzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0FDSEVcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTM0LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9wcmVzZW50KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTYzMj1zdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZClcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY0MS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo2NDI6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY0My1cXHQvKiBvbmx5IHRoZSBib3R0b20gc2QgaGFzIGxsY19jb3VudHMgYXJyYXkgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTc0Nj1jcHVfYXR0YWNoX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgc3RydWN0IHJvb3RfZG9tYWluICpyZCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTc5Ny1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo3OTg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTc5OS1cXHRcXHRcXHQvKiBtb3ZlIGJ1ZmZlciB0byBwYXJlbnQgYXMgY2hpbGQgaXMgYmVpbmcgZGVzdHJveWVkICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg0Ny1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NDg6I2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg0OS0vKiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjYWNoZSBhd2FyZSBzY2hlZHVsaW5nICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI3OjU3LjQyMDc2NTA4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzY3MzkxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDT05GSUdfU0NIRURfQ0FDSEUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19TQ0hFRF9DQUNIRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIHRoZSBkZWZpbml0aXZlIGd1aWRlIGluIHRoZXNlIHNpdHVhdGlvbnM6IGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyDigJMgdGhlIGRlZmF1bHQgdmFsdWVzLCBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2hlZHVsZXIgY2FjaGUgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBhbiBlZHVjYXRlZCBhc3Nlc3NtZW50IG9uIGl0cyByZWxldmFuY2UuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODowMy44NTc1MDYzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzA6XFx0XFx0ICBpdCBoYXMgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSB0aGUgdGFzayBpcyBydW5uaW5nIG9uLlxcbjEwMzE6XFx0XFxuMTAzMjpcXHRcXHQgIFRoaXMgc3lzdGVtIHdpbGwgYmUgaW5hY3RpdmUgb24gVU1BIHN5c3RlbXMuXFxuMTAzMzpcXHRcXG4xMDM0OlxcdGNvbmZpZyBTQ0hFRF9DQUNIRVxcbjEwMzU6XFx0XFx0Ym9vbCBcXFwiQ2FjaGUgYXdhcmUgbG9hZCBiYWxhbmNlXFxcIlxcbjEwMzY6XFx0XFx0ZGVmYXVsdCB5XFxuMTAzNzpcXHRcXHRkZXBlbmRzIG9uIFNNUFxcbjEwMzg6XFx0XFx0aGVscFxcbjEwMzk6XFx0XFx0ICBXaGVuIGVuYWJsZWQsIHRoZSBzY2hlZHVsZXIgd2lsbCBhdHRlbXB0IHRvIGFnZ3JlZ2F0ZSB0YXNrcyBmcm9tXFxuMTA0MDpcXHRcXHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXFxuMTA0MTpcXHRcXHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxcbjEwNDI6XFx0XFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxcbjEwNDM6XFx0XFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTA0NjpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDQ3OlxcdFxcdGRlZmF1bHQgeVxcbjEwNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwNDk6XFx0XFx0aGVscFxcbjEwNTA6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDUxOlxcdFxcdCAgbWFjaGluZS5cXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNTQ6XFx0XFx0Ym9vbFxcbjEwNTU6XFx0XFxuMTA1NjpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDU3OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDU4OlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDU5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjg6MDMuODU3NjIzNjA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2NTYyOTE2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsOiBDb2RlIExvY2F0aW9ucyB0byBFeHBsb3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBzcGVjaWZpYyBjb2RlIGxvY2F0aW9ucy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvZXhlYy5jYCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDkxNi4gVGhhdCBhcmVhIGxpa2VseSBoYW5kbGVzIHRoZSBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBkdXJpbmcgcHJvY2VzcyBleGVjdXRpb24sIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFNpbXVsdGFuZW91c2x5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYGtlcm5lbC9zY2hlZC9mYWlyLmNgIGFyb3VuZCBsaW5lIDE5ODkuIFRoaXMgc2hvdWxkIGdpdmUgc29tZSBpbnNpZ2h0IGludG8gc2NoZWR1bGluZyBhbmQgcG9zc2libHkgaG93IGV4ZWN1dGlvbiBwcmlvcml0eSBvciByZXNvdXJjZSBhbGxvY2F0aW9uIG1pZ2h0IHBsYXkgYSByb2xlIGluIHdoYXRldmVyJ3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGVzZSB0d28gYXJlYXMgdG8gcHJvdmlkZSB0aGUgbW9zdCByZWxldmFudCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODoxOC41MTM5MTczNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwNTpcXHRcXHRcXHQvKiBEZWZlciB0ZWFyZG93biB0byBzZXR1cF9uZXdfZXhlYygpLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbiA5MDY6XFx0XFx0XFx0YnBybS1cXHUwMDNlb2xkX21tID0gb2xkX21tO1xcbiA5MDc6XFx0XFx0fSBlbHNlIHtcXG4gOTA4OlxcdFxcdFxcdG1tZHJvcF9sYXp5X3RsYihhY3RpdmVfbW0pO1xcbiA5MDk6XFx0XFx0fVxcbiA5MTA6XFx0XFx0ZnV0ZXhfZXhlY19kb25lKHRzayk7XFxuIDkxMTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEyOlxcdH1cXG4gOTEzOlxcdFxcbiA5MTQ6XFx0LyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbiA5MTU6XFx0c3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcXG4gOTE2OlxcdHtcXG4gOTE3OlxcdFxcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VtYXhyc3MsIG9sZF9tbSk7XFxuIDkxODpcXHRcXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xcbiA5MTk6XFx0XFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XFxuIDkyMDpcXHRcXHRtbXB1dChvbGRfbW0pO1xcbiA5MjE6XFx0fVxcbiA5MjI6XFx0XFxuIDkyMzpcXHRzdGF0aWMgaW50IGRlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcdHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stXFx1MDAzZXNpZ25hbDtcXG4gOTI2OlxcdFxcdHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqb2xkc2lnaGFuZCA9IHRzay1cXHUwMDNlc2lnaGFuZDtcXG4gOTI3OlxcdFxcdHNwaW5sb2NrX3QgKmxvY2sgPSBcXHUwMDI2b2xkc2lnaGFuZC1cXHUwMDNlc2lnbG9jaztcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9lbXB0eSh0c2spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODoxOC41MTQwMjQ5NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg0NzA3NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ0ZTIFNjaGVkdWxlcioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQ29tcGxldGVseSBGYWlyIFNjaGVkdWxlciAoQ0ZTKS4gVGltZSB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIENGUyBtYWdpYyBoYXBwZW5zLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBzY3J1dGlueSBhcm91bmQgbGluZXMgMTk3MCB0byAyMDIwLiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIGNvcmUgbG9naWMgYXJvdW5k4oCmIHdlbGwsIEknbGwgZmlndXJlIGl0IG91dCBvbmNlIEknbSBpbiB0aGVyZS4gSG9wZWZ1bGx5LCB0aGF0IHJhbmdlIHdpbGwgYmUgcmVsZXZhbnQgdG8gd2hhdGV2ZXIgaXNzdWUgSSBoYXZlIGluIG1pbmQuIE5vdywgbGV0J3Mgb3BlbiB1cCB0aGF0IGZpbGUgYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODoyMC41OTg3MzUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM5MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXHRcXHQgKiAgICB0aGUgb3B0aW1hbCBwZXJmb3JtYW5jZSBnYWluIHNvIGZhci5cXG4xOTcxOlxcdFxcdFxcdCAqL1xcbjE5NzI6XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlc2Nfc3RhdC5jcHUsIG1fYV9jcHUpO1xcbjE5NzM6XFx0XFx0fVxcbjE5NzQ6XFx0XFxuMTk3NTpcXHRcXHR1cGRhdGVfYXZnX3NjYWxlKFxcdTAwMjZtbS1cXHUwMDNlc2Nfc3RhdC5ucl9ydW5uaW5nX2F2ZywgbnJfcnVubmluZyk7XFxuMTk3NjpcXHRcXHRmcmVlX2NwdW1hc2tfdmFyKGNwdXMpO1xcbjE5Nzc6XFx0fVxcbjE5Nzg6XFx0XFxuMTk3OTpcXHR2b2lkIGluaXRfc2NoZWRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbjE5ODA6XFx0e1xcbjE5ODE6XFx0XFx0c3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmsgPSBcXHUwMDI2cC1cXHUwMDNlY2FjaGVfd29yaztcXG4xOTgyOlxcdFxcbjE5ODM6XFx0XFx0aW5pdF90YXNrX3dvcmsod29yaywgdGFza19jYWNoZV93b3JrKTtcXG4xOTg0OlxcdFxcdHdvcmstXFx1MDAzZW5leHQgPSB3b3JrO1xcbjE5ODU6XFx0XFx0LypcXG4xOTg2OlxcdFxcdCAqIFJlc2V0IG5ldyB0YXNrJ3MgcHJlZmVyZW5jZSB0byBhdm9pZFxcbjE5ODc6XFx0XFx0ICogcG9sbHV0aW5nIGFjY291bnRfbGxjX2VucXVldWUoKS5cXG4xOTg4OlxcdFxcdCAqL1xcbjE5ODk6XFx0XFx0cC1cXHUwMDNlcHJlZmVycmVkX2xsYyA9IC0xO1xcbjE5OTA6XFx0fVxcbjE5OTE6XFx0XFxuMTk5MjpcXHQvKiBleGVjKCkgaGFzIHN3aXRjaGVkIHRvIHRoZSBuZXcgbW0gYW5kIGlzIGFib3V0IHRvIGRyb3AgdGhlIG9sZCBvbmUuICovXFxuMTk5MzpcXHR2b2lkIHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSh2b2lkKVxcbjE5OTQ6XFx0e1xcbjE5OTU6XFx0XFx0LypcXG4xOTk2OlxcdFxcdCAqIGFjY291bnRfbW1fc2NoZWQoKSBkZXJlZmVyZW5jZXMgcnEtXFx1MDAzZWN1cnItXFx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcXG4xOTk3OlxcdFxcdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxcbjE5OTg6XFx0XFx0ICogcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgaXMgdGhlcmVmb3JlIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWxcXG4xOTk5OlxcdFxcdCAqIHNlY3Rpb24sIHNvIHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIGJlZm9yZSB0aGUgbW0gZ29lcyBhd2F5LlxcbjIwMDA6XFx0XFx0ICovXFxuMjAwMTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4yMDAyOlxcdH1cXG4yMDAzOlxcdFxcbjIwMDQ6XFx0I2Vsc2UgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXFxuMjAwNTpcXHRcXG4yMDA2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X21tX3NjaGVkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4yMDA3OlxcdFxcdFxcdFxcdFxcdCAgICBzNjQgZGVsdGFfZXhlYykgeyB9XFxuMjAwODpcXHRcXG4yMDA5OlxcdHZvaWQgaW5pdF9zY2hlZF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgfVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRzdGF0aWMgdm9pZCB0YXNrX3RpY2tfY2FjaGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7IH1cXG4yMDEyOlxcdFxcbjIwMTM6XFx0c3RhdGljIGlubGluZSBpbnQgZ2V0X3ByZWZfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4yMDE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4yMDE1OlxcdHtcXG4yMDE2OlxcdFxcdHJldHVybiAtMTtcXG4yMDE3OlxcdH1cXG4yMDE4OlxcdFxcbjIwMTk6XFx0c3RhdGljIHZvaWQgYWNjb3VudF9sbGNfZW5xdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI4OjIwLjYwMDg4MTE0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYxMzUxMzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgc2NoZWRfY2FjaGVfZXhlY19kb25lYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGlzIHVuZGVyc3RhbmRpbmcgKndoYXQqIHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgKndoeSogaXQncyBiZWVuIGFkZGVkLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgaW4gdGhlIGBleGVjdmVgIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4ZWMuY2AsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHVwIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGUga2V5IGlzIGBleGVjX21tX3B1dF9vbGQoKWAgYmVpbmcgY2FsbGVkIHdpdGhpbiBgc2V0dXBfbmV3X2V4ZWMoKWAuIFdoZW4gYSB0YXNrIGV4ZWN1dGVzIGBleGVjdmVgLCBpdCBzd2l0Y2hlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dCAoYG1tYCkgdG8gYSBuZXcgb25lIGFuZCB0aGVuIHRoZSBvbGQgb25lIGdvZXMgdG8gYGV4ZWNfbW1fcHV0X29sZCgpYC4gVGhpcyBjYWxscyBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgLCB3aGljaCBkb2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBiZWZvcmUgY2FsbGluZyBgbW1wdXQob2xkX21tKWAuXG5cblNvLCB3aGF0J3MgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgKmFjdHVhbGx5KiBkb2luZz8gSXQncyBhZGRpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIGJlZm9yZSBmcmVlaW5nIHRoZSBvbGQgYG1tYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IGFueSByZW1vdGUgQ1BVIHJ1bm5pbmcgYGFjY291bnRfbW1fc2NoZWQoKWAg4oCTIHdoaWNoIHVzZXMgYHJxLVx1MDAzZWN1cnItXHUwMDNlbW1gIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sg4oCTIGZpbmlzaGVzIHdpdGggaXRzIGFjY2VzcyB0byB0aGUgYG9sZF9tbWAgYmVmb3JlIHRoYXQgYG9sZF9tbWAgZ2V0cyBmcmVlZC4gSXQncyBhIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gSSBuZWVkIHRvIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGZzL2V4ZWMuY2AgKHRoZSBgZXhlY3ZlYCBwYXRoKSBhbmQgdGhlIHNjaGVkdWxlciAoYGtlcm5lbC9zY2hlZC9mYWlyLmNgKS4gVGhlIGNvZGUgbW9kaWZpZXMgYW5kIGFkZHMgYHN5bmNocm9uaXplX3JjdSgpYCB3aGljaCBpcyBhIHN5bmNocm9uaXphdGlvbiBzdGVwLCBzbyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBldmVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBTbywgYmFzZWQgb24gdGhlIGNyaXRlcmlhLCAqV29ydGhGdXp6aW5nID0gdHJ1ZSouIEl0J3Mgbm90IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBsb2dnaW5nLCBpdCdzIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGNoYW5nZS5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBmb2N1cyBzeW1ib2xzLiBXaGF0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgc2hvdWxkIEkgaGVhdmlseSBmdXp6P1xuXG5gc2NoZWRfY2FjaGVfZXhlY19kb25lYCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0J3MgYSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbiAoYHZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpYCkgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYC4gVGhpcyBtZWFucyBpdCdzIGFuIEFQSSBlbnRyeXBvaW50LiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgcGF0aC5cblxuU28sIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBmb3IgaGVhdnkgZnV6emluZywgYXMgaXQncyB0aGUgc3BlY2lmaWMgc3luY2hyb25pemF0aW9uIHBvaW50IGJlaW5nIGludHJvZHVjZWQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHN1Y2ggYXMgYGV4ZWNfbW1fcHV0X29sZGAsIG9yIG90aGVyIGZ1bmN0aW9ucyBjYWxsZWQgaW4gaXRzIHBhdGgsIGFyZSByZWxldmFudCB0byBmdXp6IGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODo0NS4yMTQzOTc3MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI1Mzg0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY19tbV9wdXRfb2xkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz04NDM9c3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy05MTQtLyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbmZzL2V4ZWMuYzo5MTU6c3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcXG5mcy9leGVjLmMtOTE2LXtcXG4tLVxcbmZzL2V4ZWMuYz0xMzYyPXZvaWQgc2V0dXBfbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTM4MC1cXHRpZiAoYnBybS1cXHUwMDNlb2xkX21tKSB7XFxuZnMvZXhlYy5jOjEzODE6XFx0XFx0ZXhlY19tbV9wdXRfb2xkKGJwcm0tXFx1MDAzZW9sZF9tbSk7XFxuZnMvZXhlYy5jLTEzODItXFx0XFx0YnBybS1cXHUwMDNlb2xkX21tID0gTlVMTDtcXG4tLVxcbmZzL2V4ZWMuYz0xNDU4PXN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTE0NzQtXFx0aWYgKGJwcm0tXFx1MDAzZW9sZF9tbSlcXG5mcy9leGVjLmM6MTQ3NTpcXHRcXHRleGVjX21tX3B1dF9vbGQoYnBybS1cXHUwMDNlb2xkX21tKTtcXG5mcy9leGVjLmMtMTQ3Ni1cXHRkb19jbG9zZV9leGVjYXQoYnBybS1cXHUwMDNlZmlsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI4OjQ2Ljg3Njk0MTgzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODk5NDY0NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBTY2hlZHVsZXIgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgYWNjb3VudCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIHNjaGVkdWxlciwgZXNwZWNpYWxseSB0aGUgZmFpciBzY2hlZHVsZXIsIGJlIGhhbmRsZWQ/IE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBnb2luZyB0byBiZSBzb21ld2hlcmUgd2l0aGluIHRoZSBga2VybmVsL3NjaGVkL2ZhaXIuY2AgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBDRlMsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYW55IG1lbW9yeSBhY2NvdW50aW5nIHJlbGF0ZWQgdG8gc2NoZWR1bGluZyB3b3VsZCBiZSBwbHVtYmVkIHRocm91Z2ggdGhlcmUuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGRpdmluZyBpbnRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBhY2NvdW50X21tX3NjaGVkYCBmdW5jdGlvbiwgb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGxvb2sgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZy4gSSBzdXNwZWN0IEkgbWlnaHQgZmluZCBzb21lIGNydWNpYWwgbG9naWMgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODo1Mi43NzY0MDg3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDIwOTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY2NvdW50X21tX3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmM9MTM1Nj12b2lkIHBvc3RfaW5pdF9lbnRpdHlfdXRpbF9hdmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMzkzLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5NDpzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEzOTUtXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMzk2PXN0YXRpYyBzNjQgdXBkYXRlX3NlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDE3LVxcdFxcdGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKHJ1bm5pbmcsIGRlbHRhX2V4ZWMpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTQxODpcXHRcXHRhY2NvdW50X21tX3NjaGVkKHJxLCBydW5uaW5nLCBkZWx0YV9leGVjKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MTktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2OTI9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTcwOC1cXHRcXHQgKiBjYWxsZWQsIGhvd2V2ZXIgaXQgaXMgbm90IG11Y2ggb2YgYW4gaXNzdWVcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE3MDk6XFx0XFx0ICogYmVjYXVzZSB3ZSBleHBlY3QgYWNjb3VudF9tbV9zY2hlZCgpIHRvIGdldFxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTcxMC1cXHRcXHQgKiBjYWxsZWQgZmFpcmx5IHJlZ3VsYXJseSAtLSBhdCBhIGhpZ2hlciByYXRlXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE3MjY9c3RhdGljIGlubGluZVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTcyNzp2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzNjQgZGVsdGFfZXhlYylcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3Mjgte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xOTkzPXZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE5OTUtXFx0LypcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE5OTY6XFx0ICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS1cXHUwMDNlY3Vyci1cXHUwMDNlbW0gd2l0aCB0aGUgcnEgbG9jayBoZWxkLFxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTk5Ny1cXHQgKiBzbyBhIHJlbW90ZSBDUFUgY2FuIHN0aWxsIGJlIHVzaW5nIHRoZSBvbGQgbW0uIFRoYXQgc2VjdGlvbiBydW5zIHdpdGhcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjIwMDY6c3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjAwNy1cXHRcXHRcXHRcXHQgICAgczY0IGRlbHRhX2V4ZWMpIHsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyODo1NC4yNzY2MjM1MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4MjY2MjQyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgTXkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgY29kZSBjaGFuZ2UgYW5kIGZpZ3VyZSBvdXQgdGhlIG9wdGltYWwgYXBwcm9hY2ggZm9yIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBzZXR1cF9uZXdfZXhlY2AgaW4gYGZzL2V4ZWMuY2AuIEl0J3MgYSBub24tc3RhdGljIEFQSSBmdW5jdGlvbiwgYHZvaWQgc2V0dXBfbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlgLCB3aGljaCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIHRvIHN0YXJ0IHdpdGguIFRoZW4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgdGhlIHJpZ2h0IGNob2ljZS4gTXkgbWVudGFsIGNoZWNrbGlzdCBmb3IgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgcG9wcyB1cDogc3BlY2lmaWMgbm9uLWhvdC1wYXRoIGtlcm5lbCBmdW5jdGlvbnMsIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggb25lcyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0aW5nLCBhbmQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuXG5cbkFoYSEgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgdGhhdCBuZXcgbm9uLXN0YXRpYywgbm9uLWlubGluZSBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEdpdmVuIHRoZSBjcml0ZXJpYSwgdGhhdCBsb29rcyBwcm9taXNpbmchIFRoZW4gdGhlcmUgaXMgYHNldHVwX25ld19leGVjYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBiaW5hcnkgZXhlY3V0aW9uLlxuXG5TbywgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIExldCdzIG1ha2UgdGhhdCB0aGUgcHJpbWFyeSB0YXJnZXQuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEluIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgLCBhbmQgYGtlcm5lbC9zY2hlZC9mYWlyLmNgLCBpdCdzIGNsZWFyIHRoYXQgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZWAgaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRWAuIFF1aWNrIGNoZWNrIGluIGBpbml0L0tjb25maWdgIGNvbmZpcm1zIGBDT05GSUdfU0NIRURfQ0FDSEVgIGlzIGEgYm9vbGVhbiwgZGVmYXVsdHMgdG8gXCJ5XCIsIGFuZCBkZXBlbmRzIG9uIGBTTVBgLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX1NDSEVEX0NBQ0hFYCBhbmQgYFNNUGAgYXJlIGVuYWJsZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgcmVsZXZhbnQuXG5cblRpbWUgdG8gZG91YmxlLWNoZWNrIGFsbCB0aG9zZSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBTQ0hFRF9DQUNIRWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MjMuMTAzMjUxNjQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NjI0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ0hFRF9DQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAyMT1jb25maWcgTlVNQV9CQUxBTkNJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDMzLVxcbmluaXQvS2NvbmZpZzoxMDM0OmNvbmZpZyBTQ0hFRF9DQUNIRVxcbmluaXQvS2NvbmZpZy0xMDM1LVxcdGJvb2wgXFxcIkNhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MjQuNjE3ODgwOTg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxOTg1NzkzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleGVjdmVgIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBwb2ludHMgdG8gYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGR1cmluZyBgZXhlY3ZlYC4gSSBzZWUgdGhhdCBgc2NoZWRfY2FjaGVfZXhlY19kb25lKClgIGlzIHVuY29uZGl0aW9uYWxseSBjYWxsZWQgd2l0aGluIGBleGVjX21tX3B1dF9vbGQoKWAgaW4gYGZzL2V4ZWMuY2AuIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHNob3dzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGRlZmluZWQgaWYgYENPTkZJR19TQ0hFRF9DQUNIRWAgaXMgZW5hYmxlZCwgYW5kIGBDT05GSUdfU0NIRURfQ0FDSEVgIGluIHR1cm4gZGVwZW5kcyBvbiBgQ09ORklHX1NNUGAuIFNvLCB0aGUgY29udGV4dCBmb3IgdGhpcyBjaGVjayB0byBiZSByZWxldmFudCBpcyBpZiBib3RoIGFyZSBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBkZWZpbml0aXZlbHkgYFNDSEVEX0NBQ0hFYCBhbmQgYFNNUGAuIFRoZXNlIHdpbGwgYmUgZXNzZW50aWFsIGluIHJlY3JlYXRpbmcgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBhIGJ1ZyB0byBiZSB0cmlnZ2VyZWQuIEZ1cnRoZXIsIHRoZSBwcmltYXJ5IHN5bWJvbCBvZiBjb25jZXJuIGlzIGBzY2hlZF9jYWNoZV9leGVjX2RvbmVgLCBhcyB0aGF0IGlzIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHRoZSBzb3VyY2Ugb2Ygb3VyIHByb2JsZW0uIFRoaXMgaXMgYSBwb2ludCB0byBmb2N1cyBhbmFseXNpcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY29yZSBpc3N1ZSBoZXJlIHJlbGF0ZXMgdG8gdGhlIHN5bmNocm9uaXphdGlvbiBoYXBwZW5pbmcgd2l0aGluIHRoZSBgZXhlY3ZlYCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgc3luY2hyb25pemF0aW9uIHdoZW4gdGhlIGBvbGRfbW1gIGlzIGZyZWVkIHdoaWxlIGl0J3MgcG90ZW50aWFsbHkgYmVpbmcgYWNjZXNzZWQgb24gb3RoZXIgQ1BVcyBiZWNhdXNlIG9mIGBTQ0hFRF9DQUNIRWAuIFRoaXMgc291bmRzIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCBtYWtpbmcgaXQgYSBoaWdoIHByaW9yaXR5IGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5Db25zaWRlcmluZyBldmVyeXRoaW5nLCBJIHRoaW5rIHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgc3luY2hyb25pemF0aW9uIGhlcmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgY2FjaGUtYXdhcmUgc2NoZWR1bGluZywgaXMgY29tcGxleCBlbm91Z2ggdGhhdCBmdXp6aW5nIGNvdWxkIHF1aWNrbHkgdW5jb3ZlciBoaWRkZW4gY29ybmVyIGNhc2VzLlxuXG5Tbywgc2V0dGluZyB0aGUgcmVzdWx0cywgSSdsbCBuZWVkIGBFbmFibGVDb25maWdzYCBhcyBgW1wiU0NIRURfQ0FDSEVcIiwgXCJTTVBcIl1gLCBgRm9jdXNTeW1ib2xzYCBhcyBgW1wic2NoZWRfY2FjaGVfZXhlY19kb25lXCJdYCwgYW5kIGEgYFJlYXNvbmluZ2AgdGhhdCBleHBsaWNpdGx5IGV4cGxhaW5zIHRoZSBSQ1Ugc3luY2hyb25pemF0aW9uIGFkZGVkIGJ5IHRoZSBwYXRjaCB3aGVuIGRyb3BwaW5nIHRoZSBvbGQgYG1tYCBkdXJpbmcgYGV4ZWNgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUvcmFjZXMgaW4gY2FjaGUtYXdhcmUgc2NoZWR1bGluZyAoYENPTkZJR19TQ0hFRF9DQUNIRWApLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NTAsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjI5OjMwLjgxNjQ2Mjg3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDA4MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DQUNIRVwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NoZWRfY2FjaGVfZXhlY19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DQUNIRVwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NoZWRfY2FjaGVfZXhlY19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKSBkdXJpbmcgZXhlY19tbV9wdXRfb2xkKCkgaW4gdGhlIGV4ZWN2ZSBwYXRoIHRvIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQgbW1fc3RydWN0LiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZXJlIHJlbW90ZSBDUFVzIGV4ZWN1dGluZyBhY2NvdW50X21tX3NjaGVkKCkgdW5kZXIgQ09ORklHX1NDSEVEX0NBQ0hFIGFjY2VzcyB0aGUgb2xkIG1tLiBJdCBpcyBhIHJlYWNoYWJsZSBjb3JlIHNjaGVkdWxlciBhbmQgZXhlYyBjaGFuZ2Ugd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MzAuODkwODc5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTI5MDQwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozMC44OTE1Nzc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY5OTIyMDA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4YTI2NzI0ZDVlNWUzMTRlYjkxNTk2ZDhhZjZhNDQxOWUwYjNhYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjI3OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA3NDVmNmViNTI3OWU2Li42MTk0YzM4ODA3OTgwIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4rKysgYi9mcy9leGVjLmNcbkBAIC05MTYsNiArOTE2LDcgQEAgc3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcbiB7XG4gXHRzZXRtYXhfbW1faGl3YXRlcl9yc3MoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbWF4cnNzLCBvbGRfbW0pO1xuIFx0bW1fdXBkYXRlX25leHRfb3duZXIob2xkX21tKTtcbitcdHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpO1xuIFx0bW1wdXQob2xkX21tKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi42YWUzMWJmZmUwNDllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0yNDE1LDEwICsyNDE1LDE0IEBAIHN0cnVjdCBzY2hlZF9jYWNoZV9zdGF0IHtcbiBcdGludCBjcHU7XG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuK3ZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpO1xuK1xuICNlbHNlXG4gXG4gc3RydWN0IHNjaGVkX2NhY2hlX3N0YXQgeyB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZCkgeyB9XG4rXG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBNT0RVTEVcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuaW5kZXggOGRmZjM3MDU5ZmFmNy4uYTNkMDE4NTcxN2Y3YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbkBAIC0xOTg5LDYgKzE5ODksMTggQEAgdm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHAtXHUwMDNlcHJlZmVycmVkX2xsYyA9IC0xO1xuIH1cbiBcbisvKiBleGVjKCkgaGFzIHN3aXRjaGVkIHRvIHRoZSBuZXcgbW0gYW5kIGlzIGFib3V0IHRvIGRyb3AgdGhlIG9sZCBvbmUuICovXG4rdm9pZCBzY2hlZF9jYWNoZV9leGVjX2RvbmUodm9pZClcbit7XG4rXHQvKlxuK1x0ICogYWNjb3VudF9tbV9zY2hlZCgpIGRlcmVmZXJlbmNlcyBycS1cdTAwM2VjdXJyLVx1MDAzZW1tIHdpdGggdGhlIHJxIGxvY2sgaGVsZCxcbitcdCAqIHNvIGEgcmVtb3RlIENQVSBjYW4gc3RpbGwgYmUgdXNpbmcgdGhlIG9sZCBtbS4gVGhhdCBzZWN0aW9uIHJ1bnMgd2l0aFxuK1x0ICogcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgaXMgdGhlcmVmb3JlIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWxcbitcdCAqIHNlY3Rpb24sIHNvIHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIGJlZm9yZSB0aGUgbW0gZ29lcyBhd2F5LlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbit9XG4rXG4gI2Vsc2UgLyogQ09ORklHX1NDSEVEX0NBQ0hFICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfbW1fc2NoZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MzAuODkxNTc5MTI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MjI3OTg3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBOZWVkKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIEtNU0FOIGZ1enppbmcuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgZGlmZiwgaXQncyBjbGVhciB0aGlzIGlzIGFkZGluZyBhIGNhbGwgdG8gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCB3aXRoaW4gYGV4ZWNfbW1fcHV0X29sZCgpYCBpbiBgZnMvZXhlYy5jYC4gVGhhdCBmdW5jdGlvbidzIHB1cnBvc2UgaXMsIGFmdGVyIGBleGVjKClgIGhhcyBzdWNjZXNzZnVsbHkgc3dpdGNoZWQgdG8gYSBuZXcgbWVtb3J5IG1vZGVsIChgbW1gKSwgdG8gZGVhbCB3aXRoIHRoZSBvbGQgb25lLiBXZSdyZSBhbHNvIHNlZWluZyBhIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGBzY2hlZF9jYWNoZV9leGVjX2RvbmUoKWAgdGhhdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGUgY29tbWVudCB3aXRoaW4gYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBpcyBrZXkuIEl0J3MgdGFsa2luZyBhYm91dCBob3cgYGFjY291bnRfbW1fc2NoZWQoKWAgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1gIG9uIGEgcmVtb3RlIENQVSBldmVuIGFmdGVyIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHVzaW5nIHRoZSBuZXcgbWVtb3J5IG1vZGVsLiBTcGVjaWZpY2FsbHksIGEgc2VjdGlvbiBydW5uaW5nIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCBpcyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZSBgc3luY2hyb25pemVfcmN1KClgIGlzIHRvIHdhaXQgZm9yIGFueSBsaW5nZXJpbmcgYWNjZXNzZXMgdG8gdGhlIG9sZCBgbW1gIGJlZm9yZSBpdCdzIGRlYWxsb2NhdGVkLCBwcmVzdW1hYmx5IHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24uXG5cbkkgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgd2hhdCBgc2NoZWRfY2FjaGVgIGlzIGFjdHVhbGx5IGFib3V0IGFuZCB3aGF0IGBhY2NvdW50X21tX3NjaGVkYCBpcyB1cCB0byBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBpcyB3b3J0aCB0aGUgZXh0cmEgZmV3IG1vbWVudHMgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGxpa2VseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAuIEFyZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgb3IgbWVtb3J5IHJlZ2lvbnMgdGhhdCBhcmUgYmVpbmcgc2hhcmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIGNvbmN1cnJlbnQgYWNjZXNzPyBCYXNlZCBvbiB0aGUgY29tbWVudCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGludGVuZGVkIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gb24gYG1tYC4gSWYgdGhlIGBtbWAgaXMgcmVsZWFzZWQgYmVmb3JlIHRoaXMgaGFwcGVucywgaXQgaXMgdmVyeSBsaWtlbHkgdG8gY2F1c2UgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzIHJpZ2h0IGluIEtNU0FOJ3Mgd2hlZWxob3VzZS4gSSdkIGV4cGVjdCB0aGF0IGlmIHRoaXMgY2FuIGdvIHdyb25nLCBLTVNBTiB3b3VsZCBoYXZlIGFscmVhZHkgZm91bmQgaXQsIGhvd2V2ZXIsIGl0IGlzIGJlc3QgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHNpbWlsYXIgcGF0dGVybnMuIFRoaXMgaXMgc29tZXRoaW5nIEtNU0FOIGNvdWxkIGRlZmluaXRlbHkgY2F0Y2ggaWYgdGhlcmUgKmlzKiBhIHJhY2Ugb24gdGhlIGBtbWAhIEl0IHdvdWxkIGJlIGdvb2QgdG8gc2VlIHdoYXQgdGhlIGZ1enppbmcgcmVwb3J0cyBsb29rIGxpa2UgaW4gdGhpcyBhcmVhLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozNi4zMTQzODE4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzU4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoZWRfY2FjaGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTIxND1zdGF0aWMgc3NpemVfdFxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIxNTpzY2hlZF9jYWNoZV9lbmFibGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIxNi1cXHRcXHRcXHQgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjI0LVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjIyNTpcXHRzeXNjdGxfc2NoZWRfY2FjaGVfdXNlciA9IHZhbDtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjYtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjI3OlxcdHNjaGVkX2NhY2hlX2FjdGl2ZV9zZXQoKTtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMjgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yMzMtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjM0OnN0YXRpYyBpbnQgc2NoZWRfY2FjaGVfZW5hYmxlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTIzNS17XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjM2OlxcdHNlcV9wcmludGYobSwgXFxcIiVkXFxcXG5cXFwiLCBzeXNjdGxfc2NoZWRfY2FjaGVfdXNlcik7XFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjM3LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjM5LVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0MDpzdGF0aWMgaW50IHNjaGVkX2NhY2hlX2VuYWJsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxwKVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0Mi17XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjQzOlxcdHJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBzY2hlZF9jYWNoZV9lbmFibGVfc2hvdywgTlVMTCk7XFxua2VybmVsL3NjaGVkL2RlYnVnLmMtMjQ0LX1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0yNDUtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6MjQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX2NhY2hlX2VuYWJsZV9mb3BzID0ge1xcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjI0NzpcXHQub3BlbiAgICAgICAgICAgPSBzY2hlZF9jYWNoZV9lbmFibGVfb3BlbixcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzoyNDg6XFx0LndyaXRlICAgICAgICAgID0gc2NoZWRfY2FjaGVfZW5hYmxlX3dyaXRlLFxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTI0OS1cXHQucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTcxMj1zdGF0aWMgX19pbml0IGludCBzY2hlZF9pbml0X2RlYnVnKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NDktXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZW5hYmxlZFxcXCIsIDA2NDQsIGxsYywgTlVMTCxcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NTA6XFx0XFx0XFx0ICAgIFxcdTAwMjZzY2hlZF9jYWNoZV9lbmFibGVfZm9wcyk7XFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzUxLVxcdGRlYnVnZnNfY3JlYXRlX3UzMihcXFwiYWdncl90b2xlcmFuY2VcXFwiLCAwNjQ0LCBsbGMsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0NTI9c3RhdGljIGludCBsbGNfaWQoaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQ1OS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0NjA6c3RhdGljIGlubGluZSBpbnQgZ2V0X3NjaGVkX2NhY2hlX3NjYWxlKGludCBtdWwpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDYxLXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTQ3Mz1zdGF0aWMgYm9vbCBleGNlZWRfbGxjX2NhcGFjaXR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTEwLVxcdFxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTUxMTpcXHRcXHRzY2FsZSA9IGdldF9zY2hlZF9jYWNoZV9zY2FsZSgyNTYpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTUxMi1cXHRcXHRpZiAoc2NhbGUgPT0gSU5UX01BWClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTUyMT1zdGF0aWMgYm9vbCBpbnZhbGlkX2xsY19ucihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTMyLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTUzMzpcXHRzY2FsZSA9IGdldF9zY2hlZF9jYWNoZV9zY2FsZSgxKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1MzQtXFx0aWYgKHNjYWxlID09IElOVF9NQVgpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2MTQ9dm9pZCBtbV9pbml0X3NjaGVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTYxNTpcXHRcXHQgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSBfX3BlcmNwdSAqX3BjcHVfc2NoZWQpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjE2LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTYyMC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTYyMTpcXHRcXHRzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZCA9IHBlcl9jcHVfcHRyKF9wY3B1X3NjaGVkLCBpKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2MjItXFx0XFx0c3RydWN0IHJxICpycSA9IGNwdV9ycShpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTY1ND1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfbW1fc2NoZWQoc3RydWN0IHJxICpycSxcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NTU6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZClcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2NTYte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNjc3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZyYWN0aW9uX21tX3NjaGVkKHN0cnVjdCBycSAqcnEsXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNjc4OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfY2FjaGVfdGltZSAqcGNwdV9zY2hlZClcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2Nzkte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzI3PXZvaWQgYWNjb3VudF9tbV9zY2hlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHM2NCBkZWx0YV9leGVjKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTcyOC17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzI5OlxcdHN0cnVjdCBzY2hlZF9jYWNoZV90aW1lICpwY3B1X3NjaGVkO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTczMC1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHAtXFx1MDAzZW1tO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzMzLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTczNDpcXHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3MzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzc3PXN0YXRpYyB2b2lkIHRhc2tfdGlja19jYWNoZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3ODItXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzgzOlxcdGlmICghc2NoZWRfY2FjaGVfZW5hYmxlZCgpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTc4NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE5Nzk9dm9pZCBpbml0X3NjaGVkX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTk5Mi0vKiBleGVjKCkgaGFzIHN3aXRjaGVkIHRvIHRoZSBuZXcgbW0gYW5kIGlzIGFib3V0IHRvIGRyb3AgdGhlIG9sZCBvbmUuICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxOTkzOnZvaWQgc2NoZWRfY2FjaGVfZXhlY19kb25lKHZvaWQpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xOTk0LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3NTM9YWxiX2JyZWFrX2xsYyhzdHJ1Y3QgbGJfZW52ICplbnYpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc1NC17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDc1NTpcXHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzU2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3OTI9c3RhdGljIGJvb2wgbWlncmF0ZV9kZWdyYWRlc19sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc5My17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDc5NDpcXHRpZiAoIXNjaGVkX2NhY2hlX2VuYWJsZWQoKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzk1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE4MzY9c3RhdGljIHZvaWQgcmVjb3JkX3NnX2xsY19zdGF0cyhzdHJ1Y3QgbGJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODQyLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4NDM6XFx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkgfHwgZW52LVxcdTAwM2VpZGxlID09IENQVV9ORVdMWV9JRExFKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4NDQtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTg3NT1zdGF0aWMgaW5saW5lIGJvb2wgbGxjX2JhbGFuY2Uoc3RydWN0IGxiX2VudiAqZW52LCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4Nzcte1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTE4Nzg6XFx0aWYgKCFzY2hlZF9jYWNoZV9lbmFibGVkKCkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg3OS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExOTM3PXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2dfbGJfc3RhdHMoc3RydWN0IGxiX2VudiAqZW52LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2NS0jaWZkZWYgQ09ORklHX1NDSEVEX0NBQ0hFXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTk2NjpcXHRcXHRpZiAoc2NoZWRfY2FjaGVfZW5hYmxlZCgpKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTk2Ny1cXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZF90bXA7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9jaWRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSB7IH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxMzMtI2lmZGVmIENPTkZJR19TQ0hFRF9DQUNIRVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxMzQ6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxMzU6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX2FjdGl2ZSk7XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDEzNjpleHRlcm4gaW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxMzctZXh0ZXJuIHVuc2lnbmVkIGludCBsbGNfYWdncl90b2xlcmFuY2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD00MTQxPWV4dGVybiB1bnNpZ25lZCBpbnQgbGxjX292ZXJhZ2dyX3BjdDtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQyLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjQxNDM6c3RhdGljIGlubGluZSBib29sIHNjaGVkX2NhY2hlX2VuYWJsZWQodm9pZClcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC00MTQ0LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo0MTQ1OlxcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZzY2hlZF9jYWNoZV9hY3RpdmUpO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDYtfVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDctXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NDE0ODpleHRlcm4gdm9pZCBzY2hlZF9jYWNoZV9hY3RpdmVfc2V0KHZvaWQpO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTQxNDktXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04NDA9ZW51bSBzX2FsbG9jIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg0OS0vKiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjYWNoZSBhd2FyZSBzY2hlZHVsaW5nICovXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6ODUwOkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg1MS0vKlxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtODU0LSAqL1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjg1NTpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzY2hlZF9jYWNoZV9hY3RpdmUpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTg1Ni0vKiB1c2VyIHdhbnRzIGNhY2hlIGF3YXJlIHNjaGVkdWxpbmcgWzAgb3IgMV0gKi9cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo4NTc6aW50IHN5c2N0bF9zY2hlZF9jYWNoZV91c2VyID0gMTtcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy04NTgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz04OTE9c3RhdGljIGJvb2wgYWxsb2Nfc2RfbGxjKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLFxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTQ2LSAqL1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk0NzpzdGF0aWMgdm9pZCBfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk0OC17XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTItXFx0LyogaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCAqL1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk1MzpcXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZzY2hlZF9jYWNoZV9wcmVzZW50KSkge1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk1NDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NTUtXFx0XFx0aWYgKHNjaGVkX2RlYnVnKCkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NjUtXFx0ICovXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTY2OlxcdGlmIChzeXNjdGxfc2NoZWRfY2FjaGVfdXNlcikge1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk2NzpcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZzY2hlZF9jYWNoZV9hY3RpdmUpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk2OC1cXHRcXHRpZiAoc2NoZWRfZGVidWcoKSlcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk3MC1cXHR9IGVsc2Uge1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjk3MTpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2c2NoZWRfY2FjaGVfYWN0aXZlKTtcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NzItXFx0XFx0aWYgKHNjaGVkX2RlYnVnKCkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05NzctLyogdXNlZCBieSBkZWJ1Z2ZzICovXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTc4OnZvaWQgc2NoZWRfY2FjaGVfYWN0aXZlX3NldCh2b2lkKVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTk3OS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy05ODEtXFx0c2NoZWRfZG9tYWluc19tdXRleF9sb2NrKCk7XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6OTgyOlxcdF9zY2hlZF9jYWNoZV9hY3RpdmVfc2V0KCk7XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtOTgzLVxcdHNjaGVkX2RvbWFpbnNfbXV0ZXhfdW5sb2NrKCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz05OTk9dm9pZCBzY2hlZF91cGRhdGVfbGxjX2J5dGVzKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDI3LVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMjg6c3RhdGljIHZvaWQgc2NoZWRfY2FjaGVfc2V0KGJvb2wgaGFzX211bHRpX2xsY3MpXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTAyOS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDM0LVxcdGlmIChoYXNfbXVsdGlfbGxjcylcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDM1OlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMzYtXFx0ZWxzZVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjEwMzc6XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXFx1MDAyNnNjaGVkX2NhY2hlX3ByZXNlbnQpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwMzgtXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6MTAzOTpcXHRfc2NoZWRfY2FjaGVfYWN0aXZlX3NldCgpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTEwNDAtfVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9MTA0Mj1zdGF0aWMgYm9vbCBhbGxvY19zZF9sbGMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0xMDQ2LX1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzoxMDQ3OnN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZV9zZXQoYm9vbCBoYXNfbXVsdGlfbGxjcykgeyB9XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMTA0OC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTMyODI9aW50IF9faW5pdCBzY2hlZF9pbml0X2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zMzAwLVxcdGlmICghZXJyKVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjMzMDE6XFx0XFx0c2NoZWRfY2FjaGVfc2V0KG11bHRpX2xsY3MpO1xcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTMzMDItXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz0zMzcwPXN0YXRpYyB2b2lkIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zX2xvY2tlZChpbnQgbmRvbXNfbmV3LCBjcHVtYXNrX3Zhcl90IGRvbXNfbmV3W10sXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDMzLVxcdFxcdFxcdFxcdCAqIGFuZCBhIG5ldyBzaW5nbGUtTExDIHBhcnRpdGlvbiBpcyBidWlsdCxcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzozNDM0OlxcdFxcdFxcdFxcdCAqIHNjaGVkX2NhY2hlX3NldChmYWxzZSkgZGlzYWJsZXMgY2FjaGUtYXdhcmVcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDM1LVxcdFxcdFxcdFxcdCAqIHNjaGVkdWxpbmcgZ2xvYmFsbHkgZGVzcGl0ZSB0aGUgcmV1c2VkXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy0zNDU3LVxcdH1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzozNDU4OlxcdHNjaGVkX2NhY2hlX3NldChoYXNfbXVsdGlfbGxjcyk7XFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtMzQ1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mjk6MzYuMzYxMjIyMTk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNDI4NjAzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBpc3N1ZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaWRlIG9mIHRoaW5ncy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IHR3byBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBvZnRlbiBjb21lIHVwIGluIHRoaXMga2luZCBvZiBzaXR1YXRpb24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgZXhlY19tbV9wdXRfb2xkYCBhbmQgYGFjY291bnRfbW1fc2NoZWRgLiBUaG9zZSBhcmUgdXN1YWxseSB0aGUgY3VscHJpdHMgd2hlbiBJJ20gY2hhc2luZyBkb3duIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBpbiBleGVjdXRpb24gYW5kIHNjaGVkdWxpbmcuIEhvcGVmdWxseSwgdW5kZXJzdGFuZGluZyBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2lsbCBzaGVkIHNvbWUgbGlnaHQuIEknbGwgZm9jdXMgb24gaG93IHRoZXkgaGFuZGxlIHByb2Nlc3MgbWVtb3J5IGNvbnRleHRzLCB0aGUgYWNjb3VudGluZyB0aGV5J3JlIGRvaW5nIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozOS42MDQwODYwMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTA6XFx0XFx0ZnV0ZXhfZXhlY19kb25lKHRzayk7XFxuIDkxMTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEyOlxcdH1cXG4gOTEzOlxcdFxcbiA5MTQ6XFx0LyogUmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZSByZXBsYWNlZCBieSBleGVjLCBvdXRzaWRlIHRoZSBleGVjIGxvY2tzLiAqL1xcbiA5MTU6XFx0c3RhdGljIHZvaWQgZXhlY19tbV9wdXRfb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSlcXG4gOTE2OlxcdHtcXG4gOTE3OlxcdFxcdHNldG1heF9tbV9oaXdhdGVyX3JzcyhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VtYXhyc3MsIG9sZF9tbSk7XFxuIDkxODpcXHRcXHRtbV91cGRhdGVfbmV4dF9vd25lcihvbGRfbW0pO1xcbiA5MTk6XFx0XFx0c2NoZWRfY2FjaGVfZXhlY19kb25lKCk7XFxuIDkyMDpcXHRcXHRtbXB1dChvbGRfbW0pO1xcbiA5MjE6XFx0fVxcbiA5MjI6XFx0XFxuIDkyMzpcXHRzdGF0aWMgaW50IGRlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcdHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stXFx1MDAzZXNpZ25hbDtcXG4gOTI2OlxcdFxcdHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqb2xkc2lnaGFuZCA9IHRzay1cXHUwMDNlc2lnaGFuZDtcXG4gOTI3OlxcdFxcdHNwaW5sb2NrX3QgKmxvY2sgPSBcXHUwMDI2b2xkc2lnaGFuZC1cXHUwMDNlc2lnbG9jaztcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9lbXB0eSh0c2spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTozOS42MDQxOTczNDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI3OTU1MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBQYXRjaCdzIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2Vzbid0LCBidXQgbGV0J3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMgcmlnb3JvdXNseS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCBpcyB1c2luZyBgc3luY2hyb25pemVfcmN1KClgIGJlZm9yZSBjYWxsaW5nIGBtbXB1dChvbGRfbW0pYC4gVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBgYWNjb3VudF9tbV9zY2hlZCgpYCBvbiBhbm90aGVyIENQVSBtaWdodCBiZSBkZXJlZmVyZW5jaW5nIGBvbGRfbW1gIHdoaWxlIHRoZSBjb2RlIGlzIHJ1bm5pbmcgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkIG9yIHRoZSBydW5xdWV1ZSBsb2NrIGhlbGQuIElmIGBtbXB1dChvbGRfbW0pYCB3ZXJlIHRvIGZyZWUgdGhlIG1lbW9yeSBpbW1lZGlhdGVseSwgYSBVQUYgY291bGQgb2NjdXIsIHRyaWdnZXJpbmcgS0FTQU4uXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJIHNlZSBubyBuZXcgYnVmZmVycywgc3RydWN0cywgc3RhY2sgdmFyaWFibGVzLCBvciBmaWVsZHMgYmVpbmcgYWxsb2NhdGVkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlJ3Mgbm8gcmVsaWFuY2Ugb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgd2l0aGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIGBzeW5jaHJvbml6ZV9yY3UoKWAgdG8gcHJldmVudCB0aGUgZGVzY3JpYmVkIHJhY2UuIFRoaXMgaXMgYWxsIGFib3V0IHNhZmVndWFyZGluZyB0aGUgbGlmZXRpbWUgb2YgYG9sZF9tbWAgYW5kIGVuc3VyaW5nIHNhZmUgY29uY3VycmVudCBhY2Nlc3MuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBteSBjcml0ZXJpYSBmb3IgYE5lZWRzS01TQU5gOiB0aGlzIGZsYWcgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGluZ3MgbGlrZToga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcywgb3IgY2hhbmdlcyBpbiBob3cgd2UgZG8gYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGlzIHBhdGNoIGlzIG5vbmUgb2YgdGhvc2UgdGhpbmdzLiBJdCdzIHNvbGVseSBhYm91dCBzeW5jaHJvbml6aW5nIGFjY2VzcyB0byBhIGBtbV9zdHJ1Y3RgIHRvIGF2b2lkIGEgVUFGLiBUaGlzIHBhdGNoIGlzIHRhY2tsaW5nIGEgY2xhc3NpYyBsaWZldGltZSBpc3N1ZSwgd2hpY2ggS0FTQU4sIExPQ0tERVAgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nLlxuXG5JbiBzaG9ydCwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJdCdzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWUgcHJldmVudGluZyBhbiB1bnNhZmUgZGVyZWZlcmVuY2UsIGRpcmVjdGx5IGluIGxpbmUgd2l0aCBLQVNBTidzIHJlc3BvbnNpYmlsaXRpZXMuIFRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBiZWNhdXNlIHRoZSBwYXRjaCdzIHNvbGUgcHVycG9zZSBpcyB0byBzeW5jaHJvbml6ZSBtZW1vcnkgYWNjZXNzIHRvIGF2b2lkIHRoaXMgVUFGLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gcmVhZHkgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY1NSwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDoyOTo0Ny44ODM3NTI3NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYHNjaGVkX2NhY2hlX2V4ZWNfZG9uZSgpYCwgd2hpY2ggaW52b2tlcyBgc3luY2hyb25pemVfcmN1KClgIGluIGBleGVjX21tX3B1dF9vbGQoKWAgYmVmb3JlIGBtbXB1dChvbGRfbW0pYCB0byBlbnN1cmUgcmVtb3RlIENQVXMgZmluaXNoIGRlcmVmZXJlbmNpbmcgdGhlIG9sZCBgbW1fc3RydWN0YCBpbiBgYWNjb3VudF9tbV9zY2hlZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZXRpbWUgaXNzdWUgKHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb2YgYG9sZF9tbWApLCB3aGljaCBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgY29weSBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGxvZ2ljIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[1] Phase: Succeeded StartedAt: 2026-09-01 04:29:59 +0000 UTC FinishedAt: 2026-09-01 04:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 04:29:59 +0000 UTC FinishedAt: 2026-09-01 04:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2] Phase: Succeeded StartedAt: 2026-09-01 04:29:59 +0000 UTC FinishedAt: 2026-09-01 08:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 04:29:59 +0000 UTC FinishedAt: 2026-09-01 08:12:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 04:29:59 +0000 UTC FinishedAt: 2026-09-01 04:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 04:29:59 +0000 UTC FinishedAt: 2026-09-01 04:30:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowm44bm/series-workflowm44bm-convert-artifact-3895175501/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 04:30:09 +0000 UTC FinishedAt: 2026-09-01 04:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 04:30:09 +0000 UTC FinishedAt: 2026-09-01 04:46:03 +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:*8876b0b3-7327-404c-8757-256c4165ca3e,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-workflowm44bm/series-workflowm44bm-convert-artifact-3895175501/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": "3e5c5194-b631-4e74-b14a-c64c7282e776", "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-workflowm44bm/series-workflowm44bm-build-action-1780476355/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 04:30:09 +0000 UTC FinishedAt: 2026-09-01 04:45:53 +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:*8876b0b3-7327-404c-8757-256c4165ca3e,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-workflowm44bm/series-workflowm44bm-convert-artifact-3895175501/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": "3e5c5194-b631-4e74-b14a-c64c7282e776", "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-workflowm44bm/series-workflowm44bm-build-action-1780476355/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-01 04:46:03 +0000 UTC FinishedAt: 2026-09-01 04:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-01 04:46:03 +0000 UTC FinishedAt: 2026-09-01 04:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-01 04:46:03 +0000 UTC FinishedAt: 2026-09-01 04:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-01 04:46:03 +0000 UTC FinishedAt: 2026-09-01 04:46:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowm44bm/series-workflowm44bm-convert-artifact-2313150632/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-01 04:46:13 +0000 UTC FinishedAt: 2026-09-01 04:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-01 04:46:14 +0000 UTC FinishedAt: 2026-09-01 04:48:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e5c5194-b631-4e74-b14a-c64c7282e776,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-workflowm44bm/series-workflowm44bm-build-action-1780476355/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-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-01 04:48:21 +0000 UTC FinishedAt: 2026-09-01 04:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-01 04:48:21 +0000 UTC FinishedAt: 2026-09-01 04:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-01 04:48:21 +0000 UTC FinishedAt: 2026-09-01 05:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-01 04:48:21 +0000 UTC FinishedAt: 2026-09-01 05:04:15 +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:*8876b0b3-7327-404c-8757-256c4165ca3e,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-workflowm44bm/series-workflowm44bm-convert-artifact-2313150632/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": "3f54bc11-6ebe-4912-8774-953d747799bb", "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-workflowm44bm/series-workflowm44bm-build-action-958979668/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-01 04:48:21 +0000 UTC FinishedAt: 2026-09-01 05:04:05 +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:*8876b0b3-7327-404c-8757-256c4165ca3e,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-workflowm44bm/series-workflowm44bm-convert-artifact-2313150632/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": "3f54bc11-6ebe-4912-8774-953d747799bb", "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-workflowm44bm/series-workflowm44bm-build-action-958979668/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-01 05:04:15 +0000 UTC FinishedAt: 2026-09-01 05:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-01 05:04:15 +0000 UTC FinishedAt: 2026-09-01 05:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-01 05:04:15 +0000 UTC FinishedAt: 2026-09-01 05:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-01 05:04:15 +0000 UTC FinishedAt: 2026-09-01 05:06:16 +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:*3f54bc11-6ebe-4912-8774-953d747799bb,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-workflowm44bm/series-workflowm44bm-build-action-958979668/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-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-01 05:06:25 +0000 UTC FinishedAt: 2026-09-01 08:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-01 05:06:25 +0000 UTC FinishedAt: 2026-09-01 08:12:44 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},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:*3e5c5194-b631-4e74-b14a-c64c7282e776,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f54bc11-6ebe-4912-8774-953d747799bb,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-workflowm44bm/series-workflowm44bm-build-action-1780476355/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-workflowm44bm/series-workflowm44bm-build-action-958979668/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-01 05:06:25 +0000 UTC FinishedAt: 2026-09-01 05:06:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-01 05:06:25 +0000 UTC FinishedAt: 2026-09-01 05:06:29 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},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-workflowm44bm/series-workflowm44bm-convert-artifact-1287750625/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-01 05:06:25 +0000 UTC FinishedAt: 2026-09-01 05:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-01 05:06:25 +0000 UTC FinishedAt: 2026-09-01 05:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-01 05:06:25 +0000 UTC FinishedAt: 2026-09-01 05:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-01 05:06:35 +0000 UTC FinishedAt: 2026-09-01 08:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["sched_cache_exec_done"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CACHE","SMP"],"series_id":"ae15fe8a-8467-4268-84dc-d7904404badd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-01 05:06:35 +0000 UTC FinishedAt: 2026-09-01 08:12:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e5c5194-b631-4e74-b14a-c64c7282e776,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f54bc11-6ebe-4912-8774-953d747799bb,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-workflowm44bm/series-workflowm44bm-build-action-1780476355/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-workflowm44bm/series-workflowm44bm-build-action-958979668/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-workflowm44bm/series-workflowm44bm-convert-artifact-1287750625/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,}