Name: series-workflowvmt9d Phase: Succeeded StartedAt: 2026-09-12 18:24:19 +0000 UTC FinishedAt: 2026-09-12 23:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[0] Phase: Succeeded StartedAt: 2026-09-12 18:24:19 +0000 UTC FinishedAt: 2026-09-12 19:27:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 18:24:19 +0000 UTC FinishedAt: 2026-09-12 19:27:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL" ], "series_id": "8993537a-7a7e-47fc-a3df-a8657a7a330a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "codel_qdisc_dequeue", "fq_codel_dequeue", "codel_change", "fq_codel_change", "codel_dequeue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RlbF9xZGlzY19kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2RlcXVldWUmIzM0OywKICAgICYjMzQ7Y29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9kZXF1ZXVlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwmIzM5O3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cblxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgYW5kIEZRLUNvRGVsIHBhY2tldCBzY2hlZHVsaW5nIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFsZ29yaXRobXMgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGFuZCBpbmNsdWRlL25ldC9jb2RlbC5oLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhlIGNvbnRyb2wgbGF3IHN0ZXAgaW5jcmVtZW50IGlzIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IGluZmluaXRlIHN0YWxscyB3aGVuIGludGVydmFscyBhcmUgY29uZmlndXJlZCB0byBzdWItdGljayB2YWx1ZXMsIGFuZCBpbnRyb2R1Y2VzIGEgbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBsb29waW5nIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIChRZGlzYykgbG9naWMgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvcnRuZXRsaW5rIGFuZCBub3JtYWwgbmV0d29yayBwYWNrZXQgZGVxdWV1ZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA0ZDc1M2JmNjNiMWI1MzlhZjNjZjdhYWZmNTc5MTBlZGJiNzg2OThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxOToyNTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7XG4gLyogbmVlZGVkIHNoaWZ0IHRvIGdldCBhIFEwLjMyIG51bWJlciBmcm9tIHJlY19pbnZfc3FydCAqL1xuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxuIFxuJiM0MzsvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCYjMzk7cyB3b3JrIGRlcGVuZHMgb24gdGhlXG4mIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBjb2RlbF9zdGF0cyAtIGNvbnRhaW5zIGNvZGVsIHNoYXJlZCB2YXJpYWJsZXMgYW5kIHN0YXRzXG4gICogQG1heHBhY2tldDpcdGxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycylcbiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpXG4gICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcbiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cbiAgKi9cbiBzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxuIFx0XHRcdFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxuIFx0XHRcdFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcbiB7XG4tXHRyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4mIzQzO1x0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuJiM0MztcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTQsNiAmIzQzOzE1OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kZXF1ZXVlX3QgZGVxdWV1ZV9mdW5jKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHJvcHMgPSAwO1xuIFx0Y29kZWxfdGltZV90IG5vdztcbiBcdGJvb2wgZHJvcDtcbiBcbkBAIC0xODAsNiAmIzQzOzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdCAqL1xuIFx0XHRcdHdoaWxlICh2YXJzLVx1MDAzZWRyb3BwaW5nIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4mIzQzO1x0XHRcdFx0aWYgKCYjNDM7JiM0Mztkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7XG4mIzQzO1x0XHRcdFx0XHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXG4mIzQzO1x0XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcF9uZXh0LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2VpbnRlcnZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgdmFycy1cdTAwM2VyZWNfaW52X3NxcnQpKTtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXG4gXHRcdFx0XHQgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS5cbiBcdFx0XHRcdCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5pbmRleCA2ZDUxNWQwZTVlZDY5Li5hODk0ZTZmMGUyNjc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuQEAgLTIxMyw1ICYjNDM7MjEzLDc3IEBAXG4gICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtc1wmIzM0OyxcbiAgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4gICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7NmU0NFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtjb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7YThjM1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtjb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAzdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDJ1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7YTY5NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDs5NzkzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Y29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbkBAIC0zMTYsNSAmIzQzOzMxNiw3NyBAQFxuICAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDFwIGZsb3dzIDEwMjQgcXVhbnR1bS4qdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwmIzM0OyxcbiAgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4gICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7MWI0ZFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0OzM1NDBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZnFfY29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDs0OWM1XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZnFfY29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDszZTBmXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZnFfY29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4gICAgIH1cbiBdXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9DT0RFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGVsX3FkaXNjX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2NvZGVsX2RlcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNGQ3NTNiZjYzYjFiNTM5YWYzY2Y3YWFmZjU3OTEwZWRiYjc4Njk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaAppbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb2RlbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKQEAgLTE0MCw2ICYjNDM7MTQwLDExIEBAIHN0cnVjdCBjb2RlbF92YXJzIHsKIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi8KICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKQogCiYjNDM7LyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AmIzM5O3Mgd29yayBkZXBlbmRzIG9uIHRoZQomIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NgomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0cwogICogQG1heHBhY2tldDoJbGFyZ2VzdCBwYWNrZXQgd2UmIzM5O3ZlIHNlZW4gc28gZmFyCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaApAQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycykKICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgJiM0MzsgaW50ZXJ2YWwvc3FydChjb3VudCkKICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZAogICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhCiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC4KICAqLwogc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCwKIAkJCQkgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsCiAJCQkJICAgICAgdTMyIHJlY19pbnZfc3FydCkKIHsKLQlyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKTsKJiM0MzsJcmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLAomIzQzOwkJCSByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLAomIzQzOwkJCQkJICByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKSk7CiB9CiAKIHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xNTQsNiAmIzQzOzE1OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkJICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7CiYjNDM7CXVuc2lnbmVkIGludCBkcm9wcyA9IDA7CiAJY29kZWxfdGltZV90IG5vdzsKIAlib29sIGRyb3A7CiAKQEAgLTE4MCw2ICYjNDM7MTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkgKi8KIAkJCXdoaWxlICh2YXJzLSZndDtkcm9wcGluZyAmYW1wOyZhbXA7CiAJCQkgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtJmd0O2Ryb3BfbmV4dCkpIHsKJiM0MzsJCQkJaWYgKCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgewomIzQzOwkJCQkJLyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqLwomIzQzOwkJCQkJV1JJVEVfT05DRSh2YXJzLSZndDtkcm9wX25leHQsCiYjNDM7CQkJCQkJICAgY29kZWxfY29udHJvbF9sYXcobm93LAomIzQzOwkJCQkJCQkJICAgICBwYXJhbXMtJmd0O2ludGVydmFsLAomIzQzOwkJCQkJCQkJICAgICB2YXJzLSZndDtyZWNfaW52X3NxcnQpKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiAJCQkJLyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXAKIAkJCQkgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS4KIAkJCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgpAQCAtMjEzLDUgJiM0MzsyMTMsNzcgQEAKICAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs2ZTQ0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2E4YzMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTY5NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0Ozk3OTMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiAgICAgfQogXQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCkBAIC0zMTYsNSAmIzQzOzMxNiw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiAgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKICAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MWI0ZCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MzU0MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7NDljNSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZTBmJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb0RlbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBUaGUgZmlsZXMgbGlzdGVkIGluIHRoZSBkaWZmIGltbWVkaWF0ZWx5IHRlbGwgbWUgaXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgQ29EZWwgKENvbnRyb2xsZWQgRGVsYXkpIHF1ZXVpbmcgZGlzY2lwbGluZS4gR29vZC4gSSByZWNvZ25pemUgdGhvc2UgaW5jbHVkZSBmaWxlczogYGNvZGVsLmhgIGFuZCBgY29kZWxfaW1wbC5oYCBhcmUga2V5IGZvciB0aGUgQ29EZWwgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgSlNPTiBmaWxlcyBpbmRpY2F0ZSBjaGFuZ2VzIHRvIHNlbGYtdGVzdHMgZm9yIHRoZSBgdGNgICh0cmFmZmljIGNvbnRyb2wpIHV0aWxpdGllcywgc3BlY2lmaWNhbGx5IGNvdmVyaW5nIENvRGVsIGFuZCBmcV9jb2RlbCAod2hpY2ggcmVsaWVzIG9uIENvRGVsKS4gVGhlIGB0Yy10ZXN0aW5nYCBkaXJlY3Rvcnkgc3VnZ2VzdHMgdGhpcyBpcyBwYXJ0IG9mIGEgYnJvYWRlciB0ZXN0aW5nIGZyYW1ld29yaywgcHJvYmFibHkgZm9yIGVuc3VyaW5nIGNvcnJlY3RuZXNzIGFjcm9zcyBkaWZmZXJlbnQga2VybmVsIHZlcnNpb25zIGFuZCBjb25maWd1cmF0aW9ucy4KCk5vdywgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzOiB0aGUgYCNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAgaW4gYGNvZGVsLmhgIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBuZXcgY29uc3RhbnQuIEEgZHJvcCBjb3VudGVyISBJbiBgY29kZWxfaW1wbC5oYCwgdGhlIGNoYW5nZSB0byBgY29kZWxfY29udHJvbF9sYXdgIGxvb2tzIGxpa2UgYSBzdWJ0bGUgYWRqdXN0bWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBkcm9wIHRpbWUgaXMgY2FsY3VsYXRlZC4gVGhlIHVzZSBvZiBgbWF4X3QodTMyLCAxLCAuLi4pYCBpbmRpY2F0ZXMgYSBjb25zdHJhaW50LCBlbnN1cmluZyB0aGUgY2FsY3VsYXRlZCBkcm9wIHRpbWUgaXMgbmV2ZXIgbGVzcyB0aGFuIDEgKHByZXN1bWFibHkgYSB1bml0IG9mIHRpbWUpIHRvIHByZXZlbnQgc29tZSBlZGdlIGNhc2VzLiBMaWtlbHkgdG8gYXZvaWQgZGl2aWRlIGJ5IHplcm8gZXJyb3JzIQoKVGhlIHJlYWwgbWVhdCBpcyBpbiB0aGUgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9uLiBUaGUgYWRkaXRpb24gb2YgYHVuc2lnbmVkIGludCBkcm9wcyA9IDA7YCBhbmQgdGhlIGB3aGlsZWAgbG9vcCB3aXRoIHRoZSBgaWYgKCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSlgIGNvbmRpdGlvbiBpcyBjcnVjaWFsLiBUaGlzIGlzIGEgcmF0ZS1saW1pdGluZyBtZWNoYW5pc20sIHByZXZlbnRpbmcgYSBzaW5nbGUgY2FsbCB0byBgY29kZWxfZGVxdWV1ZWAgZnJvbSBkcm9wcGluZyBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIHBhY2tldHMuIFRoZSBgV1JJVEVfT05DRWAgYW5kIHRoZSBuZXcgY2FsbCB0byBgY29kZWxfY29udHJvbF9sYXdgIHdpdGhpbiB0aGUgYGlmYCBibG9jayBzaG93IGhvdyB0aGUgbmV4dCBkcm9wIHRpbWUgaXMgcmVjb21wdXRlZCBpZiB3ZSYjMzk7dmUgZmFsbGVuIHRvbyBmYXIgYmVoaW5kIGluIG91ciBkZXF1ZXVlaW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBiYWNrb2ZmIG1lY2hhbmlzbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIElmIHdlJiMzOTtyZSBnZXR0aW5nIG92ZXJ3aGVsbWVkLCBkb24mIzM5O3QganVzdCBkcm9wIGV2ZXJ5dGhpbmcgaW1tZWRpYXRlbHk7IGdpdmUgdGhlIHN5c3RlbSBhIGNoYW5jZSB0byByZWNvdmVyIGJ5IHN0YWdnZXJpbmcgdGhlIGRyb3BzLiBUaGUgY29tbWVudCBhYm91dCAmIzM0O2ZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUmIzM0OyBwcm92aWRlcyB0aGUgcmVhc29uIGZvciB0aGUgbG9naWMhCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgYnJvYWRlciBjb250ZXh0IG9mIHdobyBjYWxscyB0aGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbCBoaWVyYXJjaHkuIFNlYXJjaGluZyBmb3IgdXNlcyBvZiBgY29kZWxfZGVxdWV1ZWAgb3IgaW5jbHVkaW5nIGBuZXQvY29kZWxfaW1wbC5oYCB3aWxsIGdpdmUgbWUgdGhhdCBjb250ZXh0LiBUaGlzIHdpbGwgaGVscCB0byBhbmFseXplIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RlbF9pbXBsXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYy0yNS0jaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmM6MjY6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmMtMjctI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjItI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMzojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjQtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDE3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDb2RlbCBJbXBsZW1lbnRhdGlvbiBVc2FnZSBBY3Jvc3MgdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIHNlZSBhIGNsZWFyIHBhdHRlcm4gZW1lcmdpbmcuIFRoZSBgY29kZWxfaW1wbC5oYCBoZWFkZXIgZmlsZSwgd2hpY2ggSSYjMzk7bSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGgsIGlzIGJlaW5nIHV0aWxpemVkIGFjcm9zcyBzZXZlcmFsIGtleSBuZXR3b3JrIHNjaGVkdWxpbmcgYW5kIHdpcmVsZXNzIGNvbW11bmljYXRpb25zIGNvbXBvbmVudHM6IHNwZWNpZmljYWxseSwgYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AsIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLCBhbmQgZXZlbiB0aGUgODAyLjExIHdpcmVsZXNzIHRyYW5zbWlzc2lvbiBwYXRoIGluIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgdGhvdWdodCBwcm9jZXNzIHRvIGRpdmUgZGVlcGVyIGludG8gKmhvdyogdGhlIENvRGVsIGFsZ29yaXRobSBpcyBiZWluZyAqYXBwbGllZCogaW4gdGhlc2UgZGlmZmVyZW50IGNvbnRleHRzLgoKTXkgcHJpbWFyeSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgY29kZWxfZGVxdWV1ZWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyB0aGVzZSBhcmUgdGhlIHdvcmtob3JzZXMgb2YgQ29EZWwg4oCTIGBjb2RlbF9kZXF1ZXVlYCBoYW5kbGVzIHBhY2tldCByZW1vdmFsIGZyb20gdGhlIHF1ZXVlLCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgY29udHJvbCBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hlbiBhbmQgaG93IGFnZ3Jlc3NpdmVseSB0byBzdGFydCBkcm9wcGluZyBwYWNrZXRzIHRvIG1hbmFnZSBxdWV1ZSBkZWxheXMgYW5kIG1haW50YWluIGZhaXJuZXNzLgoKSSYjMzk7bSBub3cgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIEkgbmVlZCBhbnN3ZXJzIHRvLiBIb3cgYXJlIHRoZSBxdWV1ZSBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gZWFjaCBvZiB0aGVzZSBzY2hlZHVsaW5nIGRpc2NpcGxpbmVzPyBXaGF0IHNwZWNpZmljIG1ldHJpY3MgYXJlIGJlaW5nIG1vbml0b3JlZD8gQXJlIHRoZSBkcm9wIHBhcmFtZXRlcnMgKGxpa2UgYHRhcmdldGAgYW5kIGBpbnRlcnZhbGApIGJlaW5nIHR1bmVkLCBhbmQgaWYgc28sIGhvdz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGFkYXB0YXRpb25zIG9mIHRoZSBvcmlnaW5hbCBDb0RlbCBwcmluY2lwbGVzIGJlaW5nIHVzZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIG51YW5jZWQgdXNhZ2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2ltcGxlIENvRGVsIGltcGxlbWVudGF0aW9uIGluIGBzY2hfY29kZWwuY2AsIHRoZSBGYWlyIFF1ZXVlaW5nIHdpdGggQ29EZWwgaW4gYHNjaF9mcV9jb2RlbC5jYCwgYW5kIHRoZSB3aXJlbGVzcyBjb250ZXh0IG9mIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSB3aXJlbGVzcyBlbnZpcm9ubWVudCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZHVlIHRvIHRoZSBzaGFyZWQgbWVkaXVtIGFuZCB0aGUgcmVzdWx0aW5nIGNvbmdlc3Rpb24gZHluYW1pY3MuIEkgd2lsbCBub3cgZXhhbWluZSB0aGVzZSBmaWxlcyBjbG9zZWx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RlbF9kZXF1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsLmg9MTI5PXN0cnVjdCBjb2RlbF92YXJzIHtcbi0tXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0Mi1cbmluY2x1ZGUvbmV0L2NvZGVsLmg6MTQzOi8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJiMzOTtzIHdvcmsgZGVwZW5kcyBvbiB0aGVcbmluY2x1ZGUvbmV0L2NvZGVsLmgtMTQ0LSAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuLS1cbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaD0xMDk9c3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgtMTUwLVxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oOjE1MTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oLTE1Mi1cdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTEzNjg9c3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9za2JfdGltZV9mdW5jKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTM3NS1cbm5ldC9tYWM4MDIxMS90eC5jOjEzNzY6c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzLFxubmV0L21hYzgwMjExL3R4LmMtMTM3Ny1cdFx0XHRcdFx0ICB2b2lkICpjdHgpXG4tLVxubmV0L21hYzgwMjExL3R4LmM9MTQxMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xNDI5LVxubmV0L21hYzgwMjExL3R4LmM6MTQzMDpcdHJldHVybiBjb2RlbF9kZXF1ZXVlKHR4cWksXG5uZXQvbWFjODAyMTEvdHguYy0xNDMxLVx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2ViYWNrbG9nLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE0MzctXHRcdFx0ICAgICBjb2RlbF9kcm9wX2Z1bmMsXG5uZXQvbWFjODAyMTEvdHguYzoxNDM4Olx0XHRcdCAgICAgY29kZWxfZGVxdWV1ZV9mdW5jKTtcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzktfVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz0yOD1zdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM0LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjM1Oi8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM2LSAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTU5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19jb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy02My1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo2NDpcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcdTAwMjZzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2csIFx1MDAyNnEtXHUwMDNlcGFyYW1zLCBcdTAwMjZxLVx1MDAzZXZhcnMsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjUtXHRcdFx0ICAgIFx1MDAyNnEtXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTcyLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjczOnN0YXRpYyB2b2lkIGNvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03NC17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTAtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6OTE6XHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy05Mi1cbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9OTY9c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMDktXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTEwOlx0XHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTEtXHR9XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTE4NT1zdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1Mi1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNTM6LyogVGhpcyBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbGVkIGZyb20gY29kZWxfZGVxdWV1ZSgpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjU0LSAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTI3Nj1zdGF0aWMgdm9pZCBkcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODMtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjg0OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19mcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI4NS17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMDY6XHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXHUwMDI2c2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcdTAwMjZxLVx1MDAzZWNwYXJhbXMsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzA3LVx0XHRcdCAgICBcdTAwMjZmbG93LVx1MDAzZWN2YXJzLCBcdTAwMjZxLVx1MDAzZWNzdGF0cywgcWRpc2NfcGt0X2xlbixcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzIzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMyNDpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzI1LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM1LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMzNjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM3LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM5LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0MDpcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDEtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzQyOlx0ZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zNDc9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNTEtXHRpZiAoIXNrYikge1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM1MjpcdFx0c2tiID0gX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjAtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzYxOlx0XHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjItXHR9XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY2LVx0LmVucXVldWVcdD1cdGZxX2NvZGVsX2VucXVldWUsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY3Olx0LmRlcXVldWVcdD1cdGZxX2NvZGVsX2RlcXVldWUsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY4LVx0LnBlZWtcdFx0PVx0ZnFfY29kZWxfcGVlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgQ29kZWwvRlEtQ29kZWwgVHJhZmZpYyBDb250cm9sKioKCk9rYXksIHRoaXMgaXMgc29tZSBzZXJpb3VzIExpbnV4IG5ldHdvcmtpbmcgY29kZSDigJMgd2UmIzM5O3JlIGxvb2tpbmcgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRyYWZmaWMgY29udHJvbCwgc3BlY2lmaWNhbGx5IHRoZSBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAgcXVldWVpbmcgZGlzY2lwbGluZXMuIEkga25vdyBGUS1Db0RlbCBpcyBldmVuIHRoZSBkZWZhdWx0IGluIHF1aXRlIGEgZmV3IGRpc3RyaWJ1dGlvbnMgbm93LCB3aGljaCBpcyBzaWduaWZpY2FudC4gVGhpcyBzdHVmZiBpcyBjb21wbGV0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIGtleS4gV2UmIzM5O3JlIHRhbGtpbmcgbmV0bGluaywgYHJ0bmV0bGlua2AsIHRoZSB3aG9sZSBzaGViYW5nIOKAkyBgUlRNX05FV1FESVNDYCwgYHRjIHFkaXNjIGFkZCAuLi4gY29kZWxgIC8gYGZxX2NvZGVsYCwgdGhlIHN0YW5kYXJkIHdheSBwYWNrZXRzIGFyZSBtb3ZlZCwgZXZlcnl0aGluZyEKCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIGZvY3VzZWQgb24gYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLCByaWdodCBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4gSW50ZXJlc3RpbmcuLi4gdGhlIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgd2l0aCBhIGBtYXhfdGAgdG8gcHJldmVudCB6ZXJvIHRydW5jYXRpb24gYW5kIHN0YWxsaW5nLCBhbmQgaW50cm9kdWNpbmcgYSBjYXAsIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgICgyNTYpIGluc2lkZSBgY29kZWxfZGVxdWV1ZSgpYCwgdG8gcHJldmVudCBhIG1hc3NpdmUgZHJvcCBzdG9ybSBhbmQgcmVzeW5jIG9mIGBkcm9wX25leHRgLgoKT2theSwgaXMgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aHdoaWxlPyBBYnNvbHV0ZWx5ISBDb3JlIG5ldHdvcmtpbmcgc3R1ZmYsIHRoZXNlIHF1ZXVlaW5nIGFsZ29yaXRobXMsIHRoZXkmIzM5O3JlIHJpZ2h0IHRoZXJlLCBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgbmV0d29yayBvcGVyYXRpb25zIGFuZCBxZGlzYyBjb25maWd1cmF0aW9uLiBDaGVjayB0aGUgcnVsZXM6IGNvcmUgbmV0d29ya2luZyBpcyAqZXhwbGljaXRseSogb24gdGhlICYjMzQ7V09SVEggRlVaWklORyBDUklURVJJQSYjMzQ7IGxpc3QhIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gYSBjb3JlIHN1YnN5c3RlbS4gU28sIHllYWgsIHRoaXMgaXMgYSBkZWZpbml0ZSBgdHJ1ZWAgZm9yIGBXb3J0aEZ1enppbmdgLgoKTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIHNlZSB3aGF0IGtlcm5lbCBjb25maWdzIGFyZSBuZWVkZWQgdG8gYWN0dWFsbHkgZW5hYmxlIGBzY2hfY29kZWxgIGFuZCBgc2NoX2ZxX2NvZGVsYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiBgbmV0L3NjaGVkL01ha2VmaWxlYCBhbmQgYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaF9jb2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXG4tLVxubmV0L3NjaGVkL0tjb25maWctMjcyLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5uZXQvc2NoZWQvS2NvbmZpZzoyNzM6XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9jb2RlbC5cbm5ldC9zY2hlZC9LY29uZmlnLTI3NC1cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9NTQ9b2JqLSQoQ09ORklHX05FVF9TQ0hfUUZRKVx0JiM0Mzs9IHNjaF9xZnEub1xubmV0L3NjaGVkL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19ORVRfU0NIX0NPREVMKVx0JiM0Mzs9IHNjaF9jb2RlbC5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNTYtb2JqLSQoQ09ORklHX05FVF9TQ0hfRlFfQ09ERUwpXHQmIzQzOz0gc2NoX2ZxX2NvZGVsLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAyNjYgdGhyb3VnaCAyOTAuIFRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBhIHBhcnRpY3VsYXIgcXVldWluZyBkaXNjaXBsaW5lIG9yIGEgc2V0IG9mIHJlbGF0ZWQgb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgY29uZmlndXJlZCB0aGVyZS4gQ2hhbmNlcyBhcmUsIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBuZXcgZmVhdHVyZSBJIHdhbnQgdG8gaW1wbGVtZW50LCBvciBwZXJoYXBzIGRlYnVnIGFuIGlzc3VlIEkmIzM5O20gc2VlaW5nIHdpdGggYSBwYXJ0aWN1bGFyIHNjaGVkdWxlci4gSSBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIHNwZWNpZmljLCBtYXliZSByZWxhdGVkIHRvIHNvbWUgbmV3bHkgYWRkZWQgY29kZSwgYSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9uLCBvciBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IgdGhhdCBJJiMzOTttIHRyeWluZyB0byBwaW4gZG93bi4gR29pbmcgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBoZWxwcyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjZXJ0YWluIGNob2ljZXMuIFRoaXMgdGFyZ2V0ZWQgYXBwcm9hY2ggaXMgbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIGJyb3dzaW5nIHRoZSBlbnRpcmUgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFxuIDI2MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjYyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9xZnEuXG4gMjYzOlx0XG4gMjY0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjY1Olx0XG4gMjY2Olx0Y29uZmlnIE5FVF9TQ0hfQ09ERUxcbiAyNjc6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcJiMzNDtcbiAyNjg6XHRcdGhlbHBcbiAyNjk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbnRyb2xsZWQgRGVsYXkgKENPREVMKVxuIDI3MDpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMjcxOlx0XG4gMjcyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyNzM6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxuIDI3NDpcdFxuIDI3NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI3NjpcdFxuIDI3NzpcdGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXG4gMjc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcJiMzNDtcbiAyNzk6XHRcdGhlbHBcbiAyODA6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZRIENvbnRyb2xsZWQgRGVsYXkgKEZRX0NPREVMKVxuIDI4MTpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMjgyOlx0XG4gMjgzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyODQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2ZxX2NvZGVsLlxuIDI4NTpcdFxuIDI4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI4NzpcdFxuIDI4ODpcdGNvbmZpZyBORVRfU0NIX0NBS0VcbiAyODk6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZCAoQ0FLRSlcJiMzNDtcbiAyOTA6XHRcdGhlbHBcbiAyOTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZFxuIDI5MjpcdFx0ICAoQ0FLRSkgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG0uXG4gMjkzOlx0XG4gMjk0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyOTU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2Nha2UuXG4gMjk2Olx0XG4gMjk3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk4Olx0XG4gMjk5Olx0Y29uZmlnIE5FVF9TQ0hfRlFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLY29uZmlnIGZvciBORVRfU0NIX0NPREVMIGFuZCBORVRfU0NIX0ZRX0NPREVMKioKCkFscmlnaHQsIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgd2hpbGUgcmV2aWV3aW5nIHRoaXMgc2NoZWR1bGluZyBjb2RlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGVpdGhlciBgTkVUX1NDSF9DT0RFTGAgb3IgYE5FVF9TQ0hfRlFfQ09ERUxgIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvciBpZiB0aGVpciBjb25maWd1cmF0aW9ucyBhcmUgbmVzdGVkIHdpdGhpbiBhbnkgYG1lbnVjb25maWdgIGJsb2NrcyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHZlcmlmeSBpdC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHZlcnkgdG9wIG9mIGBuZXQvc2NoZWQvS2NvbmZpZ2AsIG1ha2luZyBzdXJlIG5vIGdsb2JhbCBkaXJlY3RpdmVzIGFmZmVjdCB3aGF0IHdlIGFyZSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcbiAgMTc6XHRcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXG4gIDE5Olx0XHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDIwOlx0XHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxuICAyMTpcdFx0ICBuZWVkIGEgY2VydGFpbiBtaW5pbXVtIGRhdGEgZmxvdyByYXRlLCBvciBpZiB5b3UgbmVlZCB0byBsaW1pdCB0aGVcbiAgMjI6XHRcdCAgbWF4aW11bSBkYXRhIGZsb3cgcmF0ZSBmb3IgdHJhZmZpYyB3aGljaCBtYXRjaGVzIHNwZWNpZmllZCBjcml0ZXJpYS5cbiAgMjM6XHRcdCAgVGhpcyBjb2RlIGlzIGNvbnNpZGVyZWQgdG8gYmUgZXhwZXJpbWVudGFsLlxuICAyNDpcdFxuICAyNTpcdFx0ICBUbyBhZG1pbmlzdGVyIHRoZXNlIHNjaGVkdWxlcnMsIHlvdSYjMzk7bGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcbiAgMjY6XHRcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMiYjNDM7dGMgYXRcbiAgMjc6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1x1MDAzZS4gIFRoYXQgcGFja2FnZVxuICAyODpcdFx0ICBhbHNvIGNvbnRhaW5zIHNvbWUgZG9jdW1lbnRhdGlvbjsgZm9yIG1vcmUsIGNoZWNrIG91dFxuICAyOTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXHUwMDNlLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGlzIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBzdXBwb3J0IHdpbGwgZW5hYmxlIHlvdSB0byB1c2VcbiAgMzI6XHRcdCAgRGlmZmVyZW50aWF0ZWQgU2VydmljZXMgKGRpZmZzZXJ2KSBhbmQgUmVzb3VyY2UgUmVzZXJ2YXRpb24gUHJvdG9jb2xcbiAgMzM6XHRcdCAgKFJTVlApIG9uIHlvdXIgTGludXggcm91dGVyIGlmIHlvdSBhbHNvIHNheSBZIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4gIDM0Olx0XHQgIGNsYXNzaWZpZXJzIGJlbG93LiAgRG9jdW1lbnRhdGlvbiBhbmQgc29mdHdhcmUgaXMgYXRcbiAgMzU6XHRcdCAgXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbVwmIzM0OyBiZWxvdywgeW91IHdpbGwgYmUgYWJsZVxuICAzODpcdFx0ICB0byByZWFkIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCBwYWNrZXQgc2NoZWR1bGVycyBmcm9tIHRoZSBmaWxlXG4gIDM5Olx0XHQgIC9wcm9jL25ldC9wc2NoZWQuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBOZXR3b3JrIFNjaGVkdWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uLi4uIGBORVRfU0NIRURgIGlzIHRoZSBwcmltYXJ5IG1lbnVjb25maWcgb3B0aW9uIEkgbmVlZCB0byBiZSBmb2N1c2luZyBvbi4gQnV0LCBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hYzgwMjExLCBpdCYjMzk7cyBhbHdheXMgcmVsZXZhbnQgd2l0aCB3aXJlbGVzcy4gTm93LCB0byBnZXQgdG8gdGhlIHNwZWNpZmljcyBvZiB0cmFmZmljIHNoYXBpbmcsIEkgcmVtZW1iZXIgc2VlaW5nIENvRGVsIGluIHVzZSwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyB1c2VkIGluIGEgcGFydGljdWxhciBwYXJ0IG9mIHRoZSB3aXJlbGVzcyBzdGFjay4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgbG9vayBhdCBgbmV0L21hYzgwMjExL3R4LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCB0cmlnZ2VycyBDb0RlbCB3aXRoaW4gdGhhdCBmaWxlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayB0aHJvdWdoIGBuZXQvbWFjODAyMTEvYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV90aW5fZGVxdWV1ZV9mdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0xMzk2PXN0YXRpYyB2b2lkIGNvZGVsX2Ryb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE0MDktXG5uZXQvbWFjODAyMTEvdHguYzoxNDEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfdGluX2RlcXVldWVfZnVuYyhzdHJ1Y3QgZnEgKmZxLFxubmV0L21hYzgwMjExL3R4LmMtMTQxMS1cdFx0XHRcdFx0ICAgc3RydWN0IGZxX3RpbiAqdGluLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTM4ODA9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTM5MjYtXG5uZXQvbWFjODAyMTEvdHguYzozOTI3Olx0XHRza2IgPSBmcV90aW5fZGVxdWV1ZShmcSwgdGluLCBmcV90aW5fZGVxdWV1ZV9mdW5jKTtcbm5ldC9tYWM4MDIxMS90eC5jLTM5MjgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTk2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGBNQUM4MDIxMWAgaXMgYWxzbyBpbiB0aGUgbWl4IGhlcmUsIGJ1dCBpdCBsb29rcyBsaWtlIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgIGFyZSB0aGUgcHJpbWFyeSBjb25zdW1lcnMgYW5kIHRlc3Qgc3ViamVjdHMsIGJhc2VkIG9uIHRob3NlIEpTT04gdGVzdHMgaW4gdGMtdGVzdGluZy4gSG1tLCBzbyBpdCBzZWVtcyBsaWtlIHRoaXMgYGNvZGVsLmhgIG9yIGBjb2RlbF9pbXBsLmhgIG1pZ2h0IGJlIHJlbGV2YW50IHRvIGEgd2lkZXIgcmFuZ2Ugb2YgY29kZSB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgZmlsZSBzeXN0ZW0gYW5kIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIG90aGVyIGZpbGVzIHVzaW5nIGBjb2RlbC5oYCBvciBgY29kZWxfaW1wbC5oYC4gS25vd2luZyB0aGUgdXNhZ2Ugd2lsbCBjbGFyaWZ5IGhvdyB3aWRlc3ByZWFkIHRoaXMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGVsXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jb2RlbF9xZGlzYy5oLTUxLVxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaDo1MjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaC01My0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2Vcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTIyLSNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxMS5oXHUwMDNlXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjIzOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMTFfcmFkaW90YXAuaFx1MDAzZVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9tYWM4MDIxMS5oXHUwMDNlXG5uZXQvbWFjODAyMTEvdHguYzoyNTojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmMtMjYtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMTojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyLSNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjIyOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg1NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyB0aGUgRnV6emVyOiBBIFN0cmF0ZWd5IGZvciBFZmZlY3RpdmUgQ292ZXJhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiB3ZSYjMzk7cmUgZnV6emluZywgYW5kIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB3ZSBuZWVkIGEgd2F5IHRvIGd1aWRlIHRoZSBmdXp6aW5nIHByb2Nlc3Mg4oCTIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGlycmVsZXZhbnQgYXJlYXMgYW5kIGVuc3VyZSBpdCBoaXRzIHRoZSBtb3N0IGltcGFjdGZ1bCBjb2RlLiBUaGF0JiMzOTtzIHdoZXJlIGV4dHJhY3RpbmcgYEZvY3VzU3ltYm9sc2AgY29tZXMgaW4uIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgZGlsdXRpb24sIHN0ZWVyaW5nIHRoZSBmdXp6ZXIgdG8gdGhlIGdvb2Qgc3R1ZmYuCgpGaXJzdCwgd2UgbmVlZCB0byBhdm9pZCB0aGUgb2J2aW91cyB0cmFwcy4gV2UgKipjYW5ub3QqKiBpbmNsdWRlIHRob3NlIGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBldmVyeXdoZXJlLiBGb3JnZXQgdGhlbS4gSW5zdGVhZCwgd2UgbmVlZCB0byB6b25lIGluIG9uOgoKKiAgICoqU3BlY2lmaWMgRmVhdHVyZSBMb2dpYyBhbmQgRW50cnlwb2ludHM6KiogRnVuY3Rpb25zIHRoYXQgKmRpcmVjdGx5KiBpbXBsZW1lbnQgdGhlIGxvZ2ljIHdlJiMzOTtyZSBhZGRpbmcsIGNoYW5naW5nLCBvciByZXZpZXdpbmcuIFRoaW5rIEFQSSBlbnRyeSBwb2ludHMgZm9yIHRoZSBzdWJzeXN0ZW0gd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uCgoqICAgKipTdGF0aWMgSW5saW5lczoqKiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBjb21tb24gaW4ga2VybmVsIGhlYWRlcnMgKGBtbS8qLmhgLCBgaW5jbHVkZS9saW51eC8qLmhgKSwgYXJlIHRyaWNreS4gVGhleSBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gYHZtbGludXhgLCBzbyB5b3UgY2FuJiMzOTt0IHRhcmdldCB0aGVtIGRpcmVjdGx5IHdpdGggYSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVyLiBTbywgaWYgb3VyIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbnNpZGUgc3RhdGljIGlubGluZSBoZWxwZXJzLCB3ZSBuZWVkIHRvIGlkZW50aWZ5ICpub24tc3RhdGljKiwgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgdGhhdCAqZXhlcmNpc2UqIHRob3NlIGlubGluZSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gYXZvaWQgdGhvc2UgZ2VuZXJpYyBsaWZlY3ljbGUgd3JhcHBlcnMgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAuIGBjb2RlbF9jb250cm9sX2xhd2AgYW5kIGBjb2RlbF9kZXF1ZXVlYCBhcmUgYm90aCBgc3RhdGljYCwgc28gdGhleSYjMzk7cmUgaW5saW5lZC4gR3JlYXQhIFdlIHdhbnQgdG8gZm9jdXMgb24gdGhlaXIgY2FsbGVycyBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjYWxsZXJzLCBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCwgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgY2FsbHMgYGNvZGVsX2RlcXVldWVgLCBgY29kZWxfZGVxdWV1ZV9kcm9wYCBjYWxscyBgY29kZWxfZGVxdWV1ZWAuIEFuZCBgY29kZWxfcWRpc2NfZGVxdWV1ZWAgY2FsbHMgYm90aCwgYnV0IHRoZSBmdW5jdGlvbiBhbHNvIHJldHVybnMgYHFkaXNjX2RlcXVldWVfaGVhZChzY2gpYC4gV2Ugc2hvdWxkIHByb2JhYmx5IHJlYWQgYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCBmcm9tIGBzY2hfY29kZWwuY2AgYXMgd2VsbC4gU2VlbXMgbGlrZSB3ZSBzaG91bGQgY2hlY2sgbGluZXMgNTUtMTIwIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgIGZvciBzb21lIG1vcmUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU1Olx0XHRxZGlzY19kZXF1ZXVlX2Ryb3Aoc2NoLCBza2IsIFFESVNDX0RST1BfQ09OR0VTVEVEKTtcbiAgNTY6XHRcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19jb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA2MDpcdHtcbiAgNjE6XHRcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuICA2MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgNjM6XHRcbiAgNjQ6XHRcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcdTAwMjZzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2csIFx1MDAyNnEtXHUwMDNlcGFyYW1zLCBcdTAwMjZxLVx1MDAzZXZhcnMsXG4gIDY1Olx0XHRcdFx0ICAgIFx1MDAyNnEtXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXG4gIDY2Olx0XHRcdFx0ICAgIGRyb3BfZnVuYywgZGVxdWV1ZV9mdW5jKTtcbiAgNjc6XHRcbiAgNjg6XHRcdGlmIChza2IpXG4gIDY5Olx0XHRcdHFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpO1xuICA3MDpcdFx0cmV0dXJuIHNrYjtcbiAgNzE6XHR9XG4gIDcyOlx0XG4gIDczOlx0c3RhdGljIHZvaWQgY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA3NDpcdHtcbiAgNzU6XHRcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuICA3NjpcdFxuICA3NzpcdFx0aWYgKHEtXHUwMDNlc3RhdHMuZHJvcF9jb3VudCkge1xuICA3ODpcdFx0XHRxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgcS1cdTAwM2VzdGF0cy5kcm9wX2NvdW50LFxuICA3OTpcdFx0XHRcdFx0XHQgIHEtXHUwMDNlc3RhdHMuZHJvcF9sZW4pO1xuICA4MDpcdFx0XHRxLVx1MDAzZXN0YXRzLmRyb3BfY291bnQgPSAwO1xuICA4MTpcdFx0XHRxLVx1MDAzZXN0YXRzLmRyb3BfbGVuID0gMDtcbiAgODI6XHRcdH1cbiAgODM6XHR9XG4gIDg0Olx0XG4gIDg1Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA4NjpcdHtcbiAgODc6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDg4Olx0XG4gIDg5Olx0XHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcbiAgOTA6XHRcbiAgOTE6XHRcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuICA5MjpcdFxuICA5MzpcdFx0cmV0dXJuIHNrYjtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA5NzpcdHtcbiAgOTg6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZzY2gtXHUwMDNlZ3NvX3NrYik7XG4gIDk5Olx0XG4gMTAwOlx0XHRpZiAoIXNrYikge1xuIDEwMTpcdFx0XHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0aWYgKHNrYikge1xuIDEwNDpcdFx0XHRcdF9fc2tiX3F1ZXVlX2hlYWQoXHUwMDI2c2NoLVx1MDAzZWdzb19za2IsIHNrYik7XG4gMTA1Olx0XHRcdFx0LyogaXQmIzM5O3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cbiAxMDY6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19pbmMoc2NoLCBza2IpO1xuIDEwNzpcdFx0XHRcdHNjaC1cdTAwM2VxLnFsZW4mIzQzOyYjNDM7O1xuIDEwODpcdFx0XHR9XG4gMTA5Olx0XG4gMTEwOlx0XHRcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDExMTpcdFx0fVxuIDExMjpcdFxuIDExMzpcdFx0cmV0dXJuIHNrYjtcbiAxMTQ6XHR9XG4gMTE1Olx0XG4gMTE2Olx0c3RhdGljIGludCBjb2RlbF9xZGlzY19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIDExNzpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4gMTE4Olx0e1xuIDExOTpcdFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2NoX2ZxX2NvZGVsLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgIHJpZ2h0IG5vdy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMjgwIHRocm91Z2ggMzY1LCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHJhbmdlIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBwcmVjaXNlbHkgaG93IHRoZSBGYXN0IFF1ZXVlIENvRGVsIHNjaGVkdWxlciBvcGVyYXRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIGhpZGluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUuLi4gbGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0cWRpc2NfZGVxdWV1ZV9kcm9wKHNjaCwgc2tiLCBRRElTQ19EUk9QX0NPTkdFU1RFRCk7XG4gMjgxOlx0XHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xuIDI4MjpcdH1cbiAyODM6XHRcbiAyODQ6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiAyODU6XHR7XG4gMjg2Olx0XHRzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbiAyODc6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMjg4Olx0XHRzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdztcbiAyODk6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7XG4gMjkwOlx0XG4gMjkxOlx0YmVnaW46XG4gMjkyOlx0XHRoZWFkID0gXHUwMDI2cS1cdTAwM2VuZXdfZmxvd3M7XG4gMjkzOlx0XHRpZiAobGlzdF9lbXB0eShoZWFkKSkge1xuIDI5NDpcdFx0XHRoZWFkID0gXHUwMDI2cS1cdTAwM2VvbGRfZmxvd3M7XG4gMjk1Olx0XHRcdGlmIChsaXN0X2VtcHR5KGhlYWQpKVxuIDI5NjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDI5NzpcdFx0fVxuIDI5ODpcdFx0ZmxvdyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZxX2NvZGVsX2Zsb3csIGZsb3djaGFpbik7XG4gMjk5Olx0XG4gMzAwOlx0XHRpZiAoZmxvdy1cdTAwM2VkZWZpY2l0IFx1MDAzYz0gMCkge1xuIDMwMTpcdFx0XHRXUklURV9PTkNFKGZsb3ctXHUwMDNlZGVmaWNpdCwgZmxvdy1cdTAwM2VkZWZpY2l0ICYjNDM7IHEtXHUwMDNlcXVhbnR1bSk7XG4gMzAyOlx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZsb3ctXHUwMDNlZmxvd2NoYWluLCBcdTAwMjZxLVx1MDAzZW9sZF9mbG93cyk7XG4gMzAzOlx0XHRcdGdvdG8gYmVnaW47XG4gMzA0Olx0XHR9XG4gMzA1Olx0XG4gMzA2Olx0XHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXHUwMDI2c2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcdTAwMjZxLVx1MDAzZWNwYXJhbXMsXG4gMzA3Olx0XHRcdFx0ICAgIFx1MDAyNmZsb3ctXHUwMDNlY3ZhcnMsIFx1MDAyNnEtXHUwMDNlY3N0YXRzLCBxZGlzY19wa3RfbGVuLFxuIDMwODpcdFx0XHRcdCAgICBjb2RlbF9nZXRfZW5xdWV1ZV90aW1lLCBkcm9wX2Z1bmMsIGRlcXVldWVfZnVuYyk7XG4gMzA5Olx0XG4gMzEwOlx0XHRpZiAoIXNrYikge1xuIDMxMTpcdFx0XHQvKiBmb3JjZSBhIHBhc3MgdGhyb3VnaCBvbGRfZmxvd3MgdG8gcHJldmVudCBzdGFydmF0aW9uICovXG4gMzEyOlx0XHRcdGlmICgoaGVhZCA9PSBcdTAwMjZxLVx1MDAzZW5ld19mbG93cykgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnEtXHUwMDNlb2xkX2Zsb3dzKSlcbiAzMTM6XHRcdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmbG93LVx1MDAzZWZsb3djaGFpbiwgXHUwMDI2cS1cdTAwM2VvbGRfZmxvd3MpO1xuIDMxNDpcdFx0XHRlbHNlXG4gMzE1Olx0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZmbG93LVx1MDAzZWZsb3djaGFpbik7XG4gMzE2Olx0XHRcdGdvdG8gYmVnaW47XG4gMzE3Olx0XHR9XG4gMzE4Olx0XHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcbiAzMTk6XHRcdFdSSVRFX09OQ0UoZmxvdy1cdTAwM2VkZWZpY2l0LCBmbG93LVx1MDAzZWRlZmljaXQgLSBxZGlzY19wa3RfbGVuKHNrYikpO1xuIDMyMDpcdFxuIDMyMTpcdFx0cmV0dXJuIHNrYjtcbiAzMjI6XHR9XG4gMzIzOlx0XG4gMzI0Olx0c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDMyNTpcdHtcbiAzMjY6XHRcdHN0cnVjdCBmcV9jb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQpIHtcbiAzMjk6XHRcdFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQsXG4gMzMwOlx0XHRcdFx0XHRcdCAgcS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4pO1xuIDMzMTpcdFx0XHRxLVx1MDAzZWNzdGF0cy5kcm9wX2NvdW50ID0gMDtcbiAzMzI6XHRcdFx0cS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4gPSAwO1xuIDMzMzpcdFx0fVxuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gMzM3Olx0e1xuIDMzODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzMzk6XHRcbiAzNDA6XHRcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNDE6XHRcbiAzNDI6XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dXJuIHNrYjtcbiAzNDU6XHR9XG4gMzQ2Olx0XG4gMzQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDM0ODpcdHtcbiAzNDk6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZzY2gtXHUwMDNlZ3NvX3NrYik7XG4gMzUwOlx0XG4gMzUxOlx0XHRpZiAoIXNrYikge1xuIDM1MjpcdFx0XHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNTM6XHRcbiAzNTQ6XHRcdFx0aWYgKHNrYikge1xuIDM1NTpcdFx0XHRcdF9fc2tiX3F1ZXVlX2hlYWQoXHUwMDI2c2NoLVx1MDAzZWdzb19za2IsIHNrYik7XG4gMzU2Olx0XHRcdFx0LyogaXQmIzM5O3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cbiAzNTc6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19pbmMoc2NoLCBza2IpO1xuIDM1ODpcdFx0XHRcdHNjaC1cdTAwM2VxLnFsZW4mIzQzOyYjNDM7O1xuIDM1OTpcdFx0XHR9XG4gMzYwOlx0XG4gMzYxOlx0XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM2MjpcdFx0fVxuIDM2MzpcdFxuIDM2NDpcdFx0cmV0dXJuIHNrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb25zdHJ1Y3RpbmcgQ29kZWwgYW5kIEZRLUNvZGVsIEluaXRpYWxpemF0aW9uIGFuZCBEZXF1ZXVlIFByb2Nlc3NlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlOiBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgX19mcV9jb2RlbF9kZXF1ZXVlYCwgYW5kIGBmcV9jb2RlbF9kZXF1ZXVlYC4gVGhvc2UgYXJlIHRoZSBkZXF1ZXVlIGZ1bmN0aW9uczsgdGhleSYjMzk7cmUgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBxdWV1aW5nIGRpc2NpcGxpbmVzIGhhbmRsZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGltcGxlbWVudGF0aW9ucyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBiZSBwcmVzZW50IGluIGVhY2guCgpUaGVuLCBvZiBjb3Vyc2UsIHRoZSBpbml0aWFsIHNldHVwOiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBjb2RlbF9pbml0YCwgYGNvZGVsX2NoYW5nZWAsIGBmcV9jb2RlbF9pbml0YCwgYW5kIGBmcV9jb2RlbF9jaGFuZ2VgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNyaXRpY2FsIHBhcmFtZXRlcnMgYXJlIHNldCDigJMgdGhpbmdzIGxpa2UgdGhlIGludGVydmFsIGFuZCB0YXJnZXQgdmFsdWVzIHRoYXQgZGVmaW5lIHRoZSBhY3RpdmUgcXVldWUgbWFuYWdlbWVudCBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgaXMgYW55IGRpdmVyZ2VuY2UgYmV0d2VlbiBDb2RlbCBhbmQgRlEtQ29kZWwgaW4gdGhlaXIgcmVzcGVjdGl2ZSBwYXJhbWV0ZXIgc2V0dGluZy4KClNvLCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRpbWUgdG8gZGlnIGludG8gYHNjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYCBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRoZSBgY29kZWxfY2hhbmdlYCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBjcnVjaWFsIGRldGFpbHMgb24gcGFyYW1ldGVyIGFkanVzdG1lbnQgYW5kIHRoZWlyIGVmZmVjdCBvbiB0aGUgcXVldWluZyBhbGdvcml0aG1zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucywgYW5kIGhvdyB0aG9zZSBkaWZmZXJlbmNlcyBpbXBhY3QgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGNvZGVsfGZxX2NvZGVsKV8oaW5pdHxjaGFuZ2UpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2NvZGVsLmM9MTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjb2RlbF9wb2xpY3lbVENBX0NPREVMX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTM3LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTEzOS1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoxOTg6c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTk5LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIxMC1cdGlmIChvcHQpIHtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMTE6XHRcdGludCBlcnIgPSBjb2RlbF9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEyLVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz0yOTI9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgY29kZWxfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI5OC1cdC5wZWVrXHRcdD1cdGNvZGVsX3BlZWssXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6Mjk5Olx0LmluaXRcdFx0PVx0Y29kZWxfaW5pdCxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDAtXHQucmVzZXRcdFx0PVx0Y29kZWxfcmVzZXQsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzAxOlx0LmNoYW5nZSBcdD1cdGNvZGVsX2NoYW5nZSxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDItXHQuZHVtcFx0XHQ9XHRjb2RlbF9kdW1wLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX2NvZGVsX3BvbGljeVtUQ0FfRlFfQ09ERUxfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy00MDQtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NDA1OnN0YXRpYyBpbnQgZnFfY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA2LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NDk5PXN0YXRpYyB2b2lkIGZxX2NvZGVsX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwNy1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MDg6c3RhdGljIGludCBmcV9jb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNTA5LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUyOS1cdGlmIChvcHQpIHtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MzA6XHRcdGVyciA9IGZxX2NvZGVsX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01MzEtXHRcdGlmIChlcnIpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY4LVx0LnBlZWtcdFx0PVx0ZnFfY29kZWxfcGVlayxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3Njk6XHQuaW5pdFx0XHQ9XHRmcV9jb2RlbF9pbml0LFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3MC1cdC5yZXNldFx0XHQ9XHRmcV9jb2RlbF9yZXNldCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NzEtXHQuZGVzdHJveVx0PVx0ZnFfY29kZWxfZGVzdHJveSxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3NzI6XHQuY2hhbmdlXHRcdD1cdGZxX2NvZGVsX2NoYW5nZSxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NzMtXHQuZHVtcFx0XHQ9XHRmcV9jb2RlbF9kdW1wLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZWwgRGVxdWV1ZSBhbmQgQ29udHJvbCBMYXcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgQ29kZWwgZGVxdWV1ZSBhbmQgY29udHJvbCBsYXcgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmUgYW5kIHdoZXRoZXIgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBhcyBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGNvZGVsX2RlcXVldWUoKWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyBgY29kZWxfZGVxdWV1ZSgpYCBpcyBpbmxpbmVkIGludG8gYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgYW5kIGBfX2ZxX2NvZGVsX2RlcXVldWVgLCBiYXNlZCBvbiB0aGUgY29kZWJhc2UsIHdoaWNoIGFyZSBkZWZpbmVkIGluIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgcmVzcGVjdGl2ZWx5LgoKTG9va2luZyBhdCBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCwgSSBzZWUgdGhhdCBgY29kZWxfZGVxdWV1ZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFNpbmNlIGl0JiMzOTtzIGluIGEgaGVhZGVyLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBpbnRvIGl0cyBjYWxsZXJzLiBUaGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBjb2RlbF9kZXF1ZXVlKClgLCBhbmQgaXQmIzM5O3MgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSYjMzk7bSBjdXJpb3VzIHdoZXRoZXIgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgc3ltYm9scyBpbiB0aGUgZmluYWwgdm1saW51eCBpbWFnZS4gU3RhdGljIGlubGluZXMgYXJlIG9mdGVuIG9wdGltaXplZCBvdXQsIHdoaWNoIHdvdWxkIG1lYW4gdGhleSYjMzk7cmUgbm90IGFkZHJlc3NhYmxlIGRpcmVjdGx5IGJ5IHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4KCkJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGUgcnVsZTogQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGluIGhlYWRlcnMgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFuZCB0aGVyZWZvcmUgYXJlbiYjMzk7dCBkaXJlY3RseSB0YXJnZXRhYmxlIGZvciBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4gSWYgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHdpdGhpbiB0aGVzZSBpbmxpbmVkIGhlbHBlcnMsIEkgbmVlZCB0byBsb29rIGZvciBub24tc3RhdGljIG9yIHNwZWNpZmljIGNhbGxlciBmdW5jdGlvbnMgdGhhdCAqdXNlKiB0aGVtIGFuZCBhcmUgZGVmaW5lZCBpbiB0aGUgYC5jYCBmaWxlcy4gVGhpcyBpcyBob3cgSSBjYW4gaW5kaXJlY3RseSB0ZXN0IHRoZW0uCgpMZXQmIzM5O3Mgc2VlOiBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCwgSSBoYXZlIGZ1bmN0aW9ucyBsaWtlIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9jaGFuZ2VgLCBgY29kZWxfaW5pdGAsIGFuZCBgY29kZWxfcWRpc2NfZW5xdWV1ZWAuIFRoZW4sIGluIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLCBJIGhhdmUgc2ltaWxhciBmdW5jdGlvbnM6IGBmcV9jb2RlbF9kZXF1ZXVlYCwgYF9fZnFfY29kZWxfZGVxdWV1ZWAsIGBmcV9jb2RlbF9jaGFuZ2VgLCBgZnFfY29kZWxfaW5pdGAsIGFuZCBgZnFfY29kZWxfZW5xdWV1ZWAuCgpPa2F5LCBhIG1vbWVudCBvZiBjbGFyaXR5Li4uIGFyZSBgY29kZWxfcWRpc2NfZGVxdWV1ZWAgYW5kIGBmcV9jb2RlbF9kZXF1ZXVlYCBhY3R1YWxseSBzdGF0aWMgb3Igbm9uLXN0YXRpYz8gSSBuZWVkIHRvIGNoZWNrLiBEaWdnaW5nIGludG8gYHNjaF9jb2RlbC5jYCwgSSBzZWUgYHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClgLiBBbmQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYC5kZXF1ZXVlID0gY29kZWxfcWRpc2NfZGVxdWV1ZWAgd2l0aGluIGBjb2RlbF9xZGlzY19vcHNgLiBUaGUgc2FtZSBwYXR0ZXJuIGV4aXN0cyBpbiBgc2NoX2ZxX2NvZGVsLmNgIGZvciBgZnFfY29kZWxfZGVxdWV1ZWAuIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB0YWtlbiBhbmQgYXNzaWduZWQgdG8gdGhlIGBRZGlzY19vcHNgIHN0cnVjdCwgdGhleSAqYXJlbiYjMzk7dCogaW5saW5lZC4gVGhleSBleGlzdCBhcyByZWFsIGZ1bmN0aW9ucyB3aXRoIGFjY2Vzc2libGUgc3ltYm9scyBpbiB0aGUgY29tcGlsZWQgY29kZSEKCk5vdywgd2hhdCBhYm91dCBgY29kZWxfZGVxdWV1ZWAgaXRzZWxmPyBMZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCBhcm91bmQgbGluZXMgMTUwLTE2MC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQ1Olx0XHR9IGVsc2UgaWYgKGNvZGVsX3RpbWVfYWZ0ZXIobm93LCB2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUpKSB7XG4gMTQ2Olx0XHRcdG9rX3RvX2Ryb3AgPSB0cnVlO1xuIDE0NzpcdFx0fVxuIDE0ODpcdFx0cmV0dXJuIG9rX3RvX2Ryb3A7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gMTUyOlx0XHRcdFx0XHQgICAgIHUzMiAqYmFja2xvZyxcbiAxNTM6XHRcdFx0XHRcdCAgICAgc3RydWN0IGNvZGVsX3BhcmFtcyAqcGFyYW1zLFxuIDE1NDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfdmFycyAqdmFycyxcbiAxNTU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGNvZGVsX3N0YXRzICpzdGF0cyxcbiAxNTY6XHRcdFx0XHRcdCAgICAgY29kZWxfc2tiX2xlbl90IHNrYl9sZW5fZnVuYyxcbiAxNTc6XHRcdFx0XHRcdCAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxuIDE1ODpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZHJvcF90IGRyb3BfZnVuYyxcbiAxNTk6XHRcdFx0XHRcdCAgICAgY29kZWxfc2tiX2RlcXVldWVfdCBkZXF1ZXVlX2Z1bmMpXG4gMTYwOlx0e1xuIDE2MTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xuIDE2MjpcdFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiAxNjM6XHRcdGNvZGVsX3RpbWVfdCBub3c7XG4gMTY0Olx0XHRib29sIGRyb3A7XG4gMTY1Olx0XG4gMTY2Olx0XHRpZiAoIXNrYikge1xuIDE2NzpcdFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuIDE2ODpcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNjk6XHRcdFx0cmV0dXJuIHNrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NjcKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogMTYyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBDb2RlbC9GcV9Db2RlbCBRdWV1ZWluZyBEaXNjaXBsaW5lIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBwb3RlbnRpYWwgdHJ1bmNhdGlvbiBlcnJvcnMgd2hlbiB0aGUgaW50ZXJ2YWwgaXMgdmVyeSBzbWFsbCAoc3ViLXRpY2spIHdpdGhpbiB0aGUgYGNvZGVsYCBhbmQgYGZxX2NvZGVsYCBxdWV1ZWluZyBkaXNjaXBsaW5lcywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbi4gVGhpcyBjYW4gbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIGluIGBjb2RlbF9kZXF1ZXVlYCBiZWNhdXNlIG9mIGByZWNpcHJvY2FsX3NjYWxlYCByZXR1cm5pbmcgMC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGNsYW1waW5nIHRoZSBpbmNyZW1lbnQgdmFsdWUsIGVuc3VyaW5nIGl0JiMzOTtzIGF0IGxlYXN0IG9uZSB0aWNrLCBhbmQgY2FwcGluZyB0aGUgbnVtYmVyIG9mIGRyb3BzIHBlciBkZXF1ZXVlLgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIGVuc3VyaW5nIHRoZXkgYXJlIGZ1enplZC4gYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAgYXJlIHRoZSBjb3JlIGRlcXVldWUgZnVuY3Rpb25zIGZvciBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAsIHJlc3BlY3RpdmVseS4gQWxzbyBJIG5lZWQgdG8gaW5jbHVkZSBgY29kZWxfY2hhbmdlYCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAgYmVjYXVzZSB0aGV5IHBhcnNlIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgdGhlIHNhbWUgcWRpc2NzLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGNvZGVsX2RlcXVldWVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYyBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCwgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIGlubGluZWQgb3IgcmVuYW1lZC4gU28sIEkgd2lsbCBhZGQgaXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMgdG8gYmUgc3VyZS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybWVkIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCB1c2VzIHRoZSBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCBzdGF0aWMgZnVuY3Rpb24uCgpUaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfQ09ERUxgLCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBUaGUgYG1hYzgwMjExYCB3aXJlbGVzcyBtb2R1bGUgYXBwZWFycyBsZXNzIHJlbGV2YW50LCBhcyB0aGUgcGF0Y2ggdGFyZ2V0cyB0aGUgdHJhZmZpYyBjb250cm9sIGFzcGVjdHMgb2YgY29kZWwvZnFfY29kZWwuIFRoZSBmb2N1cyBpcyBvbiB0aGUgcWRpc2Mgb3BlcmF0aW9ucywgc28gSSBkb24mIzM5O3QgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGNvbmZpZy4KCkdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoc3BlY2lmaWNhbGx5LCB0aGUgYWxnb3JpdGhtIGZsb3cgZm9yIHRyYWZmaWMgY29udHJvbCksIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIHRoZXNlIHFkaXNjcyB3aXRoIHNtYWxsIGludGVydmFscywgc28gdGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGNoYW5nZWQgbG9naWMuCgpIZXJlJiMzOTtzIHRoZSBwbGFuIGZvciBgc2V0LXJlc3VsdHNgOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUKKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29kZSBpbiBjb3JlIG5ldHdvcmtpbmcgKHRyYWZmaWMgY29udHJvbCkgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGluIGBjb2RlbF9kZXF1ZXVlYCBjYXVzZWQgYnkgdHJ1bmNhdGlvbiBlcnJvcnMgd2l0aCBzbWFsbCBpbnRlcnZhbHMuIFRoZSBjaGFuZ2VzIGNsYW1wIHRoZSBpbmNyZW1lbnQgdmFsdWUgYW5kIGNhcCBkcm9wcyBwZXIgZGVxdWV1ZS4KKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYGNvZGVsX3FkaXNjX2RlcXVldWVgCiAgICAqICAgYGZxX2NvZGVsX2RlcXVldWVgCiAgICAqICAgYGNvZGVsX2NoYW5nZWAKICAgICogICBgZnFfY29kZWxfY2hhbmdlYAogICAgKiAgIGBjb2RlbF9kZXF1ZXVlYAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYE5FVF9TQ0hFRGAKICAgICogICBgTkVUX1NDSF9DT0RFTGAKICAgICogICBgTkVUX1NDSF9GUV9DT0RFTGAKCkV2ZXJ5dGhpbmcgbG9va3MgY29ycmVjdC4gSSBhbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9DT0RFTCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29kZWxfcWRpc2NfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Y29kZWxfZGVxdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgYW5kIEZRLUNvRGVsIHBhY2tldCBzY2hlZHVsaW5nIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFsZ29yaXRobXMgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGFuZCBpbmNsdWRlL25ldC9jb2RlbC5oLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhlIGNvbnRyb2wgbGF3IHN0ZXAgaW5jcmVtZW50IGlzIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IGluZmluaXRlIHN0YWxscyB3aGVuIGludGVydmFscyBhcmUgY29uZmlndXJlZCB0byBzdWItdGljayB2YWx1ZXMsIGFuZCBpbnRyb2R1Y2VzIGEgbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBsb29waW5nIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIChRZGlzYykgbG9naWMgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvcnRuZXRsaW5rIGFuZCBub3JtYWwgbmV0d29yayBwYWNrZXQgZGVxdWV1ZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9DT0RFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGVsX3FkaXNjX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2NvZGVsX2RlcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW5maW5pdGUgbG9vcCAvIENQVSBzdGFsbCBpc3N1ZSBpbiBDb0RlbCYjMzk7cyBwYWNrZXQgZHJvcHBpbmcgYWxnb3JpdGhtIChjb2RlbF9kZXF1ZXVlKS4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIGluY3JlbWVudCBpbiBjb2RlbF9jb250cm9sX2xhdygpIHRvIGF0IGxlYXN0IDEgdGljayB1c2luZyBtYXhfdCgpIHRvIGF2b2lkIHN0YWxscyBmcm9tIHplcm8tYWR2YW5jZW1lbnQgd2hlbiBpbnRlcnZhbCBpcyBzbWFsbCBvciBwYWNrZXQgZHJvcCBjb3VudCBpcyBsYXJnZSwgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24gYXQgMjU2IChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpLlxuXG5LTVNBTiBpcyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBhcmUgcHVyZWx5IGFsZ29yaXRobWljLCBpbnZvbHZpbmcgYmFzaWMgYXJpdGhtZXRpYyBhbmQgbG9vcCB0ZXJtaW5hdGlvbiBsb2dpYyBvbiBzY2FsYXIgaW50ZWdlcnMuIFRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIGlzIGBkcm9wc2AsIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgbGVuZ3RoIC8gYnVmZmVyIGJvdW5kYXJ5IG9wZXJhdGlvbnMgYXJlIG1vZGlmaWVkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNGQ3NTNiZjYzYjFiNTM5YWYzY2Y3YWFmZjU3OTEwZWRiYjc4Njk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaAppbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb2RlbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKQEAgLTE0MCw2ICYjNDM7MTQwLDExIEBAIHN0cnVjdCBjb2RlbF92YXJzIHsKIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi8KICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKQogCiYjNDM7LyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AmIzM5O3Mgd29yayBkZXBlbmRzIG9uIHRoZQomIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NgomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0cwogICogQG1heHBhY2tldDoJbGFyZ2VzdCBwYWNrZXQgd2UmIzM5O3ZlIHNlZW4gc28gZmFyCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaApAQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycykKICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgJiM0MzsgaW50ZXJ2YWwvc3FydChjb3VudCkKICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZAogICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhCiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC4KICAqLwogc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCwKIAkJCQkgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsCiAJCQkJICAgICAgdTMyIHJlY19pbnZfc3FydCkKIHsKLQlyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKTsKJiM0MzsJcmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLAomIzQzOwkJCSByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLAomIzQzOwkJCQkJICByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKSk7CiB9CiAKIHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xNTQsNiAmIzQzOzE1OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkJICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7CiYjNDM7CXVuc2lnbmVkIGludCBkcm9wcyA9IDA7CiAJY29kZWxfdGltZV90IG5vdzsKIAlib29sIGRyb3A7CiAKQEAgLTE4MCw2ICYjNDM7MTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkgKi8KIAkJCXdoaWxlICh2YXJzLSZndDtkcm9wcGluZyAmYW1wOyZhbXA7CiAJCQkgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtJmd0O2Ryb3BfbmV4dCkpIHsKJiM0MzsJCQkJaWYgKCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgewomIzQzOwkJCQkJLyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqLwomIzQzOwkJCQkJV1JJVEVfT05DRSh2YXJzLSZndDtkcm9wX25leHQsCiYjNDM7CQkJCQkJICAgY29kZWxfY29udHJvbF9sYXcobm93LAomIzQzOwkJCQkJCQkJICAgICBwYXJhbXMtJmd0O2ludGVydmFsLAomIzQzOwkJCQkJCQkJICAgICB2YXJzLSZndDtyZWNfaW52X3NxcnQpKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiAJCQkJLyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXAKIAkJCQkgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS4KIAkJCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgpAQCAtMjEzLDUgJiM0MzsyMTMsNzcgQEAKICAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs2ZTQ0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2E4YzMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTY5NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0Ozk3OTMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiAgICAgfQogXQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCkBAIC0zMTYsNSAmIzQzOzMxNiw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiAgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKICAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MWI0ZCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MzU0MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7NDljNSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZTBmJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggYSBiYXNlbGluZSBvZiBzYWZldHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdHlwaWNhbCBzb2Z0d2FyZSBkZWJ1Z2dpbmcgYW5kIFFBIHNjZW5hcmlvIGhlcmUsIGF1ZGl0aW5nIHRoZSBjb2RlIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBObyByZWQgZmxhZ3MgaW4gdGVybXMgb2YgbWFsaWNpb3VzIGludGVudCBvciBhbnl0aGluZyBvZmZlbnNpdmUg4oCTIHdlJiMzOTtyZSBsb29raW5nIGF0IGJlbmlnbiBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGV5IHRvdWNoIG9uIGFueXRoaW5nIHRoYXQgS01TQU4gd291bGQgY2FyZSBhYm91dC4KCk5vdywgbGV0JiMzOTtzIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggaXMgYWN0dWFsbHkgZG9pbmcuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBzb21lIGNvcmUgYGNvZGVsYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU3BlY2lmaWNhbGx5OgoKMS4gIEEgbmV3IGAjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZgIGlzIGFkZGVkIGluIGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgc2V0dGluZyBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGNhbiBiZSBkcm9wcGVkIHBlciBkZXF1ZXVlIGN5Y2xlLiBSZWFzb25hYmxlLCBpZiBwZXJoYXBzIGFyYml0cmFyeS4KMi4gIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhhcyB0aGVzZSBjaGFuZ2VzOgogICAgKiAgIEluIHRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uLCBhIGBtYXhfdGAgY2hlY2sgaXMgYWRkZWQsIGVuc3VyaW5nIHRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIGByZWNpcHJvY2FsX3NjYWxlYCBpcyBhdCBsZWFzdCAxLiBMb29rcyBsaWtlIGEgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBwcmV2ZW50aW9uLgogICAgKiAgIFRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24gaXMgYWxzbyBtb2RpZmllZC4gQSBgZHJvcHNgIHZhcmlhYmxlIGlzIGFkZGVkLCBhbmQgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIGxvb3AgdGhhdCB0cmFja3MgZHJvcHBlZCBwYWNrZXRzLiBDcml0aWNhbGx5LCB0aGVyZSYjMzk7cyBub3cgYSBjaGVjayB0aGF0IGBkcm9wc2AgZG9lc24mIzM5O3QgZXhjZWVkIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBUaGlzIGludHJvZHVjZXMgYSBuZXcgY29udHJvbCBmbG93LCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UuIE1vcmUgaW52ZXN0aWdhdGlvbiBpcyBuZWVkZWQuCjMuICBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBKU09OIHRlc3QgZmlsZXMgZm9yIGBjb2RlbGAgYW5kIGBmcV9jb2RlbGAgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyB3ZSBjYW4gZXhhbWluZSB0aGUgdGVzdHMgdG8gc2VlIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgY2hhbmdlcy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUsIGVzcGVjaWFsbHkgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlcyBpcyBwYXJhbW91bnQuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAgdG8gZGV0ZXJtaW5lIGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhZGRlZCBsb2dpYy4gVGhlbiBJJiMzOTtsbCBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHRoYXQgS01TQU4gY291bGQgc3BlY2lmaWNhbGx5IGZsYWcuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEkgY2FuIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIG5lY2Vzc2l0eSBvZiBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcbiAxNDY6XHRcdFx0b2tfdG9fZHJvcCA9IHRydWU7XG4gMTQ3Olx0XHR9XG4gMTQ4Olx0XHRyZXR1cm4gb2tfdG9fZHJvcDtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiAxNTI6XHRcdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuIDE1MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXG4gMTU0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDE1NTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDE1NjpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxuIDE1NzpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxuIDE1OTpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiAxNjA6XHR7XG4gMTYxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gMTYyOlx0XHR1bnNpZ25lZCBpbnQgZHJvcHMgPSAwO1xuIDE2MzpcdFx0Y29kZWxfdGltZV90IG5vdztcbiAxNjQ6XHRcdGJvb2wgZHJvcDtcbiAxNjU6XHRcbiAxNjY6XHRcdGlmICghc2tiKSB7XG4gMTY3Olx0XHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG4gMTY4Olx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xuIDE2OTpcdFx0XHRyZXR1cm4gc2tiO1xuIDE3MDpcdFx0fVxuIDE3MTpcdFx0bm93ID0gY29kZWxfZ2V0X3RpbWUoKTtcbiAxNzI6XHRcdGRyb3AgPSBjb2RlbF9zaG91bGRfZHJvcChza2IsIGN0eCwgdmFycywgcGFyYW1zLCBzdGF0cyxcbiAxNzM6XHRcdFx0XHRcdCBza2JfbGVuX2Z1bmMsIHNrYl90aW1lX2Z1bmMsIGJhY2tsb2csIG5vdyk7XG4gMTc0Olx0XHRpZiAodmFycy1cdTAwM2Vkcm9wcGluZykge1xuIDE3NTpcdFx0XHRpZiAoIWRyb3ApIHtcbiAxNzY6XHRcdFx0XHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cbiAxNzc6XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNzg6XHRcdFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4gMTc5Olx0XHRcdFx0LyogSXQmIzM5O3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxuIDE4MDpcdFx0XHRcdCAqIHBhY2tldCBhbmQgZGVxdWV1ZSB0aGUgbmV4dC4gVGhlIGRlcXVldWUgbWlnaHRcbiAxODE6XHRcdFx0XHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cbiAxODI6XHRcdFx0XHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXG4gMTgzOlx0XHRcdFx0ICogQSBsYXJnZSBiYWNrbG9nIG1pZ2h0IHJlc3VsdCBpbiBkcm9wIHJhdGVzIHNvIGhpZ2hcbiAxODQ6XHRcdFx0XHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXG4gMTg1Olx0XHRcdFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXG4gMTg2Olx0XHRcdFx0ICovXG4gMTg3Olx0XHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gMTg4Olx0XHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbiAxODk6XHRcdFx0XHRcdGlmICgmIzQzOyYjNDM7ZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xuIDE5MDpcdFx0XHRcdFx0XHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXG4gMTkxOlx0XHRcdFx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wX25leHQsXG4gMTkyOlx0XHRcdFx0XHRcdFx0ICAgY29kZWxfY29udHJvbF9sYXcobm93LFxuIDE5MzpcdFx0XHRcdFx0XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2VpbnRlcnZhbCxcbiAxOTQ6XHRcdFx0XHRcdFx0XHRcdFx0ICAgICB2YXJzLVx1MDAzZXJlY19pbnZfc3FydCkpO1xuIDE5NTpcdFx0XHRcdFx0XHRicmVhaztcbiAxOTY6XHRcdFx0XHRcdH1cbiAxOTc6XHRcdFx0XHRcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXG4gMTk4Olx0XHRcdFx0XHQgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS5cbiAxOTk6XHRcdFx0XHRcdCAqL1xuIDIwMDpcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWNvdW50LCB2YXJzLVx1MDAzZWNvdW50ICYjNDM7IDEpO1xuIDIwMTpcdFx0XHRcdFx0Y29kZWxfTmV3dG9uX3N0ZXAodmFycyk7XG4gMjAyOlx0XHRcdFx0XHRpZiAocGFyYW1zLVx1MDAzZWVjbiBcdTAwMjZcdTAwMjYgSU5FVF9FQ05fc2V0X2NlKHNrYikpIHtcbiAyMDM6XHRcdFx0XHRcdFx0V1JJVEVfT05DRShzdGF0cy1cdTAwM2VlY25fbWFyayxcbiAyMDQ6XHRcdFx0XHRcdFx0XHQgICBzdGF0cy1cdTAwM2VlY25fbWFyayAmIzQzOyAxKTtcbiAyMDU6XHRcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbiAyMDY6XHRcdFx0XHRcdFx0XHRjb2RlbF9jb250cm9sX2xhdyh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbiAyMDc6XHRcdFx0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlaW50ZXJ2YWwsXG4gMjA4Olx0XHRcdFx0XHRcdFx0XHRcdCAgdmFycy1cdTAwM2VyZWNfaW52X3NxcnQpKTtcbiAyMDk6XHRcdFx0XHRcdFx0Z290byBlbmQ7XG4gMjEwOlx0XHRcdFx0XHR9XG4gMjExOlx0XHRcdFx0XHRzdGF0cy1cdTAwM2Vkcm9wX2xlbiAmIzQzOz0gc2tiX2xlbl9mdW5jKHNrYik7XG4gMjEyOlx0XHRcdFx0XHRkcm9wX2Z1bmMoc2tiLCBjdHgpO1xuIDIxMzpcdFx0XHRcdFx0c3RhdHMtXHUwMDNlZHJvcF9jb3VudCYjNDM7JiM0Mzs7XG4gMjE0Olx0XHRcdFx0XHRza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyOAoJCQkJCQkJb3V0cHV0OiAyMzYKCQkJCQkJCXRob3VnaHRzOiAxMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDb0RlbCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCBvciBDUFUgc3RhbGwgd2l0aGluIHRoZSBDb0RlbCBwYWNrZXQgZHJvcHBpbmcgbG9naWMgKGBjb2RlbF9kZXF1ZXVlKClgKS4gVGhlIGNvcmUgaXNzdWUgc3RlbXMgZnJvbSB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3KClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHBvc3NpYmlsaXR5IG9mIGByZWNpcHJvY2FsX3NjYWxlYCByZXR1cm5pbmcgemVybyB3aGVuIHRoZSBpbnRlcnZhbCBpcyB0aW55IG9yIHRoZSBjb3VudCBpcyBsYXJnZS4gVGhpcyB3b3VsZCBwcmV2ZW50IHRoZSBgdmFycy0mZ3Q7ZHJvcF9uZXh0YCB0aW1lc3RhbXAgZnJvbSBhZHZhbmNpbmcsIGxlYWRpbmcgdG8gYW4gZW5kbGVzcyBsb29wIGluIGBjb2RlbF9kZXF1ZXVlKClgLgoKVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBieTogKDEpIGVuc3VyaW5nIHRoYXQgYGNvZGVsX2NvbnRyb2xfbGF3KClgIGFsd2F5cyBpbmNyZW1lbnRzIGBkcm9wX25leHRgIGJ5IGF0IGxlYXN0IG9uZSB0aWNrIHVzaW5nIGBtYXhfdCh1MzIsIDEsIC4uLilgIGFuZCAoMikgYWRkaW5nIGEgc2FmZWd1YXJkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIHRvIDI1NiAoYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWApLiBUaGlzIGxvb3AgYm91bmQgcmVzeW5jcyBgZHJvcF9uZXh0YCwgYW5kIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYSB3YXkgdGhhdCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBjaGVjaz8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBldmFsdWF0ZSBhZ2FpbnN0IHRoZSBjcml0ZXJpYS4gSSYjMzk7bSBzZWVpbmcgbm8ga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGFsdGVyYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlciBoYW5kbGluZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBTcGVjaWZpY2FsbHk6CgoqICAgTm8gbmV3IG9yIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSAoc28gbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzKS4KKiAgIFZhcmlhYmxlcyB1c2VkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoYGRyb3BzYCBpcyBpbml0aWFsaXplZCB0byAwLCBgbm93YCBpcyBzZXQgYnkgYGNvZGVsX2dldF90aW1lKClgLCBhbmQgYHZhcnNgIGlzIHBhc3NlZCBmcm9tIGNhbGxlcikuCiogICBObyBuZXcgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciBjaGFuZ2VkIGluIHRoZSBjb2RlLgoqICAgTm8gY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEgaW4gZXhpc3RpbmcgYnVmZmVycyBvciBza2IgZGF0YSBsZW5ndGhzLgoKVGhpcyBwYXRjaCBpcyBwdXJlbHkgYWxnb3JpdGhtaWMsIHByZXZlbnRpbmcgYW4gaW5maW5pdGUgbG9vcCBieSBtYWtpbmcgc3VyZSBgZHJvcF9uZXh0YCBpcyBhZHZhbmNlZCwgYW5kIGJvdW5kaW5nIGBkcm9wc2AgZm9yIHJlc3luY2luZy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgaXNzdWVzLiBJdCBkb2VzbiYjMzk7dCBkZXRlY3QgaW5maW5pdGUgbG9vcHMgb3IgQ1BVIHN0YWxscywgS0FTQU4gYW5kIHN0YW5kYXJkIGxvY2t1cCBkZXRlY3RvcnMgZG8uIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIGFyZSBzdWZmaWNpZW50IGhlcmUuCgpHaXZlbiB0aGUgY3JpdGVyaWEgYW5kIHRob3JvdWdoIGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwmIzM5O3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cblxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwmIzM5O3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cblxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNTo0MS4yOTcyNDYxOTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAwMTMzMjAyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZWxfcWRpc2NfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY29kZWxfZGVxdWV1ZVwiLFxuICAgIFwiY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV9jb2RlbF9jaGFuZ2VcIixcbiAgICBcImNvZGVsX2RlcXVldWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wIC8gQ1BVIHN0YWxsIGlzc3VlIGluIENvRGVsJ3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cXG5cXG5LTVNBTiBpcyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBhcmUgcHVyZWx5IGFsZ29yaXRobWljLCBpbnZvbHZpbmcgYmFzaWMgYXJpdGhtZXRpYyBhbmQgbG9vcCB0ZXJtaW5hdGlvbiBsb2dpYyBvbiBzY2FsYXIgaW50ZWdlcnMuIFRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIGlzIGBkcm9wc2AsIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgbGVuZ3RoIC8gYnVmZmVyIGJvdW5kYXJ5IG9wZXJhdGlvbnMgYXJlIG1vZGlmaWVkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI1OjQxLjI5NzI1MTA3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNjM0NTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0ZDc1M2JmNjNiMWI1MzlhZjNjZjdhYWZmNTc5MTBlZGJiNzg2OThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbC5oXFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xcbiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovXFxuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxcbiBcXG4rLyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXFxuKyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxcbisgKi9cXG4rI2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XFxuK1xcbiAvKipcXG4gICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHNcXG4gICogQG1heHBhY2tldDpcXHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcXG5pbmRleCAyYzFmMGVjMzA5ZTlmLi44ZjI2MTMyZDQ1YjdmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbkBAIC05MywxMiArOTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpXFxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxcbiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXFxuKyAqXFxuKyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcXG4rICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cXG4gICovXFxuIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcXG4ge1xcbi1cXHRyZXR1cm4gdCArIHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsIHJlY19pbnZfc3FydCBcXHUwMDNjXFx1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpO1xcbitcXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcXG4rXFx0XFx0XFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmVjX2ludl9zcXJ0IFxcdTAwM2NcXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xNTQsNiArMTU5LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XFxuK1xcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIFxcdGNvZGVsX3RpbWVfdCBub3c7XFxuIFxcdGJvb2wgZHJvcDtcXG4gXFxuQEAgLTE4MCw2ICsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHdoaWxlICh2YXJzLVxcdTAwM2Vkcm9wcGluZyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXFx1MDAzZWRyb3BfbmV4dCkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCsrZHJvcHMgXFx1MDAzZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHtcXG4rXFx0XFx0XFx0XFx0XFx0LyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqL1xcbitcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHZhcnMtXFx1MDAzZWRyb3BfbmV4dCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29kZWxfY29udHJvbF9sYXcobm93LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBhcmFtcy1cXHUwMDNlaW50ZXJ2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmFycy1cXHUwMDNlcmVjX2ludl9zcXJ0KSk7XFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXFxuIFxcdFxcdFxcdFxcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxcbiBcXHRcXHRcXHRcXHQgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cXG5pbmRleCA2ZDUxNWQwZTVlZDY5Li5hODk0ZTZmMGUyNjc3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXFxuQEAgLTIxMyw1ICsyMTMsNzcgQEBcXG4gICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCB0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zXFxcIixcXG4gICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcIjZlNDRcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImNvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcImE4YzNcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImNvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcImE2OTVcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBDT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMTAyNHVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtc1xcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiOTc5M1xcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJjb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuICAgICB9XFxuIF1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cXG5pbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXFxuQEAgLTMxNiw1ICszMTYsNzcgQEBcXG4gICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcXFwiLFxcbiAgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbiAgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiMWI0ZFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZnFfY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDB1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiMzU0MFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZnFfY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDJ1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiNDljNVxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJmcV9jb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIzZTBmXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImZxX2NvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4gICAgIH1cXG4gXVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNTo0My4wMDQzMzQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjM4NjIxODI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2RlbF9xZGlzY19kZXF1ZXVlXCIsXG4gICAgXCJmcV9jb2RlbF9kZXF1ZXVlXCIsXG4gICAgXCJjb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX2NvZGVsX2NoYW5nZVwiLFxuICAgIFwiY29kZWxfZGVxdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBhbmQgRlEtQ29EZWwgcGFja2V0IHNjaGVkdWxpbmcgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtcyBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYW5kIGluY2x1ZGUvbmV0L2NvZGVsLmguIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGUgY29udHJvbCBsYXcgc3RlcCBpbmNyZW1lbnQgaXMgYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgaW5maW5pdGUgc3RhbGxzIHdoZW4gaW50ZXJ2YWxzIGFyZSBjb25maWd1cmVkIHRvIHN1Yi10aWNrIHZhbHVlcywgYW5kIGludHJvZHVjZXMgYSBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0IGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGxvb3Bpbmcgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wgKFFkaXNjKSBsb2dpYyB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay9ydG5ldGxpbmsgYW5kIG5vcm1hbCBuZXR3b3JrIHBhY2tldCBkZXF1ZXVlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0ZDc1M2JmNjNiMWI1MzlhZjNjZjdhYWZmNTc5MTBlZGJiNzg2OThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxOToyNTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsLmggYi9pbmNsdWRlL25ldC9jb2RlbC5oXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xuIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi9cbiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUylcbiBcbisvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCdzIHdvcmsgZGVwZW5kcyBvbiB0aGVcbisgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cbisgKi9cbisjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZcbitcbiAvKipcbiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0c1xuICAqIEBtYXhwYWNrZXQ6XHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgKzkzLDE3IEBAIHN0YXRpYyB2b2lkIGNvZGVsX05ld3Rvbl9zdGVwKHN0cnVjdCBjb2RlbF92YXJzICp2YXJzKVxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuKyAqXG4rICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuKyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gICovXG4gc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiBcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiBcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4ge1xuLVx0cmV0dXJuIHQgKyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4rXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcbitcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbitcdFx0XHRcdFx0ICByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE1NCw2ICsxNTksNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4rXHR1bnNpZ25lZCBpbnQgZHJvcHMgPSAwO1xuIFx0Y29kZWxfdGltZV90IG5vdztcbiBcdGJvb2wgZHJvcDtcbiBcbkBAIC0xODAsNiArMTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRcdFx0ICovXG4gXHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbitcdFx0XHRcdGlmICgrK2Ryb3BzIFx1MDAzZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHtcbitcdFx0XHRcdFx0LyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqL1xuK1x0XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcF9uZXh0LFxuK1x0XHRcdFx0XHRcdCAgIGNvZGVsX2NvbnRyb2xfbGF3KG5vdyxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICBwYXJhbXMtXHUwMDNlaW50ZXJ2YWwsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgdmFycy1cdTAwM2VyZWNfaW52X3NxcnQpKTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHQvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcFxuIFx0XHRcdFx0ICogc2luY2UgdGhlcmUgaXMgbm8gbW9yZSBkaXZpZGUuXG4gXHRcdFx0XHQgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuaW5kZXggNmQ1MTVkMGU1ZWQ2OS4uYTg5NGU2ZjBlMjY3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbkBAIC0yMTMsNSArMjEzLDc3IEBAXG4gICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCB0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zXCIsXG4gICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI2ZTQ0XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiYThjM1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDJ1c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE2OTVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtc1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjk3OTNcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtc1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbkBAIC0zMTYsNSArMzE2LDc3IEBAXG4gICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbiAgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjFiNGRcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIzNTQwXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiNDljNVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiM2UwZlwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCB0YXJnZXQgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuICAgICB9XG4gXVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjU6NDMuMDA0MzM1OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTY4ODAwMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29EZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIFRoZSBmaWxlcyBsaXN0ZWQgaW4gdGhlIGRpZmYgaW1tZWRpYXRlbHkgdGVsbCBtZSBpdCdzIGZvY3VzZWQgb24gdGhlIENvRGVsIChDb250cm9sbGVkIERlbGF5KSBxdWV1aW5nIGRpc2NpcGxpbmUuIEdvb2QuIEkgcmVjb2duaXplIHRob3NlIGluY2x1ZGUgZmlsZXM6IGBjb2RlbC5oYCBhbmQgYGNvZGVsX2ltcGwuaGAgYXJlIGtleSBmb3IgdGhlIENvRGVsIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIEpTT04gZmlsZXMgaW5kaWNhdGUgY2hhbmdlcyB0byBzZWxmLXRlc3RzIGZvciB0aGUgYHRjYCAodHJhZmZpYyBjb250cm9sKSB1dGlsaXRpZXMsIHNwZWNpZmljYWxseSBjb3ZlcmluZyBDb0RlbCBhbmQgZnFfY29kZWwgKHdoaWNoIHJlbGllcyBvbiBDb0RlbCkuIFRoZSBgdGMtdGVzdGluZ2AgZGlyZWN0b3J5IHN1Z2dlc3RzIHRoaXMgaXMgcGFydCBvZiBhIGJyb2FkZXIgdGVzdGluZyBmcmFtZXdvcmssIHByb2JhYmx5IGZvciBlbnN1cmluZyBjb3JyZWN0bmVzcyBhY3Jvc3MgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzOiB0aGUgYCNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAgaW4gYGNvZGVsLmhgIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBuZXcgY29uc3RhbnQuIEEgZHJvcCBjb3VudGVyISBJbiBgY29kZWxfaW1wbC5oYCwgdGhlIGNoYW5nZSB0byBgY29kZWxfY29udHJvbF9sYXdgIGxvb2tzIGxpa2UgYSBzdWJ0bGUgYWRqdXN0bWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBkcm9wIHRpbWUgaXMgY2FsY3VsYXRlZC4gVGhlIHVzZSBvZiBgbWF4X3QodTMyLCAxLCAuLi4pYCBpbmRpY2F0ZXMgYSBjb25zdHJhaW50LCBlbnN1cmluZyB0aGUgY2FsY3VsYXRlZCBkcm9wIHRpbWUgaXMgbmV2ZXIgbGVzcyB0aGFuIDEgKHByZXN1bWFibHkgYSB1bml0IG9mIHRpbWUpIHRvIHByZXZlbnQgc29tZSBlZGdlIGNhc2VzLiBMaWtlbHkgdG8gYXZvaWQgZGl2aWRlIGJ5IHplcm8gZXJyb3JzIVxuXG5UaGUgcmVhbCBtZWF0IGlzIGluIHRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24uIFRoZSBhZGRpdGlvbiBvZiBgdW5zaWduZWQgaW50IGRyb3BzID0gMDtgIGFuZCB0aGUgYHdoaWxlYCBsb29wIHdpdGggdGhlIGBpZiAoKytkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKWAgY29uZGl0aW9uIGlzIGNydWNpYWwuIFRoaXMgaXMgYSByYXRlLWxpbWl0aW5nIG1lY2hhbmlzbSwgcHJldmVudGluZyBhIHNpbmdsZSBjYWxsIHRvIGBjb2RlbF9kZXF1ZXVlYCBmcm9tIGRyb3BwaW5nIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgcGFja2V0cy4gVGhlIGBXUklURV9PTkNFYCBhbmQgdGhlIG5ldyBjYWxsIHRvIGBjb2RlbF9jb250cm9sX2xhd2Agd2l0aGluIHRoZSBgaWZgIGJsb2NrIHNob3cgaG93IHRoZSBuZXh0IGRyb3AgdGltZSBpcyByZWNvbXB1dGVkIGlmIHdlJ3ZlIGZhbGxlbiB0b28gZmFyIGJlaGluZCBpbiBvdXIgZGVxdWV1ZWluZy4gVGhpcyBsb29rcyBsaWtlIGEgYmFja29mZiBtZWNoYW5pc20sIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiB3ZSdyZSBnZXR0aW5nIG92ZXJ3aGVsbWVkLCBkb24ndCBqdXN0IGRyb3AgZXZlcnl0aGluZyBpbW1lZGlhdGVseTsgZ2l2ZSB0aGUgc3lzdGVtIGEgY2hhbmNlIHRvIHJlY292ZXIgYnkgc3RhZ2dlcmluZyB0aGUgZHJvcHMuIFRoZSBjb21tZW50IGFib3V0IFwiZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZVwiIHByb3ZpZGVzIHRoZSByZWFzb24gZm9yIHRoZSBsb2dpYyFcblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCBvZiB3aG8gY2FsbHMgdGhpcy4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgaGllcmFyY2h5LiBTZWFyY2hpbmcgZm9yIHVzZXMgb2YgYGNvZGVsX2RlcXVldWVgIG9yIGluY2x1ZGluZyBgbmV0L2NvZGVsX2ltcGwuaGAgd2lsbCBnaXZlIG1lIHRoYXQgY29udGV4dC4gVGhpcyB3aWxsIGhlbHAgdG8gYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvZiB0aGlzIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNTo0OS41NzMxMzg3NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNzQ2MjgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RlbF9pbXBsXFxcXC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYzoyNjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjMtI2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTIyLSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWxfcWRpc2MuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjU6NTIuMzgwNjEwMzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk4MjAxNTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDb2RlbCBJbXBsZW1lbnRhdGlvbiBVc2FnZSBBY3Jvc3MgdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgc2VlIGEgY2xlYXIgcGF0dGVybiBlbWVyZ2luZy4gVGhlIGBjb2RlbF9pbXBsLmhgIGhlYWRlciBmaWxlLCB3aGljaCBJJ20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoLCBpcyBiZWluZyB1dGlsaXplZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgbmV0d29yayBzY2hlZHVsaW5nIGFuZCB3aXJlbGVzcyBjb21tdW5pY2F0aW9ucyBjb21wb25lbnRzOiBzcGVjaWZpY2FsbHksIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCwgYW5kIGV2ZW4gdGhlIDgwMi4xMSB3aXJlbGVzcyB0cmFuc21pc3Npb24gcGF0aCBpbiBgbmV0L21hYzgwMjExL3R4LmNgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IHRob3VnaHQgcHJvY2VzcyB0byBkaXZlIGRlZXBlciBpbnRvICpob3cqIHRoZSBDb0RlbCBhbGdvcml0aG0gaXMgYmVpbmcgKmFwcGxpZWQqIGluIHRoZXNlIGRpZmZlcmVudCBjb250ZXh0cy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgY29kZWxfZGVxdWV1ZWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyB0aGVzZSBhcmUgdGhlIHdvcmtob3JzZXMgb2YgQ29EZWwg4oCTIGBjb2RlbF9kZXF1ZXVlYCBoYW5kbGVzIHBhY2tldCByZW1vdmFsIGZyb20gdGhlIHF1ZXVlLCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgY29udHJvbCBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hlbiBhbmQgaG93IGFnZ3Jlc3NpdmVseSB0byBzdGFydCBkcm9wcGluZyBwYWNrZXRzIHRvIG1hbmFnZSBxdWV1ZSBkZWxheXMgYW5kIG1haW50YWluIGZhaXJuZXNzLlxuXG5JJ20gbm93IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBJIG5lZWQgYW5zd2VycyB0by4gSG93IGFyZSB0aGUgcXVldWUgcGFyYW1ldGVycyBjb25maWd1cmVkIGluIGVhY2ggb2YgdGhlc2Ugc2NoZWR1bGluZyBkaXNjaXBsaW5lcz8gV2hhdCBzcGVjaWZpYyBtZXRyaWNzIGFyZSBiZWluZyBtb25pdG9yZWQ/IEFyZSB0aGUgZHJvcCBwYXJhbWV0ZXJzIChsaWtlIGB0YXJnZXRgIGFuZCBgaW50ZXJ2YWxgKSBiZWluZyB0dW5lZCwgYW5kIGlmIHNvLCBob3c/IEFyZSB0aGVyZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBhZGFwdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgQ29EZWwgcHJpbmNpcGxlcyBiZWluZyB1c2VkPyBJJ20gYW50aWNpcGF0aW5nIG51YW5jZWQgdXNhZ2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2ltcGxlIENvRGVsIGltcGxlbWVudGF0aW9uIGluIGBzY2hfY29kZWwuY2AsIHRoZSBGYWlyIFF1ZXVlaW5nIHdpdGggQ29EZWwgaW4gYHNjaF9mcV9jb2RlbC5jYCwgYW5kIHRoZSB3aXJlbGVzcyBjb250ZXh0IG9mIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSB3aXJlbGVzcyBlbnZpcm9ubWVudCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZHVlIHRvIHRoZSBzaGFyZWQgbWVkaXVtIGFuZCB0aGUgcmVzdWx0aW5nIGNvbmdlc3Rpb24gZHluYW1pY3MuIEkgd2lsbCBub3cgZXhhbWluZSB0aGVzZSBmaWxlcyBjbG9zZWx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQxNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI1OjU1LjM2MjYyOTI4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ0MzIyMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGVsX2RlcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvY29kZWwuaD0xMjk9c3RydWN0IGNvZGVsX3ZhcnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvY29kZWwuaC0xNDItXFxuaW5jbHVkZS9uZXQvY29kZWwuaDoxNDM6LyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXFxuaW5jbHVkZS9uZXQvY29kZWwuaC0xNDQtICogaWRsZSBnYXAgYW5kIGJhY2tsb2csIGJvdGggb3V0c2lkZSBvdXIgY29udHJvbDsgcmVzeW5jIHdoZW4gZXhjZWVkZWQuXFxuLS1cXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmg9MTA5PXN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgtMTUwLVxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaDoxNTE6c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgtMTUyLVxcdFxcdFxcdFxcdCAgICAgdTMyICpiYWNrbG9nLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTM2OD1zdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX3NrYl90aW1lX2Z1bmMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTEzNzUtXFxubmV0L21hYzgwMjExL3R4LmM6MTM3NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqY3ZhcnMsXFxubmV0L21hYzgwMjExL3R4LmMtMTM3Ny1cXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmN0eClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTE0MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV90aW5fZGVxdWV1ZV9mdW5jKHN0cnVjdCBmcSAqZnEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xNDI5LVxcbm5ldC9tYWM4MDIxMS90eC5jOjE0MzA6XFx0cmV0dXJuIGNvZGVsX2RlcXVldWUodHhxaSxcXG5uZXQvbWFjODAyMTEvdHguYy0xNDMxLVxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZWJhY2tsb2csXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xNDM3LVxcdFxcdFxcdCAgICAgY29kZWxfZHJvcF9mdW5jLFxcbm5ldC9tYWM4MDIxMS90eC5jOjE0Mzg6XFx0XFx0XFx0ICAgICBjb2RlbF9kZXF1ZXVlX2Z1bmMpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzktfVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTI4PXN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zNC1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzU6LyogVGhpcyBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbGVkIGZyb20gY29kZWxfZGVxdWV1ZSgpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM2LSAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9NTk9c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjMtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjY0OlxcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcXHUwMDI2c2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZywgXFx1MDAyNnEtXFx1MDAzZXBhcmFtcywgXFx1MDAyNnEtXFx1MDAzZXZhcnMsXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTY1LVxcdFxcdFxcdCAgICBcXHUwMDI2cS1cXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzItXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjczOnN0YXRpYyB2b2lkIGNvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy05MC1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6OTE6XFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTkyLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTk2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMDktXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjExMDpcXHRcXHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTExLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0xODU9c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1Mi1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjUzOi8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTQtICogdG8gZGVxdWV1ZSBhIHBhY2tldCBmcm9tIHF1ZXVlLiBOb3RlOiBiYWNrbG9nIGlzIGhhbmRsZWQgaW5cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0yNzY9c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODMtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI4NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjg1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMDUtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMwNjpcXHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXFx1MDAyNnNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2csIFxcdTAwMjZxLVxcdTAwM2VjcGFyYW1zLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMDctXFx0XFx0XFx0ICAgIFxcdTAwMjZmbG93LVxcdTAwM2VjdmFycywgXFx1MDAyNnEtXFx1MDAzZWNzdGF0cywgcWRpc2NfcGt0X2xlbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjMtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMyNDpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyNS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM1LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMzY6c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzcte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzOS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzQwOlxcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQxLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNDI6XFx0ZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM0My1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zNDc9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM1MS1cXHRpZiAoIXNrYikge1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNTI6XFx0XFx0c2tiID0gX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM1My1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjAtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM2MTpcXHRcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzYyLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz03NjI9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZnFfY29kZWxfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY2LVxcdC5lbnF1ZXVlXFx0PVxcdGZxX2NvZGVsX2VucXVldWUsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc2NzpcXHQuZGVxdWV1ZVxcdD1cXHRmcV9jb2RlbF9kZXF1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NjgtXFx0LnBlZWtcXHRcXHQ9XFx0ZnFfY29kZWxfcGVlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjU6NTcuODA2OTYxMjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMyMzQzMjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIENvZGVsL0ZRLUNvZGVsIFRyYWZmaWMgQ29udHJvbCoqXG5cbk9rYXksIHRoaXMgaXMgc29tZSBzZXJpb3VzIExpbnV4IG5ldHdvcmtpbmcgY29kZSDigJMgd2UncmUgbG9va2luZyByaWdodCBhdCB0aGUgaGVhcnQgb2YgdHJhZmZpYyBjb250cm9sLCBzcGVjaWZpY2FsbHkgdGhlIGBzY2hfY29kZWxgIGFuZCBgc2NoX2ZxX2NvZGVsYCBxdWV1ZWluZyBkaXNjaXBsaW5lcy4gSSBrbm93IEZRLUNvRGVsIGlzIGV2ZW4gdGhlIGRlZmF1bHQgaW4gcXVpdGUgYSBmZXcgZGlzdHJpYnV0aW9ucyBub3csIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHN0dWZmIGlzIGNvbXBsZXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMga2V5LiBXZSdyZSB0YWxraW5nIG5ldGxpbmssIGBydG5ldGxpbmtgLCB0aGUgd2hvbGUgc2hlYmFuZyDigJMgYFJUTV9ORVdRRElTQ2AsIGB0YyBxZGlzYyBhZGQgLi4uIGNvZGVsYCAvIGBmcV9jb2RlbGAsIHRoZSBzdGFuZGFyZCB3YXkgcGFja2V0cyBhcmUgbW92ZWQsIGV2ZXJ5dGhpbmchXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgaXMgXCJXb3J0aEZ1enppbmdcIi4gIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIGZvY3VzZWQgb24gYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLCByaWdodCBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4gSW50ZXJlc3RpbmcuLi4gdGhlIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgd2l0aCBhIGBtYXhfdGAgdG8gcHJldmVudCB6ZXJvIHRydW5jYXRpb24gYW5kIHN0YWxsaW5nLCBhbmQgaW50cm9kdWNpbmcgYSBjYXAsIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgICgyNTYpIGluc2lkZSBgY29kZWxfZGVxdWV1ZSgpYCwgdG8gcHJldmVudCBhIG1hc3NpdmUgZHJvcCBzdG9ybSBhbmQgcmVzeW5jIG9mIGBkcm9wX25leHRgLlxuXG5Pa2F5LCBpcyBpdCByZWFjaGFibGUgYW5kIHdvcnRod2hpbGU/IEFic29sdXRlbHkhIENvcmUgbmV0d29ya2luZyBzdHVmZiwgdGhlc2UgcXVldWVpbmcgYWxnb3JpdGhtcywgdGhleSdyZSByaWdodCB0aGVyZSwgZGlyZWN0bHkgZXhwb3NlZCB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucyBhbmQgcWRpc2MgY29uZmlndXJhdGlvbi4gQ2hlY2sgdGhlIHJ1bGVzOiBjb3JlIG5ldHdvcmtpbmcgaXMgKmV4cGxpY2l0bHkqIG9uIHRoZSBcIldPUlRIIEZVWlpJTkcgQ1JJVEVSSUFcIiBsaXN0ISBXZSdyZSB0YWxraW5nIGFib3V0IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gYSBjb3JlIHN1YnN5c3RlbS4gU28sIHllYWgsIHRoaXMgaXMgYSBkZWZpbml0ZSBgdHJ1ZWAgZm9yIGBXb3J0aEZ1enppbmdgLlxuXG5Ob3csIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgYEVuYWJsZUNvbmZpZ3NgLiBMZXQncyBzZWUgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgbmVlZGVkIHRvIGFjdHVhbGx5IGVuYWJsZSBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAuIEknbGwgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiBgbmV0L3NjaGVkL01ha2VmaWxlYCBhbmQgYEtjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjAyLjEzMDM5ODgyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTk4Mjc2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX2NvZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzItXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxubmV0L3NjaGVkL0tjb25maWc6MjczOlxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxcbm5ldC9zY2hlZC9LY29uZmlnLTI3NC1cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfTkVUX1NDSF9RRlEpXFx0Kz0gc2NoX3FmcS5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19ORVRfU0NIX0NPREVMKVxcdCs9IHNjaF9jb2RlbC5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19ORVRfU0NIX0ZRX0NPREVMKVxcdCs9IHNjaF9mcV9jb2RlbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjAyLjc5MDIzMzIyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDA0NDgyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjY2IHRocm91Z2ggMjkwLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIHF1ZXVpbmcgZGlzY2lwbGluZSBvciBhIHNldCBvZiByZWxhdGVkIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgY29uZmlndXJlZCB0aGVyZS4gQ2hhbmNlcyBhcmUsIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldyBmZWF0dXJlIEkgd2FudCB0byBpbXBsZW1lbnQsIG9yIHBlcmhhcHMgZGVidWcgYW4gaXNzdWUgSSdtIHNlZWluZyB3aXRoIGEgcGFydGljdWxhciBzY2hlZHVsZXIuIEkgYmV0IGl0J3Mgc29tZXRoaW5nIHNwZWNpZmljLCBtYXliZSByZWxhdGVkIHRvIHNvbWUgbmV3bHkgYWRkZWQgY29kZSwgYSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9uLCBvciBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IgdGhhdCBJJ20gdHJ5aW5nIHRvIHBpbiBkb3duLiBHb2luZyBkaXJlY3RseSB0byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGhlbHBzIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHRoZSBkZXBlbmRlbmNpZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGNlcnRhaW4gY2hvaWNlcy4gVGhpcyB0YXJnZXRlZCBhcHByb2FjaCBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gYnJvd3NpbmcgdGhlIGVudGlyZSBmaWxlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MDUuMDMwNjg1NzQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFxuIDI2MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjYyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX3FmcS5cXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjU6XFx0XFxuIDI2NjpcXHRjb25maWcgTkVUX1NDSF9DT0RFTFxcbiAyNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcXFwiXFxuIDI2ODpcXHRcXHRoZWxwXFxuIDI2OTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb250cm9sbGVkIERlbGF5IChDT0RFTClcXG4gMjcwOlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjczOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxuIDI3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcbiAyNzk6XFx0XFx0aGVscFxcbiAyODA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRlEgQ29udHJvbGxlZCBEZWxheSAoRlFfQ09ERUwpXFxuIDI4MTpcXHRcXHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI4NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9mcV9jb2RlbC5cXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyODc6XFx0XFxuIDI4ODpcXHRjb25maWcgTkVUX1NDSF9DQUtFXFxuIDI4OTpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVxcXCJcXG4gMjkwOlxcdFxcdGhlbHBcXG4gMjkxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZFxcbiAyOTI6XFx0XFx0ICAoQ0FLRSkgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG0uXFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyOTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfY2FrZS5cXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyOTg6XFx0XFxuIDI5OTpcXHRjb25maWcgTkVUX1NDSF9GUVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjowNS4wMzA4MzA5MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTczNjkxMjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBLY29uZmlnIGZvciBORVRfU0NIX0NPREVMIGFuZCBORVRfU0NIX0ZRX0NPREVMKipcblxuQWxyaWdodCwgbGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgd2hpbGUgcmV2aWV3aW5nIHRoaXMgc2NoZWR1bGluZyBjb2RlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGVpdGhlciBgTkVUX1NDSF9DT0RFTGAgb3IgYE5FVF9TQ0hfRlFfQ09ERUxgIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvciBpZiB0aGVpciBjb25maWd1cmF0aW9ucyBhcmUgbmVzdGVkIHdpdGhpbiBhbnkgYG1lbnVjb25maWdgIGJsb2NrcyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCdzIGVzc2VudGlhbCB0byB2ZXJpZnkgaXQuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHZlcnkgdG9wIG9mIGBuZXQvc2NoZWQvS2NvbmZpZ2AsIG1ha2luZyBzdXJlIG5vIGdsb2JhbCBkaXJlY3RpdmVzIGFmZmVjdCB3aGF0IHdlIGFyZSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjA2Ljc2Nzc0ODA2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjowNi43Njc5MTAzNjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYwNTc1Nzk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5ldHdvcmsgU2NoZWR1bGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uLi4uIGBORVRfU0NIRURgIGlzIHRoZSBwcmltYXJ5IG1lbnVjb25maWcgb3B0aW9uIEkgbmVlZCB0byBiZSBmb2N1c2luZyBvbi4gQnV0LCBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hYzgwMjExLCBpdCdzIGFsd2F5cyByZWxldmFudCB3aXRoIHdpcmVsZXNzLiBOb3csIHRvIGdldCB0byB0aGUgc3BlY2lmaWNzIG9mIHRyYWZmaWMgc2hhcGluZywgSSByZW1lbWJlciBzZWVpbmcgQ29EZWwgaW4gdXNlLCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHVzZWQgaW4gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBTcGVjaWZpY2FsbHksIGxldCdzIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS90eC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgdHJpZ2dlcnMgQ29EZWwgd2l0aGluIHRoYXQgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayB0aHJvdWdoIGBuZXQvbWFjODAyMTEvYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MDkuMzczNjcyMjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjkxNDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcV90aW5fZGVxdWV1ZV9mdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3R4LmM9MTM5Nj1zdGF0aWMgdm9pZCBjb2RlbF9kcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MDktXFxubmV0L21hYzgwMjExL3R4LmM6MTQxMDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcXG5uZXQvbWFjODAyMTEvdHguYy0xNDExLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmcV90aW4gKnRpbixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTM4ODA9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMzkyNi1cXG5uZXQvbWFjODAyMTEvdHguYzozOTI3OlxcdFxcdHNrYiA9IGZxX3Rpbl9kZXF1ZXVlKGZxLCB0aW4sIGZxX3Rpbl9kZXF1ZXVlX2Z1bmMpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTM5MjgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjowOS40OTY1OTI4NDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkwMzczNjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgTUFDODAyMTFgIGlzIGFsc28gaW4gdGhlIG1peCBoZXJlLCBidXQgaXQgbG9va3MgbGlrZSBgTkVUX1NDSF9DT0RFTGAgYW5kIGBORVRfU0NIX0ZRX0NPREVMYCBhcmUgdGhlIHByaW1hcnkgY29uc3VtZXJzIGFuZCB0ZXN0IHN1YmplY3RzLCBiYXNlZCBvbiB0aG9zZSBKU09OIHRlc3RzIGluIHRjLXRlc3RpbmcuIEhtbSwgc28gaXQgc2VlbXMgbGlrZSB0aGlzIGBjb2RlbC5oYCBvciBgY29kZWxfaW1wbC5oYCBtaWdodCBiZSByZWxldmFudCB0byBhIHdpZGVyIHJhbmdlIG9mIGNvZGUgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBJIHNob3VsZCByZWFsbHkgY2hlY2sgdGhlIGZpbGUgc3lzdGVtIGFuZCBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBvdGhlciBmaWxlcyB1c2luZyBgY29kZWwuaGAgb3IgYGNvZGVsX2ltcGwuaGAuIEtub3dpbmcgdGhlIHVzYWdlIHdpbGwgY2xhcmlmeSBob3cgd2lkZXNwcmVhZCB0aGlzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjExLjQwMDMzMTM4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMTU1MjI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RlbFxcXFwuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9jb2RlbF9xZGlzYy5oLTUxLVxcbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmg6NTI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmgtNTMtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtMjItI2luY2x1ZGUgXFx1MDAzY25ldC9jZmc4MDIxMS5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMTFfcmFkaW90YXAuaFxcdTAwM2VcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvbWFjODAyMTEuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYzoyNTojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxubmV0L21hYzgwMjExL3R4LmMtMjYtI2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjE6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MTQuMDExODkzNzAyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxOTQxMTE4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enplcjogQSBTdHJhdGVneSBmb3IgRWZmZWN0aXZlIENvdmVyYWdlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIHdlJ3JlIGZ1enppbmcsIGFuZCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2UgbmVlZCBhIHdheSB0byBndWlkZSB0aGUgZnV6emluZyBwcm9jZXNzIOKAkyBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyBib2dnZWQgZG93biBpbiBpcnJlbGV2YW50IGFyZWFzIGFuZCBlbnN1cmUgaXQgaGl0cyB0aGUgbW9zdCBpbXBhY3RmdWwgY29kZS4gVGhhdCdzIHdoZXJlIGV4dHJhY3RpbmcgYEZvY3VzU3ltYm9sc2AgY29tZXMgaW4uIEl0J3MgYWJvdXQgcHJldmVudGluZyBkaWx1dGlvbiwgc3RlZXJpbmcgdGhlIGZ1enplciB0byB0aGUgZ29vZCBzdHVmZi5cblxuRmlyc3QsIHdlIG5lZWQgdG8gYXZvaWQgdGhlIG9idmlvdXMgdHJhcHMuIFdlICoqY2Fubm90KiogaW5jbHVkZSB0aG9zZSBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZS4gRm9yZ2V0IHRoZW0uIEluc3RlYWQsIHdlIG5lZWQgdG8gem9uZSBpbiBvbjpcblxuKiAgICoqU3BlY2lmaWMgRmVhdHVyZSBMb2dpYyBhbmQgRW50cnlwb2ludHM6KiogRnVuY3Rpb25zIHRoYXQgKmRpcmVjdGx5KiBpbXBsZW1lbnQgdGhlIGxvZ2ljIHdlJ3JlIGFkZGluZywgY2hhbmdpbmcsIG9yIHJldmlld2luZy4gVGhpbmsgQVBJIGVudHJ5IHBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSB3ZSdyZSBpbnRlcmVzdGVkIGluLlxuXG4qICAgKipTdGF0aWMgSW5saW5lczoqKiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBjb21tb24gaW4ga2VybmVsIGhlYWRlcnMgKGBtbS8qLmhgLCBgaW5jbHVkZS9saW51eC8qLmhgKSwgYXJlIHRyaWNreS4gVGhleSBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gYHZtbGludXhgLCBzbyB5b3UgY2FuJ3QgdGFyZ2V0IHRoZW0gZGlyZWN0bHkgd2l0aCBhIHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXIuIFNvLCBpZiBvdXIgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluc2lkZSBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIHdlIG5lZWQgdG8gaWRlbnRpZnkgKm5vbi1zdGF0aWMqLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlciBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyB0aGF0ICpleGVyY2lzZSogdGhvc2UgaW5saW5lIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBhdm9pZCB0aG9zZSBnZW5lcmljIGxpZmVjeWNsZSB3cmFwcGVycyBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAuIGBjb2RlbF9jb250cm9sX2xhd2AgYW5kIGBjb2RlbF9kZXF1ZXVlYCBhcmUgYm90aCBgc3RhdGljYCwgc28gdGhleSdyZSBpbmxpbmVkLiBHcmVhdCEgV2Ugd2FudCB0byBmb2N1cyBvbiB0aGVpciBjYWxsZXJzIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY2FsbGVycywgaW4gYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AsIGBfX2NvZGVsX3FkaXNjX2RlcXVldWVgIGNhbGxzIGBjb2RlbF9kZXF1ZXVlYCwgYGNvZGVsX2RlcXVldWVfZHJvcGAgY2FsbHMgYGNvZGVsX2RlcXVldWVgLiBBbmQgYGNvZGVsX3FkaXNjX2RlcXVldWVgIGNhbGxzIGJvdGgsIGJ1dCB0aGUgZnVuY3Rpb24gYWxzbyByZXR1cm5zIGBxZGlzY19kZXF1ZXVlX2hlYWQoc2NoKWAuIFdlIHNob3VsZCBwcm9iYWJseSByZWFkIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCBhbmQgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgZnJvbSBgc2NoX2NvZGVsLmNgIGFzIHdlbGwuIFNlZW1zIGxpa2Ugd2Ugc2hvdWxkIGNoZWNrIGxpbmVzIDU1LTEyMCBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBmb3Igc29tZSBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjE4LjIwNjAwNzg5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2NvZGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFx0cWRpc2NfZGVxdWV1ZV9kcm9wKHNjaCwgc2tiLCBRRElTQ19EUk9QX0NPTkdFU1RFRCk7XFxuICA1NjpcXHRcXHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xcbiAgNTc6XFx0fVxcbiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gIDYwOlxcdHtcXG4gIDYxOlxcdFxcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbiAgNjI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFxcdTAwMjZzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcXHUwMDI2cS1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2cS1cXHUwMDNldmFycyxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cS1cXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXFxuICA2NjpcXHRcXHRcXHRcXHQgICAgZHJvcF9mdW5jLCBkZXF1ZXVlX2Z1bmMpO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHRpZiAoc2tiKVxcbiAgNjk6XFx0XFx0XFx0cWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7XFxuICA3MDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgNzE6XFx0fVxcbiAgNzI6XFx0XFxuICA3MzpcXHRzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXFxuICA3NDpcXHR7XFxuICA3NTpcXHRcXHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0aWYgKHEtXFx1MDAzZXN0YXRzLmRyb3BfY291bnQpIHtcXG4gIDc4OlxcdFxcdFxcdHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc2NoLCBxLVxcdTAwM2VzdGF0cy5kcm9wX2NvdW50LFxcbiAgNzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBxLVxcdTAwM2VzdGF0cy5kcm9wX2xlbik7XFxuICA4MDpcXHRcXHRcXHRxLVxcdTAwM2VzdGF0cy5kcm9wX2NvdW50ID0gMDtcXG4gIDgxOlxcdFxcdFxcdHEtXFx1MDAzZXN0YXRzLmRyb3BfbGVuID0gMDtcXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAgODY6XFx0e1xcbiAgODc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0c2tiID0gX19jb2RlbF9xZGlzY19kZXF1ZXVlKHNjaCk7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgOTQ6XFx0fVxcbiAgOTU6XFx0XFxuICA5NjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYik7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdGlmICghc2tiKSB7XFxuIDEwMTpcXHRcXHRcXHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0XFx0aWYgKHNrYikge1xcbiAxMDQ6XFx0XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZChcXHUwMDI2c2NoLVxcdTAwM2Vnc29fc2tiLCBza2IpO1xcbiAxMDU6XFx0XFx0XFx0XFx0LyogaXQncyBzdGlsbCBwYXJ0IG9mIHRoZSBxdWV1ZSAqL1xcbiAxMDY6XFx0XFx0XFx0XFx0cWRpc2NfcXN0YXRzX2JhY2tsb2dfaW5jKHNjaCwgc2tiKTtcXG4gMTA3OlxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlcS5xbGVuKys7XFxuIDEwODpcXHRcXHRcXHR9XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdFxcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAxMTE6XFx0XFx0fVxcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRyZXR1cm4gc2tiO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgaW50IGNvZGVsX3FkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIDExNzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbiAxMTg6XFx0e1xcbiAxMTk6XFx0XFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjE4LjIwNjA4Mjg3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTMzOTg4NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzY2hfZnFfY29kZWwuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIGluIG9uIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgIHJpZ2h0IG5vdy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMjgwIHRocm91Z2ggMzY1LCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHJhbmdlIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHByZWNpc2VseSBob3cgdGhlIEZhc3QgUXVldWUgQ29EZWwgc2NoZWR1bGVyIG9wZXJhdGVzLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBoaWRpbmcgaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlLi4uIGxldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjIyLjM0MDA3NDIwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRxZGlzY19kZXF1ZXVlX2Ryb3Aoc2NoLCBza2IsIFFESVNDX0RST1BfQ09OR0VTVEVEKTtcXG4gMjgxOlxcdFxcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XFxuIDI4MjpcXHR9XFxuIDI4MzpcXHRcXG4gMjg0OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19mcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAyODU6XFx0e1xcbiAyODY6XFx0XFx0c3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDI4NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAyODg6XFx0XFx0c3RydWN0IGZxX2NvZGVsX2Zsb3cgKmZsb3c7XFxuIDI4OTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRiZWdpbjpcXG4gMjkyOlxcdFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlbmV3X2Zsb3dzO1xcbiAyOTM6XFx0XFx0aWYgKGxpc3RfZW1wdHkoaGVhZCkpIHtcXG4gMjk0OlxcdFxcdFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlb2xkX2Zsb3dzO1xcbiAyOTU6XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoaGVhZCkpXFxuIDI5NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjk3OlxcdFxcdH1cXG4gMjk4OlxcdFxcdGZsb3cgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmcV9jb2RlbF9mbG93LCBmbG93Y2hhaW4pO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRpZiAoZmxvdy1cXHUwMDNlZGVmaWNpdCBcXHUwMDNjPSAwKSB7XFxuIDMwMTpcXHRcXHRcXHRXUklURV9PTkNFKGZsb3ctXFx1MDAzZWRlZmljaXQsIGZsb3ctXFx1MDAzZWRlZmljaXQgKyBxLVxcdTAwM2VxdWFudHVtKTtcXG4gMzAyOlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZmbG93LVxcdTAwM2VmbG93Y2hhaW4sIFxcdTAwMjZxLVxcdTAwM2VvbGRfZmxvd3MpO1xcbiAzMDM6XFx0XFx0XFx0Z290byBiZWdpbjtcXG4gMzA0OlxcdFxcdH1cXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFxcdTAwMjZzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcXHUwMDI2cS1cXHUwMDNlY3BhcmFtcyxcXG4gMzA3OlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zmxvdy1cXHUwMDNlY3ZhcnMsIFxcdTAwMjZxLVxcdTAwM2Vjc3RhdHMsIHFkaXNjX3BrdF9sZW4sXFxuIDMwODpcXHRcXHRcXHRcXHQgICAgY29kZWxfZ2V0X2VucXVldWVfdGltZSwgZHJvcF9mdW5jLCBkZXF1ZXVlX2Z1bmMpO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRpZiAoIXNrYikge1xcbiAzMTE6XFx0XFx0XFx0LyogZm9yY2UgYSBwYXNzIHRocm91Z2ggb2xkX2Zsb3dzIHRvIHByZXZlbnQgc3RhcnZhdGlvbiAqL1xcbiAzMTI6XFx0XFx0XFx0aWYgKChoZWFkID09IFxcdTAwMjZxLVxcdTAwM2VuZXdfZmxvd3MpIFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZxLVxcdTAwM2VvbGRfZmxvd3MpKVxcbiAzMTM6XFx0XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmZsb3ctXFx1MDAzZWZsb3djaGFpbiwgXFx1MDAyNnEtXFx1MDAzZW9sZF9mbG93cyk7XFxuIDMxNDpcXHRcXHRcXHRlbHNlXFxuIDMxNTpcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZmbG93LVxcdTAwM2VmbG93Y2hhaW4pO1xcbiAzMTY6XFx0XFx0XFx0Z290byBiZWdpbjtcXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcdHFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpO1xcbiAzMTk6XFx0XFx0V1JJVEVfT05DRShmbG93LVxcdTAwM2VkZWZpY2l0LCBmbG93LVxcdTAwM2VkZWZpY2l0IC0gcWRpc2NfcGt0X2xlbihza2IpKTtcXG4gMzIwOlxcdFxcbiAzMjE6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMzIyOlxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAzMjU6XFx0e1xcbiAzMjY6XFx0XFx0c3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGlmIChxLVxcdTAwM2Vjc3RhdHMuZHJvcF9jb3VudCkge1xcbiAzMjk6XFx0XFx0XFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXFx1MDAzZWNzdGF0cy5kcm9wX2NvdW50LFxcbiAzMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICBxLVxcdTAwM2Vjc3RhdHMuZHJvcF9sZW4pO1xcbiAzMzE6XFx0XFx0XFx0cS1cXHUwMDNlY3N0YXRzLmRyb3BfY291bnQgPSAwO1xcbiAzMzI6XFx0XFx0XFx0cS1cXHUwMDNlY3N0YXRzLmRyb3BfbGVuID0gMDtcXG4gMzMzOlxcdFxcdH1cXG4gMzM0OlxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAzMzc6XFx0e1xcbiAzMzg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0c2tiID0gIF9fZnFfY29kZWxfZGVxdWV1ZShzY2gpO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMzQ1OlxcdH1cXG4gMzQ2OlxcdFxcbiAzNDc6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAzNDg6XFx0e1xcbiAzNDk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrKFxcdTAwMjZzY2gtXFx1MDAzZWdzb19za2IpO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoIXNrYikge1xcbiAzNTI6XFx0XFx0XFx0c2tiID0gX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdFxcdGlmIChza2IpIHtcXG4gMzU1OlxcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYiwgc2tiKTtcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIGl0J3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cXG4gMzU3OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzY2gsIHNrYik7XFxuIDM1ODpcXHRcXHRcXHRcXHRzY2gtXFx1MDAzZXEucWxlbisrO1xcbiAzNTk6XFx0XFx0XFx0fVxcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG4gMzYyOlxcdFxcdH1cXG4gMzYzOlxcdFxcbiAzNjQ6XFx0XFx0cmV0dXJuIHNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MjIuMzQwMjQ0NTI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4OTAzNTc2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb25zdHJ1Y3RpbmcgQ29kZWwgYW5kIEZRLUNvZGVsIEluaXRpYWxpemF0aW9uIGFuZCBEZXF1ZXVlIFByb2Nlc3NlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgY29yZSBmdW5jdGlvbnMgaGVyZTogYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYF9fZnFfY29kZWxfZGVxdWV1ZWAsIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAuIFRob3NlIGFyZSB0aGUgZGVxdWV1ZSBmdW5jdGlvbnM7IHRoZXkncmUgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBxdWV1aW5nIGRpc2NpcGxpbmVzIGhhbmRsZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGltcGxlbWVudGF0aW9ucyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBiZSBwcmVzZW50IGluIGVhY2guXG5cblRoZW4sIG9mIGNvdXJzZSwgdGhlIGluaXRpYWwgc2V0dXA6IEknbSB0aGlua2luZyBhYm91dCBgY29kZWxfaW5pdGAsIGBjb2RlbF9jaGFuZ2VgLCBgZnFfY29kZWxfaW5pdGAsIGFuZCBgZnFfY29kZWxfY2hhbmdlYC4gVGhlc2UgYXJlIHdoZXJlIHRoZSBjcml0aWNhbCBwYXJhbWV0ZXJzIGFyZSBzZXQg4oCTIHRoaW5ncyBsaWtlIHRoZSBpbnRlcnZhbCBhbmQgdGFyZ2V0IHZhbHVlcyB0aGF0IGRlZmluZSB0aGUgYWN0aXZlIHF1ZXVlIG1hbmFnZW1lbnQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlIGlzIGFueSBkaXZlcmdlbmNlIGJldHdlZW4gQ29kZWwgYW5kIEZRLUNvZGVsIGluIHRoZWlyIHJlc3BlY3RpdmUgcGFyYW1ldGVyIHNldHRpbmcuXG5cblNvLCBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byBgc2NoX2NvZGVsLmNgIGFuZCBgc2NoX2ZxX2NvZGVsLmNgIGFuZCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gdGhlIGBjb2RlbF9jaGFuZ2VgIGFuZCBgZnFfY29kZWxfY2hhbmdlYCBmdW5jdGlvbnMuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCB0aGUgY3J1Y2lhbCBkZXRhaWxzIG9uIHBhcmFtZXRlciBhZGp1c3RtZW50IGFuZCB0aGVpciBlZmZlY3Qgb24gdGhlIHF1ZXVpbmcgYWxnb3JpdGhtcy4gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucywgYW5kIGhvdyB0aG9zZSBkaWZmZXJlbmNlcyBpbXBhY3QgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjoyNS4yMzA2MDU5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMDcxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNvZGVsfGZxX2NvZGVsKV8oaW5pdHxjaGFuZ2UpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9jb2RlbC5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY29kZWxfcG9saWN5W1RDQV9DT0RFTF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzctXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzktXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTk4OnN0YXRpYyBpbnQgY29kZWxfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xOTktXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIxMC1cXHRpZiAob3B0KSB7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjIxMTpcXHRcXHRpbnQgZXJyID0gY29kZWxfY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yMTItXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MjkyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI5OC1cXHQucGVla1xcdFxcdD1cXHRjb2RlbF9wZWVrLFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyOTk6XFx0LmluaXRcXHRcXHQ9XFx0Y29kZWxfaW5pdCxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzAwLVxcdC5yZXNldFxcdFxcdD1cXHRjb2RlbF9yZXNldCxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzAxOlxcdC5jaGFuZ2UgXFx0PVxcdGNvZGVsX2NoYW5nZSxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzAyLVxcdC5kdW1wXFx0XFx0PVxcdGNvZGVsX2R1bXAsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9MzkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmcV9jb2RlbF9wb2xpY3lbVENBX0ZRX0NPREVMX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTQwNC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NDA1OnN0YXRpYyBpbnQgZnFfY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTQwNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NDk5PXN0YXRpYyB2b2lkIGZxX2NvZGVsX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNTA3LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MDg6c3RhdGljIGludCBmcV9jb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwOS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUyOS1cXHRpZiAob3B0KSB7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjUzMDpcXHRcXHRlcnIgPSBmcV9jb2RlbF9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUzMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NjgtXFx0LnBlZWtcXHRcXHQ9XFx0ZnFfY29kZWxfcGVlayxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY5OlxcdC5pbml0XFx0XFx0PVxcdGZxX2NvZGVsX2luaXQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3MC1cXHQucmVzZXRcXHRcXHQ9XFx0ZnFfY29kZWxfcmVzZXQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3MS1cXHQuZGVzdHJveVxcdD1cXHRmcV9jb2RlbF9kZXN0cm95LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3NzI6XFx0LmNoYW5nZVxcdFxcdD1cXHRmcV9jb2RlbF9jaGFuZ2UsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3My1cXHQuZHVtcFxcdFxcdD1cXHRmcV9jb2RlbF9kdW1wLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjoyNS4zMTE5MjMxNDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzE4Mzc5NDI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29kZWwgRGVxdWV1ZSBhbmQgQ29udHJvbCBMYXcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIENvZGVsIGRlcXVldWUgYW5kIGNvbnRyb2wgbGF3IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVoYXZlIGFuZCB3aGV0aGVyIHRoZXkncmUgYWNjZXNzaWJsZSBhcyBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGNvZGVsX2RlcXVldWUoKWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyBgY29kZWxfZGVxdWV1ZSgpYCBpcyBpbmxpbmVkIGludG8gYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgYW5kIGBfX2ZxX2NvZGVsX2RlcXVldWVgLCBiYXNlZCBvbiB0aGUgY29kZWJhc2UsIHdoaWNoIGFyZSBkZWZpbmVkIGluIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgcmVzcGVjdGl2ZWx5LlxuXG5Mb29raW5nIGF0IGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBJIHNlZSB0aGF0IGBjb2RlbF9kZXF1ZXVlYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gU2luY2UgaXQncyBpbiBhIGhlYWRlciwgSSdkIGV4cGVjdCBpdCB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBpbnRvIGl0cyBjYWxsZXJzLiBUaGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBjb2RlbF9kZXF1ZXVlKClgLCBhbmQgaXQncyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJJ20gY3VyaW91cyB3aGV0aGVyIGVpdGhlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHN5bWJvbHMgaW4gdGhlIGZpbmFsIHZtbGludXggaW1hZ2UuIFN0YXRpYyBpbmxpbmVzIGFyZSBvZnRlbiBvcHRpbWl6ZWQgb3V0LCB3aGljaCB3b3VsZCBtZWFuIHRoZXkncmUgbm90IGFkZHJlc3NhYmxlIGRpcmVjdGx5IGJ5IHNvbWV0aGluZyBsaWtlIHN5emthbGxlci5cblxuQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoZSBydWxlOiBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgaW4gaGVhZGVycyBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRoZXJlZm9yZSBhcmVuJ3QgZGlyZWN0bHkgdGFyZ2V0YWJsZSBmb3Igc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuIElmIGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gdGhlc2UgaW5saW5lZCBoZWxwZXJzLCBJIG5lZWQgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBvciBzcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgKnVzZSogdGhlbSBhbmQgYXJlIGRlZmluZWQgaW4gdGhlIGAuY2AgZmlsZXMuIFRoaXMgaXMgaG93IEkgY2FuIGluZGlyZWN0bHkgdGVzdCB0aGVtLlxuXG5MZXQncyBzZWU6IGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBJIGhhdmUgZnVuY3Rpb25zIGxpa2UgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGNvZGVsX2NoYW5nZWAsIGBjb2RlbF9pbml0YCwgYW5kIGBjb2RlbF9xZGlzY19lbnF1ZXVlYC4gVGhlbiwgaW4gYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AsIEkgaGF2ZSBzaW1pbGFyIGZ1bmN0aW9uczogYGZxX2NvZGVsX2RlcXVldWVgLCBgX19mcV9jb2RlbF9kZXF1ZXVlYCwgYGZxX2NvZGVsX2NoYW5nZWAsIGBmcV9jb2RlbF9pbml0YCwgYW5kIGBmcV9jb2RlbF9lbnF1ZXVlYC5cblxuT2theSwgYSBtb21lbnQgb2YgY2xhcml0eS4uLiBhcmUgYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAgYWN0dWFsbHkgc3RhdGljIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBjaGVjay4gRGlnZ2luZyBpbnRvIGBzY2hfY29kZWwuY2AsIEkgc2VlIGBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpYC4gQW5kIGl0J3MgYXNzaWduZWQgdG8gYC5kZXF1ZXVlID0gY29kZWxfcWRpc2NfZGVxdWV1ZWAgd2l0aGluIGBjb2RlbF9xZGlzY19vcHNgLiBUaGUgc2FtZSBwYXR0ZXJuIGV4aXN0cyBpbiBgc2NoX2ZxX2NvZGVsLmNgIGZvciBgZnFfY29kZWxfZGVxdWV1ZWAuIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB0YWtlbiBhbmQgYXNzaWduZWQgdG8gdGhlIGBRZGlzY19vcHNgIHN0cnVjdCwgdGhleSAqYXJlbid0KiBpbmxpbmVkLiBUaGV5IGV4aXN0IGFzIHJlYWwgZnVuY3Rpb25zIHdpdGggYWNjZXNzaWJsZSBzeW1ib2xzIGluIHRoZSBjb21waWxlZCBjb2RlIVxuXG5Ob3csIHdoYXQgYWJvdXQgYGNvZGVsX2RlcXVldWVgIGl0c2VsZj8gTGV0IG1lIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgYXJvdW5kIGxpbmVzIDE1MC0xNjAuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgzNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjozMi40OTU3MjA0NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NTpcXHRcXHR9IGVsc2UgaWYgKGNvZGVsX3RpbWVfYWZ0ZXIobm93LCB2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lKSkge1xcbiAxNDY6XFx0XFx0XFx0b2tfdG9fZHJvcCA9IHRydWU7XFxuIDE0NzpcXHRcXHR9XFxuIDE0ODpcXHRcXHRyZXR1cm4gb2tfdG9fZHJvcDtcXG4gMTQ5OlxcdH1cXG4gMTUwOlxcdFxcbiAxNTE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gMTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgdTMyICpiYWNrbG9nLFxcbiAxNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXFxuIDE1NDpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxcbiAxNTU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxcbiAxNTY6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxcbiAxNTk6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcXG4gMTYwOlxcdHtcXG4gMTYxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcXG4gMTYyOlxcdFxcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIDE2MzpcXHRcXHRjb2RlbF90aW1lX3Qgbm93O1xcbiAxNjQ6XFx0XFx0Ym9vbCBkcm9wO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRpZiAoIXNrYikge1xcbiAxNjc6XFx0XFx0XFx0dmFycy1cXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XFxuIDE2ODpcXHRcXHRcXHRXUklURV9PTkNFKHZhcnMtXFx1MDAzZWRyb3BwaW5nLCBmYWxzZSk7XFxuIDE2OTpcXHRcXHRcXHRyZXR1cm4gc2tiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjozMi40OTU3ODU1NTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI3NjA0NzM2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQ29kZWwvRnFfQ29kZWwgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHBvdGVudGlhbCB0cnVuY2F0aW9uIGVycm9ycyB3aGVuIHRoZSBpbnRlcnZhbCBpcyB2ZXJ5IHNtYWxsIChzdWItdGljaykgd2l0aGluIHRoZSBgY29kZWxgIGFuZCBgZnFfY29kZWxgIHF1ZXVlaW5nIGRpc2NpcGxpbmVzLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uLiBUaGlzIGNhbiBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AgaW4gYGNvZGVsX2RlcXVldWVgIGJlY2F1c2Ugb2YgYHJlY2lwcm9jYWxfc2NhbGVgIHJldHVybmluZyAwLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgY2xhbXBpbmcgdGhlIGluY3JlbWVudCB2YWx1ZSwgZW5zdXJpbmcgaXQncyBhdCBsZWFzdCBvbmUgdGljaywgYW5kIGNhcHBpbmcgdGhlIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZS5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIGVuc3VyaW5nIHRoZXkgYXJlIGZ1enplZC4gYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAgYXJlIHRoZSBjb3JlIGRlcXVldWUgZnVuY3Rpb25zIGZvciBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAsIHJlc3BlY3RpdmVseS4gQWxzbyBJIG5lZWQgdG8gaW5jbHVkZSBgY29kZWxfY2hhbmdlYCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAgYmVjYXVzZSB0aGV5IHBhcnNlIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgdGhlIHNhbWUgcWRpc2NzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjb2RlbF9kZXF1ZXVlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgaW4gYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAsIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSBpbmxpbmVkIG9yIHJlbmFtZWQuIFNvLCBJIHdpbGwgYWRkIGl0IHRvIHRoZSBmb2N1cyBzeW1ib2xzIHRvIGJlIHN1cmUuIEkndmUgYWxzbyBjaGVja2VkIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybWVkIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCB1c2VzIHRoZSBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCBzdGF0aWMgZnVuY3Rpb24uXG5cblRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfU0NIRURgLCBgTkVUX1NDSF9DT0RFTGAsIGFuZCBgTkVUX1NDSF9GUV9DT0RFTGAuIFRoZSBgbWFjODAyMTFgIHdpcmVsZXNzIG1vZHVsZSBhcHBlYXJzIGxlc3MgcmVsZXZhbnQsIGFzIHRoZSBwYXRjaCB0YXJnZXRzIHRoZSB0cmFmZmljIGNvbnRyb2wgYXNwZWN0cyBvZiBjb2RlbC9mcV9jb2RlbC4gVGhlIGZvY3VzIGlzIG9uIHRoZSBxZGlzYyBvcGVyYXRpb25zLCBzbyBJIGRvbid0IG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBjb25maWcuXG5cbkdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoc3BlY2lmaWNhbGx5LCB0aGUgYWxnb3JpdGhtIGZsb3cgZm9yIHRyYWZmaWMgY29udHJvbCksIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIHRoZXNlIHFkaXNjcyB3aXRoIHNtYWxsIGludGVydmFscywgc28gdGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGNoYW5nZWQgbG9naWMuXG5cbkhlcmUncyB0aGUgcGxhbiBmb3IgYHNldC1yZXN1bHRzYDpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWVcbiogICAqKlJlYXNvbmluZyoqOiBUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nICh0cmFmZmljIGNvbnRyb2wpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBpbiBgY29kZWxfZGVxdWV1ZWAgY2F1c2VkIGJ5IHRydW5jYXRpb24gZXJyb3JzIHdpdGggc21hbGwgaW50ZXJ2YWxzLiBUaGUgY2hhbmdlcyBjbGFtcCB0aGUgaW5jcmVtZW50IHZhbHVlIGFuZCBjYXAgZHJvcHMgcGVyIGRlcXVldWUuXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAgYGNvZGVsX3FkaXNjX2RlcXVldWVgXG4gICAgKiAgIGBmcV9jb2RlbF9kZXF1ZXVlYFxuICAgICogICBgY29kZWxfY2hhbmdlYFxuICAgICogICBgZnFfY29kZWxfY2hhbmdlYFxuICAgICogICBgY29kZWxfZGVxdWV1ZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYE5FVF9TQ0hFRGBcbiAgICAqICAgYE5FVF9TQ0hfQ09ERUxgXG4gICAgKiAgIGBORVRfU0NIX0ZRX0NPREVMYFxuXG5FdmVyeXRoaW5nIGxvb2tzIGNvcnJlY3QuIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc2NywiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6NDUuMjU2MjYyMDE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0Mjg2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2RlbF9xZGlzY19kZXF1ZXVlXCIsXG4gICAgXCJmcV9jb2RlbF9kZXF1ZXVlXCIsXG4gICAgXCJjb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX2NvZGVsX2NoYW5nZVwiLFxuICAgIFwiY29kZWxfZGVxdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBhbmQgRlEtQ29EZWwgcGFja2V0IHNjaGVkdWxpbmcgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtcyBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYW5kIGluY2x1ZGUvbmV0L2NvZGVsLmguIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGUgY29udHJvbCBsYXcgc3RlcCBpbmNyZW1lbnQgaXMgYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgaW5maW5pdGUgc3RhbGxzIHdoZW4gaW50ZXJ2YWxzIGFyZSBjb25maWd1cmVkIHRvIHN1Yi10aWNrIHZhbHVlcywgYW5kIGludHJvZHVjZXMgYSBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0IGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGxvb3Bpbmcgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wgKFFkaXNjKSBsb2dpYyB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay9ydG5ldGxpbmsgYW5kIG5vcm1hbCBuZXR3b3JrIHBhY2tldCBkZXF1ZXVlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGVsX3FkaXNjX2RlcXVldWVcIixcbiAgICBcImZxX2NvZGVsX2RlcXVldWVcIixcbiAgICBcImNvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfY29kZWxfY2hhbmdlXCIsXG4gICAgXCJjb2RlbF9kZXF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjQ1LjM5MDU1NjgxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU5MjAwMDExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjo0NS4zOTA5NzkxMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTkxOTU3NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwncyBwYWNrZXQgZHJvcHBpbmcgYWxnb3JpdGhtIChjb2RlbF9kZXF1ZXVlKS4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIGluY3JlbWVudCBpbiBjb2RlbF9jb250cm9sX2xhdygpIHRvIGF0IGxlYXN0IDEgdGljayB1c2luZyBtYXhfdCgpIHRvIGF2b2lkIHN0YWxscyBmcm9tIHplcm8tYWR2YW5jZW1lbnQgd2hlbiBpbnRlcnZhbCBpcyBzbWFsbCBvciBwYWNrZXQgZHJvcCBjb3VudCBpcyBsYXJnZSwgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24gYXQgMjU2IChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpLlxcblxcbktNU0FOIGlzIHNwZWNpYWxpemVkIGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGUgY2hhbmdlcyBoZXJlIGFyZSBwdXJlbHkgYWxnb3JpdGhtaWMsIGludm9sdmluZyBiYXNpYyBhcml0aG1ldGljIGFuZCBsb29wIHRlcm1pbmF0aW9uIGxvZ2ljIG9uIHNjYWxhciBpbnRlZ2Vycy4gVGhlIG9ubHkgbmV3IGxvY2FsIHZhcmlhYmxlIGludHJvZHVjZWQgaXMgYGRyb3BzYCwgd2hpY2ggaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBObyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBsZW5ndGggLyBidWZmZXIgYm91bmRhcnkgb3BlcmF0aW9ucyBhcmUgbW9kaWZpZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNGQ3NTNiZjYzYjFiNTM5YWYzY2Y3YWFmZjU3OTEwZWRiYjc4Njk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbkBAIC0xNDAsNiArMTQwLDExIEBAIHN0cnVjdCBjb2RlbF92YXJzIHtcbiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovXG4gI2RlZmluZSBSRUNfSU5WX1NRUlRfU0hJRlQgKDMyIC0gUkVDX0lOVl9TUVJUX0JJVFMpXG4gXG4rLyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXG4rICogaWRsZSBnYXAgYW5kIGJhY2tsb2csIGJvdGggb3V0c2lkZSBvdXIgY29udHJvbDsgcmVzeW5jIHdoZW4gZXhjZWVkZWQuXG4rICovXG4rI2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XG4rXG4gLyoqXG4gICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHNcbiAgKiBAbWF4cGFja2V0Olx0bGFyZ2VzdCBwYWNrZXQgd2UndmUgc2VlbiBzbyBmYXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcbmluZGV4IDJjMWYwZWMzMDllOWYuLjhmMjYxMzJkNDViN2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuQEAgLTkzLDEyICs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycylcbiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICsgaW50ZXJ2YWwvc3FydChjb3VudClcbiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcbiAgKiBib3RoIHNxcnQoKSBhbmQgZGl2aWRlIG9wZXJhdGlvbi5cbisgKlxuKyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcbisgKiBsYXJnZSBjb3VudCkgY2FuIHRydW5jYXRlIGl0IHRvIHplcm8sIHN0YWxsaW5nIHRoZSBkcm9wcGluZyBsb29wLlxuICAqL1xuIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXG4gXHRcdFx0XHQgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsXG4gXHRcdFx0XHQgICAgICB1MzIgcmVjX2ludl9zcXJ0KVxuIHtcbi1cdHJldHVybiB0ICsgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpO1xuK1x0cmV0dXJuIHQgKyBtYXhfdCh1MzIsIDEsXG4rXHRcdFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXG4rXHRcdFx0XHRcdCAgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTQsNiArMTU5LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiBcdFx0XHRcdCAgICAgY29kZWxfc2tiX2RlcXVldWVfdCBkZXF1ZXVlX2Z1bmMpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xuK1x0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiBcdGNvZGVsX3RpbWVfdCBub3c7XG4gXHRib29sIGRyb3A7XG4gXG5AQCAtMTgwLDYgKzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdCAqL1xuIFx0XHRcdHdoaWxlICh2YXJzLVx1MDAzZWRyb3BwaW5nIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4rXHRcdFx0XHRpZiAoKytkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7XG4rXHRcdFx0XHRcdC8qIGZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUgKi9cbitcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbitcdFx0XHRcdFx0XHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZWludGVydmFsLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgIHZhcnMtXHUwMDNlcmVjX2ludl9zcXJ0KSk7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcbiBcdFx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxuIFx0XHRcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5AQCAtMjEzLDUgKzIxMyw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtc1wiLFxuICAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiNmU0NFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE4YzNcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJhNjk1XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI5NzkzXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIHRhcmdldCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4gICAgIH1cbiBdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbmluZGV4IDRjZTYyYjg1N2ZkN2EuLmRlNmExYjhkOTU0YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5AQCAtMzE2LDUgKzMxNiw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4gICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIxYjRkXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiMzU0MFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDJ1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjQ5YzVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjNlMGZcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjQ1LjM5MDk4MTgyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwMTI3ODczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGVzdGFibGlzaCBhIGJhc2VsaW5lIG9mIHNhZmV0eS4gV2UncmUgdGFsa2luZyBhYm91dCBhIHR5cGljYWwgc29mdHdhcmUgZGVidWdnaW5nIGFuZCBRQSBzY2VuYXJpbyBoZXJlLCBhdWRpdGluZyB0aGUgY29kZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTm8gcmVkIGZsYWdzIGluIHRlcm1zIG9mIG1hbGljaW91cyBpbnRlbnQgb3IgYW55dGhpbmcgb2ZmZW5zaXZlIOKAkyB3ZSdyZSBsb29raW5nIGF0IGJlbmlnbiBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyBhbmQgc2VlIGlmIHRoZXkgdG91Y2ggb24gYW55dGhpbmcgdGhhdCBLTVNBTiB3b3VsZCBjYXJlIGFib3V0LlxuXG5Ob3csIGxldCdzIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggaXMgYWN0dWFsbHkgZG9pbmcuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBzb21lIGNvcmUgYGNvZGVsYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgQSBuZXcgYCNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAgaXMgYWRkZWQgaW4gYGluY2x1ZGUvbmV0L2NvZGVsLmhgLCBzZXR0aW5nIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgY2FuIGJlIGRyb3BwZWQgcGVyIGRlcXVldWUgY3ljbGUuIFJlYXNvbmFibGUsIGlmIHBlcmhhcHMgYXJiaXRyYXJ5LlxuMi4gIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhhcyB0aGVzZSBjaGFuZ2VzOlxuICAgICogICBJbiB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiwgYSBgbWF4X3RgIGNoZWNrIGlzIGFkZGVkLCBlbnN1cmluZyB0aGUgcmV0dXJuZWQgdmFsdWUgZnJvbSBgcmVjaXByb2NhbF9zY2FsZWAgaXMgYXQgbGVhc3QgMS4gTG9va3MgbGlrZSBhIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgcHJldmVudGlvbi5cbiAgICAqICAgVGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbiBpcyBhbHNvIG1vZGlmaWVkLiBBIGBkcm9wc2AgdmFyaWFibGUgaXMgYWRkZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBsb29wIHRoYXQgdHJhY2tzIGRyb3BwZWQgcGFja2V0cy4gQ3JpdGljYWxseSwgdGhlcmUncyBub3cgYSBjaGVjayB0aGF0IGBkcm9wc2AgZG9lc24ndCBleGNlZWQgYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAuIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBjb250cm9sIGZsb3csIHBvdGVudGlhbGx5IGltcGFjdGluZyBwZXJmb3JtYW5jZS4gTW9yZSBpbnZlc3RpZ2F0aW9uIGlzIG5lZWRlZC5cbjMuICBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBKU09OIHRlc3QgZmlsZXMgZm9yIGBjb2RlbGAgYW5kIGBmcV9jb2RlbGAgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzYC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBleGFtaW5lIHRoZSB0ZXN0cyB0byBzZWUgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBjaGFuZ2VzLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBlc3BlY2lhbGx5IGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMgaXMgcGFyYW1vdW50LiBJJ2xsIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAgdG8gZGV0ZXJtaW5lIGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhZGRlZCBsb2dpYy4gVGhlbiBJJ2xsIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMgdGhhdCBLTVNBTiBjb3VsZCBzcGVjaWZpY2FsbHkgZmxhZy4gQmFzZWQgb24gdGhhdCBhbmFseXNpcywgSSBjYW4gbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB0aGUgbmVjZXNzaXR5IG9mIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI3OjA2LjY5MjI2MjU5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUpKSB7XFxuIDE0NjpcXHRcXHRcXHRva190b19kcm9wID0gdHJ1ZTtcXG4gMTQ3OlxcdFxcdH1cXG4gMTQ4OlxcdFxcdHJldHVybiBva190b19kcm9wO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhY2tsb2csXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9zdGF0cyAqc3RhdHMsXFxuIDE1NjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXFxuIDE1NzpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl90aW1lX3Qgc2tiX3RpbWVfZnVuYyxcXG4gMTU4OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2Ryb3BfdCBkcm9wX2Z1bmMsXFxuIDE1OTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9kZXF1ZXVlX3QgZGVxdWV1ZV9mdW5jKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xcbiAxNjI6XFx0XFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcXG4gMTYzOlxcdFxcdGNvZGVsX3RpbWVfdCBub3c7XFxuIDE2NDpcXHRcXHRib29sIGRyb3A7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdGlmICghc2tiKSB7XFxuIDE2NzpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTY4OlxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTY5OlxcdFxcdFxcdHJldHVybiBza2I7XFxuIDE3MDpcXHRcXHR9XFxuIDE3MTpcXHRcXHRub3cgPSBjb2RlbF9nZXRfdGltZSgpO1xcbiAxNzI6XFx0XFx0ZHJvcCA9IGNvZGVsX3Nob3VsZF9kcm9wKHNrYiwgY3R4LCB2YXJzLCBwYXJhbXMsIHN0YXRzLFxcbiAxNzM6XFx0XFx0XFx0XFx0XFx0IHNrYl9sZW5fZnVuYywgc2tiX3RpbWVfZnVuYywgYmFja2xvZywgbm93KTtcXG4gMTc0OlxcdFxcdGlmICh2YXJzLVxcdTAwM2Vkcm9wcGluZykge1xcbiAxNzU6XFx0XFx0XFx0aWYgKCFkcm9wKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cXG4gMTc3OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTc4OlxcdFxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXFx1MDAzZWRyb3BfbmV4dCkpIHtcXG4gMTc5OlxcdFxcdFxcdFxcdC8qIEl0J3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxcbiAxODA6XFx0XFx0XFx0XFx0ICogcGFja2V0IGFuZCBkZXF1ZXVlIHRoZSBuZXh0LiBUaGUgZGVxdWV1ZSBtaWdodFxcbiAxODE6XFx0XFx0XFx0XFx0ICogdGFrZSB1cyBvdXQgb2YgZHJvcHBpbmcgc3RhdGUuXFxuIDE4MjpcXHRcXHRcXHRcXHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXFxuIDE4MzpcXHRcXHRcXHRcXHQgKiBBIGxhcmdlIGJhY2tsb2cgbWlnaHQgcmVzdWx0IGluIGRyb3AgcmF0ZXMgc28gaGlnaFxcbiAxODQ6XFx0XFx0XFx0XFx0ICogdGhhdCB0aGUgbmV4dCBkcm9wIHNob3VsZCBoYXBwZW4gbm93LFxcbiAxODU6XFx0XFx0XFx0XFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXFxuIDE4NjpcXHRcXHRcXHRcXHQgKi9cXG4gMTg3OlxcdFxcdFxcdFxcdHdoaWxlICh2YXJzLVxcdTAwM2Vkcm9wcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAxODg6XFx0XFx0XFx0XFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVxcdTAwM2Vkcm9wX25leHQpKSB7XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRpZiAoKytkcm9wcyBcXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xcbiAxOTA6XFx0XFx0XFx0XFx0XFx0XFx0LyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqL1xcbiAxOTE6XFx0XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2Vkcm9wX25leHQsXFxuIDE5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXFxuIDE5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBhcmFtcy1cXHUwMDNlaW50ZXJ2YWwsXFxuIDE5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZhcnMtXFx1MDAzZXJlY19pbnZfc3FydCkpO1xcbiAxOTU6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE5NjpcXHRcXHRcXHRcXHRcXHR9XFxuIDE5NzpcXHRcXHRcXHRcXHRcXHQvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcFxcbiAxOTg6XFx0XFx0XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gbW9yZSBkaXZpZGUuXFxuIDE5OTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMjAwOlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlY291bnQsIHZhcnMtXFx1MDAzZWNvdW50ICsgMSk7XFxuIDIwMTpcXHRcXHRcXHRcXHRcXHRjb2RlbF9OZXd0b25fc3RlcCh2YXJzKTtcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZWVjbiBcXHUwMDI2XFx1MDAyNiBJTkVUX0VDTl9zZXRfY2Uoc2tiKSkge1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzdGF0cy1cXHUwMDNlZWNuX21hcmssXFxuIDIwNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdGF0cy1cXHUwMDNlZWNuX21hcmsgKyAxKTtcXG4gMjA1OlxcdFxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcF9uZXh0LFxcbiAyMDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29kZWxfY29udHJvbF9sYXcodmFycy1cXHUwMDNlZHJvcF9uZXh0LFxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbXMtXFx1MDAzZWludGVydmFsLFxcbiAyMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB2YXJzLVxcdTAwM2VyZWNfaW52X3NxcnQpKTtcXG4gMjA5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZW5kO1xcbiAyMTA6XFx0XFx0XFx0XFx0XFx0fVxcbiAyMTE6XFx0XFx0XFx0XFx0XFx0c3RhdHMtXFx1MDAzZWRyb3BfbGVuICs9IHNrYl9sZW5fZnVuYyhza2IpO1xcbiAyMTI6XFx0XFx0XFx0XFx0XFx0ZHJvcF9mdW5jKHNrYiwgY3R4KTtcXG4gMjEzOlxcdFxcdFxcdFxcdFxcdHN0YXRzLVxcdTAwM2Vkcm9wX2NvdW50Kys7XFxuIDIxNDpcXHRcXHRcXHRcXHRcXHRza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6Mjc6MDYuNjkyMzMxNDMyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NjE4MjA0MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb0RlbCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agb3IgQ1BVIHN0YWxsIHdpdGhpbiB0aGUgQ29EZWwgcGFja2V0IGRyb3BwaW5nIGxvZ2ljIChgY29kZWxfZGVxdWV1ZSgpYCkuIFRoZSBjb3JlIGlzc3VlIHN0ZW1zIGZyb20gdGhlIGBjb2RlbF9jb250cm9sX2xhdygpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBwb3NzaWJpbGl0eSBvZiBgcmVjaXByb2NhbF9zY2FsZWAgcmV0dXJuaW5nIHplcm8gd2hlbiB0aGUgaW50ZXJ2YWwgaXMgdGlueSBvciB0aGUgY291bnQgaXMgbGFyZ2UuIFRoaXMgd291bGQgcHJldmVudCB0aGUgYHZhcnMtXHUwMDNlZHJvcF9uZXh0YCB0aW1lc3RhbXAgZnJvbSBhZHZhbmNpbmcsIGxlYWRpbmcgdG8gYW4gZW5kbGVzcyBsb29wIGluIGBjb2RlbF9kZXF1ZXVlKClgLlxuXG5UaGUgZml4IGFkZHJlc3NlcyB0aGlzIGJ5OiAoMSkgZW5zdXJpbmcgdGhhdCBgY29kZWxfY29udHJvbF9sYXcoKWAgYWx3YXlzIGluY3JlbWVudHMgYGRyb3BfbmV4dGAgYnkgYXQgbGVhc3Qgb25lIHRpY2sgdXNpbmcgYG1heF90KHUzMiwgMSwgLi4uKWAgYW5kICgyKSBhZGRpbmcgYSBzYWZlZ3VhcmQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24gdG8gMjU2IChgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFYCkuIFRoaXMgbG9vcCBib3VuZCByZXN5bmNzIGBkcm9wX25leHRgLCBhbmQgYnJlYWtzIG91dCBvZiB0aGUgbG9vcC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IHRoYXQgbmVjZXNzaXRhdGVzIGEgS01TQU4gY2hlY2s/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXZhbHVhdGUgYWdhaW5zdCB0aGUgY3JpdGVyaWEuIEknbSBzZWVpbmcgbm8ga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGFsdGVyYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlciBoYW5kbGluZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBTcGVjaWZpY2FsbHk6XG5cbiogICBObyBuZXcgb3IgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIChzbyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMpLlxuKiAgIFZhcmlhYmxlcyB1c2VkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoYGRyb3BzYCBpcyBpbml0aWFsaXplZCB0byAwLCBgbm93YCBpcyBzZXQgYnkgYGNvZGVsX2dldF90aW1lKClgLCBhbmQgYHZhcnNgIGlzIHBhc3NlZCBmcm9tIGNhbGxlcikuXG4qICAgTm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgY2hhbmdlZCBpbiB0aGUgY29kZS5cbiogICBObyBjaGFuZ2VzIGluIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBleGlzdGluZyBidWZmZXJzIG9yIHNrYiBkYXRhIGxlbmd0aHMuXG5cblRoaXMgcGF0Y2ggaXMgcHVyZWx5IGFsZ29yaXRobWljLCBwcmV2ZW50aW5nIGFuIGluZmluaXRlIGxvb3AgYnkgbWFraW5nIHN1cmUgYGRyb3BfbmV4dGAgaXMgYWR2YW5jZWQsIGFuZCBib3VuZGluZyBgZHJvcHNgIGZvciByZXN5bmNpbmcuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgaXNzdWVzLiBJdCBkb2Vzbid0IGRldGVjdCBpbmZpbml0ZSBsb29wcyBvciBDUFUgc3RhbGxzLCBLQVNBTiBhbmQgc3RhbmRhcmQgbG9ja3VwIGRldGVjdG9ycyBkby4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcy4gS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3IgYXJlIHN1ZmZpY2llbnQgaGVyZS5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhIGFuZCB0aG9yb3VnaCBhbmFseXNpcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLiBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyOCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6Mjc6MjEuMzEwNTM4NjA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW5maW5pdGUgbG9vcCAvIENQVSBzdGFsbCBpc3N1ZSBpbiBDb0RlbCdzIHBhY2tldCBkcm9wcGluZyBhbGdvcml0aG0gKGNvZGVsX2RlcXVldWUpLiBTcGVjaWZpY2FsbHksIGl0IGNsYW1wcyB0aGUgaW5jcmVtZW50IGluIGNvZGVsX2NvbnRyb2xfbGF3KCkgdG8gYXQgbGVhc3QgMSB0aWNrIHVzaW5nIG1heF90KCkgdG8gYXZvaWQgc3RhbGxzIGZyb20gemVyby1hZHZhbmNlbWVudCB3aGVuIGludGVydmFsIGlzIHNtYWxsIG9yIHBhY2tldCBkcm9wIGNvdW50IGlzIGxhcmdlLCBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0IGRyb3BzIHBlciBkZXF1ZXVlIGl0ZXJhdGlvbiBhdCAyNTYgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkuXFxuXFxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wIC8gQ1BVIHN0YWxsIGlzc3VlIGluIENvRGVsJ3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cXG5cXG5LTVNBTiBpcyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBhcmUgcHVyZWx5IGFsZ29yaXRobWljLCBpbnZvbHZpbmcgYmFzaWMgYXJpdGhtZXRpYyBhbmQgbG9vcCB0ZXJtaW5hdGlvbiBsb2dpYyBvbiBzY2FsYXIgaW50ZWdlcnMuIFRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIGlzIGBkcm9wc2AsIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgbGVuZ3RoIC8gYnVmZmVyIGJvdW5kYXJ5IG9wZXJhdGlvbnMgYXJlIG1vZGlmaWVkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 18:24:19 +0000 UTC FinishedAt: 2026-09-12 19:27:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL" ], "series_id": "8993537a-7a7e-47fc-a3df-a8657a7a330a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "codel_qdisc_dequeue", "fq_codel_dequeue", "codel_change", "fq_codel_change", "codel_dequeue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RlbF9xZGlzY19kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2RlcXVldWUmIzM0OywKICAgICYjMzQ7Y29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9kZXF1ZXVlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwmIzM5O3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cblxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgYW5kIEZRLUNvRGVsIHBhY2tldCBzY2hlZHVsaW5nIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFsZ29yaXRobXMgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGFuZCBpbmNsdWRlL25ldC9jb2RlbC5oLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhlIGNvbnRyb2wgbGF3IHN0ZXAgaW5jcmVtZW50IGlzIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IGluZmluaXRlIHN0YWxscyB3aGVuIGludGVydmFscyBhcmUgY29uZmlndXJlZCB0byBzdWItdGljayB2YWx1ZXMsIGFuZCBpbnRyb2R1Y2VzIGEgbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBsb29waW5nIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIChRZGlzYykgbG9naWMgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvcnRuZXRsaW5rIGFuZCBub3JtYWwgbmV0d29yayBwYWNrZXQgZGVxdWV1ZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA0ZDc1M2JmNjNiMWI1MzlhZjNjZjdhYWZmNTc5MTBlZGJiNzg2OThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxOToyNTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7XG4gLyogbmVlZGVkIHNoaWZ0IHRvIGdldCBhIFEwLjMyIG51bWJlciBmcm9tIHJlY19pbnZfc3FydCAqL1xuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxuIFxuJiM0MzsvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCYjMzk7cyB3b3JrIGRlcGVuZHMgb24gdGhlXG4mIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBjb2RlbF9zdGF0cyAtIGNvbnRhaW5zIGNvZGVsIHNoYXJlZCB2YXJpYWJsZXMgYW5kIHN0YXRzXG4gICogQG1heHBhY2tldDpcdGxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycylcbiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpXG4gICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcbiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cbiAgKi9cbiBzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxuIFx0XHRcdFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxuIFx0XHRcdFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcbiB7XG4tXHRyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4mIzQzO1x0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuJiM0MztcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTQsNiAmIzQzOzE1OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kZXF1ZXVlX3QgZGVxdWV1ZV9mdW5jKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHJvcHMgPSAwO1xuIFx0Y29kZWxfdGltZV90IG5vdztcbiBcdGJvb2wgZHJvcDtcbiBcbkBAIC0xODAsNiAmIzQzOzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdCAqL1xuIFx0XHRcdHdoaWxlICh2YXJzLVx1MDAzZWRyb3BwaW5nIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4mIzQzO1x0XHRcdFx0aWYgKCYjNDM7JiM0Mztkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7XG4mIzQzO1x0XHRcdFx0XHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXG4mIzQzO1x0XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcF9uZXh0LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2VpbnRlcnZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgdmFycy1cdTAwM2VyZWNfaW52X3NxcnQpKTtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXG4gXHRcdFx0XHQgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS5cbiBcdFx0XHRcdCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5pbmRleCA2ZDUxNWQwZTVlZDY5Li5hODk0ZTZmMGUyNjc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuQEAgLTIxMyw1ICYjNDM7MjEzLDc3IEBAXG4gICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtc1wmIzM0OyxcbiAgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4gICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7NmU0NFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtjb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7YThjM1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtjb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAzdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDJ1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7YTY5NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDs5NzkzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Y29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbkBAIC0zMTYsNSAmIzQzOzMxNiw3NyBAQFxuICAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDFwIGZsb3dzIDEwMjQgcXVhbnR1bS4qdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwmIzM0OyxcbiAgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4gICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7MWI0ZFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0OzM1NDBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZnFfY29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDs0OWM1XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZnFfY29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDszZTBmXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZnFfY29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4gICAgIH1cbiBdXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9DT0RFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGVsX3FkaXNjX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2NvZGVsX2RlcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNGQ3NTNiZjYzYjFiNTM5YWYzY2Y3YWFmZjU3OTEwZWRiYjc4Njk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaAppbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb2RlbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKQEAgLTE0MCw2ICYjNDM7MTQwLDExIEBAIHN0cnVjdCBjb2RlbF92YXJzIHsKIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi8KICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKQogCiYjNDM7LyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AmIzM5O3Mgd29yayBkZXBlbmRzIG9uIHRoZQomIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NgomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0cwogICogQG1heHBhY2tldDoJbGFyZ2VzdCBwYWNrZXQgd2UmIzM5O3ZlIHNlZW4gc28gZmFyCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaApAQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycykKICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgJiM0MzsgaW50ZXJ2YWwvc3FydChjb3VudCkKICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZAogICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhCiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC4KICAqLwogc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCwKIAkJCQkgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsCiAJCQkJICAgICAgdTMyIHJlY19pbnZfc3FydCkKIHsKLQlyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKTsKJiM0MzsJcmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLAomIzQzOwkJCSByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLAomIzQzOwkJCQkJICByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKSk7CiB9CiAKIHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xNTQsNiAmIzQzOzE1OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkJICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7CiYjNDM7CXVuc2lnbmVkIGludCBkcm9wcyA9IDA7CiAJY29kZWxfdGltZV90IG5vdzsKIAlib29sIGRyb3A7CiAKQEAgLTE4MCw2ICYjNDM7MTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkgKi8KIAkJCXdoaWxlICh2YXJzLSZndDtkcm9wcGluZyAmYW1wOyZhbXA7CiAJCQkgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtJmd0O2Ryb3BfbmV4dCkpIHsKJiM0MzsJCQkJaWYgKCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgewomIzQzOwkJCQkJLyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqLwomIzQzOwkJCQkJV1JJVEVfT05DRSh2YXJzLSZndDtkcm9wX25leHQsCiYjNDM7CQkJCQkJICAgY29kZWxfY29udHJvbF9sYXcobm93LAomIzQzOwkJCQkJCQkJICAgICBwYXJhbXMtJmd0O2ludGVydmFsLAomIzQzOwkJCQkJCQkJICAgICB2YXJzLSZndDtyZWNfaW52X3NxcnQpKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiAJCQkJLyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXAKIAkJCQkgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS4KIAkJCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgpAQCAtMjEzLDUgJiM0MzsyMTMsNzcgQEAKICAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs2ZTQ0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2E4YzMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTY5NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0Ozk3OTMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiAgICAgfQogXQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCkBAIC0zMTYsNSAmIzQzOzMxNiw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiAgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKICAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MWI0ZCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MzU0MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7NDljNSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZTBmJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb0RlbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBUaGUgZmlsZXMgbGlzdGVkIGluIHRoZSBkaWZmIGltbWVkaWF0ZWx5IHRlbGwgbWUgaXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgQ29EZWwgKENvbnRyb2xsZWQgRGVsYXkpIHF1ZXVpbmcgZGlzY2lwbGluZS4gR29vZC4gSSByZWNvZ25pemUgdGhvc2UgaW5jbHVkZSBmaWxlczogYGNvZGVsLmhgIGFuZCBgY29kZWxfaW1wbC5oYCBhcmUga2V5IGZvciB0aGUgQ29EZWwgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgSlNPTiBmaWxlcyBpbmRpY2F0ZSBjaGFuZ2VzIHRvIHNlbGYtdGVzdHMgZm9yIHRoZSBgdGNgICh0cmFmZmljIGNvbnRyb2wpIHV0aWxpdGllcywgc3BlY2lmaWNhbGx5IGNvdmVyaW5nIENvRGVsIGFuZCBmcV9jb2RlbCAod2hpY2ggcmVsaWVzIG9uIENvRGVsKS4gVGhlIGB0Yy10ZXN0aW5nYCBkaXJlY3Rvcnkgc3VnZ2VzdHMgdGhpcyBpcyBwYXJ0IG9mIGEgYnJvYWRlciB0ZXN0aW5nIGZyYW1ld29yaywgcHJvYmFibHkgZm9yIGVuc3VyaW5nIGNvcnJlY3RuZXNzIGFjcm9zcyBkaWZmZXJlbnQga2VybmVsIHZlcnNpb25zIGFuZCBjb25maWd1cmF0aW9ucy4KCk5vdywgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzOiB0aGUgYCNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAgaW4gYGNvZGVsLmhgIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBuZXcgY29uc3RhbnQuIEEgZHJvcCBjb3VudGVyISBJbiBgY29kZWxfaW1wbC5oYCwgdGhlIGNoYW5nZSB0byBgY29kZWxfY29udHJvbF9sYXdgIGxvb2tzIGxpa2UgYSBzdWJ0bGUgYWRqdXN0bWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBkcm9wIHRpbWUgaXMgY2FsY3VsYXRlZC4gVGhlIHVzZSBvZiBgbWF4X3QodTMyLCAxLCAuLi4pYCBpbmRpY2F0ZXMgYSBjb25zdHJhaW50LCBlbnN1cmluZyB0aGUgY2FsY3VsYXRlZCBkcm9wIHRpbWUgaXMgbmV2ZXIgbGVzcyB0aGFuIDEgKHByZXN1bWFibHkgYSB1bml0IG9mIHRpbWUpIHRvIHByZXZlbnQgc29tZSBlZGdlIGNhc2VzLiBMaWtlbHkgdG8gYXZvaWQgZGl2aWRlIGJ5IHplcm8gZXJyb3JzIQoKVGhlIHJlYWwgbWVhdCBpcyBpbiB0aGUgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9uLiBUaGUgYWRkaXRpb24gb2YgYHVuc2lnbmVkIGludCBkcm9wcyA9IDA7YCBhbmQgdGhlIGB3aGlsZWAgbG9vcCB3aXRoIHRoZSBgaWYgKCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSlgIGNvbmRpdGlvbiBpcyBjcnVjaWFsLiBUaGlzIGlzIGEgcmF0ZS1saW1pdGluZyBtZWNoYW5pc20sIHByZXZlbnRpbmcgYSBzaW5nbGUgY2FsbCB0byBgY29kZWxfZGVxdWV1ZWAgZnJvbSBkcm9wcGluZyBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIHBhY2tldHMuIFRoZSBgV1JJVEVfT05DRWAgYW5kIHRoZSBuZXcgY2FsbCB0byBgY29kZWxfY29udHJvbF9sYXdgIHdpdGhpbiB0aGUgYGlmYCBibG9jayBzaG93IGhvdyB0aGUgbmV4dCBkcm9wIHRpbWUgaXMgcmVjb21wdXRlZCBpZiB3ZSYjMzk7dmUgZmFsbGVuIHRvbyBmYXIgYmVoaW5kIGluIG91ciBkZXF1ZXVlaW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBiYWNrb2ZmIG1lY2hhbmlzbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIElmIHdlJiMzOTtyZSBnZXR0aW5nIG92ZXJ3aGVsbWVkLCBkb24mIzM5O3QganVzdCBkcm9wIGV2ZXJ5dGhpbmcgaW1tZWRpYXRlbHk7IGdpdmUgdGhlIHN5c3RlbSBhIGNoYW5jZSB0byByZWNvdmVyIGJ5IHN0YWdnZXJpbmcgdGhlIGRyb3BzLiBUaGUgY29tbWVudCBhYm91dCAmIzM0O2ZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUmIzM0OyBwcm92aWRlcyB0aGUgcmVhc29uIGZvciB0aGUgbG9naWMhCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgYnJvYWRlciBjb250ZXh0IG9mIHdobyBjYWxscyB0aGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbCBoaWVyYXJjaHkuIFNlYXJjaGluZyBmb3IgdXNlcyBvZiBgY29kZWxfZGVxdWV1ZWAgb3IgaW5jbHVkaW5nIGBuZXQvY29kZWxfaW1wbC5oYCB3aWxsIGdpdmUgbWUgdGhhdCBjb250ZXh0LiBUaGlzIHdpbGwgaGVscCB0byBhbmFseXplIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RlbF9pbXBsXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYy0yNS0jaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmM6MjY6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmMtMjctI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjItI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMzojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjQtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDE3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDb2RlbCBJbXBsZW1lbnRhdGlvbiBVc2FnZSBBY3Jvc3MgdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIHNlZSBhIGNsZWFyIHBhdHRlcm4gZW1lcmdpbmcuIFRoZSBgY29kZWxfaW1wbC5oYCBoZWFkZXIgZmlsZSwgd2hpY2ggSSYjMzk7bSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGgsIGlzIGJlaW5nIHV0aWxpemVkIGFjcm9zcyBzZXZlcmFsIGtleSBuZXR3b3JrIHNjaGVkdWxpbmcgYW5kIHdpcmVsZXNzIGNvbW11bmljYXRpb25zIGNvbXBvbmVudHM6IHNwZWNpZmljYWxseSwgYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AsIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLCBhbmQgZXZlbiB0aGUgODAyLjExIHdpcmVsZXNzIHRyYW5zbWlzc2lvbiBwYXRoIGluIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgdGhvdWdodCBwcm9jZXNzIHRvIGRpdmUgZGVlcGVyIGludG8gKmhvdyogdGhlIENvRGVsIGFsZ29yaXRobSBpcyBiZWluZyAqYXBwbGllZCogaW4gdGhlc2UgZGlmZmVyZW50IGNvbnRleHRzLgoKTXkgcHJpbWFyeSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgY29kZWxfZGVxdWV1ZWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyB0aGVzZSBhcmUgdGhlIHdvcmtob3JzZXMgb2YgQ29EZWwg4oCTIGBjb2RlbF9kZXF1ZXVlYCBoYW5kbGVzIHBhY2tldCByZW1vdmFsIGZyb20gdGhlIHF1ZXVlLCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgY29udHJvbCBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hlbiBhbmQgaG93IGFnZ3Jlc3NpdmVseSB0byBzdGFydCBkcm9wcGluZyBwYWNrZXRzIHRvIG1hbmFnZSBxdWV1ZSBkZWxheXMgYW5kIG1haW50YWluIGZhaXJuZXNzLgoKSSYjMzk7bSBub3cgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIEkgbmVlZCBhbnN3ZXJzIHRvLiBIb3cgYXJlIHRoZSBxdWV1ZSBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gZWFjaCBvZiB0aGVzZSBzY2hlZHVsaW5nIGRpc2NpcGxpbmVzPyBXaGF0IHNwZWNpZmljIG1ldHJpY3MgYXJlIGJlaW5nIG1vbml0b3JlZD8gQXJlIHRoZSBkcm9wIHBhcmFtZXRlcnMgKGxpa2UgYHRhcmdldGAgYW5kIGBpbnRlcnZhbGApIGJlaW5nIHR1bmVkLCBhbmQgaWYgc28sIGhvdz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGFkYXB0YXRpb25zIG9mIHRoZSBvcmlnaW5hbCBDb0RlbCBwcmluY2lwbGVzIGJlaW5nIHVzZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIG51YW5jZWQgdXNhZ2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2ltcGxlIENvRGVsIGltcGxlbWVudGF0aW9uIGluIGBzY2hfY29kZWwuY2AsIHRoZSBGYWlyIFF1ZXVlaW5nIHdpdGggQ29EZWwgaW4gYHNjaF9mcV9jb2RlbC5jYCwgYW5kIHRoZSB3aXJlbGVzcyBjb250ZXh0IG9mIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSB3aXJlbGVzcyBlbnZpcm9ubWVudCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZHVlIHRvIHRoZSBzaGFyZWQgbWVkaXVtIGFuZCB0aGUgcmVzdWx0aW5nIGNvbmdlc3Rpb24gZHluYW1pY3MuIEkgd2lsbCBub3cgZXhhbWluZSB0aGVzZSBmaWxlcyBjbG9zZWx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RlbF9kZXF1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsLmg9MTI5PXN0cnVjdCBjb2RlbF92YXJzIHtcbi0tXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0Mi1cbmluY2x1ZGUvbmV0L2NvZGVsLmg6MTQzOi8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJiMzOTtzIHdvcmsgZGVwZW5kcyBvbiB0aGVcbmluY2x1ZGUvbmV0L2NvZGVsLmgtMTQ0LSAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuLS1cbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaD0xMDk9c3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgtMTUwLVxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oOjE1MTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oLTE1Mi1cdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTEzNjg9c3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9za2JfdGltZV9mdW5jKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTM3NS1cbm5ldC9tYWM4MDIxMS90eC5jOjEzNzY6c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzLFxubmV0L21hYzgwMjExL3R4LmMtMTM3Ny1cdFx0XHRcdFx0ICB2b2lkICpjdHgpXG4tLVxubmV0L21hYzgwMjExL3R4LmM9MTQxMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xNDI5LVxubmV0L21hYzgwMjExL3R4LmM6MTQzMDpcdHJldHVybiBjb2RlbF9kZXF1ZXVlKHR4cWksXG5uZXQvbWFjODAyMTEvdHguYy0xNDMxLVx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2ViYWNrbG9nLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE0MzctXHRcdFx0ICAgICBjb2RlbF9kcm9wX2Z1bmMsXG5uZXQvbWFjODAyMTEvdHguYzoxNDM4Olx0XHRcdCAgICAgY29kZWxfZGVxdWV1ZV9mdW5jKTtcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzktfVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz0yOD1zdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM0LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjM1Oi8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM2LSAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTU5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19jb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy02My1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo2NDpcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcdTAwMjZzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2csIFx1MDAyNnEtXHUwMDNlcGFyYW1zLCBcdTAwMjZxLVx1MDAzZXZhcnMsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjUtXHRcdFx0ICAgIFx1MDAyNnEtXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTcyLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjczOnN0YXRpYyB2b2lkIGNvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03NC17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTAtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6OTE6XHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy05Mi1cbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9OTY9c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMDktXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTEwOlx0XHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTEtXHR9XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTE4NT1zdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1Mi1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNTM6LyogVGhpcyBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbGVkIGZyb20gY29kZWxfZGVxdWV1ZSgpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjU0LSAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTI3Nj1zdGF0aWMgdm9pZCBkcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODMtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjg0OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19mcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI4NS17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMDY6XHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXHUwMDI2c2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcdTAwMjZxLVx1MDAzZWNwYXJhbXMsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzA3LVx0XHRcdCAgICBcdTAwMjZmbG93LVx1MDAzZWN2YXJzLCBcdTAwMjZxLVx1MDAzZWNzdGF0cywgcWRpc2NfcGt0X2xlbixcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzIzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMyNDpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzI1LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM1LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMzNjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM3LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM5LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0MDpcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDEtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzQyOlx0ZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zNDc9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNTEtXHRpZiAoIXNrYikge1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM1MjpcdFx0c2tiID0gX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjAtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzYxOlx0XHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjItXHR9XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY2LVx0LmVucXVldWVcdD1cdGZxX2NvZGVsX2VucXVldWUsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY3Olx0LmRlcXVldWVcdD1cdGZxX2NvZGVsX2RlcXVldWUsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY4LVx0LnBlZWtcdFx0PVx0ZnFfY29kZWxfcGVlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgQ29kZWwvRlEtQ29kZWwgVHJhZmZpYyBDb250cm9sKioKCk9rYXksIHRoaXMgaXMgc29tZSBzZXJpb3VzIExpbnV4IG5ldHdvcmtpbmcgY29kZSDigJMgd2UmIzM5O3JlIGxvb2tpbmcgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRyYWZmaWMgY29udHJvbCwgc3BlY2lmaWNhbGx5IHRoZSBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAgcXVldWVpbmcgZGlzY2lwbGluZXMuIEkga25vdyBGUS1Db0RlbCBpcyBldmVuIHRoZSBkZWZhdWx0IGluIHF1aXRlIGEgZmV3IGRpc3RyaWJ1dGlvbnMgbm93LCB3aGljaCBpcyBzaWduaWZpY2FudC4gVGhpcyBzdHVmZiBpcyBjb21wbGV0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIGtleS4gV2UmIzM5O3JlIHRhbGtpbmcgbmV0bGluaywgYHJ0bmV0bGlua2AsIHRoZSB3aG9sZSBzaGViYW5nIOKAkyBgUlRNX05FV1FESVNDYCwgYHRjIHFkaXNjIGFkZCAuLi4gY29kZWxgIC8gYGZxX2NvZGVsYCwgdGhlIHN0YW5kYXJkIHdheSBwYWNrZXRzIGFyZSBtb3ZlZCwgZXZlcnl0aGluZyEKCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIGZvY3VzZWQgb24gYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLCByaWdodCBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4gSW50ZXJlc3RpbmcuLi4gdGhlIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgd2l0aCBhIGBtYXhfdGAgdG8gcHJldmVudCB6ZXJvIHRydW5jYXRpb24gYW5kIHN0YWxsaW5nLCBhbmQgaW50cm9kdWNpbmcgYSBjYXAsIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgICgyNTYpIGluc2lkZSBgY29kZWxfZGVxdWV1ZSgpYCwgdG8gcHJldmVudCBhIG1hc3NpdmUgZHJvcCBzdG9ybSBhbmQgcmVzeW5jIG9mIGBkcm9wX25leHRgLgoKT2theSwgaXMgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aHdoaWxlPyBBYnNvbHV0ZWx5ISBDb3JlIG5ldHdvcmtpbmcgc3R1ZmYsIHRoZXNlIHF1ZXVlaW5nIGFsZ29yaXRobXMsIHRoZXkmIzM5O3JlIHJpZ2h0IHRoZXJlLCBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgbmV0d29yayBvcGVyYXRpb25zIGFuZCBxZGlzYyBjb25maWd1cmF0aW9uLiBDaGVjayB0aGUgcnVsZXM6IGNvcmUgbmV0d29ya2luZyBpcyAqZXhwbGljaXRseSogb24gdGhlICYjMzQ7V09SVEggRlVaWklORyBDUklURVJJQSYjMzQ7IGxpc3QhIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gYSBjb3JlIHN1YnN5c3RlbS4gU28sIHllYWgsIHRoaXMgaXMgYSBkZWZpbml0ZSBgdHJ1ZWAgZm9yIGBXb3J0aEZ1enppbmdgLgoKTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIHNlZSB3aGF0IGtlcm5lbCBjb25maWdzIGFyZSBuZWVkZWQgdG8gYWN0dWFsbHkgZW5hYmxlIGBzY2hfY29kZWxgIGFuZCBgc2NoX2ZxX2NvZGVsYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiBgbmV0L3NjaGVkL01ha2VmaWxlYCBhbmQgYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaF9jb2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXG4tLVxubmV0L3NjaGVkL0tjb25maWctMjcyLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5uZXQvc2NoZWQvS2NvbmZpZzoyNzM6XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9jb2RlbC5cbm5ldC9zY2hlZC9LY29uZmlnLTI3NC1cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9NTQ9b2JqLSQoQ09ORklHX05FVF9TQ0hfUUZRKVx0JiM0Mzs9IHNjaF9xZnEub1xubmV0L3NjaGVkL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19ORVRfU0NIX0NPREVMKVx0JiM0Mzs9IHNjaF9jb2RlbC5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNTYtb2JqLSQoQ09ORklHX05FVF9TQ0hfRlFfQ09ERUwpXHQmIzQzOz0gc2NoX2ZxX2NvZGVsLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAyNjYgdGhyb3VnaCAyOTAuIFRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBhIHBhcnRpY3VsYXIgcXVldWluZyBkaXNjaXBsaW5lIG9yIGEgc2V0IG9mIHJlbGF0ZWQgb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgY29uZmlndXJlZCB0aGVyZS4gQ2hhbmNlcyBhcmUsIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBuZXcgZmVhdHVyZSBJIHdhbnQgdG8gaW1wbGVtZW50LCBvciBwZXJoYXBzIGRlYnVnIGFuIGlzc3VlIEkmIzM5O20gc2VlaW5nIHdpdGggYSBwYXJ0aWN1bGFyIHNjaGVkdWxlci4gSSBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIHNwZWNpZmljLCBtYXliZSByZWxhdGVkIHRvIHNvbWUgbmV3bHkgYWRkZWQgY29kZSwgYSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9uLCBvciBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IgdGhhdCBJJiMzOTttIHRyeWluZyB0byBwaW4gZG93bi4gR29pbmcgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBoZWxwcyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjZXJ0YWluIGNob2ljZXMuIFRoaXMgdGFyZ2V0ZWQgYXBwcm9hY2ggaXMgbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIGJyb3dzaW5nIHRoZSBlbnRpcmUgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFxuIDI2MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjYyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9xZnEuXG4gMjYzOlx0XG4gMjY0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjY1Olx0XG4gMjY2Olx0Y29uZmlnIE5FVF9TQ0hfQ09ERUxcbiAyNjc6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcJiMzNDtcbiAyNjg6XHRcdGhlbHBcbiAyNjk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbnRyb2xsZWQgRGVsYXkgKENPREVMKVxuIDI3MDpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMjcxOlx0XG4gMjcyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyNzM6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxuIDI3NDpcdFxuIDI3NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI3NjpcdFxuIDI3NzpcdGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXG4gMjc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcJiMzNDtcbiAyNzk6XHRcdGhlbHBcbiAyODA6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZRIENvbnRyb2xsZWQgRGVsYXkgKEZRX0NPREVMKVxuIDI4MTpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMjgyOlx0XG4gMjgzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyODQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2ZxX2NvZGVsLlxuIDI4NTpcdFxuIDI4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI4NzpcdFxuIDI4ODpcdGNvbmZpZyBORVRfU0NIX0NBS0VcbiAyODk6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZCAoQ0FLRSlcJiMzNDtcbiAyOTA6XHRcdGhlbHBcbiAyOTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZFxuIDI5MjpcdFx0ICAoQ0FLRSkgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG0uXG4gMjkzOlx0XG4gMjk0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyOTU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2Nha2UuXG4gMjk2Olx0XG4gMjk3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk4Olx0XG4gMjk5Olx0Y29uZmlnIE5FVF9TQ0hfRlFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLY29uZmlnIGZvciBORVRfU0NIX0NPREVMIGFuZCBORVRfU0NIX0ZRX0NPREVMKioKCkFscmlnaHQsIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgd2hpbGUgcmV2aWV3aW5nIHRoaXMgc2NoZWR1bGluZyBjb2RlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGVpdGhlciBgTkVUX1NDSF9DT0RFTGAgb3IgYE5FVF9TQ0hfRlFfQ09ERUxgIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvciBpZiB0aGVpciBjb25maWd1cmF0aW9ucyBhcmUgbmVzdGVkIHdpdGhpbiBhbnkgYG1lbnVjb25maWdgIGJsb2NrcyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHZlcmlmeSBpdC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHZlcnkgdG9wIG9mIGBuZXQvc2NoZWQvS2NvbmZpZ2AsIG1ha2luZyBzdXJlIG5vIGdsb2JhbCBkaXJlY3RpdmVzIGFmZmVjdCB3aGF0IHdlIGFyZSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcbiAgMTc6XHRcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXG4gIDE5Olx0XHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDIwOlx0XHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxuICAyMTpcdFx0ICBuZWVkIGEgY2VydGFpbiBtaW5pbXVtIGRhdGEgZmxvdyByYXRlLCBvciBpZiB5b3UgbmVlZCB0byBsaW1pdCB0aGVcbiAgMjI6XHRcdCAgbWF4aW11bSBkYXRhIGZsb3cgcmF0ZSBmb3IgdHJhZmZpYyB3aGljaCBtYXRjaGVzIHNwZWNpZmllZCBjcml0ZXJpYS5cbiAgMjM6XHRcdCAgVGhpcyBjb2RlIGlzIGNvbnNpZGVyZWQgdG8gYmUgZXhwZXJpbWVudGFsLlxuICAyNDpcdFxuICAyNTpcdFx0ICBUbyBhZG1pbmlzdGVyIHRoZXNlIHNjaGVkdWxlcnMsIHlvdSYjMzk7bGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcbiAgMjY6XHRcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMiYjNDM7dGMgYXRcbiAgMjc6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1x1MDAzZS4gIFRoYXQgcGFja2FnZVxuICAyODpcdFx0ICBhbHNvIGNvbnRhaW5zIHNvbWUgZG9jdW1lbnRhdGlvbjsgZm9yIG1vcmUsIGNoZWNrIG91dFxuICAyOTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXHUwMDNlLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGlzIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBzdXBwb3J0IHdpbGwgZW5hYmxlIHlvdSB0byB1c2VcbiAgMzI6XHRcdCAgRGlmZmVyZW50aWF0ZWQgU2VydmljZXMgKGRpZmZzZXJ2KSBhbmQgUmVzb3VyY2UgUmVzZXJ2YXRpb24gUHJvdG9jb2xcbiAgMzM6XHRcdCAgKFJTVlApIG9uIHlvdXIgTGludXggcm91dGVyIGlmIHlvdSBhbHNvIHNheSBZIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4gIDM0Olx0XHQgIGNsYXNzaWZpZXJzIGJlbG93LiAgRG9jdW1lbnRhdGlvbiBhbmQgc29mdHdhcmUgaXMgYXRcbiAgMzU6XHRcdCAgXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbVwmIzM0OyBiZWxvdywgeW91IHdpbGwgYmUgYWJsZVxuICAzODpcdFx0ICB0byByZWFkIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCBwYWNrZXQgc2NoZWR1bGVycyBmcm9tIHRoZSBmaWxlXG4gIDM5Olx0XHQgIC9wcm9jL25ldC9wc2NoZWQuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBOZXR3b3JrIFNjaGVkdWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uLi4uIGBORVRfU0NIRURgIGlzIHRoZSBwcmltYXJ5IG1lbnVjb25maWcgb3B0aW9uIEkgbmVlZCB0byBiZSBmb2N1c2luZyBvbi4gQnV0LCBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hYzgwMjExLCBpdCYjMzk7cyBhbHdheXMgcmVsZXZhbnQgd2l0aCB3aXJlbGVzcy4gTm93LCB0byBnZXQgdG8gdGhlIHNwZWNpZmljcyBvZiB0cmFmZmljIHNoYXBpbmcsIEkgcmVtZW1iZXIgc2VlaW5nIENvRGVsIGluIHVzZSwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyB1c2VkIGluIGEgcGFydGljdWxhciBwYXJ0IG9mIHRoZSB3aXJlbGVzcyBzdGFjay4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgbG9vayBhdCBgbmV0L21hYzgwMjExL3R4LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCB0cmlnZ2VycyBDb0RlbCB3aXRoaW4gdGhhdCBmaWxlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayB0aHJvdWdoIGBuZXQvbWFjODAyMTEvYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV90aW5fZGVxdWV1ZV9mdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0xMzk2PXN0YXRpYyB2b2lkIGNvZGVsX2Ryb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE0MDktXG5uZXQvbWFjODAyMTEvdHguYzoxNDEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfdGluX2RlcXVldWVfZnVuYyhzdHJ1Y3QgZnEgKmZxLFxubmV0L21hYzgwMjExL3R4LmMtMTQxMS1cdFx0XHRcdFx0ICAgc3RydWN0IGZxX3RpbiAqdGluLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTM4ODA9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTM5MjYtXG5uZXQvbWFjODAyMTEvdHguYzozOTI3Olx0XHRza2IgPSBmcV90aW5fZGVxdWV1ZShmcSwgdGluLCBmcV90aW5fZGVxdWV1ZV9mdW5jKTtcbm5ldC9tYWM4MDIxMS90eC5jLTM5MjgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTk2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGBNQUM4MDIxMWAgaXMgYWxzbyBpbiB0aGUgbWl4IGhlcmUsIGJ1dCBpdCBsb29rcyBsaWtlIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgIGFyZSB0aGUgcHJpbWFyeSBjb25zdW1lcnMgYW5kIHRlc3Qgc3ViamVjdHMsIGJhc2VkIG9uIHRob3NlIEpTT04gdGVzdHMgaW4gdGMtdGVzdGluZy4gSG1tLCBzbyBpdCBzZWVtcyBsaWtlIHRoaXMgYGNvZGVsLmhgIG9yIGBjb2RlbF9pbXBsLmhgIG1pZ2h0IGJlIHJlbGV2YW50IHRvIGEgd2lkZXIgcmFuZ2Ugb2YgY29kZSB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgZmlsZSBzeXN0ZW0gYW5kIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIG90aGVyIGZpbGVzIHVzaW5nIGBjb2RlbC5oYCBvciBgY29kZWxfaW1wbC5oYC4gS25vd2luZyB0aGUgdXNhZ2Ugd2lsbCBjbGFyaWZ5IGhvdyB3aWRlc3ByZWFkIHRoaXMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGVsXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jb2RlbF9xZGlzYy5oLTUxLVxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaDo1MjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaC01My0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2Vcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTIyLSNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxMS5oXHUwMDNlXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjIzOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMTFfcmFkaW90YXAuaFx1MDAzZVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9tYWM4MDIxMS5oXHUwMDNlXG5uZXQvbWFjODAyMTEvdHguYzoyNTojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmMtMjYtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMTojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyLSNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjIyOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg1NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyB0aGUgRnV6emVyOiBBIFN0cmF0ZWd5IGZvciBFZmZlY3RpdmUgQ292ZXJhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiB3ZSYjMzk7cmUgZnV6emluZywgYW5kIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB3ZSBuZWVkIGEgd2F5IHRvIGd1aWRlIHRoZSBmdXp6aW5nIHByb2Nlc3Mg4oCTIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGlycmVsZXZhbnQgYXJlYXMgYW5kIGVuc3VyZSBpdCBoaXRzIHRoZSBtb3N0IGltcGFjdGZ1bCBjb2RlLiBUaGF0JiMzOTtzIHdoZXJlIGV4dHJhY3RpbmcgYEZvY3VzU3ltYm9sc2AgY29tZXMgaW4uIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgZGlsdXRpb24sIHN0ZWVyaW5nIHRoZSBmdXp6ZXIgdG8gdGhlIGdvb2Qgc3R1ZmYuCgpGaXJzdCwgd2UgbmVlZCB0byBhdm9pZCB0aGUgb2J2aW91cyB0cmFwcy4gV2UgKipjYW5ub3QqKiBpbmNsdWRlIHRob3NlIGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBldmVyeXdoZXJlLiBGb3JnZXQgdGhlbS4gSW5zdGVhZCwgd2UgbmVlZCB0byB6b25lIGluIG9uOgoKKiAgICoqU3BlY2lmaWMgRmVhdHVyZSBMb2dpYyBhbmQgRW50cnlwb2ludHM6KiogRnVuY3Rpb25zIHRoYXQgKmRpcmVjdGx5KiBpbXBsZW1lbnQgdGhlIGxvZ2ljIHdlJiMzOTtyZSBhZGRpbmcsIGNoYW5naW5nLCBvciByZXZpZXdpbmcuIFRoaW5rIEFQSSBlbnRyeSBwb2ludHMgZm9yIHRoZSBzdWJzeXN0ZW0gd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uCgoqICAgKipTdGF0aWMgSW5saW5lczoqKiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBjb21tb24gaW4ga2VybmVsIGhlYWRlcnMgKGBtbS8qLmhgLCBgaW5jbHVkZS9saW51eC8qLmhgKSwgYXJlIHRyaWNreS4gVGhleSBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gYHZtbGludXhgLCBzbyB5b3UgY2FuJiMzOTt0IHRhcmdldCB0aGVtIGRpcmVjdGx5IHdpdGggYSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVyLiBTbywgaWYgb3VyIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbnNpZGUgc3RhdGljIGlubGluZSBoZWxwZXJzLCB3ZSBuZWVkIHRvIGlkZW50aWZ5ICpub24tc3RhdGljKiwgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgdGhhdCAqZXhlcmNpc2UqIHRob3NlIGlubGluZSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gYXZvaWQgdGhvc2UgZ2VuZXJpYyBsaWZlY3ljbGUgd3JhcHBlcnMgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAuIGBjb2RlbF9jb250cm9sX2xhd2AgYW5kIGBjb2RlbF9kZXF1ZXVlYCBhcmUgYm90aCBgc3RhdGljYCwgc28gdGhleSYjMzk7cmUgaW5saW5lZC4gR3JlYXQhIFdlIHdhbnQgdG8gZm9jdXMgb24gdGhlaXIgY2FsbGVycyBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjYWxsZXJzLCBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCwgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgY2FsbHMgYGNvZGVsX2RlcXVldWVgLCBgY29kZWxfZGVxdWV1ZV9kcm9wYCBjYWxscyBgY29kZWxfZGVxdWV1ZWAuIEFuZCBgY29kZWxfcWRpc2NfZGVxdWV1ZWAgY2FsbHMgYm90aCwgYnV0IHRoZSBmdW5jdGlvbiBhbHNvIHJldHVybnMgYHFkaXNjX2RlcXVldWVfaGVhZChzY2gpYC4gV2Ugc2hvdWxkIHByb2JhYmx5IHJlYWQgYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCBmcm9tIGBzY2hfY29kZWwuY2AgYXMgd2VsbC4gU2VlbXMgbGlrZSB3ZSBzaG91bGQgY2hlY2sgbGluZXMgNTUtMTIwIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgIGZvciBzb21lIG1vcmUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU1Olx0XHRxZGlzY19kZXF1ZXVlX2Ryb3Aoc2NoLCBza2IsIFFESVNDX0RST1BfQ09OR0VTVEVEKTtcbiAgNTY6XHRcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19jb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA2MDpcdHtcbiAgNjE6XHRcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuICA2MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgNjM6XHRcbiAgNjQ6XHRcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcdTAwMjZzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2csIFx1MDAyNnEtXHUwMDNlcGFyYW1zLCBcdTAwMjZxLVx1MDAzZXZhcnMsXG4gIDY1Olx0XHRcdFx0ICAgIFx1MDAyNnEtXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXG4gIDY2Olx0XHRcdFx0ICAgIGRyb3BfZnVuYywgZGVxdWV1ZV9mdW5jKTtcbiAgNjc6XHRcbiAgNjg6XHRcdGlmIChza2IpXG4gIDY5Olx0XHRcdHFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpO1xuICA3MDpcdFx0cmV0dXJuIHNrYjtcbiAgNzE6XHR9XG4gIDcyOlx0XG4gIDczOlx0c3RhdGljIHZvaWQgY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA3NDpcdHtcbiAgNzU6XHRcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuICA3NjpcdFxuICA3NzpcdFx0aWYgKHEtXHUwMDNlc3RhdHMuZHJvcF9jb3VudCkge1xuICA3ODpcdFx0XHRxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgcS1cdTAwM2VzdGF0cy5kcm9wX2NvdW50LFxuICA3OTpcdFx0XHRcdFx0XHQgIHEtXHUwMDNlc3RhdHMuZHJvcF9sZW4pO1xuICA4MDpcdFx0XHRxLVx1MDAzZXN0YXRzLmRyb3BfY291bnQgPSAwO1xuICA4MTpcdFx0XHRxLVx1MDAzZXN0YXRzLmRyb3BfbGVuID0gMDtcbiAgODI6XHRcdH1cbiAgODM6XHR9XG4gIDg0Olx0XG4gIDg1Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA4NjpcdHtcbiAgODc6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDg4Olx0XG4gIDg5Olx0XHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcbiAgOTA6XHRcbiAgOTE6XHRcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuICA5MjpcdFxuICA5MzpcdFx0cmV0dXJuIHNrYjtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuICA5NzpcdHtcbiAgOTg6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZzY2gtXHUwMDNlZ3NvX3NrYik7XG4gIDk5Olx0XG4gMTAwOlx0XHRpZiAoIXNrYikge1xuIDEwMTpcdFx0XHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0aWYgKHNrYikge1xuIDEwNDpcdFx0XHRcdF9fc2tiX3F1ZXVlX2hlYWQoXHUwMDI2c2NoLVx1MDAzZWdzb19za2IsIHNrYik7XG4gMTA1Olx0XHRcdFx0LyogaXQmIzM5O3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cbiAxMDY6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19pbmMoc2NoLCBza2IpO1xuIDEwNzpcdFx0XHRcdHNjaC1cdTAwM2VxLnFsZW4mIzQzOyYjNDM7O1xuIDEwODpcdFx0XHR9XG4gMTA5Olx0XG4gMTEwOlx0XHRcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDExMTpcdFx0fVxuIDExMjpcdFxuIDExMzpcdFx0cmV0dXJuIHNrYjtcbiAxMTQ6XHR9XG4gMTE1Olx0XG4gMTE2Olx0c3RhdGljIGludCBjb2RlbF9xZGlzY19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIDExNzpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4gMTE4Olx0e1xuIDExOTpcdFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2NoX2ZxX2NvZGVsLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgIHJpZ2h0IG5vdy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMjgwIHRocm91Z2ggMzY1LCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHJhbmdlIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBwcmVjaXNlbHkgaG93IHRoZSBGYXN0IFF1ZXVlIENvRGVsIHNjaGVkdWxlciBvcGVyYXRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIGhpZGluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUuLi4gbGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0cWRpc2NfZGVxdWV1ZV9kcm9wKHNjaCwgc2tiLCBRRElTQ19EUk9QX0NPTkdFU1RFRCk7XG4gMjgxOlx0XHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xuIDI4MjpcdH1cbiAyODM6XHRcbiAyODQ6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiAyODU6XHR7XG4gMjg2Olx0XHRzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbiAyODc6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMjg4Olx0XHRzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdztcbiAyODk6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7XG4gMjkwOlx0XG4gMjkxOlx0YmVnaW46XG4gMjkyOlx0XHRoZWFkID0gXHUwMDI2cS1cdTAwM2VuZXdfZmxvd3M7XG4gMjkzOlx0XHRpZiAobGlzdF9lbXB0eShoZWFkKSkge1xuIDI5NDpcdFx0XHRoZWFkID0gXHUwMDI2cS1cdTAwM2VvbGRfZmxvd3M7XG4gMjk1Olx0XHRcdGlmIChsaXN0X2VtcHR5KGhlYWQpKVxuIDI5NjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDI5NzpcdFx0fVxuIDI5ODpcdFx0ZmxvdyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZxX2NvZGVsX2Zsb3csIGZsb3djaGFpbik7XG4gMjk5Olx0XG4gMzAwOlx0XHRpZiAoZmxvdy1cdTAwM2VkZWZpY2l0IFx1MDAzYz0gMCkge1xuIDMwMTpcdFx0XHRXUklURV9PTkNFKGZsb3ctXHUwMDNlZGVmaWNpdCwgZmxvdy1cdTAwM2VkZWZpY2l0ICYjNDM7IHEtXHUwMDNlcXVhbnR1bSk7XG4gMzAyOlx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZsb3ctXHUwMDNlZmxvd2NoYWluLCBcdTAwMjZxLVx1MDAzZW9sZF9mbG93cyk7XG4gMzAzOlx0XHRcdGdvdG8gYmVnaW47XG4gMzA0Olx0XHR9XG4gMzA1Olx0XG4gMzA2Olx0XHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXHUwMDI2c2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcdTAwMjZxLVx1MDAzZWNwYXJhbXMsXG4gMzA3Olx0XHRcdFx0ICAgIFx1MDAyNmZsb3ctXHUwMDNlY3ZhcnMsIFx1MDAyNnEtXHUwMDNlY3N0YXRzLCBxZGlzY19wa3RfbGVuLFxuIDMwODpcdFx0XHRcdCAgICBjb2RlbF9nZXRfZW5xdWV1ZV90aW1lLCBkcm9wX2Z1bmMsIGRlcXVldWVfZnVuYyk7XG4gMzA5Olx0XG4gMzEwOlx0XHRpZiAoIXNrYikge1xuIDMxMTpcdFx0XHQvKiBmb3JjZSBhIHBhc3MgdGhyb3VnaCBvbGRfZmxvd3MgdG8gcHJldmVudCBzdGFydmF0aW9uICovXG4gMzEyOlx0XHRcdGlmICgoaGVhZCA9PSBcdTAwMjZxLVx1MDAzZW5ld19mbG93cykgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnEtXHUwMDNlb2xkX2Zsb3dzKSlcbiAzMTM6XHRcdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmbG93LVx1MDAzZWZsb3djaGFpbiwgXHUwMDI2cS1cdTAwM2VvbGRfZmxvd3MpO1xuIDMxNDpcdFx0XHRlbHNlXG4gMzE1Olx0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZmbG93LVx1MDAzZWZsb3djaGFpbik7XG4gMzE2Olx0XHRcdGdvdG8gYmVnaW47XG4gMzE3Olx0XHR9XG4gMzE4Olx0XHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcbiAzMTk6XHRcdFdSSVRFX09OQ0UoZmxvdy1cdTAwM2VkZWZpY2l0LCBmbG93LVx1MDAzZWRlZmljaXQgLSBxZGlzY19wa3RfbGVuKHNrYikpO1xuIDMyMDpcdFxuIDMyMTpcdFx0cmV0dXJuIHNrYjtcbiAzMjI6XHR9XG4gMzIzOlx0XG4gMzI0Olx0c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDMyNTpcdHtcbiAzMjY6XHRcdHN0cnVjdCBmcV9jb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQpIHtcbiAzMjk6XHRcdFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQsXG4gMzMwOlx0XHRcdFx0XHRcdCAgcS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4pO1xuIDMzMTpcdFx0XHRxLVx1MDAzZWNzdGF0cy5kcm9wX2NvdW50ID0gMDtcbiAzMzI6XHRcdFx0cS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4gPSAwO1xuIDMzMzpcdFx0fVxuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gMzM3Olx0e1xuIDMzODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzMzk6XHRcbiAzNDA6XHRcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNDE6XHRcbiAzNDI6XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dXJuIHNrYjtcbiAzNDU6XHR9XG4gMzQ2Olx0XG4gMzQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDM0ODpcdHtcbiAzNDk6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZzY2gtXHUwMDNlZ3NvX3NrYik7XG4gMzUwOlx0XG4gMzUxOlx0XHRpZiAoIXNrYikge1xuIDM1MjpcdFx0XHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNTM6XHRcbiAzNTQ6XHRcdFx0aWYgKHNrYikge1xuIDM1NTpcdFx0XHRcdF9fc2tiX3F1ZXVlX2hlYWQoXHUwMDI2c2NoLVx1MDAzZWdzb19za2IsIHNrYik7XG4gMzU2Olx0XHRcdFx0LyogaXQmIzM5O3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cbiAzNTc6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19pbmMoc2NoLCBza2IpO1xuIDM1ODpcdFx0XHRcdHNjaC1cdTAwM2VxLnFsZW4mIzQzOyYjNDM7O1xuIDM1OTpcdFx0XHR9XG4gMzYwOlx0XG4gMzYxOlx0XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM2MjpcdFx0fVxuIDM2MzpcdFxuIDM2NDpcdFx0cmV0dXJuIHNrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb25zdHJ1Y3RpbmcgQ29kZWwgYW5kIEZRLUNvZGVsIEluaXRpYWxpemF0aW9uIGFuZCBEZXF1ZXVlIFByb2Nlc3NlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlOiBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgX19mcV9jb2RlbF9kZXF1ZXVlYCwgYW5kIGBmcV9jb2RlbF9kZXF1ZXVlYC4gVGhvc2UgYXJlIHRoZSBkZXF1ZXVlIGZ1bmN0aW9uczsgdGhleSYjMzk7cmUgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBxdWV1aW5nIGRpc2NpcGxpbmVzIGhhbmRsZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGltcGxlbWVudGF0aW9ucyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBiZSBwcmVzZW50IGluIGVhY2guCgpUaGVuLCBvZiBjb3Vyc2UsIHRoZSBpbml0aWFsIHNldHVwOiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBjb2RlbF9pbml0YCwgYGNvZGVsX2NoYW5nZWAsIGBmcV9jb2RlbF9pbml0YCwgYW5kIGBmcV9jb2RlbF9jaGFuZ2VgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNyaXRpY2FsIHBhcmFtZXRlcnMgYXJlIHNldCDigJMgdGhpbmdzIGxpa2UgdGhlIGludGVydmFsIGFuZCB0YXJnZXQgdmFsdWVzIHRoYXQgZGVmaW5lIHRoZSBhY3RpdmUgcXVldWUgbWFuYWdlbWVudCBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgaXMgYW55IGRpdmVyZ2VuY2UgYmV0d2VlbiBDb2RlbCBhbmQgRlEtQ29kZWwgaW4gdGhlaXIgcmVzcGVjdGl2ZSBwYXJhbWV0ZXIgc2V0dGluZy4KClNvLCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRpbWUgdG8gZGlnIGludG8gYHNjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYCBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRoZSBgY29kZWxfY2hhbmdlYCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBjcnVjaWFsIGRldGFpbHMgb24gcGFyYW1ldGVyIGFkanVzdG1lbnQgYW5kIHRoZWlyIGVmZmVjdCBvbiB0aGUgcXVldWluZyBhbGdvcml0aG1zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucywgYW5kIGhvdyB0aG9zZSBkaWZmZXJlbmNlcyBpbXBhY3QgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGNvZGVsfGZxX2NvZGVsKV8oaW5pdHxjaGFuZ2UpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2NvZGVsLmM9MTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjb2RlbF9wb2xpY3lbVENBX0NPREVMX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTM3LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTEzOS1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoxOTg6c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTk5LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIxMC1cdGlmIChvcHQpIHtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMTE6XHRcdGludCBlcnIgPSBjb2RlbF9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEyLVxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz0yOTI9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgY29kZWxfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI5OC1cdC5wZWVrXHRcdD1cdGNvZGVsX3BlZWssXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6Mjk5Olx0LmluaXRcdFx0PVx0Y29kZWxfaW5pdCxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDAtXHQucmVzZXRcdFx0PVx0Y29kZWxfcmVzZXQsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzAxOlx0LmNoYW5nZSBcdD1cdGNvZGVsX2NoYW5nZSxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDItXHQuZHVtcFx0XHQ9XHRjb2RlbF9kdW1wLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX2NvZGVsX3BvbGljeVtUQ0FfRlFfQ09ERUxfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy00MDQtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NDA1OnN0YXRpYyBpbnQgZnFfY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA2LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NDk5PXN0YXRpYyB2b2lkIGZxX2NvZGVsX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwNy1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MDg6c3RhdGljIGludCBmcV9jb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNTA5LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUyOS1cdGlmIChvcHQpIHtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MzA6XHRcdGVyciA9IGZxX2NvZGVsX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01MzEtXHRcdGlmIChlcnIpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY4LVx0LnBlZWtcdFx0PVx0ZnFfY29kZWxfcGVlayxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3Njk6XHQuaW5pdFx0XHQ9XHRmcV9jb2RlbF9pbml0LFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3MC1cdC5yZXNldFx0XHQ9XHRmcV9jb2RlbF9yZXNldCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NzEtXHQuZGVzdHJveVx0PVx0ZnFfY29kZWxfZGVzdHJveSxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3NzI6XHQuY2hhbmdlXHRcdD1cdGZxX2NvZGVsX2NoYW5nZSxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NzMtXHQuZHVtcFx0XHQ9XHRmcV9jb2RlbF9kdW1wLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZWwgRGVxdWV1ZSBhbmQgQ29udHJvbCBMYXcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgQ29kZWwgZGVxdWV1ZSBhbmQgY29udHJvbCBsYXcgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmUgYW5kIHdoZXRoZXIgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBhcyBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGNvZGVsX2RlcXVldWUoKWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyBgY29kZWxfZGVxdWV1ZSgpYCBpcyBpbmxpbmVkIGludG8gYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgYW5kIGBfX2ZxX2NvZGVsX2RlcXVldWVgLCBiYXNlZCBvbiB0aGUgY29kZWJhc2UsIHdoaWNoIGFyZSBkZWZpbmVkIGluIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgcmVzcGVjdGl2ZWx5LgoKTG9va2luZyBhdCBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCwgSSBzZWUgdGhhdCBgY29kZWxfZGVxdWV1ZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFNpbmNlIGl0JiMzOTtzIGluIGEgaGVhZGVyLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBpbnRvIGl0cyBjYWxsZXJzLiBUaGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBjb2RlbF9kZXF1ZXVlKClgLCBhbmQgaXQmIzM5O3MgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSYjMzk7bSBjdXJpb3VzIHdoZXRoZXIgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgc3ltYm9scyBpbiB0aGUgZmluYWwgdm1saW51eCBpbWFnZS4gU3RhdGljIGlubGluZXMgYXJlIG9mdGVuIG9wdGltaXplZCBvdXQsIHdoaWNoIHdvdWxkIG1lYW4gdGhleSYjMzk7cmUgbm90IGFkZHJlc3NhYmxlIGRpcmVjdGx5IGJ5IHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4KCkJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGUgcnVsZTogQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGluIGhlYWRlcnMgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFuZCB0aGVyZWZvcmUgYXJlbiYjMzk7dCBkaXJlY3RseSB0YXJnZXRhYmxlIGZvciBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4gSWYgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHdpdGhpbiB0aGVzZSBpbmxpbmVkIGhlbHBlcnMsIEkgbmVlZCB0byBsb29rIGZvciBub24tc3RhdGljIG9yIHNwZWNpZmljIGNhbGxlciBmdW5jdGlvbnMgdGhhdCAqdXNlKiB0aGVtIGFuZCBhcmUgZGVmaW5lZCBpbiB0aGUgYC5jYCBmaWxlcy4gVGhpcyBpcyBob3cgSSBjYW4gaW5kaXJlY3RseSB0ZXN0IHRoZW0uCgpMZXQmIzM5O3Mgc2VlOiBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCwgSSBoYXZlIGZ1bmN0aW9ucyBsaWtlIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9jaGFuZ2VgLCBgY29kZWxfaW5pdGAsIGFuZCBgY29kZWxfcWRpc2NfZW5xdWV1ZWAuIFRoZW4sIGluIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLCBJIGhhdmUgc2ltaWxhciBmdW5jdGlvbnM6IGBmcV9jb2RlbF9kZXF1ZXVlYCwgYF9fZnFfY29kZWxfZGVxdWV1ZWAsIGBmcV9jb2RlbF9jaGFuZ2VgLCBgZnFfY29kZWxfaW5pdGAsIGFuZCBgZnFfY29kZWxfZW5xdWV1ZWAuCgpPa2F5LCBhIG1vbWVudCBvZiBjbGFyaXR5Li4uIGFyZSBgY29kZWxfcWRpc2NfZGVxdWV1ZWAgYW5kIGBmcV9jb2RlbF9kZXF1ZXVlYCBhY3R1YWxseSBzdGF0aWMgb3Igbm9uLXN0YXRpYz8gSSBuZWVkIHRvIGNoZWNrLiBEaWdnaW5nIGludG8gYHNjaF9jb2RlbC5jYCwgSSBzZWUgYHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClgLiBBbmQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYC5kZXF1ZXVlID0gY29kZWxfcWRpc2NfZGVxdWV1ZWAgd2l0aGluIGBjb2RlbF9xZGlzY19vcHNgLiBUaGUgc2FtZSBwYXR0ZXJuIGV4aXN0cyBpbiBgc2NoX2ZxX2NvZGVsLmNgIGZvciBgZnFfY29kZWxfZGVxdWV1ZWAuIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB0YWtlbiBhbmQgYXNzaWduZWQgdG8gdGhlIGBRZGlzY19vcHNgIHN0cnVjdCwgdGhleSAqYXJlbiYjMzk7dCogaW5saW5lZC4gVGhleSBleGlzdCBhcyByZWFsIGZ1bmN0aW9ucyB3aXRoIGFjY2Vzc2libGUgc3ltYm9scyBpbiB0aGUgY29tcGlsZWQgY29kZSEKCk5vdywgd2hhdCBhYm91dCBgY29kZWxfZGVxdWV1ZWAgaXRzZWxmPyBMZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCBhcm91bmQgbGluZXMgMTUwLTE2MC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQ1Olx0XHR9IGVsc2UgaWYgKGNvZGVsX3RpbWVfYWZ0ZXIobm93LCB2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUpKSB7XG4gMTQ2Olx0XHRcdG9rX3RvX2Ryb3AgPSB0cnVlO1xuIDE0NzpcdFx0fVxuIDE0ODpcdFx0cmV0dXJuIG9rX3RvX2Ryb3A7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gMTUyOlx0XHRcdFx0XHQgICAgIHUzMiAqYmFja2xvZyxcbiAxNTM6XHRcdFx0XHRcdCAgICAgc3RydWN0IGNvZGVsX3BhcmFtcyAqcGFyYW1zLFxuIDE1NDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfdmFycyAqdmFycyxcbiAxNTU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGNvZGVsX3N0YXRzICpzdGF0cyxcbiAxNTY6XHRcdFx0XHRcdCAgICAgY29kZWxfc2tiX2xlbl90IHNrYl9sZW5fZnVuYyxcbiAxNTc6XHRcdFx0XHRcdCAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxuIDE1ODpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZHJvcF90IGRyb3BfZnVuYyxcbiAxNTk6XHRcdFx0XHRcdCAgICAgY29kZWxfc2tiX2RlcXVldWVfdCBkZXF1ZXVlX2Z1bmMpXG4gMTYwOlx0e1xuIDE2MTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xuIDE2MjpcdFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiAxNjM6XHRcdGNvZGVsX3RpbWVfdCBub3c7XG4gMTY0Olx0XHRib29sIGRyb3A7XG4gMTY1Olx0XG4gMTY2Olx0XHRpZiAoIXNrYikge1xuIDE2NzpcdFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuIDE2ODpcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNjk6XHRcdFx0cmV0dXJuIHNrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NjcKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogMTYyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBDb2RlbC9GcV9Db2RlbCBRdWV1ZWluZyBEaXNjaXBsaW5lIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBwb3RlbnRpYWwgdHJ1bmNhdGlvbiBlcnJvcnMgd2hlbiB0aGUgaW50ZXJ2YWwgaXMgdmVyeSBzbWFsbCAoc3ViLXRpY2spIHdpdGhpbiB0aGUgYGNvZGVsYCBhbmQgYGZxX2NvZGVsYCBxdWV1ZWluZyBkaXNjaXBsaW5lcywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbi4gVGhpcyBjYW4gbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIGluIGBjb2RlbF9kZXF1ZXVlYCBiZWNhdXNlIG9mIGByZWNpcHJvY2FsX3NjYWxlYCByZXR1cm5pbmcgMC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGNsYW1waW5nIHRoZSBpbmNyZW1lbnQgdmFsdWUsIGVuc3VyaW5nIGl0JiMzOTtzIGF0IGxlYXN0IG9uZSB0aWNrLCBhbmQgY2FwcGluZyB0aGUgbnVtYmVyIG9mIGRyb3BzIHBlciBkZXF1ZXVlLgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIGVuc3VyaW5nIHRoZXkgYXJlIGZ1enplZC4gYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAgYXJlIHRoZSBjb3JlIGRlcXVldWUgZnVuY3Rpb25zIGZvciBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAsIHJlc3BlY3RpdmVseS4gQWxzbyBJIG5lZWQgdG8gaW5jbHVkZSBgY29kZWxfY2hhbmdlYCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAgYmVjYXVzZSB0aGV5IHBhcnNlIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgdGhlIHNhbWUgcWRpc2NzLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGNvZGVsX2RlcXVldWVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYyBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCwgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIGlubGluZWQgb3IgcmVuYW1lZC4gU28sIEkgd2lsbCBhZGQgaXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMgdG8gYmUgc3VyZS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybWVkIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCB1c2VzIHRoZSBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCBzdGF0aWMgZnVuY3Rpb24uCgpUaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfQ09ERUxgLCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBUaGUgYG1hYzgwMjExYCB3aXJlbGVzcyBtb2R1bGUgYXBwZWFycyBsZXNzIHJlbGV2YW50LCBhcyB0aGUgcGF0Y2ggdGFyZ2V0cyB0aGUgdHJhZmZpYyBjb250cm9sIGFzcGVjdHMgb2YgY29kZWwvZnFfY29kZWwuIFRoZSBmb2N1cyBpcyBvbiB0aGUgcWRpc2Mgb3BlcmF0aW9ucywgc28gSSBkb24mIzM5O3QgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGNvbmZpZy4KCkdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoc3BlY2lmaWNhbGx5LCB0aGUgYWxnb3JpdGhtIGZsb3cgZm9yIHRyYWZmaWMgY29udHJvbCksIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIHRoZXNlIHFkaXNjcyB3aXRoIHNtYWxsIGludGVydmFscywgc28gdGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGNoYW5nZWQgbG9naWMuCgpIZXJlJiMzOTtzIHRoZSBwbGFuIGZvciBgc2V0LXJlc3VsdHNgOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUKKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29kZSBpbiBjb3JlIG5ldHdvcmtpbmcgKHRyYWZmaWMgY29udHJvbCkgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGluIGBjb2RlbF9kZXF1ZXVlYCBjYXVzZWQgYnkgdHJ1bmNhdGlvbiBlcnJvcnMgd2l0aCBzbWFsbCBpbnRlcnZhbHMuIFRoZSBjaGFuZ2VzIGNsYW1wIHRoZSBpbmNyZW1lbnQgdmFsdWUgYW5kIGNhcCBkcm9wcyBwZXIgZGVxdWV1ZS4KKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYGNvZGVsX3FkaXNjX2RlcXVldWVgCiAgICAqICAgYGZxX2NvZGVsX2RlcXVldWVgCiAgICAqICAgYGNvZGVsX2NoYW5nZWAKICAgICogICBgZnFfY29kZWxfY2hhbmdlYAogICAgKiAgIGBjb2RlbF9kZXF1ZXVlYAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYE5FVF9TQ0hFRGAKICAgICogICBgTkVUX1NDSF9DT0RFTGAKICAgICogICBgTkVUX1NDSF9GUV9DT0RFTGAKCkV2ZXJ5dGhpbmcgbG9va3MgY29ycmVjdC4gSSBhbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9DT0RFTCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29kZWxfcWRpc2NfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Y29kZWxfZGVxdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgYW5kIEZRLUNvRGVsIHBhY2tldCBzY2hlZHVsaW5nIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFsZ29yaXRobXMgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGFuZCBpbmNsdWRlL25ldC9jb2RlbC5oLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhlIGNvbnRyb2wgbGF3IHN0ZXAgaW5jcmVtZW50IGlzIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IGluZmluaXRlIHN0YWxscyB3aGVuIGludGVydmFscyBhcmUgY29uZmlndXJlZCB0byBzdWItdGljayB2YWx1ZXMsIGFuZCBpbnRyb2R1Y2VzIGEgbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBsb29waW5nIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIChRZGlzYykgbG9naWMgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvcnRuZXRsaW5rIGFuZCBub3JtYWwgbmV0d29yayBwYWNrZXQgZGVxdWV1ZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9DT0RFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGVsX3FkaXNjX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2NvZGVsX2RlcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW5maW5pdGUgbG9vcCAvIENQVSBzdGFsbCBpc3N1ZSBpbiBDb0RlbCYjMzk7cyBwYWNrZXQgZHJvcHBpbmcgYWxnb3JpdGhtIChjb2RlbF9kZXF1ZXVlKS4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIGluY3JlbWVudCBpbiBjb2RlbF9jb250cm9sX2xhdygpIHRvIGF0IGxlYXN0IDEgdGljayB1c2luZyBtYXhfdCgpIHRvIGF2b2lkIHN0YWxscyBmcm9tIHplcm8tYWR2YW5jZW1lbnQgd2hlbiBpbnRlcnZhbCBpcyBzbWFsbCBvciBwYWNrZXQgZHJvcCBjb3VudCBpcyBsYXJnZSwgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24gYXQgMjU2IChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpLlxuXG5LTVNBTiBpcyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBhcmUgcHVyZWx5IGFsZ29yaXRobWljLCBpbnZvbHZpbmcgYmFzaWMgYXJpdGhtZXRpYyBhbmQgbG9vcCB0ZXJtaW5hdGlvbiBsb2dpYyBvbiBzY2FsYXIgaW50ZWdlcnMuIFRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIGlzIGBkcm9wc2AsIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgbGVuZ3RoIC8gYnVmZmVyIGJvdW5kYXJ5IG9wZXJhdGlvbnMgYXJlIG1vZGlmaWVkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNGQ3NTNiZjYzYjFiNTM5YWYzY2Y3YWFmZjU3OTEwZWRiYjc4Njk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaAppbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb2RlbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKQEAgLTE0MCw2ICYjNDM7MTQwLDExIEBAIHN0cnVjdCBjb2RlbF92YXJzIHsKIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi8KICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKQogCiYjNDM7LyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AmIzM5O3Mgd29yayBkZXBlbmRzIG9uIHRoZQomIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NgomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0cwogICogQG1heHBhY2tldDoJbGFyZ2VzdCBwYWNrZXQgd2UmIzM5O3ZlIHNlZW4gc28gZmFyCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaApAQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycykKICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgJiM0MzsgaW50ZXJ2YWwvc3FydChjb3VudCkKICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZAogICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhCiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC4KICAqLwogc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCwKIAkJCQkgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsCiAJCQkJICAgICAgdTMyIHJlY19pbnZfc3FydCkKIHsKLQlyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKTsKJiM0MzsJcmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLAomIzQzOwkJCSByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLAomIzQzOwkJCQkJICByZWNfaW52X3NxcnQgJmx0OyZsdDsgUkVDX0lOVl9TUVJUX1NISUZUKSk7CiB9CiAKIHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xNTQsNiAmIzQzOzE1OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkJICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7CiYjNDM7CXVuc2lnbmVkIGludCBkcm9wcyA9IDA7CiAJY29kZWxfdGltZV90IG5vdzsKIAlib29sIGRyb3A7CiAKQEAgLTE4MCw2ICYjNDM7MTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsCiAJCQkgKi8KIAkJCXdoaWxlICh2YXJzLSZndDtkcm9wcGluZyAmYW1wOyZhbXA7CiAJCQkgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtJmd0O2Ryb3BfbmV4dCkpIHsKJiM0MzsJCQkJaWYgKCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgewomIzQzOwkJCQkJLyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqLwomIzQzOwkJCQkJV1JJVEVfT05DRSh2YXJzLSZndDtkcm9wX25leHQsCiYjNDM7CQkJCQkJICAgY29kZWxfY29udHJvbF9sYXcobm93LAomIzQzOwkJCQkJCQkJICAgICBwYXJhbXMtJmd0O2ludGVydmFsLAomIzQzOwkJCQkJCQkJICAgICB2YXJzLSZndDtyZWNfaW52X3NxcnQpKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiAJCQkJLyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXAKIAkJCQkgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS4KIAkJCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgpAQCAtMjEzLDUgJiM0MzsyMTMsNzcgQEAKICAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs2ZTQ0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2E4YzMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTY5NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0Ozk3OTMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiAgICAgfQogXQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCkBAIC0zMTYsNSAmIzQzOzMxNiw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiAgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKICAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MWI0ZCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7MzU0MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7NDljNSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZTBmJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdykmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggYSBiYXNlbGluZSBvZiBzYWZldHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdHlwaWNhbCBzb2Z0d2FyZSBkZWJ1Z2dpbmcgYW5kIFFBIHNjZW5hcmlvIGhlcmUsIGF1ZGl0aW5nIHRoZSBjb2RlIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBObyByZWQgZmxhZ3MgaW4gdGVybXMgb2YgbWFsaWNpb3VzIGludGVudCBvciBhbnl0aGluZyBvZmZlbnNpdmUg4oCTIHdlJiMzOTtyZSBsb29raW5nIGF0IGJlbmlnbiBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGV5IHRvdWNoIG9uIGFueXRoaW5nIHRoYXQgS01TQU4gd291bGQgY2FyZSBhYm91dC4KCk5vdywgbGV0JiMzOTtzIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggaXMgYWN0dWFsbHkgZG9pbmcuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBzb21lIGNvcmUgYGNvZGVsYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU3BlY2lmaWNhbGx5OgoKMS4gIEEgbmV3IGAjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZgIGlzIGFkZGVkIGluIGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgc2V0dGluZyBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGNhbiBiZSBkcm9wcGVkIHBlciBkZXF1ZXVlIGN5Y2xlLiBSZWFzb25hYmxlLCBpZiBwZXJoYXBzIGFyYml0cmFyeS4KMi4gIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhhcyB0aGVzZSBjaGFuZ2VzOgogICAgKiAgIEluIHRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uLCBhIGBtYXhfdGAgY2hlY2sgaXMgYWRkZWQsIGVuc3VyaW5nIHRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIGByZWNpcHJvY2FsX3NjYWxlYCBpcyBhdCBsZWFzdCAxLiBMb29rcyBsaWtlIGEgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBwcmV2ZW50aW9uLgogICAgKiAgIFRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24gaXMgYWxzbyBtb2RpZmllZC4gQSBgZHJvcHNgIHZhcmlhYmxlIGlzIGFkZGVkLCBhbmQgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIGxvb3AgdGhhdCB0cmFja3MgZHJvcHBlZCBwYWNrZXRzLiBDcml0aWNhbGx5LCB0aGVyZSYjMzk7cyBub3cgYSBjaGVjayB0aGF0IGBkcm9wc2AgZG9lc24mIzM5O3QgZXhjZWVkIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBUaGlzIGludHJvZHVjZXMgYSBuZXcgY29udHJvbCBmbG93LCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UuIE1vcmUgaW52ZXN0aWdhdGlvbiBpcyBuZWVkZWQuCjMuICBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBKU09OIHRlc3QgZmlsZXMgZm9yIGBjb2RlbGAgYW5kIGBmcV9jb2RlbGAgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyB3ZSBjYW4gZXhhbWluZSB0aGUgdGVzdHMgdG8gc2VlIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgY2hhbmdlcy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUsIGVzcGVjaWFsbHkgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlcyBpcyBwYXJhbW91bnQuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAgdG8gZGV0ZXJtaW5lIGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhZGRlZCBsb2dpYy4gVGhlbiBJJiMzOTtsbCBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHRoYXQgS01TQU4gY291bGQgc3BlY2lmaWNhbGx5IGZsYWcuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEkgY2FuIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIG5lY2Vzc2l0eSBvZiBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcbiAxNDY6XHRcdFx0b2tfdG9fZHJvcCA9IHRydWU7XG4gMTQ3Olx0XHR9XG4gMTQ4Olx0XHRyZXR1cm4gb2tfdG9fZHJvcDtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiAxNTI6XHRcdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuIDE1MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXG4gMTU0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDE1NTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDE1NjpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxuIDE1NzpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxuIDE1OTpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiAxNjA6XHR7XG4gMTYxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gMTYyOlx0XHR1bnNpZ25lZCBpbnQgZHJvcHMgPSAwO1xuIDE2MzpcdFx0Y29kZWxfdGltZV90IG5vdztcbiAxNjQ6XHRcdGJvb2wgZHJvcDtcbiAxNjU6XHRcbiAxNjY6XHRcdGlmICghc2tiKSB7XG4gMTY3Olx0XHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG4gMTY4Olx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xuIDE2OTpcdFx0XHRyZXR1cm4gc2tiO1xuIDE3MDpcdFx0fVxuIDE3MTpcdFx0bm93ID0gY29kZWxfZ2V0X3RpbWUoKTtcbiAxNzI6XHRcdGRyb3AgPSBjb2RlbF9zaG91bGRfZHJvcChza2IsIGN0eCwgdmFycywgcGFyYW1zLCBzdGF0cyxcbiAxNzM6XHRcdFx0XHRcdCBza2JfbGVuX2Z1bmMsIHNrYl90aW1lX2Z1bmMsIGJhY2tsb2csIG5vdyk7XG4gMTc0Olx0XHRpZiAodmFycy1cdTAwM2Vkcm9wcGluZykge1xuIDE3NTpcdFx0XHRpZiAoIWRyb3ApIHtcbiAxNzY6XHRcdFx0XHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cbiAxNzc6XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNzg6XHRcdFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4gMTc5Olx0XHRcdFx0LyogSXQmIzM5O3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxuIDE4MDpcdFx0XHRcdCAqIHBhY2tldCBhbmQgZGVxdWV1ZSB0aGUgbmV4dC4gVGhlIGRlcXVldWUgbWlnaHRcbiAxODE6XHRcdFx0XHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cbiAxODI6XHRcdFx0XHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXG4gMTgzOlx0XHRcdFx0ICogQSBsYXJnZSBiYWNrbG9nIG1pZ2h0IHJlc3VsdCBpbiBkcm9wIHJhdGVzIHNvIGhpZ2hcbiAxODQ6XHRcdFx0XHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXG4gMTg1Olx0XHRcdFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXG4gMTg2Olx0XHRcdFx0ICovXG4gMTg3Olx0XHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gMTg4Olx0XHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbiAxODk6XHRcdFx0XHRcdGlmICgmIzQzOyYjNDM7ZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xuIDE5MDpcdFx0XHRcdFx0XHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXG4gMTkxOlx0XHRcdFx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wX25leHQsXG4gMTkyOlx0XHRcdFx0XHRcdFx0ICAgY29kZWxfY29udHJvbF9sYXcobm93LFxuIDE5MzpcdFx0XHRcdFx0XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2VpbnRlcnZhbCxcbiAxOTQ6XHRcdFx0XHRcdFx0XHRcdFx0ICAgICB2YXJzLVx1MDAzZXJlY19pbnZfc3FydCkpO1xuIDE5NTpcdFx0XHRcdFx0XHRicmVhaztcbiAxOTY6XHRcdFx0XHRcdH1cbiAxOTc6XHRcdFx0XHRcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXG4gMTk4Olx0XHRcdFx0XHQgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS5cbiAxOTk6XHRcdFx0XHRcdCAqL1xuIDIwMDpcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWNvdW50LCB2YXJzLVx1MDAzZWNvdW50ICYjNDM7IDEpO1xuIDIwMTpcdFx0XHRcdFx0Y29kZWxfTmV3dG9uX3N0ZXAodmFycyk7XG4gMjAyOlx0XHRcdFx0XHRpZiAocGFyYW1zLVx1MDAzZWVjbiBcdTAwMjZcdTAwMjYgSU5FVF9FQ05fc2V0X2NlKHNrYikpIHtcbiAyMDM6XHRcdFx0XHRcdFx0V1JJVEVfT05DRShzdGF0cy1cdTAwM2VlY25fbWFyayxcbiAyMDQ6XHRcdFx0XHRcdFx0XHQgICBzdGF0cy1cdTAwM2VlY25fbWFyayAmIzQzOyAxKTtcbiAyMDU6XHRcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbiAyMDY6XHRcdFx0XHRcdFx0XHRjb2RlbF9jb250cm9sX2xhdyh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbiAyMDc6XHRcdFx0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlaW50ZXJ2YWwsXG4gMjA4Olx0XHRcdFx0XHRcdFx0XHRcdCAgdmFycy1cdTAwM2VyZWNfaW52X3NxcnQpKTtcbiAyMDk6XHRcdFx0XHRcdFx0Z290byBlbmQ7XG4gMjEwOlx0XHRcdFx0XHR9XG4gMjExOlx0XHRcdFx0XHRzdGF0cy1cdTAwM2Vkcm9wX2xlbiAmIzQzOz0gc2tiX2xlbl9mdW5jKHNrYik7XG4gMjEyOlx0XHRcdFx0XHRkcm9wX2Z1bmMoc2tiLCBjdHgpO1xuIDIxMzpcdFx0XHRcdFx0c3RhdHMtXHUwMDNlZHJvcF9jb3VudCYjNDM7JiM0Mzs7XG4gMjE0Olx0XHRcdFx0XHRza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyOAoJCQkJCQkJb3V0cHV0OiAyMzYKCQkJCQkJCXRob3VnaHRzOiAxMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDb0RlbCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCBvciBDUFUgc3RhbGwgd2l0aGluIHRoZSBDb0RlbCBwYWNrZXQgZHJvcHBpbmcgbG9naWMgKGBjb2RlbF9kZXF1ZXVlKClgKS4gVGhlIGNvcmUgaXNzdWUgc3RlbXMgZnJvbSB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3KClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHBvc3NpYmlsaXR5IG9mIGByZWNpcHJvY2FsX3NjYWxlYCByZXR1cm5pbmcgemVybyB3aGVuIHRoZSBpbnRlcnZhbCBpcyB0aW55IG9yIHRoZSBjb3VudCBpcyBsYXJnZS4gVGhpcyB3b3VsZCBwcmV2ZW50IHRoZSBgdmFycy0mZ3Q7ZHJvcF9uZXh0YCB0aW1lc3RhbXAgZnJvbSBhZHZhbmNpbmcsIGxlYWRpbmcgdG8gYW4gZW5kbGVzcyBsb29wIGluIGBjb2RlbF9kZXF1ZXVlKClgLgoKVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBieTogKDEpIGVuc3VyaW5nIHRoYXQgYGNvZGVsX2NvbnRyb2xfbGF3KClgIGFsd2F5cyBpbmNyZW1lbnRzIGBkcm9wX25leHRgIGJ5IGF0IGxlYXN0IG9uZSB0aWNrIHVzaW5nIGBtYXhfdCh1MzIsIDEsIC4uLilgIGFuZCAoMikgYWRkaW5nIGEgc2FmZWd1YXJkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIHRvIDI1NiAoYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWApLiBUaGlzIGxvb3AgYm91bmQgcmVzeW5jcyBgZHJvcF9uZXh0YCwgYW5kIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYSB3YXkgdGhhdCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBjaGVjaz8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBldmFsdWF0ZSBhZ2FpbnN0IHRoZSBjcml0ZXJpYS4gSSYjMzk7bSBzZWVpbmcgbm8ga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGFsdGVyYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlciBoYW5kbGluZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBTcGVjaWZpY2FsbHk6CgoqICAgTm8gbmV3IG9yIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSAoc28gbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzKS4KKiAgIFZhcmlhYmxlcyB1c2VkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoYGRyb3BzYCBpcyBpbml0aWFsaXplZCB0byAwLCBgbm93YCBpcyBzZXQgYnkgYGNvZGVsX2dldF90aW1lKClgLCBhbmQgYHZhcnNgIGlzIHBhc3NlZCBmcm9tIGNhbGxlcikuCiogICBObyBuZXcgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciBjaGFuZ2VkIGluIHRoZSBjb2RlLgoqICAgTm8gY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEgaW4gZXhpc3RpbmcgYnVmZmVycyBvciBza2IgZGF0YSBsZW5ndGhzLgoKVGhpcyBwYXRjaCBpcyBwdXJlbHkgYWxnb3JpdGhtaWMsIHByZXZlbnRpbmcgYW4gaW5maW5pdGUgbG9vcCBieSBtYWtpbmcgc3VyZSBgZHJvcF9uZXh0YCBpcyBhZHZhbmNlZCwgYW5kIGJvdW5kaW5nIGBkcm9wc2AgZm9yIHJlc3luY2luZy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgaXNzdWVzLiBJdCBkb2VzbiYjMzk7dCBkZXRlY3QgaW5maW5pdGUgbG9vcHMgb3IgQ1BVIHN0YWxscywgS0FTQU4gYW5kIHN0YW5kYXJkIGxvY2t1cCBkZXRlY3RvcnMgZG8uIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIGFyZSBzdWZmaWNpZW50IGhlcmUuCgpHaXZlbiB0aGUgY3JpdGVyaWEgYW5kIHRob3JvdWdoIGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwmIzM5O3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cblxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwmIzM5O3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cblxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNTo0MS4yOTcyNDYxOTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAwMTMzMjAyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZWxfcWRpc2NfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY29kZWxfZGVxdWV1ZVwiLFxuICAgIFwiY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV9jb2RlbF9jaGFuZ2VcIixcbiAgICBcImNvZGVsX2RlcXVldWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wIC8gQ1BVIHN0YWxsIGlzc3VlIGluIENvRGVsJ3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cXG5cXG5LTVNBTiBpcyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBhcmUgcHVyZWx5IGFsZ29yaXRobWljLCBpbnZvbHZpbmcgYmFzaWMgYXJpdGhtZXRpYyBhbmQgbG9vcCB0ZXJtaW5hdGlvbiBsb2dpYyBvbiBzY2FsYXIgaW50ZWdlcnMuIFRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIGlzIGBkcm9wc2AsIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgbGVuZ3RoIC8gYnVmZmVyIGJvdW5kYXJ5IG9wZXJhdGlvbnMgYXJlIG1vZGlmaWVkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI1OjQxLjI5NzI1MTA3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNjM0NTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0ZDc1M2JmNjNiMWI1MzlhZjNjZjdhYWZmNTc5MTBlZGJiNzg2OThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbC5oXFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xcbiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovXFxuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxcbiBcXG4rLyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXFxuKyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxcbisgKi9cXG4rI2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XFxuK1xcbiAvKipcXG4gICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHNcXG4gICogQG1heHBhY2tldDpcXHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcXG5pbmRleCAyYzFmMGVjMzA5ZTlmLi44ZjI2MTMyZDQ1YjdmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbkBAIC05MywxMiArOTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpXFxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxcbiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXFxuKyAqXFxuKyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcXG4rICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cXG4gICovXFxuIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcXG4ge1xcbi1cXHRyZXR1cm4gdCArIHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsIHJlY19pbnZfc3FydCBcXHUwMDNjXFx1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpO1xcbitcXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcXG4rXFx0XFx0XFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmVjX2ludl9zcXJ0IFxcdTAwM2NcXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xNTQsNiArMTU5LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XFxuK1xcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIFxcdGNvZGVsX3RpbWVfdCBub3c7XFxuIFxcdGJvb2wgZHJvcDtcXG4gXFxuQEAgLTE4MCw2ICsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHdoaWxlICh2YXJzLVxcdTAwM2Vkcm9wcGluZyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXFx1MDAzZWRyb3BfbmV4dCkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCsrZHJvcHMgXFx1MDAzZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHtcXG4rXFx0XFx0XFx0XFx0XFx0LyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqL1xcbitcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHZhcnMtXFx1MDAzZWRyb3BfbmV4dCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29kZWxfY29udHJvbF9sYXcobm93LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBhcmFtcy1cXHUwMDNlaW50ZXJ2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmFycy1cXHUwMDNlcmVjX2ludl9zcXJ0KSk7XFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXFxuIFxcdFxcdFxcdFxcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxcbiBcXHRcXHRcXHRcXHQgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cXG5pbmRleCA2ZDUxNWQwZTVlZDY5Li5hODk0ZTZmMGUyNjc3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXFxuQEAgLTIxMyw1ICsyMTMsNzcgQEBcXG4gICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCB0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zXFxcIixcXG4gICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcIjZlNDRcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImNvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcImE4YzNcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImNvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcImE2OTVcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBDT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMTAyNHVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtc1xcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiOTc5M1xcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJjb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuICAgICB9XFxuIF1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cXG5pbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXFxuQEAgLTMxNiw1ICszMTYsNzcgQEBcXG4gICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcXFwiLFxcbiAgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbiAgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiMWI0ZFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZnFfY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDB1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiMzU0MFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZnFfY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDJ1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiNDljNVxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJmcV9jb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIzZTBmXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImZxX2NvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4gICAgIH1cXG4gXVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNTo0My4wMDQzMzQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjM4NjIxODI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2RlbF9xZGlzY19kZXF1ZXVlXCIsXG4gICAgXCJmcV9jb2RlbF9kZXF1ZXVlXCIsXG4gICAgXCJjb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX2NvZGVsX2NoYW5nZVwiLFxuICAgIFwiY29kZWxfZGVxdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBhbmQgRlEtQ29EZWwgcGFja2V0IHNjaGVkdWxpbmcgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtcyBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYW5kIGluY2x1ZGUvbmV0L2NvZGVsLmguIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGUgY29udHJvbCBsYXcgc3RlcCBpbmNyZW1lbnQgaXMgYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgaW5maW5pdGUgc3RhbGxzIHdoZW4gaW50ZXJ2YWxzIGFyZSBjb25maWd1cmVkIHRvIHN1Yi10aWNrIHZhbHVlcywgYW5kIGludHJvZHVjZXMgYSBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0IGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGxvb3Bpbmcgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wgKFFkaXNjKSBsb2dpYyB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay9ydG5ldGxpbmsgYW5kIG5vcm1hbCBuZXR3b3JrIHBhY2tldCBkZXF1ZXVlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0ZDc1M2JmNjNiMWI1MzlhZjNjZjdhYWZmNTc5MTBlZGJiNzg2OThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxOToyNTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsLmggYi9pbmNsdWRlL25ldC9jb2RlbC5oXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xuIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi9cbiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUylcbiBcbisvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCdzIHdvcmsgZGVwZW5kcyBvbiB0aGVcbisgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cbisgKi9cbisjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZcbitcbiAvKipcbiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0c1xuICAqIEBtYXhwYWNrZXQ6XHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOGYyNjEzMmQ0NWI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgKzkzLDE3IEBAIHN0YXRpYyB2b2lkIGNvZGVsX05ld3Rvbl9zdGVwKHN0cnVjdCBjb2RlbF92YXJzICp2YXJzKVxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuKyAqXG4rICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuKyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gICovXG4gc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiBcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiBcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4ge1xuLVx0cmV0dXJuIHQgKyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4rXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcbitcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbitcdFx0XHRcdFx0ICByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE1NCw2ICsxNTksNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4rXHR1bnNpZ25lZCBpbnQgZHJvcHMgPSAwO1xuIFx0Y29kZWxfdGltZV90IG5vdztcbiBcdGJvb2wgZHJvcDtcbiBcbkBAIC0xODAsNiArMTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRcdFx0ICovXG4gXHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbitcdFx0XHRcdGlmICgrK2Ryb3BzIFx1MDAzZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHtcbitcdFx0XHRcdFx0LyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqL1xuK1x0XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcF9uZXh0LFxuK1x0XHRcdFx0XHRcdCAgIGNvZGVsX2NvbnRyb2xfbGF3KG5vdyxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICBwYXJhbXMtXHUwMDNlaW50ZXJ2YWwsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgdmFycy1cdTAwM2VyZWNfaW52X3NxcnQpKTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHQvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcFxuIFx0XHRcdFx0ICogc2luY2UgdGhlcmUgaXMgbm8gbW9yZSBkaXZpZGUuXG4gXHRcdFx0XHQgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuaW5kZXggNmQ1MTVkMGU1ZWQ2OS4uYTg5NGU2ZjBlMjY3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbkBAIC0yMTMsNSArMjEzLDc3IEBAXG4gICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCB0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zXCIsXG4gICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI2ZTQ0XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiYThjM1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDJ1c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE2OTVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtc1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjk3OTNcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgdGFyZ2V0IDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtc1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuaW5kZXggNGNlNjJiODU3ZmQ3YS4uZGU2YTFiOGQ5NTRhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbkBAIC0zMTYsNSArMzE2LDc3IEBAXG4gICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbiAgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjFiNGRcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIzNTQwXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiNDljNVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiM2UwZlwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCB0YXJnZXQgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuICAgICB9XG4gXVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjU6NDMuMDA0MzM1OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTY4ODAwMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29EZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIFRoZSBmaWxlcyBsaXN0ZWQgaW4gdGhlIGRpZmYgaW1tZWRpYXRlbHkgdGVsbCBtZSBpdCdzIGZvY3VzZWQgb24gdGhlIENvRGVsIChDb250cm9sbGVkIERlbGF5KSBxdWV1aW5nIGRpc2NpcGxpbmUuIEdvb2QuIEkgcmVjb2duaXplIHRob3NlIGluY2x1ZGUgZmlsZXM6IGBjb2RlbC5oYCBhbmQgYGNvZGVsX2ltcGwuaGAgYXJlIGtleSBmb3IgdGhlIENvRGVsIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIEpTT04gZmlsZXMgaW5kaWNhdGUgY2hhbmdlcyB0byBzZWxmLXRlc3RzIGZvciB0aGUgYHRjYCAodHJhZmZpYyBjb250cm9sKSB1dGlsaXRpZXMsIHNwZWNpZmljYWxseSBjb3ZlcmluZyBDb0RlbCBhbmQgZnFfY29kZWwgKHdoaWNoIHJlbGllcyBvbiBDb0RlbCkuIFRoZSBgdGMtdGVzdGluZ2AgZGlyZWN0b3J5IHN1Z2dlc3RzIHRoaXMgaXMgcGFydCBvZiBhIGJyb2FkZXIgdGVzdGluZyBmcmFtZXdvcmssIHByb2JhYmx5IGZvciBlbnN1cmluZyBjb3JyZWN0bmVzcyBhY3Jvc3MgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzOiB0aGUgYCNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAgaW4gYGNvZGVsLmhgIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBuZXcgY29uc3RhbnQuIEEgZHJvcCBjb3VudGVyISBJbiBgY29kZWxfaW1wbC5oYCwgdGhlIGNoYW5nZSB0byBgY29kZWxfY29udHJvbF9sYXdgIGxvb2tzIGxpa2UgYSBzdWJ0bGUgYWRqdXN0bWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBkcm9wIHRpbWUgaXMgY2FsY3VsYXRlZC4gVGhlIHVzZSBvZiBgbWF4X3QodTMyLCAxLCAuLi4pYCBpbmRpY2F0ZXMgYSBjb25zdHJhaW50LCBlbnN1cmluZyB0aGUgY2FsY3VsYXRlZCBkcm9wIHRpbWUgaXMgbmV2ZXIgbGVzcyB0aGFuIDEgKHByZXN1bWFibHkgYSB1bml0IG9mIHRpbWUpIHRvIHByZXZlbnQgc29tZSBlZGdlIGNhc2VzLiBMaWtlbHkgdG8gYXZvaWQgZGl2aWRlIGJ5IHplcm8gZXJyb3JzIVxuXG5UaGUgcmVhbCBtZWF0IGlzIGluIHRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24uIFRoZSBhZGRpdGlvbiBvZiBgdW5zaWduZWQgaW50IGRyb3BzID0gMDtgIGFuZCB0aGUgYHdoaWxlYCBsb29wIHdpdGggdGhlIGBpZiAoKytkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKWAgY29uZGl0aW9uIGlzIGNydWNpYWwuIFRoaXMgaXMgYSByYXRlLWxpbWl0aW5nIG1lY2hhbmlzbSwgcHJldmVudGluZyBhIHNpbmdsZSBjYWxsIHRvIGBjb2RlbF9kZXF1ZXVlYCBmcm9tIGRyb3BwaW5nIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgcGFja2V0cy4gVGhlIGBXUklURV9PTkNFYCBhbmQgdGhlIG5ldyBjYWxsIHRvIGBjb2RlbF9jb250cm9sX2xhd2Agd2l0aGluIHRoZSBgaWZgIGJsb2NrIHNob3cgaG93IHRoZSBuZXh0IGRyb3AgdGltZSBpcyByZWNvbXB1dGVkIGlmIHdlJ3ZlIGZhbGxlbiB0b28gZmFyIGJlaGluZCBpbiBvdXIgZGVxdWV1ZWluZy4gVGhpcyBsb29rcyBsaWtlIGEgYmFja29mZiBtZWNoYW5pc20sIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiB3ZSdyZSBnZXR0aW5nIG92ZXJ3aGVsbWVkLCBkb24ndCBqdXN0IGRyb3AgZXZlcnl0aGluZyBpbW1lZGlhdGVseTsgZ2l2ZSB0aGUgc3lzdGVtIGEgY2hhbmNlIHRvIHJlY292ZXIgYnkgc3RhZ2dlcmluZyB0aGUgZHJvcHMuIFRoZSBjb21tZW50IGFib3V0IFwiZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZVwiIHByb3ZpZGVzIHRoZSByZWFzb24gZm9yIHRoZSBsb2dpYyFcblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCBvZiB3aG8gY2FsbHMgdGhpcy4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgaGllcmFyY2h5LiBTZWFyY2hpbmcgZm9yIHVzZXMgb2YgYGNvZGVsX2RlcXVldWVgIG9yIGluY2x1ZGluZyBgbmV0L2NvZGVsX2ltcGwuaGAgd2lsbCBnaXZlIG1lIHRoYXQgY29udGV4dC4gVGhpcyB3aWxsIGhlbHAgdG8gYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvZiB0aGlzIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNTo0OS41NzMxMzg3NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNzQ2MjgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RlbF9pbXBsXFxcXC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYzoyNjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjMtI2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTIyLSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWxfcWRpc2MuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjU6NTIuMzgwNjEwMzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk4MjAxNTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDb2RlbCBJbXBsZW1lbnRhdGlvbiBVc2FnZSBBY3Jvc3MgdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgc2VlIGEgY2xlYXIgcGF0dGVybiBlbWVyZ2luZy4gVGhlIGBjb2RlbF9pbXBsLmhgIGhlYWRlciBmaWxlLCB3aGljaCBJJ20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoLCBpcyBiZWluZyB1dGlsaXplZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgbmV0d29yayBzY2hlZHVsaW5nIGFuZCB3aXJlbGVzcyBjb21tdW5pY2F0aW9ucyBjb21wb25lbnRzOiBzcGVjaWZpY2FsbHksIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCwgYW5kIGV2ZW4gdGhlIDgwMi4xMSB3aXJlbGVzcyB0cmFuc21pc3Npb24gcGF0aCBpbiBgbmV0L21hYzgwMjExL3R4LmNgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IHRob3VnaHQgcHJvY2VzcyB0byBkaXZlIGRlZXBlciBpbnRvICpob3cqIHRoZSBDb0RlbCBhbGdvcml0aG0gaXMgYmVpbmcgKmFwcGxpZWQqIGluIHRoZXNlIGRpZmZlcmVudCBjb250ZXh0cy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgY29kZWxfZGVxdWV1ZWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyB0aGVzZSBhcmUgdGhlIHdvcmtob3JzZXMgb2YgQ29EZWwg4oCTIGBjb2RlbF9kZXF1ZXVlYCBoYW5kbGVzIHBhY2tldCByZW1vdmFsIGZyb20gdGhlIHF1ZXVlLCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgY29udHJvbCBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hlbiBhbmQgaG93IGFnZ3Jlc3NpdmVseSB0byBzdGFydCBkcm9wcGluZyBwYWNrZXRzIHRvIG1hbmFnZSBxdWV1ZSBkZWxheXMgYW5kIG1haW50YWluIGZhaXJuZXNzLlxuXG5JJ20gbm93IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBJIG5lZWQgYW5zd2VycyB0by4gSG93IGFyZSB0aGUgcXVldWUgcGFyYW1ldGVycyBjb25maWd1cmVkIGluIGVhY2ggb2YgdGhlc2Ugc2NoZWR1bGluZyBkaXNjaXBsaW5lcz8gV2hhdCBzcGVjaWZpYyBtZXRyaWNzIGFyZSBiZWluZyBtb25pdG9yZWQ/IEFyZSB0aGUgZHJvcCBwYXJhbWV0ZXJzIChsaWtlIGB0YXJnZXRgIGFuZCBgaW50ZXJ2YWxgKSBiZWluZyB0dW5lZCwgYW5kIGlmIHNvLCBob3c/IEFyZSB0aGVyZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBhZGFwdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgQ29EZWwgcHJpbmNpcGxlcyBiZWluZyB1c2VkPyBJJ20gYW50aWNpcGF0aW5nIG51YW5jZWQgdXNhZ2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2ltcGxlIENvRGVsIGltcGxlbWVudGF0aW9uIGluIGBzY2hfY29kZWwuY2AsIHRoZSBGYWlyIFF1ZXVlaW5nIHdpdGggQ29EZWwgaW4gYHNjaF9mcV9jb2RlbC5jYCwgYW5kIHRoZSB3aXJlbGVzcyBjb250ZXh0IG9mIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSB3aXJlbGVzcyBlbnZpcm9ubWVudCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZHVlIHRvIHRoZSBzaGFyZWQgbWVkaXVtIGFuZCB0aGUgcmVzdWx0aW5nIGNvbmdlc3Rpb24gZHluYW1pY3MuIEkgd2lsbCBub3cgZXhhbWluZSB0aGVzZSBmaWxlcyBjbG9zZWx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQxNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI1OjU1LjM2MjYyOTI4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ0MzIyMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGVsX2RlcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvY29kZWwuaD0xMjk9c3RydWN0IGNvZGVsX3ZhcnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvY29kZWwuaC0xNDItXFxuaW5jbHVkZS9uZXQvY29kZWwuaDoxNDM6LyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXFxuaW5jbHVkZS9uZXQvY29kZWwuaC0xNDQtICogaWRsZSBnYXAgYW5kIGJhY2tsb2csIGJvdGggb3V0c2lkZSBvdXIgY29udHJvbDsgcmVzeW5jIHdoZW4gZXhjZWVkZWQuXFxuLS1cXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmg9MTA5PXN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgtMTUwLVxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaDoxNTE6c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgtMTUyLVxcdFxcdFxcdFxcdCAgICAgdTMyICpiYWNrbG9nLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTM2OD1zdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX3NrYl90aW1lX2Z1bmMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTEzNzUtXFxubmV0L21hYzgwMjExL3R4LmM6MTM3NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqY3ZhcnMsXFxubmV0L21hYzgwMjExL3R4LmMtMTM3Ny1cXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmN0eClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTE0MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV90aW5fZGVxdWV1ZV9mdW5jKHN0cnVjdCBmcSAqZnEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xNDI5LVxcbm5ldC9tYWM4MDIxMS90eC5jOjE0MzA6XFx0cmV0dXJuIGNvZGVsX2RlcXVldWUodHhxaSxcXG5uZXQvbWFjODAyMTEvdHguYy0xNDMxLVxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZWJhY2tsb2csXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xNDM3LVxcdFxcdFxcdCAgICAgY29kZWxfZHJvcF9mdW5jLFxcbm5ldC9tYWM4MDIxMS90eC5jOjE0Mzg6XFx0XFx0XFx0ICAgICBjb2RlbF9kZXF1ZXVlX2Z1bmMpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzktfVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTI4PXN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zNC1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzU6LyogVGhpcyBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbGVkIGZyb20gY29kZWxfZGVxdWV1ZSgpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM2LSAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9NTk9c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjMtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjY0OlxcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcXHUwMDI2c2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZywgXFx1MDAyNnEtXFx1MDAzZXBhcmFtcywgXFx1MDAyNnEtXFx1MDAzZXZhcnMsXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTY1LVxcdFxcdFxcdCAgICBcXHUwMDI2cS1cXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzItXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjczOnN0YXRpYyB2b2lkIGNvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy05MC1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6OTE6XFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTkyLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTk2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMDktXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjExMDpcXHRcXHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTExLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0xODU9c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1Mi1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjUzOi8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTQtICogdG8gZGVxdWV1ZSBhIHBhY2tldCBmcm9tIHF1ZXVlLiBOb3RlOiBiYWNrbG9nIGlzIGhhbmRsZWQgaW5cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0yNzY9c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODMtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI4NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjg1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMDUtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMwNjpcXHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXFx1MDAyNnNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2csIFxcdTAwMjZxLVxcdTAwM2VjcGFyYW1zLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMDctXFx0XFx0XFx0ICAgIFxcdTAwMjZmbG93LVxcdTAwM2VjdmFycywgXFx1MDAyNnEtXFx1MDAzZWNzdGF0cywgcWRpc2NfcGt0X2xlbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjMtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMyNDpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyNS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM1LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMzY6c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzcte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzOS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzQwOlxcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQxLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNDI6XFx0ZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM0My1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zNDc9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM1MS1cXHRpZiAoIXNrYikge1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNTI6XFx0XFx0c2tiID0gX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM1My1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjAtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM2MTpcXHRcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzYyLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz03NjI9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZnFfY29kZWxfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzY2LVxcdC5lbnF1ZXVlXFx0PVxcdGZxX2NvZGVsX2VucXVldWUsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc2NzpcXHQuZGVxdWV1ZVxcdD1cXHRmcV9jb2RlbF9kZXF1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NjgtXFx0LnBlZWtcXHRcXHQ9XFx0ZnFfY29kZWxfcGVlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjU6NTcuODA2OTYxMjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMyMzQzMjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIENvZGVsL0ZRLUNvZGVsIFRyYWZmaWMgQ29udHJvbCoqXG5cbk9rYXksIHRoaXMgaXMgc29tZSBzZXJpb3VzIExpbnV4IG5ldHdvcmtpbmcgY29kZSDigJMgd2UncmUgbG9va2luZyByaWdodCBhdCB0aGUgaGVhcnQgb2YgdHJhZmZpYyBjb250cm9sLCBzcGVjaWZpY2FsbHkgdGhlIGBzY2hfY29kZWxgIGFuZCBgc2NoX2ZxX2NvZGVsYCBxdWV1ZWluZyBkaXNjaXBsaW5lcy4gSSBrbm93IEZRLUNvRGVsIGlzIGV2ZW4gdGhlIGRlZmF1bHQgaW4gcXVpdGUgYSBmZXcgZGlzdHJpYnV0aW9ucyBub3csIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHN0dWZmIGlzIGNvbXBsZXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMga2V5LiBXZSdyZSB0YWxraW5nIG5ldGxpbmssIGBydG5ldGxpbmtgLCB0aGUgd2hvbGUgc2hlYmFuZyDigJMgYFJUTV9ORVdRRElTQ2AsIGB0YyBxZGlzYyBhZGQgLi4uIGNvZGVsYCAvIGBmcV9jb2RlbGAsIHRoZSBzdGFuZGFyZCB3YXkgcGFja2V0cyBhcmUgbW92ZWQsIGV2ZXJ5dGhpbmchXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgaXMgXCJXb3J0aEZ1enppbmdcIi4gIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIGZvY3VzZWQgb24gYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLCByaWdodCBpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4gSW50ZXJlc3RpbmcuLi4gdGhlIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgd2l0aCBhIGBtYXhfdGAgdG8gcHJldmVudCB6ZXJvIHRydW5jYXRpb24gYW5kIHN0YWxsaW5nLCBhbmQgaW50cm9kdWNpbmcgYSBjYXAsIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgICgyNTYpIGluc2lkZSBgY29kZWxfZGVxdWV1ZSgpYCwgdG8gcHJldmVudCBhIG1hc3NpdmUgZHJvcCBzdG9ybSBhbmQgcmVzeW5jIG9mIGBkcm9wX25leHRgLlxuXG5Pa2F5LCBpcyBpdCByZWFjaGFibGUgYW5kIHdvcnRod2hpbGU/IEFic29sdXRlbHkhIENvcmUgbmV0d29ya2luZyBzdHVmZiwgdGhlc2UgcXVldWVpbmcgYWxnb3JpdGhtcywgdGhleSdyZSByaWdodCB0aGVyZSwgZGlyZWN0bHkgZXhwb3NlZCB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucyBhbmQgcWRpc2MgY29uZmlndXJhdGlvbi4gQ2hlY2sgdGhlIHJ1bGVzOiBjb3JlIG5ldHdvcmtpbmcgaXMgKmV4cGxpY2l0bHkqIG9uIHRoZSBcIldPUlRIIEZVWlpJTkcgQ1JJVEVSSUFcIiBsaXN0ISBXZSdyZSB0YWxraW5nIGFib3V0IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gYSBjb3JlIHN1YnN5c3RlbS4gU28sIHllYWgsIHRoaXMgaXMgYSBkZWZpbml0ZSBgdHJ1ZWAgZm9yIGBXb3J0aEZ1enppbmdgLlxuXG5Ob3csIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgYEVuYWJsZUNvbmZpZ3NgLiBMZXQncyBzZWUgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgbmVlZGVkIHRvIGFjdHVhbGx5IGVuYWJsZSBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAuIEknbGwgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiBgbmV0L3NjaGVkL01ha2VmaWxlYCBhbmQgYEtjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjAyLjEzMDM5ODgyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTk4Mjc2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX2NvZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzItXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxubmV0L3NjaGVkL0tjb25maWc6MjczOlxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxcbm5ldC9zY2hlZC9LY29uZmlnLTI3NC1cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfTkVUX1NDSF9RRlEpXFx0Kz0gc2NoX3FmcS5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19ORVRfU0NIX0NPREVMKVxcdCs9IHNjaF9jb2RlbC5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19ORVRfU0NIX0ZRX0NPREVMKVxcdCs9IHNjaF9mcV9jb2RlbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjAyLjc5MDIzMzIyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDA0NDgyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjY2IHRocm91Z2ggMjkwLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIHF1ZXVpbmcgZGlzY2lwbGluZSBvciBhIHNldCBvZiByZWxhdGVkIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgY29uZmlndXJlZCB0aGVyZS4gQ2hhbmNlcyBhcmUsIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldyBmZWF0dXJlIEkgd2FudCB0byBpbXBsZW1lbnQsIG9yIHBlcmhhcHMgZGVidWcgYW4gaXNzdWUgSSdtIHNlZWluZyB3aXRoIGEgcGFydGljdWxhciBzY2hlZHVsZXIuIEkgYmV0IGl0J3Mgc29tZXRoaW5nIHNwZWNpZmljLCBtYXliZSByZWxhdGVkIHRvIHNvbWUgbmV3bHkgYWRkZWQgY29kZSwgYSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9uLCBvciBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IgdGhhdCBJJ20gdHJ5aW5nIHRvIHBpbiBkb3duLiBHb2luZyBkaXJlY3RseSB0byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGhlbHBzIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHRoZSBkZXBlbmRlbmNpZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGNlcnRhaW4gY2hvaWNlcy4gVGhpcyB0YXJnZXRlZCBhcHByb2FjaCBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gYnJvd3NpbmcgdGhlIGVudGlyZSBmaWxlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MDUuMDMwNjg1NzQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFxuIDI2MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjYyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX3FmcS5cXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjU6XFx0XFxuIDI2NjpcXHRjb25maWcgTkVUX1NDSF9DT0RFTFxcbiAyNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcXFwiXFxuIDI2ODpcXHRcXHRoZWxwXFxuIDI2OTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb250cm9sbGVkIERlbGF5IChDT0RFTClcXG4gMjcwOlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjczOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxuIDI3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcbiAyNzk6XFx0XFx0aGVscFxcbiAyODA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRlEgQ29udHJvbGxlZCBEZWxheSAoRlFfQ09ERUwpXFxuIDI4MTpcXHRcXHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI4NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9mcV9jb2RlbC5cXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyODc6XFx0XFxuIDI4ODpcXHRjb25maWcgTkVUX1NDSF9DQUtFXFxuIDI4OTpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVxcXCJcXG4gMjkwOlxcdFxcdGhlbHBcXG4gMjkxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZFxcbiAyOTI6XFx0XFx0ICAoQ0FLRSkgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG0uXFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyOTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfY2FrZS5cXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyOTg6XFx0XFxuIDI5OTpcXHRjb25maWcgTkVUX1NDSF9GUVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjowNS4wMzA4MzA5MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTczNjkxMjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBLY29uZmlnIGZvciBORVRfU0NIX0NPREVMIGFuZCBORVRfU0NIX0ZRX0NPREVMKipcblxuQWxyaWdodCwgbGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgd2hpbGUgcmV2aWV3aW5nIHRoaXMgc2NoZWR1bGluZyBjb2RlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGVpdGhlciBgTkVUX1NDSF9DT0RFTGAgb3IgYE5FVF9TQ0hfRlFfQ09ERUxgIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvciBpZiB0aGVpciBjb25maWd1cmF0aW9ucyBhcmUgbmVzdGVkIHdpdGhpbiBhbnkgYG1lbnVjb25maWdgIGJsb2NrcyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCdzIGVzc2VudGlhbCB0byB2ZXJpZnkgaXQuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHZlcnkgdG9wIG9mIGBuZXQvc2NoZWQvS2NvbmZpZ2AsIG1ha2luZyBzdXJlIG5vIGdsb2JhbCBkaXJlY3RpdmVzIGFmZmVjdCB3aGF0IHdlIGFyZSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjA2Ljc2Nzc0ODA2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjowNi43Njc5MTAzNjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYwNTc1Nzk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5ldHdvcmsgU2NoZWR1bGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uLi4uIGBORVRfU0NIRURgIGlzIHRoZSBwcmltYXJ5IG1lbnVjb25maWcgb3B0aW9uIEkgbmVlZCB0byBiZSBmb2N1c2luZyBvbi4gQnV0LCBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hYzgwMjExLCBpdCdzIGFsd2F5cyByZWxldmFudCB3aXRoIHdpcmVsZXNzLiBOb3csIHRvIGdldCB0byB0aGUgc3BlY2lmaWNzIG9mIHRyYWZmaWMgc2hhcGluZywgSSByZW1lbWJlciBzZWVpbmcgQ29EZWwgaW4gdXNlLCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHVzZWQgaW4gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBTcGVjaWZpY2FsbHksIGxldCdzIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS90eC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgdHJpZ2dlcnMgQ29EZWwgd2l0aGluIHRoYXQgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayB0aHJvdWdoIGBuZXQvbWFjODAyMTEvYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MDkuMzczNjcyMjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjkxNDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcV90aW5fZGVxdWV1ZV9mdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3R4LmM9MTM5Nj1zdGF0aWMgdm9pZCBjb2RlbF9kcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MDktXFxubmV0L21hYzgwMjExL3R4LmM6MTQxMDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcXG5uZXQvbWFjODAyMTEvdHguYy0xNDExLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmcV90aW4gKnRpbixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTM4ODA9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMzkyNi1cXG5uZXQvbWFjODAyMTEvdHguYzozOTI3OlxcdFxcdHNrYiA9IGZxX3Rpbl9kZXF1ZXVlKGZxLCB0aW4sIGZxX3Rpbl9kZXF1ZXVlX2Z1bmMpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTM5MjgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjowOS40OTY1OTI4NDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkwMzczNjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgTUFDODAyMTFgIGlzIGFsc28gaW4gdGhlIG1peCBoZXJlLCBidXQgaXQgbG9va3MgbGlrZSBgTkVUX1NDSF9DT0RFTGAgYW5kIGBORVRfU0NIX0ZRX0NPREVMYCBhcmUgdGhlIHByaW1hcnkgY29uc3VtZXJzIGFuZCB0ZXN0IHN1YmplY3RzLCBiYXNlZCBvbiB0aG9zZSBKU09OIHRlc3RzIGluIHRjLXRlc3RpbmcuIEhtbSwgc28gaXQgc2VlbXMgbGlrZSB0aGlzIGBjb2RlbC5oYCBvciBgY29kZWxfaW1wbC5oYCBtaWdodCBiZSByZWxldmFudCB0byBhIHdpZGVyIHJhbmdlIG9mIGNvZGUgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBJIHNob3VsZCByZWFsbHkgY2hlY2sgdGhlIGZpbGUgc3lzdGVtIGFuZCBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBvdGhlciBmaWxlcyB1c2luZyBgY29kZWwuaGAgb3IgYGNvZGVsX2ltcGwuaGAuIEtub3dpbmcgdGhlIHVzYWdlIHdpbGwgY2xhcmlmeSBob3cgd2lkZXNwcmVhZCB0aGlzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjExLjQwMDMzMTM4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMTU1MjI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RlbFxcXFwuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9jb2RlbF9xZGlzYy5oLTUxLVxcbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmg6NTI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmgtNTMtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtMjItI2luY2x1ZGUgXFx1MDAzY25ldC9jZmc4MDIxMS5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMTFfcmFkaW90YXAuaFxcdTAwM2VcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvbWFjODAyMTEuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYzoyNTojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxubmV0L21hYzgwMjExL3R4LmMtMjYtI2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjE6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MTQuMDExODkzNzAyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxOTQxMTE4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enplcjogQSBTdHJhdGVneSBmb3IgRWZmZWN0aXZlIENvdmVyYWdlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIHdlJ3JlIGZ1enppbmcsIGFuZCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2UgbmVlZCBhIHdheSB0byBndWlkZSB0aGUgZnV6emluZyBwcm9jZXNzIOKAkyBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyBib2dnZWQgZG93biBpbiBpcnJlbGV2YW50IGFyZWFzIGFuZCBlbnN1cmUgaXQgaGl0cyB0aGUgbW9zdCBpbXBhY3RmdWwgY29kZS4gVGhhdCdzIHdoZXJlIGV4dHJhY3RpbmcgYEZvY3VzU3ltYm9sc2AgY29tZXMgaW4uIEl0J3MgYWJvdXQgcHJldmVudGluZyBkaWx1dGlvbiwgc3RlZXJpbmcgdGhlIGZ1enplciB0byB0aGUgZ29vZCBzdHVmZi5cblxuRmlyc3QsIHdlIG5lZWQgdG8gYXZvaWQgdGhlIG9idmlvdXMgdHJhcHMuIFdlICoqY2Fubm90KiogaW5jbHVkZSB0aG9zZSBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZS4gRm9yZ2V0IHRoZW0uIEluc3RlYWQsIHdlIG5lZWQgdG8gem9uZSBpbiBvbjpcblxuKiAgICoqU3BlY2lmaWMgRmVhdHVyZSBMb2dpYyBhbmQgRW50cnlwb2ludHM6KiogRnVuY3Rpb25zIHRoYXQgKmRpcmVjdGx5KiBpbXBsZW1lbnQgdGhlIGxvZ2ljIHdlJ3JlIGFkZGluZywgY2hhbmdpbmcsIG9yIHJldmlld2luZy4gVGhpbmsgQVBJIGVudHJ5IHBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSB3ZSdyZSBpbnRlcmVzdGVkIGluLlxuXG4qICAgKipTdGF0aWMgSW5saW5lczoqKiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBjb21tb24gaW4ga2VybmVsIGhlYWRlcnMgKGBtbS8qLmhgLCBgaW5jbHVkZS9saW51eC8qLmhgKSwgYXJlIHRyaWNreS4gVGhleSBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gYHZtbGludXhgLCBzbyB5b3UgY2FuJ3QgdGFyZ2V0IHRoZW0gZGlyZWN0bHkgd2l0aCBhIHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXIuIFNvLCBpZiBvdXIgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluc2lkZSBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIHdlIG5lZWQgdG8gaWRlbnRpZnkgKm5vbi1zdGF0aWMqLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlciBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyB0aGF0ICpleGVyY2lzZSogdGhvc2UgaW5saW5lIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBhdm9pZCB0aG9zZSBnZW5lcmljIGxpZmVjeWNsZSB3cmFwcGVycyBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAuIGBjb2RlbF9jb250cm9sX2xhd2AgYW5kIGBjb2RlbF9kZXF1ZXVlYCBhcmUgYm90aCBgc3RhdGljYCwgc28gdGhleSdyZSBpbmxpbmVkLiBHcmVhdCEgV2Ugd2FudCB0byBmb2N1cyBvbiB0aGVpciBjYWxsZXJzIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY2FsbGVycywgaW4gYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AsIGBfX2NvZGVsX3FkaXNjX2RlcXVldWVgIGNhbGxzIGBjb2RlbF9kZXF1ZXVlYCwgYGNvZGVsX2RlcXVldWVfZHJvcGAgY2FsbHMgYGNvZGVsX2RlcXVldWVgLiBBbmQgYGNvZGVsX3FkaXNjX2RlcXVldWVgIGNhbGxzIGJvdGgsIGJ1dCB0aGUgZnVuY3Rpb24gYWxzbyByZXR1cm5zIGBxZGlzY19kZXF1ZXVlX2hlYWQoc2NoKWAuIFdlIHNob3VsZCBwcm9iYWJseSByZWFkIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCBhbmQgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgZnJvbSBgc2NoX2NvZGVsLmNgIGFzIHdlbGwuIFNlZW1zIGxpa2Ugd2Ugc2hvdWxkIGNoZWNrIGxpbmVzIDU1LTEyMCBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBmb3Igc29tZSBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjE4LjIwNjAwNzg5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2NvZGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFx0cWRpc2NfZGVxdWV1ZV9kcm9wKHNjaCwgc2tiLCBRRElTQ19EUk9QX0NPTkdFU1RFRCk7XFxuICA1NjpcXHRcXHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xcbiAgNTc6XFx0fVxcbiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gIDYwOlxcdHtcXG4gIDYxOlxcdFxcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbiAgNjI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFxcdTAwMjZzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcXHUwMDI2cS1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2cS1cXHUwMDNldmFycyxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cS1cXHUwMDNlc3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsXFxuICA2NjpcXHRcXHRcXHRcXHQgICAgZHJvcF9mdW5jLCBkZXF1ZXVlX2Z1bmMpO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHRpZiAoc2tiKVxcbiAgNjk6XFx0XFx0XFx0cWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7XFxuICA3MDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgNzE6XFx0fVxcbiAgNzI6XFx0XFxuICA3MzpcXHRzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXFxuICA3NDpcXHR7XFxuICA3NTpcXHRcXHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0aWYgKHEtXFx1MDAzZXN0YXRzLmRyb3BfY291bnQpIHtcXG4gIDc4OlxcdFxcdFxcdHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc2NoLCBxLVxcdTAwM2VzdGF0cy5kcm9wX2NvdW50LFxcbiAgNzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBxLVxcdTAwM2VzdGF0cy5kcm9wX2xlbik7XFxuICA4MDpcXHRcXHRcXHRxLVxcdTAwM2VzdGF0cy5kcm9wX2NvdW50ID0gMDtcXG4gIDgxOlxcdFxcdFxcdHEtXFx1MDAzZXN0YXRzLmRyb3BfbGVuID0gMDtcXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAgODY6XFx0e1xcbiAgODc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0c2tiID0gX19jb2RlbF9xZGlzY19kZXF1ZXVlKHNjaCk7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgOTQ6XFx0fVxcbiAgOTU6XFx0XFxuICA5NjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYik7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdGlmICghc2tiKSB7XFxuIDEwMTpcXHRcXHRcXHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0XFx0aWYgKHNrYikge1xcbiAxMDQ6XFx0XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZChcXHUwMDI2c2NoLVxcdTAwM2Vnc29fc2tiLCBza2IpO1xcbiAxMDU6XFx0XFx0XFx0XFx0LyogaXQncyBzdGlsbCBwYXJ0IG9mIHRoZSBxdWV1ZSAqL1xcbiAxMDY6XFx0XFx0XFx0XFx0cWRpc2NfcXN0YXRzX2JhY2tsb2dfaW5jKHNjaCwgc2tiKTtcXG4gMTA3OlxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlcS5xbGVuKys7XFxuIDEwODpcXHRcXHRcXHR9XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdFxcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAxMTE6XFx0XFx0fVxcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRyZXR1cm4gc2tiO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgaW50IGNvZGVsX3FkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIDExNzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbiAxMTg6XFx0e1xcbiAxMTk6XFx0XFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjE4LjIwNjA4Mjg3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTMzOTg4NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzY2hfZnFfY29kZWwuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIGluIG9uIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgIHJpZ2h0IG5vdy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMjgwIHRocm91Z2ggMzY1LCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHJhbmdlIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHByZWNpc2VseSBob3cgdGhlIEZhc3QgUXVldWUgQ29EZWwgc2NoZWR1bGVyIG9wZXJhdGVzLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBoaWRpbmcgaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlLi4uIGxldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjIyLjM0MDA3NDIwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRxZGlzY19kZXF1ZXVlX2Ryb3Aoc2NoLCBza2IsIFFESVNDX0RST1BfQ09OR0VTVEVEKTtcXG4gMjgxOlxcdFxcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XFxuIDI4MjpcXHR9XFxuIDI4MzpcXHRcXG4gMjg0OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19mcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAyODU6XFx0e1xcbiAyODY6XFx0XFx0c3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDI4NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAyODg6XFx0XFx0c3RydWN0IGZxX2NvZGVsX2Zsb3cgKmZsb3c7XFxuIDI4OTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRiZWdpbjpcXG4gMjkyOlxcdFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlbmV3X2Zsb3dzO1xcbiAyOTM6XFx0XFx0aWYgKGxpc3RfZW1wdHkoaGVhZCkpIHtcXG4gMjk0OlxcdFxcdFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlb2xkX2Zsb3dzO1xcbiAyOTU6XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoaGVhZCkpXFxuIDI5NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjk3OlxcdFxcdH1cXG4gMjk4OlxcdFxcdGZsb3cgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmcV9jb2RlbF9mbG93LCBmbG93Y2hhaW4pO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRpZiAoZmxvdy1cXHUwMDNlZGVmaWNpdCBcXHUwMDNjPSAwKSB7XFxuIDMwMTpcXHRcXHRcXHRXUklURV9PTkNFKGZsb3ctXFx1MDAzZWRlZmljaXQsIGZsb3ctXFx1MDAzZWRlZmljaXQgKyBxLVxcdTAwM2VxdWFudHVtKTtcXG4gMzAyOlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZmbG93LVxcdTAwM2VmbG93Y2hhaW4sIFxcdTAwMjZxLVxcdTAwM2VvbGRfZmxvd3MpO1xcbiAzMDM6XFx0XFx0XFx0Z290byBiZWdpbjtcXG4gMzA0OlxcdFxcdH1cXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFxcdTAwMjZzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcXHUwMDI2cS1cXHUwMDNlY3BhcmFtcyxcXG4gMzA3OlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zmxvdy1cXHUwMDNlY3ZhcnMsIFxcdTAwMjZxLVxcdTAwM2Vjc3RhdHMsIHFkaXNjX3BrdF9sZW4sXFxuIDMwODpcXHRcXHRcXHRcXHQgICAgY29kZWxfZ2V0X2VucXVldWVfdGltZSwgZHJvcF9mdW5jLCBkZXF1ZXVlX2Z1bmMpO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRpZiAoIXNrYikge1xcbiAzMTE6XFx0XFx0XFx0LyogZm9yY2UgYSBwYXNzIHRocm91Z2ggb2xkX2Zsb3dzIHRvIHByZXZlbnQgc3RhcnZhdGlvbiAqL1xcbiAzMTI6XFx0XFx0XFx0aWYgKChoZWFkID09IFxcdTAwMjZxLVxcdTAwM2VuZXdfZmxvd3MpIFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZxLVxcdTAwM2VvbGRfZmxvd3MpKVxcbiAzMTM6XFx0XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmZsb3ctXFx1MDAzZWZsb3djaGFpbiwgXFx1MDAyNnEtXFx1MDAzZW9sZF9mbG93cyk7XFxuIDMxNDpcXHRcXHRcXHRlbHNlXFxuIDMxNTpcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZmbG93LVxcdTAwM2VmbG93Y2hhaW4pO1xcbiAzMTY6XFx0XFx0XFx0Z290byBiZWdpbjtcXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcdHFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpO1xcbiAzMTk6XFx0XFx0V1JJVEVfT05DRShmbG93LVxcdTAwM2VkZWZpY2l0LCBmbG93LVxcdTAwM2VkZWZpY2l0IC0gcWRpc2NfcGt0X2xlbihza2IpKTtcXG4gMzIwOlxcdFxcbiAzMjE6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMzIyOlxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAzMjU6XFx0e1xcbiAzMjY6XFx0XFx0c3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGlmIChxLVxcdTAwM2Vjc3RhdHMuZHJvcF9jb3VudCkge1xcbiAzMjk6XFx0XFx0XFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXFx1MDAzZWNzdGF0cy5kcm9wX2NvdW50LFxcbiAzMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICBxLVxcdTAwM2Vjc3RhdHMuZHJvcF9sZW4pO1xcbiAzMzE6XFx0XFx0XFx0cS1cXHUwMDNlY3N0YXRzLmRyb3BfY291bnQgPSAwO1xcbiAzMzI6XFx0XFx0XFx0cS1cXHUwMDNlY3N0YXRzLmRyb3BfbGVuID0gMDtcXG4gMzMzOlxcdFxcdH1cXG4gMzM0OlxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAzMzc6XFx0e1xcbiAzMzg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0c2tiID0gIF9fZnFfY29kZWxfZGVxdWV1ZShzY2gpO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMzQ1OlxcdH1cXG4gMzQ2OlxcdFxcbiAzNDc6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAzNDg6XFx0e1xcbiAzNDk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrKFxcdTAwMjZzY2gtXFx1MDAzZWdzb19za2IpO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoIXNrYikge1xcbiAzNTI6XFx0XFx0XFx0c2tiID0gX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdFxcdGlmIChza2IpIHtcXG4gMzU1OlxcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYiwgc2tiKTtcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIGl0J3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cXG4gMzU3OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzY2gsIHNrYik7XFxuIDM1ODpcXHRcXHRcXHRcXHRzY2gtXFx1MDAzZXEucWxlbisrO1xcbiAzNTk6XFx0XFx0XFx0fVxcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG4gMzYyOlxcdFxcdH1cXG4gMzYzOlxcdFxcbiAzNjQ6XFx0XFx0cmV0dXJuIHNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6MjIuMzQwMjQ0NTI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4OTAzNTc2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb25zdHJ1Y3RpbmcgQ29kZWwgYW5kIEZRLUNvZGVsIEluaXRpYWxpemF0aW9uIGFuZCBEZXF1ZXVlIFByb2Nlc3NlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgY29yZSBmdW5jdGlvbnMgaGVyZTogYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYF9fZnFfY29kZWxfZGVxdWV1ZWAsIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAuIFRob3NlIGFyZSB0aGUgZGVxdWV1ZSBmdW5jdGlvbnM7IHRoZXkncmUgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBxdWV1aW5nIGRpc2NpcGxpbmVzIGhhbmRsZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGltcGxlbWVudGF0aW9ucyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBiZSBwcmVzZW50IGluIGVhY2guXG5cblRoZW4sIG9mIGNvdXJzZSwgdGhlIGluaXRpYWwgc2V0dXA6IEknbSB0aGlua2luZyBhYm91dCBgY29kZWxfaW5pdGAsIGBjb2RlbF9jaGFuZ2VgLCBgZnFfY29kZWxfaW5pdGAsIGFuZCBgZnFfY29kZWxfY2hhbmdlYC4gVGhlc2UgYXJlIHdoZXJlIHRoZSBjcml0aWNhbCBwYXJhbWV0ZXJzIGFyZSBzZXQg4oCTIHRoaW5ncyBsaWtlIHRoZSBpbnRlcnZhbCBhbmQgdGFyZ2V0IHZhbHVlcyB0aGF0IGRlZmluZSB0aGUgYWN0aXZlIHF1ZXVlIG1hbmFnZW1lbnQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlIGlzIGFueSBkaXZlcmdlbmNlIGJldHdlZW4gQ29kZWwgYW5kIEZRLUNvZGVsIGluIHRoZWlyIHJlc3BlY3RpdmUgcGFyYW1ldGVyIHNldHRpbmcuXG5cblNvLCBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byBgc2NoX2NvZGVsLmNgIGFuZCBgc2NoX2ZxX2NvZGVsLmNgIGFuZCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gdGhlIGBjb2RlbF9jaGFuZ2VgIGFuZCBgZnFfY29kZWxfY2hhbmdlYCBmdW5jdGlvbnMuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCB0aGUgY3J1Y2lhbCBkZXRhaWxzIG9uIHBhcmFtZXRlciBhZGp1c3RtZW50IGFuZCB0aGVpciBlZmZlY3Qgb24gdGhlIHF1ZXVpbmcgYWxnb3JpdGhtcy4gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucywgYW5kIGhvdyB0aG9zZSBkaWZmZXJlbmNlcyBpbXBhY3QgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjoyNS4yMzA2MDU5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMDcxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNvZGVsfGZxX2NvZGVsKV8oaW5pdHxjaGFuZ2UpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9jb2RlbC5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY29kZWxfcG9saWN5W1RDQV9DT0RFTF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzctXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzktXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTk4OnN0YXRpYyBpbnQgY29kZWxfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xOTktXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIxMC1cXHRpZiAob3B0KSB7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjIxMTpcXHRcXHRpbnQgZXJyID0gY29kZWxfY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yMTItXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MjkyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI5OC1cXHQucGVla1xcdFxcdD1cXHRjb2RlbF9wZWVrLFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyOTk6XFx0LmluaXRcXHRcXHQ9XFx0Y29kZWxfaW5pdCxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzAwLVxcdC5yZXNldFxcdFxcdD1cXHRjb2RlbF9yZXNldCxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzAxOlxcdC5jaGFuZ2UgXFx0PVxcdGNvZGVsX2NoYW5nZSxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzAyLVxcdC5kdW1wXFx0XFx0PVxcdGNvZGVsX2R1bXAsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9MzkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmcV9jb2RlbF9wb2xpY3lbVENBX0ZRX0NPREVMX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTQwNC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NDA1OnN0YXRpYyBpbnQgZnFfY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTQwNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NDk5PXN0YXRpYyB2b2lkIGZxX2NvZGVsX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNTA3LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MDg6c3RhdGljIGludCBmcV9jb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwOS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUyOS1cXHRpZiAob3B0KSB7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjUzMDpcXHRcXHRlcnIgPSBmcV9jb2RlbF9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUzMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NjgtXFx0LnBlZWtcXHRcXHQ9XFx0ZnFfY29kZWxfcGVlayxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY5OlxcdC5pbml0XFx0XFx0PVxcdGZxX2NvZGVsX2luaXQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3MC1cXHQucmVzZXRcXHRcXHQ9XFx0ZnFfY29kZWxfcmVzZXQsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3MS1cXHQuZGVzdHJveVxcdD1cXHRmcV9jb2RlbF9kZXN0cm95LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3NzI6XFx0LmNoYW5nZVxcdFxcdD1cXHRmcV9jb2RlbF9jaGFuZ2UsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3My1cXHQuZHVtcFxcdFxcdD1cXHRmcV9jb2RlbF9kdW1wLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjoyNS4zMTE5MjMxNDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzE4Mzc5NDI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29kZWwgRGVxdWV1ZSBhbmQgQ29udHJvbCBMYXcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIENvZGVsIGRlcXVldWUgYW5kIGNvbnRyb2wgbGF3IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVoYXZlIGFuZCB3aGV0aGVyIHRoZXkncmUgYWNjZXNzaWJsZSBhcyBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGNvZGVsX2RlcXVldWUoKWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AuIEkga25vdyBgY29kZWxfZGVxdWV1ZSgpYCBpcyBpbmxpbmVkIGludG8gYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAgYW5kIGBfX2ZxX2NvZGVsX2RlcXVldWVgLCBiYXNlZCBvbiB0aGUgY29kZWJhc2UsIHdoaWNoIGFyZSBkZWZpbmVkIGluIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgcmVzcGVjdGl2ZWx5LlxuXG5Mb29raW5nIGF0IGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBJIHNlZSB0aGF0IGBjb2RlbF9kZXF1ZXVlYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gU2luY2UgaXQncyBpbiBhIGhlYWRlciwgSSdkIGV4cGVjdCBpdCB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBpbnRvIGl0cyBjYWxsZXJzLiBUaGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBjb2RlbF9kZXF1ZXVlKClgLCBhbmQgaXQncyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJJ20gY3VyaW91cyB3aGV0aGVyIGVpdGhlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHN5bWJvbHMgaW4gdGhlIGZpbmFsIHZtbGludXggaW1hZ2UuIFN0YXRpYyBpbmxpbmVzIGFyZSBvZnRlbiBvcHRpbWl6ZWQgb3V0LCB3aGljaCB3b3VsZCBtZWFuIHRoZXkncmUgbm90IGFkZHJlc3NhYmxlIGRpcmVjdGx5IGJ5IHNvbWV0aGluZyBsaWtlIHN5emthbGxlci5cblxuQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoZSBydWxlOiBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgaW4gaGVhZGVycyBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRoZXJlZm9yZSBhcmVuJ3QgZGlyZWN0bHkgdGFyZ2V0YWJsZSBmb3Igc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuIElmIGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gdGhlc2UgaW5saW5lZCBoZWxwZXJzLCBJIG5lZWQgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBvciBzcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgKnVzZSogdGhlbSBhbmQgYXJlIGRlZmluZWQgaW4gdGhlIGAuY2AgZmlsZXMuIFRoaXMgaXMgaG93IEkgY2FuIGluZGlyZWN0bHkgdGVzdCB0aGVtLlxuXG5MZXQncyBzZWU6IGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBJIGhhdmUgZnVuY3Rpb25zIGxpa2UgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGNvZGVsX2NoYW5nZWAsIGBjb2RlbF9pbml0YCwgYW5kIGBjb2RlbF9xZGlzY19lbnF1ZXVlYC4gVGhlbiwgaW4gYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AsIEkgaGF2ZSBzaW1pbGFyIGZ1bmN0aW9uczogYGZxX2NvZGVsX2RlcXVldWVgLCBgX19mcV9jb2RlbF9kZXF1ZXVlYCwgYGZxX2NvZGVsX2NoYW5nZWAsIGBmcV9jb2RlbF9pbml0YCwgYW5kIGBmcV9jb2RlbF9lbnF1ZXVlYC5cblxuT2theSwgYSBtb21lbnQgb2YgY2xhcml0eS4uLiBhcmUgYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAgYWN0dWFsbHkgc3RhdGljIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBjaGVjay4gRGlnZ2luZyBpbnRvIGBzY2hfY29kZWwuY2AsIEkgc2VlIGBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpYC4gQW5kIGl0J3MgYXNzaWduZWQgdG8gYC5kZXF1ZXVlID0gY29kZWxfcWRpc2NfZGVxdWV1ZWAgd2l0aGluIGBjb2RlbF9xZGlzY19vcHNgLiBUaGUgc2FtZSBwYXR0ZXJuIGV4aXN0cyBpbiBgc2NoX2ZxX2NvZGVsLmNgIGZvciBgZnFfY29kZWxfZGVxdWV1ZWAuIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB0YWtlbiBhbmQgYXNzaWduZWQgdG8gdGhlIGBRZGlzY19vcHNgIHN0cnVjdCwgdGhleSAqYXJlbid0KiBpbmxpbmVkLiBUaGV5IGV4aXN0IGFzIHJlYWwgZnVuY3Rpb25zIHdpdGggYWNjZXNzaWJsZSBzeW1ib2xzIGluIHRoZSBjb21waWxlZCBjb2RlIVxuXG5Ob3csIHdoYXQgYWJvdXQgYGNvZGVsX2RlcXVldWVgIGl0c2VsZj8gTGV0IG1lIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgYXJvdW5kIGxpbmVzIDE1MC0xNjAuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgzNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjozMi40OTU3MjA0NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NTpcXHRcXHR9IGVsc2UgaWYgKGNvZGVsX3RpbWVfYWZ0ZXIobm93LCB2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lKSkge1xcbiAxNDY6XFx0XFx0XFx0b2tfdG9fZHJvcCA9IHRydWU7XFxuIDE0NzpcXHRcXHR9XFxuIDE0ODpcXHRcXHRyZXR1cm4gb2tfdG9fZHJvcDtcXG4gMTQ5OlxcdH1cXG4gMTUwOlxcdFxcbiAxNTE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gMTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgdTMyICpiYWNrbG9nLFxcbiAxNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXFxuIDE1NDpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxcbiAxNTU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxcbiAxNTY6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxcbiAxNTk6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcXG4gMTYwOlxcdHtcXG4gMTYxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcXG4gMTYyOlxcdFxcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIDE2MzpcXHRcXHRjb2RlbF90aW1lX3Qgbm93O1xcbiAxNjQ6XFx0XFx0Ym9vbCBkcm9wO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRpZiAoIXNrYikge1xcbiAxNjc6XFx0XFx0XFx0dmFycy1cXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XFxuIDE2ODpcXHRcXHRcXHRXUklURV9PTkNFKHZhcnMtXFx1MDAzZWRyb3BwaW5nLCBmYWxzZSk7XFxuIDE2OTpcXHRcXHRcXHRyZXR1cm4gc2tiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjozMi40OTU3ODU1NTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI3NjA0NzM2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQ29kZWwvRnFfQ29kZWwgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHBvdGVudGlhbCB0cnVuY2F0aW9uIGVycm9ycyB3aGVuIHRoZSBpbnRlcnZhbCBpcyB2ZXJ5IHNtYWxsIChzdWItdGljaykgd2l0aGluIHRoZSBgY29kZWxgIGFuZCBgZnFfY29kZWxgIHF1ZXVlaW5nIGRpc2NpcGxpbmVzLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uLiBUaGlzIGNhbiBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AgaW4gYGNvZGVsX2RlcXVldWVgIGJlY2F1c2Ugb2YgYHJlY2lwcm9jYWxfc2NhbGVgIHJldHVybmluZyAwLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgY2xhbXBpbmcgdGhlIGluY3JlbWVudCB2YWx1ZSwgZW5zdXJpbmcgaXQncyBhdCBsZWFzdCBvbmUgdGljaywgYW5kIGNhcHBpbmcgdGhlIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZS5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIGVuc3VyaW5nIHRoZXkgYXJlIGZ1enplZC4gYGNvZGVsX3FkaXNjX2RlcXVldWVgIGFuZCBgZnFfY29kZWxfZGVxdWV1ZWAgYXJlIHRoZSBjb3JlIGRlcXVldWUgZnVuY3Rpb25zIGZvciBgc2NoX2NvZGVsYCBhbmQgYHNjaF9mcV9jb2RlbGAsIHJlc3BlY3RpdmVseS4gQWxzbyBJIG5lZWQgdG8gaW5jbHVkZSBgY29kZWxfY2hhbmdlYCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAgYmVjYXVzZSB0aGV5IHBhcnNlIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgdGhlIHNhbWUgcWRpc2NzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjb2RlbF9kZXF1ZXVlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgaW4gYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAsIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSBpbmxpbmVkIG9yIHJlbmFtZWQuIFNvLCBJIHdpbGwgYWRkIGl0IHRvIHRoZSBmb2N1cyBzeW1ib2xzIHRvIGJlIHN1cmUuIEkndmUgYWxzbyBjaGVja2VkIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybWVkIGBjb2RlbF9xZGlzY19kZXF1ZXVlYCB1c2VzIHRoZSBgX19jb2RlbF9xZGlzY19kZXF1ZXVlYCBzdGF0aWMgZnVuY3Rpb24uXG5cblRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfU0NIRURgLCBgTkVUX1NDSF9DT0RFTGAsIGFuZCBgTkVUX1NDSF9GUV9DT0RFTGAuIFRoZSBgbWFjODAyMTFgIHdpcmVsZXNzIG1vZHVsZSBhcHBlYXJzIGxlc3MgcmVsZXZhbnQsIGFzIHRoZSBwYXRjaCB0YXJnZXRzIHRoZSB0cmFmZmljIGNvbnRyb2wgYXNwZWN0cyBvZiBjb2RlbC9mcV9jb2RlbC4gVGhlIGZvY3VzIGlzIG9uIHRoZSBxZGlzYyBvcGVyYXRpb25zLCBzbyBJIGRvbid0IG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBjb25maWcuXG5cbkdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoc3BlY2lmaWNhbGx5LCB0aGUgYWxnb3JpdGhtIGZsb3cgZm9yIHRyYWZmaWMgY29udHJvbCksIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIHRoZXNlIHFkaXNjcyB3aXRoIHNtYWxsIGludGVydmFscywgc28gdGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGNoYW5nZWQgbG9naWMuXG5cbkhlcmUncyB0aGUgcGxhbiBmb3IgYHNldC1yZXN1bHRzYDpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWVcbiogICAqKlJlYXNvbmluZyoqOiBUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nICh0cmFmZmljIGNvbnRyb2wpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBpbiBgY29kZWxfZGVxdWV1ZWAgY2F1c2VkIGJ5IHRydW5jYXRpb24gZXJyb3JzIHdpdGggc21hbGwgaW50ZXJ2YWxzLiBUaGUgY2hhbmdlcyBjbGFtcCB0aGUgaW5jcmVtZW50IHZhbHVlIGFuZCBjYXAgZHJvcHMgcGVyIGRlcXVldWUuXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAgYGNvZGVsX3FkaXNjX2RlcXVldWVgXG4gICAgKiAgIGBmcV9jb2RlbF9kZXF1ZXVlYFxuICAgICogICBgY29kZWxfY2hhbmdlYFxuICAgICogICBgZnFfY29kZWxfY2hhbmdlYFxuICAgICogICBgY29kZWxfZGVxdWV1ZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYE5FVF9TQ0hFRGBcbiAgICAqICAgYE5FVF9TQ0hfQ09ERUxgXG4gICAgKiAgIGBORVRfU0NIX0ZRX0NPREVMYFxuXG5FdmVyeXRoaW5nIGxvb2tzIGNvcnJlY3QuIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc2NywiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6MjY6NDUuMjU2MjYyMDE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0Mjg2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2RlbF9xZGlzY19kZXF1ZXVlXCIsXG4gICAgXCJmcV9jb2RlbF9kZXF1ZXVlXCIsXG4gICAgXCJjb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX2NvZGVsX2NoYW5nZVwiLFxuICAgIFwiY29kZWxfZGVxdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBhbmQgRlEtQ29EZWwgcGFja2V0IHNjaGVkdWxpbmcgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtcyBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYW5kIGluY2x1ZGUvbmV0L2NvZGVsLmguIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGUgY29udHJvbCBsYXcgc3RlcCBpbmNyZW1lbnQgaXMgYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgaW5maW5pdGUgc3RhbGxzIHdoZW4gaW50ZXJ2YWxzIGFyZSBjb25maWd1cmVkIHRvIHN1Yi10aWNrIHZhbHVlcywgYW5kIGludHJvZHVjZXMgYSBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0IGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGxvb3Bpbmcgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wgKFFkaXNjKSBsb2dpYyB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay9ydG5ldGxpbmsgYW5kIG5vcm1hbCBuZXR3b3JrIHBhY2tldCBkZXF1ZXVlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGVsX3FkaXNjX2RlcXVldWVcIixcbiAgICBcImZxX2NvZGVsX2RlcXVldWVcIixcbiAgICBcImNvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfY29kZWxfY2hhbmdlXCIsXG4gICAgXCJjb2RlbF9kZXF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIGFuZCBGUS1Db0RlbCBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG1zIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBhbmQgaW5jbHVkZS9uZXQvY29kZWwuaC4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoZSBjb250cm9sIGxhdyBzdGVwIGluY3JlbWVudCBpcyBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBpbmZpbml0ZSBzdGFsbHMgd2hlbiBpbnRlcnZhbHMgYXJlIGNvbmZpZ3VyZWQgdG8gc3ViLXRpY2sgdmFsdWVzLCBhbmQgaW50cm9kdWNlcyBhIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgbG9vcGluZyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoUWRpc2MpIGxvZ2ljIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3J0bmV0bGluayBhbmQgbm9ybWFsIG5ldHdvcmsgcGFja2V0IGRlcXVldWUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjQ1LjM5MDU1NjgxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU5MjAwMDExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxOToyNjo0NS4zOTA5NzkxMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTkxOTU3NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AgLyBDUFUgc3RhbGwgaXNzdWUgaW4gQ29EZWwncyBwYWNrZXQgZHJvcHBpbmcgYWxnb3JpdGhtIChjb2RlbF9kZXF1ZXVlKS4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIGluY3JlbWVudCBpbiBjb2RlbF9jb250cm9sX2xhdygpIHRvIGF0IGxlYXN0IDEgdGljayB1c2luZyBtYXhfdCgpIHRvIGF2b2lkIHN0YWxscyBmcm9tIHplcm8tYWR2YW5jZW1lbnQgd2hlbiBpbnRlcnZhbCBpcyBzbWFsbCBvciBwYWNrZXQgZHJvcCBjb3VudCBpcyBsYXJnZSwgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldCBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24gYXQgMjU2IChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpLlxcblxcbktNU0FOIGlzIHNwZWNpYWxpemVkIGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGUgY2hhbmdlcyBoZXJlIGFyZSBwdXJlbHkgYWxnb3JpdGhtaWMsIGludm9sdmluZyBiYXNpYyBhcml0aG1ldGljIGFuZCBsb29wIHRlcm1pbmF0aW9uIGxvZ2ljIG9uIHNjYWxhciBpbnRlZ2Vycy4gVGhlIG9ubHkgbmV3IGxvY2FsIHZhcmlhYmxlIGludHJvZHVjZWQgaXMgYGRyb3BzYCwgd2hpY2ggaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBObyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBsZW5ndGggLyBidWZmZXIgYm91bmRhcnkgb3BlcmF0aW9ucyBhcmUgbW9kaWZpZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNGQ3NTNiZjYzYjFiNTM5YWYzY2Y3YWFmZjU3OTEwZWRiYjc4Njk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTk6MjU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbkBAIC0xNDAsNiArMTQwLDExIEBAIHN0cnVjdCBjb2RlbF92YXJzIHtcbiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovXG4gI2RlZmluZSBSRUNfSU5WX1NRUlRfU0hJRlQgKDMyIC0gUkVDX0lOVl9TUVJUX0JJVFMpXG4gXG4rLyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXG4rICogaWRsZSBnYXAgYW5kIGJhY2tsb2csIGJvdGggb3V0c2lkZSBvdXIgY29udHJvbDsgcmVzeW5jIHdoZW4gZXhjZWVkZWQuXG4rICovXG4rI2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XG4rXG4gLyoqXG4gICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHNcbiAgKiBAbWF4cGFja2V0Olx0bGFyZ2VzdCBwYWNrZXQgd2UndmUgc2VlbiBzbyBmYXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcbmluZGV4IDJjMWYwZWMzMDllOWYuLjhmMjYxMzJkNDViN2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuQEAgLTkzLDEyICs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycylcbiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICsgaW50ZXJ2YWwvc3FydChjb3VudClcbiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcbiAgKiBib3RoIHNxcnQoKSBhbmQgZGl2aWRlIG9wZXJhdGlvbi5cbisgKlxuKyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcbisgKiBsYXJnZSBjb3VudCkgY2FuIHRydW5jYXRlIGl0IHRvIHplcm8sIHN0YWxsaW5nIHRoZSBkcm9wcGluZyBsb29wLlxuICAqL1xuIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXG4gXHRcdFx0XHQgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsXG4gXHRcdFx0XHQgICAgICB1MzIgcmVjX2ludl9zcXJ0KVxuIHtcbi1cdHJldHVybiB0ICsgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpO1xuK1x0cmV0dXJuIHQgKyBtYXhfdCh1MzIsIDEsXG4rXHRcdFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXG4rXHRcdFx0XHRcdCAgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTQsNiArMTU5LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiBcdFx0XHRcdCAgICAgY29kZWxfc2tiX2RlcXVldWVfdCBkZXF1ZXVlX2Z1bmMpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xuK1x0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiBcdGNvZGVsX3RpbWVfdCBub3c7XG4gXHRib29sIGRyb3A7XG4gXG5AQCAtMTgwLDYgKzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdCAqL1xuIFx0XHRcdHdoaWxlICh2YXJzLVx1MDAzZWRyb3BwaW5nIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4rXHRcdFx0XHRpZiAoKytkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7XG4rXHRcdFx0XHRcdC8qIGZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUgKi9cbitcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbitcdFx0XHRcdFx0XHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZWludGVydmFsLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgIHZhcnMtXHUwMDNlcmVjX2ludl9zcXJ0KSk7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcbiBcdFx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxuIFx0XHRcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5AQCAtMjEzLDUgKzIxMyw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtc1wiLFxuICAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiNmU0NFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE4YzNcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJhNjk1XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI5NzkzXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIHRhcmdldCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4gICAgIH1cbiBdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbmluZGV4IDRjZTYyYjg1N2ZkN2EuLmRlNmExYjhkOTU0YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5AQCAtMzE2LDUgKzMxNiw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4gICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIxYjRkXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiMzU0MFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDJ1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjQ5YzVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjNlMGZcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI2OjQ1LjM5MDk4MTgyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwMTI3ODczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGVzdGFibGlzaCBhIGJhc2VsaW5lIG9mIHNhZmV0eS4gV2UncmUgdGFsa2luZyBhYm91dCBhIHR5cGljYWwgc29mdHdhcmUgZGVidWdnaW5nIGFuZCBRQSBzY2VuYXJpbyBoZXJlLCBhdWRpdGluZyB0aGUgY29kZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTm8gcmVkIGZsYWdzIGluIHRlcm1zIG9mIG1hbGljaW91cyBpbnRlbnQgb3IgYW55dGhpbmcgb2ZmZW5zaXZlIOKAkyB3ZSdyZSBsb29raW5nIGF0IGJlbmlnbiBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyBhbmQgc2VlIGlmIHRoZXkgdG91Y2ggb24gYW55dGhpbmcgdGhhdCBLTVNBTiB3b3VsZCBjYXJlIGFib3V0LlxuXG5Ob3csIGxldCdzIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggaXMgYWN0dWFsbHkgZG9pbmcuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBzb21lIGNvcmUgYGNvZGVsYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgQSBuZXcgYCNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAgaXMgYWRkZWQgaW4gYGluY2x1ZGUvbmV0L2NvZGVsLmhgLCBzZXR0aW5nIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgY2FuIGJlIGRyb3BwZWQgcGVyIGRlcXVldWUgY3ljbGUuIFJlYXNvbmFibGUsIGlmIHBlcmhhcHMgYXJiaXRyYXJ5LlxuMi4gIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhhcyB0aGVzZSBjaGFuZ2VzOlxuICAgICogICBJbiB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiwgYSBgbWF4X3RgIGNoZWNrIGlzIGFkZGVkLCBlbnN1cmluZyB0aGUgcmV0dXJuZWQgdmFsdWUgZnJvbSBgcmVjaXByb2NhbF9zY2FsZWAgaXMgYXQgbGVhc3QgMS4gTG9va3MgbGlrZSBhIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgcHJldmVudGlvbi5cbiAgICAqICAgVGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbiBpcyBhbHNvIG1vZGlmaWVkLiBBIGBkcm9wc2AgdmFyaWFibGUgaXMgYWRkZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBsb29wIHRoYXQgdHJhY2tzIGRyb3BwZWQgcGFja2V0cy4gQ3JpdGljYWxseSwgdGhlcmUncyBub3cgYSBjaGVjayB0aGF0IGBkcm9wc2AgZG9lc24ndCBleGNlZWQgYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAuIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBjb250cm9sIGZsb3csIHBvdGVudGlhbGx5IGltcGFjdGluZyBwZXJmb3JtYW5jZS4gTW9yZSBpbnZlc3RpZ2F0aW9uIGlzIG5lZWRlZC5cbjMuICBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBKU09OIHRlc3QgZmlsZXMgZm9yIGBjb2RlbGAgYW5kIGBmcV9jb2RlbGAgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzYC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBleGFtaW5lIHRoZSB0ZXN0cyB0byBzZWUgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBjaGFuZ2VzLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBlc3BlY2lhbGx5IGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMgaXMgcGFyYW1vdW50LiBJJ2xsIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAgdG8gZGV0ZXJtaW5lIGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhZGRlZCBsb2dpYy4gVGhlbiBJJ2xsIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMgdGhhdCBLTVNBTiBjb3VsZCBzcGVjaWZpY2FsbHkgZmxhZy4gQmFzZWQgb24gdGhhdCBhbmFseXNpcywgSSBjYW4gbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB0aGUgbmVjZXNzaXR5IG9mIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE5OjI3OjA2LjY5MjI2MjU5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUpKSB7XFxuIDE0NjpcXHRcXHRcXHRva190b19kcm9wID0gdHJ1ZTtcXG4gMTQ3OlxcdFxcdH1cXG4gMTQ4OlxcdFxcdHJldHVybiBva190b19kcm9wO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhY2tsb2csXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9zdGF0cyAqc3RhdHMsXFxuIDE1NjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXFxuIDE1NzpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl90aW1lX3Qgc2tiX3RpbWVfZnVuYyxcXG4gMTU4OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2Ryb3BfdCBkcm9wX2Z1bmMsXFxuIDE1OTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9kZXF1ZXVlX3QgZGVxdWV1ZV9mdW5jKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xcbiAxNjI6XFx0XFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcXG4gMTYzOlxcdFxcdGNvZGVsX3RpbWVfdCBub3c7XFxuIDE2NDpcXHRcXHRib29sIGRyb3A7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdGlmICghc2tiKSB7XFxuIDE2NzpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTY4OlxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTY5OlxcdFxcdFxcdHJldHVybiBza2I7XFxuIDE3MDpcXHRcXHR9XFxuIDE3MTpcXHRcXHRub3cgPSBjb2RlbF9nZXRfdGltZSgpO1xcbiAxNzI6XFx0XFx0ZHJvcCA9IGNvZGVsX3Nob3VsZF9kcm9wKHNrYiwgY3R4LCB2YXJzLCBwYXJhbXMsIHN0YXRzLFxcbiAxNzM6XFx0XFx0XFx0XFx0XFx0IHNrYl9sZW5fZnVuYywgc2tiX3RpbWVfZnVuYywgYmFja2xvZywgbm93KTtcXG4gMTc0OlxcdFxcdGlmICh2YXJzLVxcdTAwM2Vkcm9wcGluZykge1xcbiAxNzU6XFx0XFx0XFx0aWYgKCFkcm9wKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cXG4gMTc3OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTc4OlxcdFxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXFx1MDAzZWRyb3BfbmV4dCkpIHtcXG4gMTc5OlxcdFxcdFxcdFxcdC8qIEl0J3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxcbiAxODA6XFx0XFx0XFx0XFx0ICogcGFja2V0IGFuZCBkZXF1ZXVlIHRoZSBuZXh0LiBUaGUgZGVxdWV1ZSBtaWdodFxcbiAxODE6XFx0XFx0XFx0XFx0ICogdGFrZSB1cyBvdXQgb2YgZHJvcHBpbmcgc3RhdGUuXFxuIDE4MjpcXHRcXHRcXHRcXHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXFxuIDE4MzpcXHRcXHRcXHRcXHQgKiBBIGxhcmdlIGJhY2tsb2cgbWlnaHQgcmVzdWx0IGluIGRyb3AgcmF0ZXMgc28gaGlnaFxcbiAxODQ6XFx0XFx0XFx0XFx0ICogdGhhdCB0aGUgbmV4dCBkcm9wIHNob3VsZCBoYXBwZW4gbm93LFxcbiAxODU6XFx0XFx0XFx0XFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXFxuIDE4NjpcXHRcXHRcXHRcXHQgKi9cXG4gMTg3OlxcdFxcdFxcdFxcdHdoaWxlICh2YXJzLVxcdTAwM2Vkcm9wcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAxODg6XFx0XFx0XFx0XFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVxcdTAwM2Vkcm9wX25leHQpKSB7XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRpZiAoKytkcm9wcyBcXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xcbiAxOTA6XFx0XFx0XFx0XFx0XFx0XFx0LyogZmVsbCBmYXIgYmVoaW5kIHRoZSBzY2hlZHVsZSAqL1xcbiAxOTE6XFx0XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2Vkcm9wX25leHQsXFxuIDE5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXFxuIDE5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBhcmFtcy1cXHUwMDNlaW50ZXJ2YWwsXFxuIDE5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZhcnMtXFx1MDAzZXJlY19pbnZfc3FydCkpO1xcbiAxOTU6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE5NjpcXHRcXHRcXHRcXHRcXHR9XFxuIDE5NzpcXHRcXHRcXHRcXHRcXHQvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcFxcbiAxOTg6XFx0XFx0XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gbW9yZSBkaXZpZGUuXFxuIDE5OTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMjAwOlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlY291bnQsIHZhcnMtXFx1MDAzZWNvdW50ICsgMSk7XFxuIDIwMTpcXHRcXHRcXHRcXHRcXHRjb2RlbF9OZXd0b25fc3RlcCh2YXJzKTtcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZWVjbiBcXHUwMDI2XFx1MDAyNiBJTkVUX0VDTl9zZXRfY2Uoc2tiKSkge1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzdGF0cy1cXHUwMDNlZWNuX21hcmssXFxuIDIwNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdGF0cy1cXHUwMDNlZWNuX21hcmsgKyAxKTtcXG4gMjA1OlxcdFxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcF9uZXh0LFxcbiAyMDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29kZWxfY29udHJvbF9sYXcodmFycy1cXHUwMDNlZHJvcF9uZXh0LFxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbXMtXFx1MDAzZWludGVydmFsLFxcbiAyMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB2YXJzLVxcdTAwM2VyZWNfaW52X3NxcnQpKTtcXG4gMjA5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZW5kO1xcbiAyMTA6XFx0XFx0XFx0XFx0XFx0fVxcbiAyMTE6XFx0XFx0XFx0XFx0XFx0c3RhdHMtXFx1MDAzZWRyb3BfbGVuICs9IHNrYl9sZW5fZnVuYyhza2IpO1xcbiAyMTI6XFx0XFx0XFx0XFx0XFx0ZHJvcF9mdW5jKHNrYiwgY3R4KTtcXG4gMjEzOlxcdFxcdFxcdFxcdFxcdHN0YXRzLVxcdTAwM2Vkcm9wX2NvdW50Kys7XFxuIDIxNDpcXHRcXHRcXHRcXHRcXHRza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6Mjc6MDYuNjkyMzMxNDMyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NjE4MjA0MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb0RlbCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agb3IgQ1BVIHN0YWxsIHdpdGhpbiB0aGUgQ29EZWwgcGFja2V0IGRyb3BwaW5nIGxvZ2ljIChgY29kZWxfZGVxdWV1ZSgpYCkuIFRoZSBjb3JlIGlzc3VlIHN0ZW1zIGZyb20gdGhlIGBjb2RlbF9jb250cm9sX2xhdygpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBwb3NzaWJpbGl0eSBvZiBgcmVjaXByb2NhbF9zY2FsZWAgcmV0dXJuaW5nIHplcm8gd2hlbiB0aGUgaW50ZXJ2YWwgaXMgdGlueSBvciB0aGUgY291bnQgaXMgbGFyZ2UuIFRoaXMgd291bGQgcHJldmVudCB0aGUgYHZhcnMtXHUwMDNlZHJvcF9uZXh0YCB0aW1lc3RhbXAgZnJvbSBhZHZhbmNpbmcsIGxlYWRpbmcgdG8gYW4gZW5kbGVzcyBsb29wIGluIGBjb2RlbF9kZXF1ZXVlKClgLlxuXG5UaGUgZml4IGFkZHJlc3NlcyB0aGlzIGJ5OiAoMSkgZW5zdXJpbmcgdGhhdCBgY29kZWxfY29udHJvbF9sYXcoKWAgYWx3YXlzIGluY3JlbWVudHMgYGRyb3BfbmV4dGAgYnkgYXQgbGVhc3Qgb25lIHRpY2sgdXNpbmcgYG1heF90KHUzMiwgMSwgLi4uKWAgYW5kICgyKSBhZGRpbmcgYSBzYWZlZ3VhcmQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24gdG8gMjU2IChgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFYCkuIFRoaXMgbG9vcCBib3VuZCByZXN5bmNzIGBkcm9wX25leHRgLCBhbmQgYnJlYWtzIG91dCBvZiB0aGUgbG9vcC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IHRoYXQgbmVjZXNzaXRhdGVzIGEgS01TQU4gY2hlY2s/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXZhbHVhdGUgYWdhaW5zdCB0aGUgY3JpdGVyaWEuIEknbSBzZWVpbmcgbm8ga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGFsdGVyYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlciBoYW5kbGluZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBTcGVjaWZpY2FsbHk6XG5cbiogICBObyBuZXcgb3IgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIChzbyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMpLlxuKiAgIFZhcmlhYmxlcyB1c2VkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoYGRyb3BzYCBpcyBpbml0aWFsaXplZCB0byAwLCBgbm93YCBpcyBzZXQgYnkgYGNvZGVsX2dldF90aW1lKClgLCBhbmQgYHZhcnNgIGlzIHBhc3NlZCBmcm9tIGNhbGxlcikuXG4qICAgTm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgY2hhbmdlZCBpbiB0aGUgY29kZS5cbiogICBObyBjaGFuZ2VzIGluIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBleGlzdGluZyBidWZmZXJzIG9yIHNrYiBkYXRhIGxlbmd0aHMuXG5cblRoaXMgcGF0Y2ggaXMgcHVyZWx5IGFsZ29yaXRobWljLCBwcmV2ZW50aW5nIGFuIGluZmluaXRlIGxvb3AgYnkgbWFraW5nIHN1cmUgYGRyb3BfbmV4dGAgaXMgYWR2YW5jZWQsIGFuZCBib3VuZGluZyBgZHJvcHNgIGZvciByZXN5bmNpbmcuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgaXNzdWVzLiBJdCBkb2Vzbid0IGRldGVjdCBpbmZpbml0ZSBsb29wcyBvciBDUFUgc3RhbGxzLCBLQVNBTiBhbmQgc3RhbmRhcmQgbG9ja3VwIGRldGVjdG9ycyBkby4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcy4gS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3IgYXJlIHN1ZmZpY2llbnQgaGVyZS5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhIGFuZCB0aG9yb3VnaCBhbmFseXNpcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLiBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyOCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTk6Mjc6MjEuMzEwNTM4NjA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW5maW5pdGUgbG9vcCAvIENQVSBzdGFsbCBpc3N1ZSBpbiBDb0RlbCdzIHBhY2tldCBkcm9wcGluZyBhbGdvcml0aG0gKGNvZGVsX2RlcXVldWUpLiBTcGVjaWZpY2FsbHksIGl0IGNsYW1wcyB0aGUgaW5jcmVtZW50IGluIGNvZGVsX2NvbnRyb2xfbGF3KCkgdG8gYXQgbGVhc3QgMSB0aWNrIHVzaW5nIG1heF90KCkgdG8gYXZvaWQgc3RhbGxzIGZyb20gemVyby1hZHZhbmNlbWVudCB3aGVuIGludGVydmFsIGlzIHNtYWxsIG9yIHBhY2tldCBkcm9wIGNvdW50IGlzIGxhcmdlLCBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0IGRyb3BzIHBlciBkZXF1ZXVlIGl0ZXJhdGlvbiBhdCAyNTYgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkuXFxuXFxuS01TQU4gaXMgc3BlY2lhbGl6ZWQgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgYXJlIHB1cmVseSBhbGdvcml0aG1pYywgaW52b2x2aW5nIGJhc2ljIGFyaXRobWV0aWMgYW5kIGxvb3AgdGVybWluYXRpb24gbG9naWMgb24gc2NhbGFyIGludGVnZXJzLiBUaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCBpcyBgZHJvcHNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIE5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIGxlbmd0aCAvIGJ1ZmZlciBib3VuZGFyeSBvcGVyYXRpb25zIGFyZSBtb2RpZmllZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wIC8gQ1BVIHN0YWxsIGlzc3VlIGluIENvRGVsJ3MgcGFja2V0IGRyb3BwaW5nIGFsZ29yaXRobSAoY29kZWxfZGVxdWV1ZSkuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBpbmNyZW1lbnQgaW4gY29kZWxfY29udHJvbF9sYXcoKSB0byBhdCBsZWFzdCAxIHRpY2sgdXNpbmcgbWF4X3QoKSB0byBhdm9pZCBzdGFsbHMgZnJvbSB6ZXJvLWFkdmFuY2VtZW50IHdoZW4gaW50ZXJ2YWwgaXMgc21hbGwgb3IgcGFja2V0IGRyb3AgY291bnQgaXMgbGFyZ2UsIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXQgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uIGF0IDI1NiAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKS5cXG5cXG5LTVNBTiBpcyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBhcmUgcHVyZWx5IGFsZ29yaXRobWljLCBpbnZvbHZpbmcgYmFzaWMgYXJpdGhtZXRpYyBhbmQgbG9vcCB0ZXJtaW5hdGlvbiBsb2dpYyBvbiBzY2FsYXIgaW50ZWdlcnMuIFRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIGlzIGBkcm9wc2AsIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgbGVuZ3RoIC8gYnVmZmVyIGJvdW5kYXJ5IG9wZXJhdGlvbnMgYXJlIG1vZGlmaWVkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[1] Phase: Succeeded StartedAt: 2026-09-12 19:27:45 +0000 UTC FinishedAt: 2026-09-12 19:27:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 19:27:45 +0000 UTC FinishedAt: 2026-09-12 19:27:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2] Phase: Succeeded StartedAt: 2026-09-12 19:27:45 +0000 UTC FinishedAt: 2026-09-12 23:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 19:27:45 +0000 UTC FinishedAt: 2026-09-12 23:06:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 19:27:45 +0000 UTC FinishedAt: 2026-09-12 19:27:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 19:27:45 +0000 UTC FinishedAt: 2026-09-12 19:27:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvmt9d/series-workflowvmt9d-convert-artifact-2681512350/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 19:27:55 +0000 UTC FinishedAt: 2026-09-12 19:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 19:27:55 +0000 UTC FinishedAt: 2026-09-12 19:43:47 +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:*420a299d-ee5e-4c1f-bf13-8cf2eeaccbd7,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-workflowvmt9d/series-workflowvmt9d-convert-artifact-2681512350/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": "9f4a3394-fbda-4239-988e-a8b1e22c5b5e", "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-workflowvmt9d/series-workflowvmt9d-build-action-3189925508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 19:27:55 +0000 UTC FinishedAt: 2026-09-12 19:43:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*420a299d-ee5e-4c1f-bf13-8cf2eeaccbd7,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-workflowvmt9d/series-workflowvmt9d-convert-artifact-2681512350/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": "9f4a3394-fbda-4239-988e-a8b1e22c5b5e", "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-workflowvmt9d/series-workflowvmt9d-build-action-3189925508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 19:43:47 +0000 UTC FinishedAt: 2026-09-12 19:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 19:43:47 +0000 UTC FinishedAt: 2026-09-12 19:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 19:43:47 +0000 UTC FinishedAt: 2026-09-12 19:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 19:43:47 +0000 UTC FinishedAt: 2026-09-12 19:43:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvmt9d/series-workflowvmt9d-convert-artifact-2854590289/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 19:43:57 +0000 UTC FinishedAt: 2026-09-12 19:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 19:43:57 +0000 UTC FinishedAt: 2026-09-12 19:45:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f4a3394-fbda-4239-988e-a8b1e22c5b5e,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-workflowvmt9d/series-workflowvmt9d-build-action-3189925508/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-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 19:45:37 +0000 UTC FinishedAt: 2026-09-12 19:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 19:45:37 +0000 UTC FinishedAt: 2026-09-12 19:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 19:45:37 +0000 UTC FinishedAt: 2026-09-12 20:01:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 19:45:37 +0000 UTC FinishedAt: 2026-09-12 20:01:48 +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:*420a299d-ee5e-4c1f-bf13-8cf2eeaccbd7,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-workflowvmt9d/series-workflowvmt9d-convert-artifact-2854590289/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": "f74a2fc6-14eb-4eee-b0d8-01e8d7a847d5", "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-workflowvmt9d/series-workflowvmt9d-build-action-3207560477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 19:45:37 +0000 UTC FinishedAt: 2026-09-12 20:01:38 +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:*420a299d-ee5e-4c1f-bf13-8cf2eeaccbd7,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-workflowvmt9d/series-workflowvmt9d-convert-artifact-2854590289/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": "f74a2fc6-14eb-4eee-b0d8-01e8d7a847d5", "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-workflowvmt9d/series-workflowvmt9d-build-action-3207560477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 20:01:48 +0000 UTC FinishedAt: 2026-09-12 20:01:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 20:01:48 +0000 UTC FinishedAt: 2026-09-12 20:01:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 20:01:48 +0000 UTC FinishedAt: 2026-09-12 20:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 20:01:48 +0000 UTC FinishedAt: 2026-09-12 20:03:18 +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:*f74a2fc6-14eb-4eee-b0d8-01e8d7a847d5,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-workflowvmt9d/series-workflowvmt9d-build-action-3207560477/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-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 20:03:28 +0000 UTC FinishedAt: 2026-09-12 23:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 20:03:28 +0000 UTC FinishedAt: 2026-09-12 23:06:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9f4a3394-fbda-4239-988e-a8b1e22c5b5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f74a2fc6-14eb-4eee-b0d8-01e8d7a847d5,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-workflowvmt9d/series-workflowvmt9d-build-action-3189925508/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-workflowvmt9d/series-workflowvmt9d-build-action-3207560477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 20:03:28 +0000 UTC FinishedAt: 2026-09-12 20:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 20:03:28 +0000 UTC FinishedAt: 2026-09-12 20:03:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvmt9d/series-workflowvmt9d-convert-artifact-1505283462/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 20:03:28 +0000 UTC FinishedAt: 2026-09-12 20:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 20:03:28 +0000 UTC FinishedAt: 2026-09-12 20:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 20:03:28 +0000 UTC FinishedAt: 2026-09-12 20:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 20:03:38 +0000 UTC FinishedAt: 2026-09-12 23:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmt9d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","fq_codel_dequeue","codel_change","fq_codel_change","codel_dequeue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL"],"series_id":"8993537a-7a7e-47fc-a3df-a8657a7a330a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 20:03:38 +0000 UTC FinishedAt: 2026-09-12 23:06:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f4a3394-fbda-4239-988e-a8b1e22c5b5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f74a2fc6-14eb-4eee-b0d8-01e8d7a847d5,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-workflowvmt9d/series-workflowvmt9d-build-action-3189925508/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-workflowvmt9d/series-workflowvmt9d-build-action-3207560477/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-workflowvmt9d/series-workflowvmt9d-convert-artifact-1505283462/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,}