Name: series-workflowqmkdd Phase: Succeeded StartedAt: 2026-08-17 09:07:30 +0000 UTC FinishedAt: 2026-08-17 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[0] Phase: Succeeded StartedAt: 2026-08-17 09:07:30 +0000 UTC FinishedAt: 2026-08-17 10:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 09:07:30 +0000 UTC FinishedAt: 2026-08-17 10:44:48 +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": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL" ], "series_id": "8fb208eb-56d2-4e4d-81b6-ca20e76901b3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "seg6_local_input", "seg6_local_build_state", "input_action_end_dx4", "input_action_end_dt4" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7c2VnNl9sb2NhbF9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwMWFiZDI3ZmJmYTU1NjhhZjhmMmYzZTc4OTBhZTQzZTM5MzdhNjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMDo0MzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICYjNDM7MjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4gXHRpZiAoaXB0dW5uZWxfcHVsbF9vZmZsb2Fkcyhza2IpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xuJiM0MztcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7XG4mIzQzO1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7c2VnNl9sb2NhbF9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwMWFiZDI3ZmJmYTU1NjhhZjhmMmYzZTc4OTBhZTQzZTM5MzdhNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMDo0MzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuYwppbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCkBAIC0yNTYsNiAmIzQzOzI1NiwxMyBAQCBzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKQogCWlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwlpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7CiYjNDM7CQlpbnQgaWlmID0gSVA2Q0Ioc2tiKS0mZ3Q7aWlmOwomIzQzOwomIzQzOwkJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTsKJiM0MzsJCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gaWlmOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHNlZzZfbG9jYWwuYyBEZWNhcCBhbmQgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYGRlY2FwX2FuZF92YWxpZGF0ZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWw6IGBpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKWAuIEl0JiMzOTtzIGNoZWNraW5nIGlmIHRoZSBpbm5lciBwcm90b2NvbCBpcyBJUElQLCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIHRyYWZmaWMuIElmIGl0ICppcyogSVBJUCwgdGhlIGNvZGUgdGhlbiBjbGVhcnMgdGhlIGBJUENCKHNrYilgIGRhdGEgYW5kIHNldHMgYElQQ0Ioc2tiKS0mZ3Q7aWlmID0gaWlmYC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgY2xlYW5pbmcgdXAgc29tZSBvZiB0aGUgcHJldmlvdXMgSVAgY29udHJvbCBibG9jayBkYXRhIGFuZCBzZXR0aW5nIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcy4KClRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGluIHRoZSBsYXJnZXIgU0VHNiBjb250ZXh0LiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgYW5kIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IHRoaXMgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uIHNjaGVtZSBsb29rcyBsaWtlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgcm91dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWNhcF9hbmRfdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzEtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjMyOnN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9ODU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODYyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjg2MzpcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19FVEhFUk5FVCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODY0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NDM6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTQ0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4OT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MS17XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTkyOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5My1cdFx0Z290byBkcm9wO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTg0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTkwOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExOTEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTI2NT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyNjg6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2OS1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGFuZCBgc2VnNl9sb2NhbC5jYCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGZ1bmN0aW9ucywgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBpdCYjMzk7cyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElQUFJPVE9fSVBJUGAuIFRoYXQgZGVmaW5pdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29ubmVjdGlvbj8gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgc3BlY2lmaWMgZGF0YSBpcyBiZWluZyAmIzM0O2RlY2FwcGVkJiMzNDsgYW5kIHZhbGlkYXRlZCBpbiB0aGlzIGNvbnRleHQ/IFdoYXQga2luZCBvZiBJUHY2IHNlZ21lbnQgcm91dGluZyBpcyBsaWtlbHkgaW52b2x2ZWQsIGdpdmVuIHRoZSB1c2Ugb2YgYElQUFJPVE9fSVBJUGA/CgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIGZvciBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhlIHVzZSBvZiB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB3aXRoIGBJUElQYCwgcHJhY3RpY2FsbHkgc2NyZWFtcyB0aGF0IHRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBsaWtlbHkgaGVhdmlseSBpbmZsdWVuY2VkIGJ5LCBvciBkZXBlbmRlbnQgb24sIHRoaXMgSVB2NiBzZWdtZW50IHJvdXRpbmcgaW1wbGVtZW50YXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYmVjYXVzZSBJIHdhbnQgdG8gZ3Jhc3AgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gYXMgY29tcHJlaGVuc2l2ZWx5IGFzIEkgY2FuLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9ucyB3aWxsIGxldCBtZSBrbm93IHdoZXJlIHRvIGxvb2sgaWYgc29tZXRoaW5nIGlzbiYjMzk7dCBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgd2hhdCBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBzeXN0ZW0gZnVuY3Rpb24gY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBoZXJlIGlzIGBJUFY2X1NFRzZfTFdUVU5ORUxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFzc29jaWF0ZWQgd2l0aCBgSVBWNl9TRUc2X0xXVFVOTkVMYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hhdCBpdCBlbmFibGVzIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gVGltZSB0byBnZXQgZG93biB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTI3OT1jb25maWcgSVBWNl9QSU1TTV9WMlxuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgKnRydWUqIGRlcGVuZGVuY2llcz8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHR1bm5lbCBjb25zdHJ1Y3QsIHdoaWNoIG1lYW5zIHRoZXJlJiMzOTtzIGdvdCB0byBiZSBtb3JlIHVuZGVyIHRoZSBob29kIHRoYW4ganVzdCB0aGUgb2J2aW91cyBJUHY2IHN1cHBvcnQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBtb2R1bGVzIHRoaXMgdGhpbmcgaXMgbGVhbmluZyBvbi4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBrbm93IGl0JiMzOTtzICp1c2luZyogSVB2Ni4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byB0aGluZ3MgbGlrZSB0aGUgcmF3IHNvY2tldHMgbGF5ZXIsIHRoZSByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQgKHNwZWNpZmljYWxseSBGSUIgYW5kIFJJQiBzdHVmZiwgcHJvYmFibHkpLCBhbmQgbGlrZWx5IHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBuZXRmaWx0ZXIuIERlcGVuZGluZyBvbiBob3cgc29waGlzdGljYXRlZCB0aGUgaW1wbGVtZW50YXRpb24gaXMsIEkmIzM5O2QgYWxzbyBiZSBjdXJpb3VzIGlmIGl04oCZcyBsZXZlcmFnaW5nIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkIGNhcGFiaWxpdGllcyDigJMgdGhhdCBtaWdodCBnaXZlIG1lIGhpbnRzIGFib3V0IHRoZSB0YXJnZXQgcGxhdGZvcm1zIG9yIGludGVuZGVkIHVzZSBjYXNlcy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggYW55IGFkZHJlc3MgZmFtaWx5IHNwZWNpZmljIG1vZHVsZXMgb3IgaW5mcmFzdHJ1Y3R1cmUgbGlrZSBORCBvciBNTEQsIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgc2VnbWVudHMgYXJlIGJlaW5nIGluamVjdGVkLgoKU28gSSYjMzk7bSByZWFsbHkgbG9va2luZyBmb3IgaG93IGRlZXBseSBpbnRlZ3JhdGVkIHRoaXMgaXMgaW50byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBJcyBpdCBhIHNlbGYtY29udGFpbmVkIG1vZHVsZSwgb3IgZG9lcyBpdCB0aWdodGx5IGNvdXBsZSB3aXRoIG90aGVyIGJpdHMgb2YgdGhlIGtlcm5lbD8gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgY29tcGxleGl0eSBvZiB0cm91Ymxlc2hvb3RpbmcsIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cywgYW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuIEJhc2ljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93ICYjMzQ7Y2xlYW4mIzM0OyB0aGUgYWJzdHJhY3Rpb24gaXMsIG9yIGlmIGl0IGlzIGluaGVyZW50bHkgbWVzc3kgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gcHJlcGFyZWQgZm9yIGl0IHRvIGJlIGNvbXBsZXgsIGdpdmVuIHRoZSBuYXR1cmUgb2Ygc2VnbWVudCByb3V0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc2ltcGxlIGBtb2RpbmZvYCBvdXRwdXQgYW5kIGxvb2sgYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGFuZCBhbnkgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZSBwaWVjZXMgaW4gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODY6XHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG4gMjg3Olx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMjg4Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyODk6XHRcdHNlbGVjdCBMV1RVTk5FTFxuIDI5MDpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDI5MTpcdFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXG4gMjkyOlx0XHRoZWxwXG4gMjkzOlx0XHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxuIDI5NDpcdFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAyOTU6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIHdpdGggTDIgVHVubmVsaW5nIENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gaG9taW5nIGluIG9uIHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBjb25maWd1cmF0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGUgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gaG93IHRoZXkgYmVoYXZlLiBGaXJzdCwgSSBoYXZlIHRvIGNoZWNrIGlmIHRoZXkmIzM5O3JlIHN0YXRpYywgYW5kLCB5ZXMsIHRoZXkgYXJlLiBUaGF0JiMzOTtzIGdvb2QsIGl0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgYSBiaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZSBzcGVjaWZpYyBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB1dGlsaXplZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTM2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MzpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjQtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTg4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk4OTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkwLVx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA0LVx0XHRcdCAgICAgICBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IsIHNrYi1cdTAwM2VkZXYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNTpcdFx0XHQgICAgICAgTlVMTCwgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA2LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDc6XHRyZXR1cm4gaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYik7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwOC1kcm9wOlxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE1LVx0XHQub3B0YXR0cnNcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MTY6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfZHg0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBzZWc2X2FjdGlvbl90YWJsZWAgQ29udGV4dCoqCgpSaWdodCwgc28gdGhlc2UgaXRlbXMgSSYjMzk7bSBsb29raW5nIGF0IGFyZSBkZWZpbml0ZWx5IGxpbmtlZCB0byB0aGUgYHNlZzZfYWN0aW9uX3RhYmxlYC4gTm93LCBteSBuZXh0IG1vdmUgaXMgY2xlYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgdGFibGUuIE15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcgdGhyb3VnaCBwb3RlbnRpYWwgdXNlcy4uLiB3aGVyZSBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp1c2VkKj8gV2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGl0PyBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiBoZXJlLiBUaGlzIGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfYWN0aW9uX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc4OnN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzktXHR7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTgyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODM6XHRjb3VudCA9IEFSUkFZX1NJWkUoc2VnNl9hY3Rpb25fdGFibGUpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg1Olx0XHRkZXNjID0gXHUwMDI2c2VnNl9hY3Rpb25fdGFibGVbaV07XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ni1cdFx0aWYgKGRlc2MtXHUwMDNlYWN0aW9uID09IGFjdGlvbilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjctXHQgKiBvcHRpb25hbCwgaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgbWVzc2VkIHNvbWV0aGluZyB1cCBpbiB0aGVcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDY4Olx0ICogc2VnNl9hY3Rpb25fdGFibGUuIFRoZXJlZm9yZSwgdGhpcyBjaGVjayBpcyByZXF1aXJlZCBmb3IgU1J2NlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjktXHQgKiBiZWhhdmlvcnMgdG8gd29yayBwcm9wZXJseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IElucHV0IFByb2Nlc3NpbmcgUGVyc3BlY3RpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZmxvdyBvZiBkYXRhIHdpdGhpbiB0aGlzIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaW5wdXRzIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IHRoZSBgaW5wdXRgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgYmVpbmcgaW52b2tlZCBmcm9tIHRoZSBgc2VnNl9sb2NhbF9pbnB1dGAgY29udGV4dC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbm5lY3Rpb24uIFRoaXMgdGVsbHMgbWUgdGhhdCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgbGlrZWx5IHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBsb2NhbGx5LWRlc3RpbmVkIHBhY2tldHMgdXNpbmcgc2VnbWVudCByb3V0aW5nIHY2IChTUnY2KS4gVGhlIGZhY3QgdGhhdCBhIGZ1bmN0aW9uICpwb2ludGVyKiBpcyB1c2VkIGZvciBgaW5wdXRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbGV2ZWwgb2YgbW9kdWxhcml0eSBhbmQgY29uZmlndXJhYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiB0aG9zZSBsb2NhbGx5LWRlc3RpbmVkIHBhY2tldHMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGRpZmZlcmVudCB0eXBlcyBvZiBpbnB1dCBwcm9jZXNzaW5nIGFyZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgYGlucHV0YCBwb2ludGVyIHVzZWQuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRlcmlhIHRoYXQgZGV0ZXJtaW5lIHdoaWNoIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIHRoYXQgcG9pbnRlci4gSXMgaXQgYmFzZWQgb24gcGFja2V0IHR5cGUsIHNvdXJjZSwgZGVzdGluYXRpb24sIG9yIHNvbWUgb3RoZXIgaWRlbnRpZmllciB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU1J2Nj8gVGhhdCBjb25uZWN0aW9uIGlzIHRoZSBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGBzZWc2X2xvY2FsX2lucHV0YCBhbmQgdGhlIHBvc3NpYmxlIGBpbnB1dGAgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTU5OD1zdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYxNjpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MzctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjM5LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjUwOlx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NTEtfVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfbG9jYWxfb3BzID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVx0LmRlc3Ryb3lfc3RhdGVcdD0gc2VnNl9sb2NhbF9kZXN0cm95X3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XHQuaW5wdXRcdFx0PSBzZWc2X2xvY2FsX2lucHV0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODItXHQuZmlsbF9lbmNhcFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipJbnRlcm5hbCBOZXR3b3JrIE1vZHVsZSBBbmFseXNpcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzIHdpdGhpbiB0aGUgYGx3dHVubmVsX2VuY2FwX29wc2Agc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0lzIHRoaXMgc3RhdGljPyBJdCBmZWVscyBsaWtlIGFuIGVudHJ5IHBvaW50LCB3aGljaCB1c3VhbGx5IGxlYW5zIHRvd2FyZCBub24tc3RhdGljLiYjMzQ7IEFjdHVhbGx5LCBvbiBzZWNvbmQgdGhvdWdodCwgaXQgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSByZXN0IG9mIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogZnVuY3Rpb25zIGluIHRoaXMgZmlsZSB0aGF0IGFyZSBub24tc3RhdGljLiBJdCYjMzk7cyB1bnVzdWFsIGZvciBhbiBlbnRyeSBwb2ludCB0byBiZSBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBub3QgaW1wb3NzaWJsZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vZHVsZSBpcyBkZXNpZ25lZC4gSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIG1vZHVsZS4gQSBxdWljayBzY2FuIG9mIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJlc3Qgb3ZlcnZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTMzOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNDEtXHRcdFx0c3RydWN0IGluNl9hZGRyICpuaGFkZHIsIHUzMiB0YmxfaWQpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY4ODppbnQgX19pbml0IHNlZzZfbG9jYWxfaW5pdCh2b2lkKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDA5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBhbmQgUG90ZW50aWFsIEFsdGVybmF0aXZlcyoqCgpBbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSB0aGluayBhYm91dCB0aGUgYHNlZzZfbG9jYWxfaW5wdXRgIGZ1bmN0aW9uLiBJdCBpbW1lZGlhdGVseSBzdHJpa2VzIG1lIHRoYXQgdGhpcyBvbmUgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIGFuZCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG90aGVyIG1vZHVsZXMuIFRoaXMgY2hhcmFjdGVyaXN0aWMgbmF0dXJhbGx5IG1ha2VzIG1lIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBkZXNpZ24gaW1wbGljYXRpb25zLiBJcyB0aGlzIGRlbGliZXJhdGUgZW5jYXBzdWxhdGlvbiwgb3IgaXMgaXQgc2ltcGx5IGEgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRldGFpbD8KClRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhZGRyZXNzIGlzIHdoZXRoZXIgdGhlcmUgaXMgYW55ICpvdGhlciogZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0IHRoYXQgaXMgKm5vdCogc3RhdGljLCBzb21ldGhpbmcgdGhhdCBtaWdodCByZXByZXNlbnQgYW4gYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnQgb3IgYSBmdW5jdGlvbiB3aXRoIGJyb2FkZXIgdmlzaWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBzdGF0aWMgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGRpY3RhdGUgaG93IEkgY29udGludWUgbXkgaW52ZXN0aWdhdGlvbiwgYW5kIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlYmFzZSB3b3Jrcy4gSWRlbnRpZnlpbmcgd2hldGhlciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhpcyBpc3N1ZSBvciBub3QgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2ODg9aW50IF9faW5pdCBzZWc2X2xvY2FsX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNzI0OnZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRUc2IExvY2FsIElucHV0IEVudHJ5IFBvaW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBsd3R1bm5lbGAgaW5wdXQgd29ya3MsIGFuZCBpdCBsb29rcyBsaWtlIGBzZWc2X2xvY2FsX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gSG9sZCBvbiBhIHNlY29uZCwgdGhhdCBwcm9tcHQgaXMgbWFraW5nIG1lIHRoaW5rLiBJdCBwcmVmZXJzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgY29tcGlsZXIgaW5saW5lcyB0aG9zZSBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCByZW1vdmVzIGRpc3RpbmN0IHN5bWJvbHMsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGUgcHJvbXB0LiBCdXQgaGVyZSYjMzk7cyB0aGUgY2F0Y2g6IGlmIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB1c2VkIGVsc2V3aGVyZSwgZm9yIGV4YW1wbGUgaW4gYHNlZzZfbG9jYWxfb3BzYCwgdGhhdCBjb3VsZCBwcmV2ZW50IGlubGluaW5nLiBTbyBsZXQmIzM5O3MgY2hlY2sgaWYgYHNlZzZfbG9jYWxfaW5wdXRgICppcyogc3RhdGljLiBZZXAsIGl0IGlzLgoKQWxyaWdodCwgd2hhdCBlbHNlIGlzIHRoZXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBjYW5kaWRhdGVzLiBUaGlua2luZyB0aHJvdWdoIHRoaXMuLi4gSSB0aGluayBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgdGhlIHN0cm9uZ2VzdCBjb250ZW5kZXIsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBjb250ZXh0LiBJIHNlZSBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYCBhcyBhbm90aGVyIHBvc3NpYmlsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29ycmVjdCBpbiBteSBhc3N1bXB0aW9ucyB0aG91Z2gsIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgc2VnNl9sb2NhbF9pbnB1dGAgaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gY29uZmlybSBteSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzU6XHRcdHJldHVybiByYztcbjE2MzY6XHR9XG4xNjM3Olx0XG4xNjM4Olx0c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4xNjM5Olx0e1xuMTY0MDpcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSkge1xuMTY0MTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE2NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjQzOlx0XHR9XG4xNjQ0Olx0XG4xNjQ1Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcbjE2NDY6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX0xPQ0FMX0lOLFxuMTY0NzpcdFx0XHRcdCAgICAgICBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IsIHNrYi1cdTAwM2VkZXYsIE5VTEwsXG4xNjQ4Olx0XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG4xNjQ5Olx0XG4xNjUwOlx0XHRyZXR1cm4gc2VnNl9sb2NhbF9pbnB1dF9jb3JlKGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYik7XG4xNjUxOlx0fVxuMTY1MjpcdFxuMTY1MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2xvY2FsX3BvbGljeVtTRUc2X0xPQ0FMX01BWCAmIzQzOyAxXSA9IHtcbjE2NTQ6XHRcdFtTRUc2X0xPQ0FMX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBgc2VnNl9sb2NhbGAgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgYHNlZzZfbG9jYWxgIGNvbXBvbmVudHMuICpgc2VnNl9sb2NhbF9pbnB1dGAqIGFuZCAqYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAqLCB5ZWFoLCB0aGV5IHNlZW0gc29saWQsIHRoZXkmIzM5O3JlIGRvaW5nIHdoYXQgdGhleSBuZWVkIHRvLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uLCB3aGF0IGFib3V0ICpgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAqPyBUaGF0IG9uZSYjMzk7cyBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0IGFuZCBldmFsdWF0ZSBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGZ1bmN0aW9uaW5nIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHRoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2xvY2FsX2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDQxPXN0YXRpYyBpbnQgcGFyc2VfbmxhX2FjdGlvbihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjUwNy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTA4OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTA5LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY3OTpcdC5idWlsZF9zdGF0ZVx0PSBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXHQuZGVzdHJveV9zdGF0ZVx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzZWc2X2xvY2FsYCBNb2R1bGUgZm9yIEFQSSBTeW1ib2wgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgc2VnNl9sb2NhbGAgc3R1ZmYsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGJ1aWxkaW5nIHRoZSBsd3R1bm5lbCBzdGF0ZSB1c2luZyBgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAuIFRoZSBjaGFuZ2UgaXMgaW4gYGRlY2FwX2FuZF92YWxpZGF0ZWAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhlc2UgYXJlIGFjdGlvbnMgZm9yIGBzZWc2X2xvY2FsYCwgc28gbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcgYHNlZzZfbG9jYWxfaW5wdXRgIGFuZCBgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAgYXJlIGdvb2QgY2FuZGlkYXRlcy4KCldhaXQgYSBzZWNvbmQsIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSB3cmlua2xlLiBUaGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSByYXRpb25hbGUgaXMgdGhhdCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB0aGV5IGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIExvb2tpbmcgZm9yIGEgbm9uLXN0YXRpYyBvcHRpb24sIEkgc2VlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBpcyBub24tc3RhdGljLCBidXQgaXQgaXNuJiMzOTt0IHRoZSBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRoZSBBUEkgZW50cnlwb2ludCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU2luY2UgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIGFuIGVudHJ5IHBvaW50LCBhbmQgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0IHdvcmtzISBHcmVhdCEgSSYjMzk7bGwgZGVmaW5pdGVseSBpbmNsdWRlIGBzZWc2X2xvY2FsX2lucHV0YC4gSSYjMzk7bGwgYWxzbyBicmluZyBpbiBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYC4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLCBzaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGluIGBzZWc2X2FjdGlvbl90YWJsZWAuIFRoZXNlIHNob3VsZCBhbHNvIG5vdCBiZSBpbmxpbmVkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcmVzdHJpY3Rpb25zLiBUaGUgbWFpbiBjb25maWcgaXMgYElQVjZfU0VHNl9MV1RVTk5FTGAsIHdoaWNoIEkgZXhwZWN0LiBJJiMzOTttIGNoZWNraW5nIGZvciBvdGhlcnMgdG8gYmUgY2VydGFpbi4gYElQVjZgIGlzIHJlcXVpcmVkIGJ5IGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBhbmQgYExXVFVOTkVMYCBpcyBzZWxlY3RlZCBieSBpdC4gU28sIGBJUFY2X1NFRzZfTFdUVU5ORUxgIHNlZW1zIHRvIGJlIHRoZSBjb250cm9sbGluZyBvbmUuIEkmIzM5O20gZ29vZCB0byBnbyB0aGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdH1cbiAyMzE6XHRcbiAyMzI6XHRzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxuIDIzMzpcdHtcbiAyMzQ6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIDIzNTpcdFx0dW5zaWduZWQgaW50IG9mZiA9IDA7XG4gMjM2Olx0XG4gMjM3Olx0XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbiAyMzg6XHRcdGlmIChzcmggXHUwMDI2XHUwMDI2IHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0IFx1MDAzZSAwKVxuIDIzOTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjQwOlx0XG4gMjQxOlx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDI0MjpcdFx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbiAyNDM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0NDpcdCNlbmRpZlxuIDI0NTpcdFxuIDI0NjpcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmYsIHByb3RvLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiAyNDc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0ODpcdFxuIDI0OTpcdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxuIDI1MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjUxOlx0XG4gMjUyOlx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDI1NTpcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAyNTY6XHRcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gMjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTg6XHRcbiAyNTk6XHRcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiAyNjA6XHRcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuIDI2MTpcdFxuIDI2MjpcdFx0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuIDI2MzpcdFx0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFxuIDI2NjpcdFx0cmV0dXJuIHRydWU7XG4gMjY3Olx0fVxuIDI2ODpcdFxuIDI2OTpcdHN0YXRpYyB2b2lkIGFkdmFuY2VfbmV4dHNlZyhzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgc3RydWN0IGluNl9hZGRyICpkYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJUElQIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBmdW5jdGlvbmFsIGJ1Zywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYElQUFJPVE9fSVBJUGAgcGF0aC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjbGVhcmluZyBgSVBDQihza2IpYCBhbmQgcmVzdG9yaW5nIGBpaWZgLCB3aGljaCBpcyBnb29kLiBUaGUgbGFjayBvZiBjbGVhcmluZyBjb3VsZCBsZWFkIHRvIHByb2JsZW1zIHdpdGggdW5pbml0aWFsaXplZCBkYXRhIGRvd24gdGhlIGxpbmUgaW4gdGhlIElQdjQgc3RhY2ssIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgYSB3b3J0aHdoaWxlIGZpeCBhbmQsIHllYWgsIHNvbWV0aGluZyBJIHNob3VsZCBwcmlvcml0aXplIGZ1enppbmcgdG8gZW5zdXJlIGl0JiMzOTtzIHJvYnVzdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIGp1bXBpbmcgb3V0IGFyZSBgc2VnNl9sb2NhbF9pbnB1dGAsIGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBwYXRjaCBtZW50aW9ucyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gQWxyaWdodCwgaXQgZGVwZW5kcyBvbiBgSVBWNmAgYW5kIHNlbGVjdHMgYExXVFVOTkVMYCwgYERTVF9DQUNIRWAsIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBUaGF0JiMzOTtzIHJlYXNvbmFibGU7IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGl0c2VsZiBzZWVtcyBzdWZmaWNpZW50IHRvIGJlIGVuYWJsZWQuCgpOb3csIEkmIzM5O2xsIGNoZWNrIG9uIHRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcy4gTGV0JiMzOTtzIHNlZSBpZiBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGFyZSBzdGF0aWM7IFl1cCwgdGhleSBhcmUuIEFyZSB0aGV5IGlubGluZWQ/IE5vLCB0aGV5IGFyZSBub3QuIFRoZXkgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiBgc2VnNl9hY3Rpb25fdGFibGVgLCBzbyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gTWlnaHQgYmUgYmVzdCB0byBmb2N1cyBvbiBgc2VnNl9sb2NhbF9pbnB1dGAgaW5zdGVhZC4KCkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ4MgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2VnbWVudCBSb3V0aW5nIChTUnY2KSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhpcyBvdmVyLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gRnJvbSBteSBwZXJzcGVjdGl2ZSwgYElQVjZfU0VHNl9MV1RVTk5FTGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCYjMzk7cyB0cnVseSByZWxldmFudCBoZXJlLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gaW4gYSBtb3JlIGZvcm1hbCB3YXk6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBpcyBhIHNvbGlkICYjMzQ7dHJ1ZSYjMzQ7IGZyb20gbWUuCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIGlzIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgYnVnIHJlbGF0ZWQgdG8gSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGxvY2FsIHByb2Nlc3NpbmcuIFNwZWNpZmljYWxseSwgd2hlbiBhbiBJUHY0LWluLUlQdjYgcGFja2V0ICh1c2luZyBJUFBST1RPXF9JUElQKSBpcyBkZWNhcHN1bGF0ZWQsIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhc24mIzM5O3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZC4gVGhpcyBtZWFucyB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhayBpbnRvIHRoZSBJUHY0IHN0YWNrLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZXJyb3IgdGhhdCBuZWVkcyBpbW1lZGlhdGUgYWRkcmVzc2luZyBiZWNhdXNlIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBleHBvc2luZyB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB0aGUgbmV0d29yayBzdGFjay4gVGhpcyBpcyBhIGRpcmVjdCBmaXggd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNvbmNlcm5zIHBhY2tldCByZWFjaGFiaWxpdHkuCiogICAqKkZvY3VzU3ltYm9scyoqOiBUaGUgbGlrZWx5IGFyZWFzIG9mIGNvbmNlcm4gYXJlIGBzZWc2X2xvY2FsX2lucHV0YCwgYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgLCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHNlZ21lbnQgcm91dGluZyBwcm9jZXNzLiBJdCYjMzk7cyBvYnZpb3VzIHRvIG1lIHRoaXMgc2hvdWxkIGJlIGEgcHJpbWFyeSB0YXJnZXQgZm9yIHRob3JvdWdoIGFuYWx5c2lzLgoqICAgKipFbmFibGVDb25maWdzKio6IENvbmZpcm1pbmcsIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGlzIHRoZSBzaW5nbGUgY29uZmlndXJhdGlvbiBpdGVtIG9mIHNpZ25pZmljYW5jZS4KClNvLCBvdmVyYWxsLCBhIG5lY2Vzc2FyeSBmaXggZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGRhdGEgbGVha2FnZSBpbiBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBzbyBpdCB3YXJyYW50cyBzZXJpb3VzIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7c2VnNl9sb2NhbF9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X2xvY2FsX2J1aWxkX3N0YXRlJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUnY2KSBsb2NhbCBwcm9jZXNzaW5nIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhcyBub3QgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NC1pbi1JUHY2IHBhY2tldCAoSVBQUk9UT19JUElQKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyB1c2VkIGJ5IHRoZSBJUHY0IHN0YWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDFhYmQyN2ZiZmE1NTY4YWY4ZjJmM2U3ODkwYWU0M2UzOTM3YTYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTA6NDM6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKaW5kZXggMmI0MWU0YzBkZGRkMS4uOTVlYTBiNjI3MjlhYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuYwpAQCAtMjU2LDYgJiM0MzsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bykKIAlpZiAoaXB0dW5uZWxfcHVsbF9vZmZsb2Fkcyhza2IpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkgewomIzQzOwkJaW50IGlpZiA9IElQNkNCKHNrYiktJmd0O2lpZjsKJiM0MzsKJiM0MzsJCW1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7CiYjNDM7CQlJUENCKHNrYiktJmd0O2lpZiA9IGlpZjsKJiM0MzsJfQomIzQzOwogCXJldHVybiB0cnVlOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEyCgkJCQkJCQlvdXRwdXQ6IDIwOQoJCQkJCQkJdGhvdWdodHM6IDIwMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIGZvciBOZWVkc0tNU0FOPXRydWUqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFNwZWNpZmljYWxseSwgdGhpcyBsaW5lIGBtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO2AganVtcHMgb3V0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzaWduIG9mIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgS01TQU4gaXNzdWUuIFRoaXMgaXMgaW4gdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBkZWNhcHN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYW4gSVBJUCBwYWNrZXQgZnJvbSBJUHY2LgoKVGhlIGNvZGUgaXMgemVyb2luZyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWApIGFmdGVyIHJlY2VpdmluZyBhbiBJUElQIHBhY2tldCBmcm9tIGFuIElQdjYgcGFja2V0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBtaWdodCBoYXZlIGhhZCBnYXJiYWdlIGRhdGEgaW4gdGhpcyByZWdpb24gYW5kIHRoYXQgdGhlIElQdjQgY29kZSB3YXMgcG90ZW50aWFsbHkgdXNpbmcgaXQsIGNyZWF0aW5nIGEgcmlzay4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoICpmaXhlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgb3IgKmludHJvZHVjZXMqIG9uZSwgb3IsIHB1dCBhbm90aGVyIHdheSwgd2hldGhlciBpdCAqZXhwb3NlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgb3IgcGVyaGFwcywgKmFkZHJlc3NlcyogYW4gZXhpc3Rpbmcgcmlzay4gU2luY2UgdGhlIHBhdGNoICphZGRzKiB0aGUgYG1lbXNldGAsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGUgY29kZSAqYWRkcmVzc2VzKiBhbiBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLgoKSWYgaXQgKmFkZHJlc3NlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIEtNU0FOIGJlY29tZXMgY3J1Y2lhbC4gVGhpcyBpcyBiZWNhdXNlIEtNU0FOIGlzIHRoZSAqb25seSogdG9vbCB0aGF0IGNhbiByZWxpYWJseSBkZXRlY3QgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcGF0Y2ggYWN0dWFsbHkgKmZpeGVzKiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQsIGltcG9ydGFudGx5LCBkb2VzbiYjMzk7dCBjcmVhdGUgKm5ldyogb25lcy4gIEtBU0FOIGlzIGlycmVsZXZhbnQgaW4gdGhpcyBpbnN0YW5jZS4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGVycm9ycyAodXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMsIGV0Yy4pLCB3aGljaCBhcmUgbm90IHRoZSBwcm9ibGVtIGhlcmUuIEl0JiMzOTtzIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCB0aGF0JiMzOTtzIGNhdXNpbmcgY29uY2Vybi4KCldlIG5lZWQgdG8gY29uc2lkZXIgaWYgYElQQ0Ioc2tiKWAgaXMgZXZlciBpbml0aWFsaXplZCBhbmQgdXNlZCBwcmlvciB0byBkZWNhcHN1bGF0aW9uLiBJZiBpdCB3YXNuJiMzOTt0IGluaXRpYWxpemVkLCBLTVNBTiB3b3VsZCBoYXZlIGRldGVjdGVkIHRoYXQuIFRoZSBwYXRjaCBjb3JyZWN0cyBpdCBieSB6ZXJvaW5nIGl0IG91dC4gQnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZml4IGlzIGNvcnJlY3QuCgpJIGJlbGlldmUgS01TQU4gaXMgZXNzZW50aWFsIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggKmZpeGVzKiB0aGUgYnVnLCBhbmQgZG9lc24mIzM5O3QgcGFydGlhbGx5IGZpeCBpdCAobWVhbmluZyB0aGUgYnVnIHN0aWxsIGV4aXN0cyksIG9yIGludHJvZHVjZSBtb3JlIHNpbWlsYXIgYnVncy4gS01TQU4gd2lsbCB2ZXJpZnkgdGhlIG1lbW9yeSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCkluIHNob3J0LCBiZWNhdXNlIHRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ5IGluaXRpYWxpemluZyBgSVBDQihza2IpYCB3aXRoaW4gdGhlIGRlY2Fwc3VsYXRpb24gcGF0aCwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gS0FTQU4gaXMgdGhlIHdyb25nIHRvb2wgZm9yIHRoZSBqb2IuIEtNU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBtZW1zZXRgIHRvIGluaXRpYWxpemUgYElQQ0Ioc2tiKWAgKHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgd2l0aGluIGBza2ItXHUwMDNlY2JgKSB0byB6ZXJvIGR1cmluZyBJUHY2IHRvIElQdjQgZGVjYXBzdWxhdGlvbiAoYElQUFJPVE9fSVBJUGApLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVnLCB3aGVyZSB0aGUgSVB2NCBzdGFjayBsYXRlciByZWFkcyBmaWVsZHMgZnJvbSBgSVBDQihza2IpYCB0aGF0IHdlcmUgbmV2ZXIgaW5pdGlhbGl6ZWQgKG9yIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemVkIGJ5IHRoZSBJUHY2IGxheWVyKS4gQmVjYXVzZSBLQVNBTiBvbmx5IGRldGVjdHMgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCB3b3VsZCBub3QgZGV0ZWN0IGlmIGBJUENCKHNrYilgIGlzIHJlYWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGNvcnJlY3RseSBhbmQgZnVsbHkgcmVzb2x2ZXMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjA3Ljg5Mjc1ODkxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NjE1MTc3NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfbG9jYWxfaW5wdXRcIixcbiAgICBcInNlZzZfbG9jYWxfYnVpbGRfc3RhdGVcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHg0XCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R0NFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBtZW1zZXRgIHRvIGluaXRpYWxpemUgYElQQ0Ioc2tiKWAgKHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgd2l0aGluIGBza2ItXFx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWUsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUnY2KSBsb2NhbCBwcm9jZXNzaW5nIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhcyBub3QgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NC1pbi1JUHY2IHBhY2tldCAoSVBQUk9UT19JUElQKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyB1c2VkIGJ5IHRoZSBJUHY0IHN0YWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0MzowNy44OTI3NjU3NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzgzNzY1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMDFhYmQyN2ZiZmE1NTY4YWY4ZjJmM2U3ODkwYWU0M2UzOTM3YTYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDEwOjQzOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXFxuKysrIGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXFxuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcXG4gXFx0aWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbitcXHRcXHRpbnQgaWlmID0gSVA2Q0Ioc2tiKS1cXHUwMDNlaWlmO1xcbitcXG4rXFx0XFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcXG4rXFx0XFx0SVBDQihza2IpLVxcdTAwM2VpaWYgPSBpaWY7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0MzowOS40MzIxMDgwNDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTE0NzI0NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWc2X2xvY2FsX2lucHV0XCIsXG4gICAgXCJzZWc2X2xvY2FsX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9kdDRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzAxYWJkMjdmYmZhNTU2OGFmOGYyZjNlNzg5MGFlNDNlMzkzN2E2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEwOjQzOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jIGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXG5pbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXG4rKysgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbkBAIC0yNTYsNiArMjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4gXHRpZiAoaXB0dW5uZWxfcHVsbF9vZmZsb2Fkcyhza2IpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4rXHRcdGludCBpaWYgPSBJUDZDQihza2IpLVx1MDAzZWlpZjtcbitcbitcdFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcbitcdFx0SVBDQihza2IpLVx1MDAzZWlpZiA9IGlpZjtcbitcdH1cbitcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjA5LjQzMjExMDI4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQyMzIzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzZWc2X2xvY2FsLmMgRGVjYXAgYW5kIFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgaXQncyBtb2RpZnlpbmcgdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGNvbmRpdGlvbmFsOiBgaWYgKHByb3RvID09IElQUFJPVE9fSVBJUClgLiBJdCdzIGNoZWNraW5nIGlmIHRoZSBpbm5lciBwcm90b2NvbCBpcyBJUElQLCB3aGljaCBzdWdnZXN0cyBpdCdzIGRlYWxpbmcgd2l0aCBlbmNhcHN1bGF0ZWQgdHJhZmZpYy4gSWYgaXQgKmlzKiBJUElQLCB0aGUgY29kZSB0aGVuIGNsZWFycyB0aGUgYElQQ0Ioc2tiKWAgZGF0YSBhbmQgc2V0cyBgSVBDQihza2IpLVx1MDAzZWlpZiA9IGlpZmAuIFRoaXMgbGlrZWx5IGludm9sdmVzIGNsZWFuaW5nIHVwIHNvbWUgb2YgdGhlIHByZXZpb3VzIElQIGNvbnRyb2wgYmxvY2sgZGF0YSBhbmQgc2V0dGluZyB0aGUgaW5jb21pbmcgaW50ZXJmYWNlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcy5cblxuVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYGRlY2FwX2FuZF92YWxpZGF0ZWAgaW4gdGhlIGxhcmdlciBTRUc2IGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgdGhpcyBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gc2NoZW1lIGxvb2tzIGxpa2UgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSByb3V0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MTIuODU2MzQ1MjgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI2ODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWNhcF9hbmRfdmFsaWRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMTY9c3RhdGljIHN0cnVjdCBpcHY2X3NyX2hkciAqZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzMjpzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTg1Nj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHgyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODYyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo4NjM6XFx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0VUSEVSTkVUKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODY0LVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MzY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0Mi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTQzOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUFY2KSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTQ0LVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05ODk9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MS17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk5MjpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5My1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTE4ND1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4OS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTE5MDpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExOTEtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyNjU9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjcte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjY4OlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUFY2KSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2OS1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjEyLjk3MDYxODcxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDM1MTcyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGRlY2FwX2FuZF92YWxpZGF0ZWAgYW5kIGBzZWc2X2xvY2FsLmNgIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBmdW5jdGlvbnMsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgaXQncyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElQUFJPVE9fSVBJUGAuIFRoYXQgZGVmaW5pdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29ubmVjdGlvbj8gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBxdWVzdGlvbnMgaW4gbXkgaGVhZDogV2hhdCBzcGVjaWZpYyBkYXRhIGlzIGJlaW5nIFwiZGVjYXBwZWRcIiBhbmQgdmFsaWRhdGVkIGluIHRoaXMgY29udGV4dD8gV2hhdCBraW5kIG9mIElQdjYgc2VnbWVudCByb3V0aW5nIGlzIGxpa2VseSBpbnZvbHZlZCwgZ2l2ZW4gdGhlIHVzZSBvZiBgSVBQUk9UT19JUElQYD9cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFRoZSB1c2Ugb2YgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgd2l0aCBgSVBJUGAsIHByYWN0aWNhbGx5IHNjcmVhbXMgdGhhdCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgbGlrZWx5IGhlYXZpbHkgaW5mbHVlbmNlZCBieSwgb3IgZGVwZW5kZW50IG9uLCB0aGlzIElQdjYgc2VnbWVudCByb3V0aW5nIGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGJlY2F1c2UgSSB3YW50IHRvIGdyYXNwIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtIGFzIGNvbXByZWhlbnNpdmVseSBhcyBJIGNhbi4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbnMgd2lsbCBsZXQgbWUga25vdyB3aGVyZSB0byBsb29rIGlmIHNvbWV0aGluZyBpc24ndCBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgd2hhdCBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBzeXN0ZW0gZnVuY3Rpb24gY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MTcuODc0MTM4MDUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTkwNDY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICs9IGNhbGlwc28ub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjYtaXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MTguMDY2MDQ2OTc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDAyMjYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGhlcmUgaXMgYElQVjZfU0VHNl9MV1RVTk5FTGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3MgZGlnIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBzaG91bGQgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXNzb2NpYXRlZCB3aXRoIGBJUFY2X1NFRzZfTFdUVU5ORUxgIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgdGhpbmcgYWN0dWFsbHkgKmRvZXMqIGFuZCB3aGF0IGl0IGVuYWJsZXMgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBUaW1lIHRvIGdldCBkb3duIHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MjIuNjMwMDc0MzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTQyMzU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MjMuNzc5NTAyMTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMTM0NjEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBJUFY2X1NFRzZfTFdUVU5ORUxgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgKnRydWUqIGRlcGVuZGVuY2llcz8gV2UncmUgZGVhbGluZyB3aXRoIGEgdHVubmVsIGNvbnN0cnVjdCwgd2hpY2ggbWVhbnMgdGhlcmUncyBnb3QgdG8gYmUgbW9yZSB1bmRlciB0aGUgaG9vZCB0aGFuIGp1c3QgdGhlIG9idmlvdXMgSVB2NiBzdXBwb3J0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBtb2R1bGVzIHRoaXMgdGhpbmcgaXMgbGVhbmluZyBvbi4gSXQncyBub3QgZW5vdWdoIHRvIGtub3cgaXQncyAqdXNpbmcqIElQdjYuXG5cbkknbSBleHBlY3RpbmcgdG8gZmluZCByZWZlcmVuY2VzIHRvIHRoaW5ncyBsaWtlIHRoZSByYXcgc29ja2V0cyBsYXllciwgdGhlIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCAoc3BlY2lmaWNhbGx5IEZJQiBhbmQgUklCIHN0dWZmLCBwcm9iYWJseSksIGFuZCBsaWtlbHkgc29tZSBpbnRlcmFjdGlvbiB3aXRoIG5ldGZpbHRlci4gRGVwZW5kaW5nIG9uIGhvdyBzb3BoaXN0aWNhdGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBpcywgSSdkIGFsc28gYmUgY3VyaW91cyBpZiBpdOKAmXMgbGV2ZXJhZ2luZyBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMg4oCTIHRoYXQgbWlnaHQgZ2l2ZSBtZSBoaW50cyBhYm91dCB0aGUgdGFyZ2V0IHBsYXRmb3JtcyBvciBpbnRlbmRlZCB1c2UgY2FzZXMuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGFueSBhZGRyZXNzIGZhbWlseSBzcGVjaWZpYyBtb2R1bGVzIG9yIGluZnJhc3RydWN0dXJlIGxpa2UgTkQgb3IgTUxELCBkZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNlZ21lbnRzIGFyZSBiZWluZyBpbmplY3RlZC5cblxuU28gSSdtIHJlYWxseSBsb29raW5nIGZvciBob3cgZGVlcGx5IGludGVncmF0ZWQgdGhpcyBpcyBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suIElzIGl0IGEgc2VsZi1jb250YWluZWQgbW9kdWxlLCBvciBkb2VzIGl0IHRpZ2h0bHkgY291cGxlIHdpdGggb3RoZXIgYml0cyBvZiB0aGUga2VybmVsPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb21wbGV4aXR5IG9mIHRyb3VibGVzaG9vdGluZywgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgXCJjbGVhblwiIHRoZSBhYnN0cmFjdGlvbiBpcywgb3IgaWYgaXQgaXMgaW5oZXJlbnRseSBtZXNzeSBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSdtIHByZXBhcmVkIGZvciBpdCB0byBiZSBjb21wbGV4LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHNlZ21lbnQgcm91dGluZy4gSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc2ltcGxlIGBtb2RpbmZvYCBvdXRwdXQgYW5kIGxvb2sgYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGFuZCBhbnkgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZSBwaWVjZXMgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjI3LjcwMDg1MTE2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NjpcXHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxuIDI4NzpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMjg4OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyODk6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDI5MDpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDI5MTpcXHRcXHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG4gMjkyOlxcdFxcdGhlbHBcXG4gMjkzOlxcdFxcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XFxuIDI5NDpcXHRcXHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxcbiAyOTU6XFx0XFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MjcuNzAwOTM5NjU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDQyMzc4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBMMiBUdW5uZWxpbmcgQ29kZSoqXG5cblJpZ2h0LCBzbyBJJ20gaG9taW5nIGluIG9uIHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBjb25maWd1cmF0aW9uIOKAkyB0aGF0J3MgdGhlIGNvcmUgb2Ygd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZSBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiBob3cgdGhleSBiZWhhdmUuIEZpcnN0LCBJIGhhdmUgdG8gY2hlY2sgaWYgdGhleSdyZSBzdGF0aWMsIGFuZCwgeWVzLCB0aGV5IGFyZS4gVGhhdCdzIGdvb2QsIGl0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgYSBiaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZSBzcGVjaWZpYyBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB1dGlsaXplZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjMxLjIwNTE4MDI4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMTg1NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlucHV0X2FjdGlvbl9lbmRfZHg0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTM2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MzpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTY0LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk4OC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTg5OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkwLVxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA0LVxcdFxcdFxcdCAgICAgICBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNTpcXHRcXHRcXHQgICAgICAgTlVMTCwgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNzpcXHRyZXR1cm4gaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA4LWRyb3A6XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3OD1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE1LVxcdFxcdC5vcHRhdHRyc1xcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTE2OlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MzEuMzg2MzcwMjAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDQyNDE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc2VnNl9hY3Rpb25fdGFibGVgIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhlc2UgaXRlbXMgSSdtIGxvb2tpbmcgYXQgYXJlIGRlZmluaXRlbHkgbGlua2VkIHRvIHRoZSBgc2VnNl9hY3Rpb25fdGFibGVgLiBOb3csIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyB0YWJsZS4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHBvdGVudGlhbCB1c2VzLi4uIHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgKnVzZWQqPyBXaGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBkZXBlbmRlbnQgb24gaXQ/IEkgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUgdG8gc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaGVyZS4gVGhpcyBpcyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MzQuNzkwNjE0NDg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQ1OTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2FjdGlvbl90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MjE9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzctXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0Nzg6c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzktXFx0e1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODM6XFx0Y291bnQgPSBBUlJBWV9TSVpFKHNlZzZfYWN0aW9uX3RhYmxlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg1OlxcdFxcdGRlc2MgPSBcXHUwMDI2c2VnNl9hY3Rpb25fdGFibGVbaV07XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODYtXFx0XFx0aWYgKGRlc2MtXFx1MDAzZWFjdGlvbiA9PSBhY3Rpb24pXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQ2Ny1cXHQgKiBvcHRpb25hbCwgaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgbWVzc2VkIHNvbWV0aGluZyB1cCBpbiB0aGVcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQ2ODpcXHQgKiBzZWc2X2FjdGlvbl90YWJsZS4gVGhlcmVmb3JlLCB0aGlzIGNoZWNrIGlzIHJlcXVpcmVkIGZvciBTUnY2XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjktXFx0ICogYmVoYXZpb3JzIHRvIHdvcmsgcHJvcGVybHkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjM0Ljg4MjA4MDgxM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ3OTMwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBJbnB1dCBQcm9jZXNzaW5nIFBlcnNwZWN0aXZlKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGRhdGEgd2l0aGluIHRoaXMgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpbnB1dHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIGBpbnB1dGAgZnVuY3Rpb24gcG9pbnRlciBpcyBiZWluZyBpbnZva2VkIGZyb20gdGhlIGBzZWc2X2xvY2FsX2lucHV0YCBjb250ZXh0LiBUaGF0J3MgdGhlIGtleSBjb25uZWN0aW9uLiBUaGlzIHRlbGxzIG1lIHRoYXQgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIGxpa2VseSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgbG9jYWxseS1kZXN0aW5lZCBwYWNrZXRzIHVzaW5nIHNlZ21lbnQgcm91dGluZyB2NiAoU1J2NikuIFRoZSBmYWN0IHRoYXQgYSBmdW5jdGlvbiAqcG9pbnRlciogaXMgdXNlZCBmb3IgYGlucHV0YCBzdHJvbmdseSBzdWdnZXN0cyBhIGxldmVsIG9mIG1vZHVsYXJpdHkgYW5kIGNvbmZpZ3VyYWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2YgdGhvc2UgbG9jYWxseS1kZXN0aW5lZCBwYWNrZXRzLiBJdCdzIGxpa2VseSB0aGF0IGRpZmZlcmVudCB0eXBlcyBvZiBpbnB1dCBwcm9jZXNzaW5nIGFyZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgYGlucHV0YCBwb2ludGVyIHVzZWQuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgdGhhdCBkZXRlcm1pbmUgd2hpY2ggZnVuY3Rpb24gaXMgYXNzaWduZWQgdG8gdGhhdCBwb2ludGVyLiBJcyBpdCBiYXNlZCBvbiBwYWNrZXQgdHlwZSwgc291cmNlLCBkZXN0aW5hdGlvbiwgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyIHdpdGhpbiB0aGUgY29udGV4dCBvZiBTUnY2PyBUaGF0IGNvbm5lY3Rpb24gaXMgdGhlIHBvaW50LiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSBgc2VnNl9sb2NhbF9pbnB1dGAgYW5kIHRoZSBwb3NzaWJsZSBgaW5wdXRgIGZ1bmN0aW9ucyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0MzozOS4wMzAwMTM3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyNjk0MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTg9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTY6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzOS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XFx0XFx0XFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NTA6XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY1MS19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XFx0LmlucHV0XFx0XFx0PSBzZWc2X2xvY2FsX2lucHV0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgyLVxcdC5maWxsX2VuY2FwXFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjM5LjA5MjI4NzQ1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ0NzIzODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JraW5nIGV4cGVydDpcblxuKipJbnRlcm5hbCBOZXR3b3JrIE1vZHVsZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2VnNl9sb2NhbF9pbnB1dGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW5jb21pbmcgcGFja2V0cyB3aXRoaW4gdGhlIGBsd3R1bm5lbF9lbmNhcF9vcHNgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIHN0YXRpYz8gSXQgZmVlbHMgbGlrZSBhbiBlbnRyeSBwb2ludCwgd2hpY2ggdXN1YWxseSBsZWFucyB0b3dhcmQgbm9uLXN0YXRpYy5cIiBBY3R1YWxseSwgb24gc2Vjb25kIHRob3VnaHQsIGl0ICppcyogc3RhdGljLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgcmVzdCBvZiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdGhhdCBhcmUgbm9uLXN0YXRpYy4gSXQncyB1bnVzdWFsIGZvciBhbiBlbnRyeSBwb2ludCB0byBiZSBzdGF0aWMsIGJ1dCBpdCdzIG5vdCBpbXBvc3NpYmxlLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtb2R1bGUgaXMgZGVzaWduZWQuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBtb2R1bGUuIEEgcXVpY2sgc2NhbiBvZiBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6NDIuNzM3MDE1Njg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzM3MTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI3OT1zZWc2X2xvb2t1cF9hbnlfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMzktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjM0MDppbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNDEtXFx0XFx0XFx0c3RydWN0IGluNl9hZGRyICpuaGFkZHIsIHUzMiB0YmxfaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjg3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjg4OmludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0Mzo0Mi43OTQzOTQ3MTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMzY5NzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBhbmQgUG90ZW50aWFsIEFsdGVybmF0aXZlcyoqXG5cbkFscmlnaHQsIGxldCBtZSBxdWlja2x5IHRoaW5rIGFib3V0IHRoZSBgc2VnNl9sb2NhbF9pbnB1dGAgZnVuY3Rpb24uIEl0IGltbWVkaWF0ZWx5IHN0cmlrZXMgbWUgdGhhdCB0aGlzIG9uZSBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdCwgYW5kIGl0J3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIGNoYXJhY3RlcmlzdGljIG5hdHVyYWxseSBtYWtlcyBtZSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgZGVzaWduIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBkZWxpYmVyYXRlIGVuY2Fwc3VsYXRpb24sIG9yIGlzIGl0IHNpbXBseSBhIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkZXRhaWw/XG5cblRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhZGRyZXNzIGlzIHdoZXRoZXIgdGhlcmUgaXMgYW55ICpvdGhlciogZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0IHRoYXQgaXMgKm5vdCogc3RhdGljLCBzb21ldGhpbmcgdGhhdCBtaWdodCByZXByZXNlbnQgYW4gYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnQgb3IgYSBmdW5jdGlvbiB3aXRoIGJyb2FkZXIgdmlzaWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBzdGF0aWMgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGRpY3RhdGUgaG93IEkgY29udGludWUgbXkgaW52ZXN0aWdhdGlvbiwgYW5kIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlYmFzZSB3b3Jrcy4gSWRlbnRpZnlpbmcgd2hldGhlciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhpcyBpc3N1ZSBvciBub3QgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6NDcuMzA4MDk2NTQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDU2MzI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjg4PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyNDp2b2lkIHNlZzZfbG9jYWxfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNzI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6NDcuMzc4NjYzNDg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTgwNjk4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRUc2IExvY2FsIElucHV0IEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgbHd0dW5uZWxgIGlucHV0IHdvcmtzLCBhbmQgaXQgbG9va3MgbGlrZSBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQgcHJvbXB0IGlzIG1ha2luZyBtZSB0aGluay4gSXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGNvbXBpbGVyIGlubGluZXMgdGhvc2UgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggcmVtb3ZlcyBkaXN0aW5jdCBzeW1ib2xzLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgdGhlIHByb21wdC4gQnV0IGhlcmUncyB0aGUgY2F0Y2g6IGlmIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB1c2VkIGVsc2V3aGVyZSwgZm9yIGV4YW1wbGUgaW4gYHNlZzZfbG9jYWxfb3BzYCwgdGhhdCBjb3VsZCBwcmV2ZW50IGlubGluaW5nLiBTbyBsZXQncyBjaGVjayBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgKmlzKiBzdGF0aWMuIFllcCwgaXQgaXMuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyB0aGVyZT8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgY2FuZGlkYXRlcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLi4uIEkgdGhpbmsgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIHRoZSBzdHJvbmdlc3QgY29udGVuZGVyLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgY29udGV4dC4gSSBzZWUgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgYXMgYW5vdGhlciBwb3NzaWJpbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29ycmVjdCBpbiBteSBhc3N1bXB0aW9ucyB0aG91Z2gsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBzZWc2X2xvY2FsX2lucHV0YCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCB0byBjb25maXJtIG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjUyLjA3NjczNTU0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MzU6XFx0XFx0cmV0dXJuIHJjO1xcbjE2MzY6XFx0fVxcbjE2Mzc6XFx0XFxuMTYzODpcXHRzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNjM5OlxcdHtcXG4xNjQwOlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQVjYpKSB7XFxuMTY0MTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNjQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2NDM6XFx0XFx0fVxcbjE2NDQ6XFx0XFxuMTY0NTpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bmZfaG9va3NfbHd0dW5uZWxfZW5hYmxlZCkpXFxuMTY0NjpcXHRcXHRcXHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0lQVjYsIE5GX0lORVRfTE9DQUxfSU4sXFxuMTY0NzpcXHRcXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxuMTY0ODpcXHRcXHRcXHRcXHQgICAgICAgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKTtcXG4xNjQ5OlxcdFxcbjE2NTA6XFx0XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4xNjUxOlxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfbG9jYWxfcG9saWN5W1NFRzZfTE9DQUxfTUFYICsgMV0gPSB7XFxuMTY1NDpcXHRcXHRbU0VHNl9MT0NBTF9BQ1RJT05dXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0Mzo1Mi4wNzY4NjcwMzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMDA2MDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIGBzZWc2X2xvY2FsYCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgYHNlZzZfbG9jYWxgIGNvbXBvbmVudHMuICpgc2VnNl9sb2NhbF9pbnB1dGAqIGFuZCAqYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAqLCB5ZWFoLCB0aGV5IHNlZW0gc29saWQsIHRoZXkncmUgZG9pbmcgd2hhdCB0aGV5IG5lZWQgdG8uIEJ1dCwgYW5kIHRoaXMgaXMgd2hlcmUgSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiwgd2hhdCBhYm91dCAqYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgKj8gVGhhdCBvbmUncyBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0IGFuZCBldmFsdWF0ZSBpdHMgcm9sZSBhbmQgaG93IGl0J3MgZnVuY3Rpb25pbmcgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgdGhlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjU1LjE3NjkzMDA3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyNzc0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9idWlsZF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0NDE9c3RhdGljIGludCBwYXJzZV9ubGFfYWN0aW9uKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1MDctXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI1MDg6c3RhdGljIGludCBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTA5LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2Nzk6XFx0LmJ1aWxkX3N0YXRlXFx0PSBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjU1LjI2ODIxMzYzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIxNDYyOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgc2VnNl9sb2NhbGAgTW9kdWxlIGZvciBBUEkgU3ltYm9sIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsYCBzdHVmZiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYnVpbGRpbmcgdGhlIGx3dHVubmVsIHN0YXRlIHVzaW5nIGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYC4gVGhlIGNoYW5nZSBpcyBpbiBgZGVjYXBfYW5kX3ZhbGlkYXRlYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBUaGVzZSBhcmUgYWN0aW9ucyBmb3IgYHNlZzZfbG9jYWxgLCBzbyBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbiBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIHRoaW5raW5nIGBzZWc2X2xvY2FsX2lucHV0YCBhbmQgYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgIGFyZSBnb29kIGNhbmRpZGF0ZXMuXG5cbldhaXQgYSBzZWNvbmQsIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMuIFRoYXQncyBhIGJpdCBvZiBhIHdyaW5rbGUuIFRoZSBpbnN0cnVjdGlvbnMgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgYW5kIHRoZXkgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBMb29raW5nIGZvciBhIG5vbi1zdGF0aWMgb3B0aW9uLCBJIHNlZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgaXMgbm9uLXN0YXRpYywgYnV0IGl0IGlzbid0IHRoZSBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRoZSBBUEkgZW50cnlwb2ludCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU2luY2UgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIGFuIGVudHJ5IHBvaW50LCBhbmQgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgaXQgc2hvdWxkbid0IGJlIGlubGluZWQuIFRoYXQgd29ya3MhIEdyZWF0ISBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgc2VnNl9sb2NhbF9pbnB1dGAuIEknbGwgYWxzbyBicmluZyBpbiBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYC5cblxuSSdtIGFsc28gY29uc2lkZXJpbmcgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgc2luY2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBpbiBgc2VnNl9hY3Rpb25fdGFibGVgLiBUaGVzZSBzaG91bGQgYWxzbyBub3QgYmUgaW5saW5lZC5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciByZXN0cmljdGlvbnMuIFRoZSBtYWluIGNvbmZpZyBpcyBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgd2hpY2ggSSBleHBlY3QuIEknbSBjaGVja2luZyBmb3Igb3RoZXJzIHRvIGJlIGNlcnRhaW4uIGBJUFY2YCBpcyByZXF1aXJlZCBieSBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBMV1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgaXQuIFNvLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBzZWVtcyB0byBiZSB0aGUgY29udHJvbGxpbmcgb25lLiBJJ20gZ29vZCB0byBnbyB0aGVyZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYGRlY2FwX2FuZF92YWxpZGF0ZWAgaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQ0OjAyLjg4OTY3OTQyMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHR9XFxuIDIzMTpcXHRcXG4gMjMyOlxcdHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxuIDIzMzpcXHR7XFxuIDIzNDpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gMjM1OlxcdFxcdHVuc2lnbmVkIGludCBvZmYgPSAwO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcXG4gMjM4OlxcdFxcdGlmIChzcmggXFx1MDAyNlxcdTAwMjYgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0IFxcdTAwM2UgMClcXG4gMjM5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQwOlxcdFxcbiAyNDE6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAyNDI6XFx0XFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNDQ6XFx0I2VuZGlmXFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNm9mZiwgcHJvdG8sIE5VTEwsIE5VTEwpIFxcdTAwM2MgMClcXG4gMjQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDI1NTpcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAyNTY6XFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbiAyNjA6XFx0XFx0XFx0aW50IGlpZiA9IElQNkNCKHNrYiktXFx1MDAzZWlpZjtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcXG4gMjYzOlxcdFxcdFxcdElQQ0Ioc2tiKS1cXHUwMDNlaWlmID0gaWlmO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFxuIDI2NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIHZvaWQgYWR2YW5jZV9uZXh0c2VnKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDowMi44ODk4MDkxMTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxMDk1MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQSVAgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBJUFBST1RPX0lQSVBgIHBhdGguIEl0IGxvb2tzIGxpa2UgaXQncyBjbGVhcmluZyBgSVBDQihza2IpYCBhbmQgcmVzdG9yaW5nIGBpaWZgLCB3aGljaCBpcyBnb29kLiBUaGUgbGFjayBvZiBjbGVhcmluZyBjb3VsZCBsZWFkIHRvIHByb2JsZW1zIHdpdGggdW5pbml0aWFsaXplZCBkYXRhIGRvd24gdGhlIGxpbmUgaW4gdGhlIElQdjQgc3RhY2ssIHNvIGl0J3MgZGVmaW5pdGVseSBhIHdvcnRod2hpbGUgZml4IGFuZCwgeWVhaCwgc29tZXRoaW5nIEkgc2hvdWxkIHByaW9yaXRpemUgZnV6emluZyB0byBlbnN1cmUgaXQncyByb2J1c3QuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGF0IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXJlIGBzZWc2X2xvY2FsX2lucHV0YCwgYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgLCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgcGF0Y2ggbWVudGlvbnMgYElQVjZfU0VHNl9MV1RVTk5FTGAuIExldCBtZSBxdWlja2x5IGNoZWNrIGl0cyBkZXBlbmRlbmNpZXMuIEFscmlnaHQsIGl0IGRlcGVuZHMgb24gYElQVjZgIGFuZCBzZWxlY3RzIGBMV1RVTk5FTGAsIGBEU1RfQ0FDSEVgLCBhbmQgYElQVjZfTVVMVElQTEVfVEFCTEVTYC4gVGhhdCdzIHJlYXNvbmFibGU7IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGl0c2VsZiBzZWVtcyBzdWZmaWNpZW50IHRvIGJlIGVuYWJsZWQuXG5cbk5vdywgSSdsbCBjaGVjayBvbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIExldCdzIHNlZSBpZiBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGFyZSBzdGF0aWM7IFl1cCwgdGhleSBhcmUuIEFyZSB0aGV5IGlubGluZWQ/IE5vLCB0aGV5IGFyZSBub3QuIFRoZXkgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiBgc2VnNl9hY3Rpb25fdGFibGVgLCBzbyB0aGV5J3JlIG5vdCBpbmxpbmVkLiBNaWdodCBiZSBiZXN0IHRvIGZvY3VzIG9uIGBzZWc2X2xvY2FsX2lucHV0YCBpbnN0ZWFkLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDQ6MDguNjAwNzY0NTgxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMzgzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9MjQ9aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgKz0gY2FsaXBzby5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MjU6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUwpICs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNi1pcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSArPSBzZWc2X2htYWMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDowOC43NjY4MDY3NDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5MjQ3MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBvdmVyLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBGcm9tIG15IHBlcnNwZWN0aXZlLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgdHJ1bHkgcmVsZXZhbnQgaGVyZS5cblxuTGV0J3MgYnJlYWsgaXQgZG93biBpbiBhIG1vcmUgZm9ybWFsIHdheTpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IEFic29sdXRlbHkuIFRoaXMgaXMgYSBzb2xpZCBcInRydWVcIiBmcm9tIG1lLlxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgaXMgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBidWcgcmVsYXRlZCB0byBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZy4gU3BlY2lmaWNhbGx5LCB3aGVuIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKHVzaW5nIElQUFJPVE9cXF9JUElQKSBpcyBkZWNhcHN1bGF0ZWQsIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhc24ndCBiZWluZyBwcm9wZXJseSBjbGVhcmVkLiBUaGlzIG1lYW5zIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBsZWFrIGludG8gdGhlIElQdjQgc3RhY2suIFRoYXQncyBhIGNyaXRpY2FsIGVycm9yIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGFkZHJlc3NpbmcgYmVjYXVzZSBvZiB0aGUgcG9zc2liaWxpdHkgb2YgZXhwb3NpbmcgdGhpcyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdGhlIG5ldHdvcmsgc3RhY2suIFRoaXMgaXMgYSBkaXJlY3QgZml4IHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjb25jZXJucyBwYWNrZXQgcmVhY2hhYmlsaXR5LlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFRoZSBsaWtlbHkgYXJlYXMgb2YgY29uY2VybiBhcmUgYHNlZzZfbG9jYWxfaW5wdXRgLCBgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgc2VnbWVudCByb3V0aW5nIHByb2Nlc3MuIEl0J3Mgb2J2aW91cyB0byBtZSB0aGlzIHNob3VsZCBiZSBhIHByaW1hcnkgdGFyZ2V0IGZvciB0aG9yb3VnaCBhbmFseXNpcy5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogQ29uZmlybWluZywgYElQVjZfU0VHNl9MV1RVTk5FTGAgaXMgdGhlIHNpbmdsZSBjb25maWd1cmF0aW9uIGl0ZW0gb2Ygc2lnbmlmaWNhbmNlLlxuXG5Tbywgb3ZlcmFsbCwgYSBuZWNlc3NhcnkgZml4IGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBkYXRhIGxlYWthZ2UgaW4gYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBzbyBpdCB3YXJyYW50cyBzZXJpb3VzIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQ0OjE0LjQ1OTI4MDU3NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA3MDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwic2VnNl9sb2NhbF9idWlsZF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGxvY2FsIHByb2Nlc3Npbmcgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgd2FzIG5vdCBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0LWluLUlQdjYgcGFja2V0IChJUFBST1RPX0lQSVApLiBUaGlzIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHVzZWQgYnkgdGhlIElQdjQgc3RhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwic2VnNl9sb2NhbF9idWlsZF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGxvY2FsIHByb2Nlc3Npbmcgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgd2FzIG5vdCBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0LWluLUlQdjYgcGFja2V0IChJUFBST1RPX0lQSVApLiBUaGlzIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHVzZWQgYnkgdGhlIElQdjQgc3RhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQ0OjE0LjU3OTM1NzMyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5Mjg1NjY2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDoxNC41Nzk4MDI0ODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI5MjgxMTc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVxcdTAwM2VjYmApIHRvIHplcm8gZHVyaW5nIElQdjYgdG8gSVB2NCBkZWNhcHN1bGF0aW9uIChgSVBQUk9UT19JUElQYCkuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBidWcsIHdoZXJlIHRoZSBJUHY0IHN0YWNrIGxhdGVyIHJlYWRzIGZpZWxkcyBmcm9tIGBJUENCKHNrYilgIHRoYXQgd2VyZSBuZXZlciBpbml0aWFsaXplZCAob3Igb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIElQdjYgbGF5ZXIpLiBCZWNhdXNlIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlKSBhbmQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0IHdvdWxkIG5vdCBkZXRlY3QgaWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5IGlmIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFuZCBmdWxseSByZXNvbHZlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDFhYmQyN2ZiZmE1NTY4YWY4ZjJmM2U3ODkwYWU0M2UzOTM3YTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTA6NDM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDQ6MTQuNTc5ODAzNTA1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTI4MDkyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBmb3IgTmVlZHNLTVNBTj10cnVlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCB0aGlzIGxpbmUgYG1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7YCBqdW1wcyBvdXQuIFRoYXQncyBhIGNsYXNzaWMgc2lnbiBvZiBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIEtNU0FOIGlzc3VlLiBUaGlzIGlzIGluIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBkZWNhcHN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYW4gSVBJUCBwYWNrZXQgZnJvbSBJUHY2LlxuXG5UaGUgY29kZSBpcyB6ZXJvaW5nIG91dCB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChgSVBDQihza2IpYCkgYWZ0ZXIgcmVjZWl2aW5nIGFuIElQSVAgcGFja2V0IGZyb20gYW4gSVB2NiBwYWNrZXQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIG1pZ2h0IGhhdmUgaGFkIGdhcmJhZ2UgZGF0YSBpbiB0aGlzIHJlZ2lvbiBhbmQgdGhhdCB0aGUgSVB2NCBjb2RlIHdhcyBwb3RlbnRpYWxseSB1c2luZyBpdCwgY3JlYXRpbmcgYSByaXNrLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCAqZml4ZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIG9yICppbnRyb2R1Y2VzKiBvbmUsIG9yLCBwdXQgYW5vdGhlciB3YXksIHdoZXRoZXIgaXQgKmV4cG9zZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIG9yIHBlcmhhcHMsICphZGRyZXNzZXMqIGFuIGV4aXN0aW5nIHJpc2suIFNpbmNlIHRoZSBwYXRjaCAqYWRkcyogdGhlIGBtZW1zZXRgLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGNvZGUgKmFkZHJlc3NlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay5cblxuSWYgaXQgKmFkZHJlc3NlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIEtNU0FOIGJlY29tZXMgY3J1Y2lhbC4gVGhpcyBpcyBiZWNhdXNlIEtNU0FOIGlzIHRoZSAqb25seSogdG9vbCB0aGF0IGNhbiByZWxpYWJseSBkZXRlY3QgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcGF0Y2ggYWN0dWFsbHkgKmZpeGVzKiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQsIGltcG9ydGFudGx5LCBkb2Vzbid0IGNyZWF0ZSAqbmV3KiBvbmVzLiAgS0FTQU4gaXMgaXJyZWxldmFudCBpbiB0aGlzIGluc3RhbmNlLiBJdCBmb2N1c2VzIG9uIG1lbW9yeSBzYWZldHkgZXJyb3JzICh1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgZXRjLiksIHdoaWNoIGFyZSBub3QgdGhlIHByb2JsZW0gaGVyZS4gSXQncyBhbiB1bmluaXRpYWxpemVkIHJlYWQgdGhhdCdzIGNhdXNpbmcgY29uY2Vybi5cblxuV2UgbmVlZCB0byBjb25zaWRlciBpZiBgSVBDQihza2IpYCBpcyBldmVyIGluaXRpYWxpemVkIGFuZCB1c2VkIHByaW9yIHRvIGRlY2Fwc3VsYXRpb24uIElmIGl0IHdhc24ndCBpbml0aWFsaXplZCwgS01TQU4gd291bGQgaGF2ZSBkZXRlY3RlZCB0aGF0LiBUaGUgcGF0Y2ggY29ycmVjdHMgaXQgYnkgemVyb2luZyBpdCBvdXQuIEJ1dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBjb3JyZWN0LlxuXG5JIGJlbGlldmUgS01TQU4gaXMgZXNzZW50aWFsIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggKmZpeGVzKiB0aGUgYnVnLCBhbmQgZG9lc24ndCBwYXJ0aWFsbHkgZml4IGl0IChtZWFuaW5nIHRoZSBidWcgc3RpbGwgZXhpc3RzKSwgb3IgaW50cm9kdWNlIG1vcmUgc2ltaWxhciBidWdzLiBLTVNBTiB3aWxsIHZlcmlmeSB0aGUgbWVtb3J5IGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5JbiBzaG9ydCwgYmVjYXVzZSB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBieSBpbml0aWFsaXppbmcgYElQQ0Ioc2tiKWAgd2l0aGluIHRoZSBkZWNhcHN1bGF0aW9uIHBhdGgsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgcmVxdWlyZWQuIEtBU0FOIGlzIHRoZSB3cm9uZyB0b29sIGZvciB0aGUgam9iLiBLTVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyLCJPdXRwdXRUb2tlbnMiOjIwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDozNy41MDc4OTk0MTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVxcdTAwM2VjYmApIHRvIHplcm8gZHVyaW5nIElQdjYgdG8gSVB2NCBkZWNhcHN1bGF0aW9uIChgSVBQUk9UT19JUElQYCkuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBidWcsIHdoZXJlIHRoZSBJUHY0IHN0YWNrIGxhdGVyIHJlYWRzIGZpZWxkcyBmcm9tIGBJUENCKHNrYilgIHRoYXQgd2VyZSBuZXZlciBpbml0aWFsaXplZCAob3Igb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIElQdjYgbGF5ZXIpLiBCZWNhdXNlIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlKSBhbmQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0IHdvdWxkIG5vdCBkZXRlY3QgaWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5IGlmIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFuZCBmdWxseSByZXNvbHZlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYG1lbXNldGAgdG8gaW5pdGlhbGl6ZSBgSVBDQihza2IpYCAodGhlIElQdjQgY29udHJvbCBibG9jayB3aXRoaW4gYHNrYi1cXHUwMDNlY2JgKSB0byB6ZXJvIGR1cmluZyBJUHY2IHRvIElQdjQgZGVjYXBzdWxhdGlvbiAoYElQUFJPVE9fSVBJUGApLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVnLCB3aGVyZSB0aGUgSVB2NCBzdGFjayBsYXRlciByZWFkcyBmaWVsZHMgZnJvbSBgSVBDQihza2IpYCB0aGF0IHdlcmUgbmV2ZXIgaW5pdGlhbGl6ZWQgKG9yIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemVkIGJ5IHRoZSBJUHY2IGxheWVyKS4gQmVjYXVzZSBLQVNBTiBvbmx5IGRldGVjdHMgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCB3b3VsZCBub3QgZGV0ZWN0IGlmIGBJUENCKHNrYilgIGlzIHJlYWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGNvcnJlY3RseSBhbmQgZnVsbHkgcmVzb2x2ZXMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqmkdd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 09:07:30 +0000 UTC FinishedAt: 2026-08-17 10:44:38 +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": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL" ], "series_id": "8fb208eb-56d2-4e4d-81b6-ca20e76901b3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "seg6_local_input", "seg6_local_build_state", "input_action_end_dx4", "input_action_end_dt4" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7c2VnNl9sb2NhbF9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwMWFiZDI3ZmJmYTU1NjhhZjhmMmYzZTc4OTBhZTQzZTM5MzdhNjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMDo0MzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICYjNDM7MjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4gXHRpZiAoaXB0dW5uZWxfcHVsbF9vZmZsb2Fkcyhza2IpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xuJiM0MztcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7XG4mIzQzO1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7c2VnNl9sb2NhbF9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwMWFiZDI3ZmJmYTU1NjhhZjhmMmYzZTc4OTBhZTQzZTM5MzdhNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMDo0MzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuYwppbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCkBAIC0yNTYsNiAmIzQzOzI1NiwxMyBAQCBzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKQogCWlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwlpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7CiYjNDM7CQlpbnQgaWlmID0gSVA2Q0Ioc2tiKS0mZ3Q7aWlmOwomIzQzOwomIzQzOwkJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTsKJiM0MzsJCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gaWlmOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHNlZzZfbG9jYWwuYyBEZWNhcCBhbmQgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYGRlY2FwX2FuZF92YWxpZGF0ZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWw6IGBpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKWAuIEl0JiMzOTtzIGNoZWNraW5nIGlmIHRoZSBpbm5lciBwcm90b2NvbCBpcyBJUElQLCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIHRyYWZmaWMuIElmIGl0ICppcyogSVBJUCwgdGhlIGNvZGUgdGhlbiBjbGVhcnMgdGhlIGBJUENCKHNrYilgIGRhdGEgYW5kIHNldHMgYElQQ0Ioc2tiKS0mZ3Q7aWlmID0gaWlmYC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgY2xlYW5pbmcgdXAgc29tZSBvZiB0aGUgcHJldmlvdXMgSVAgY29udHJvbCBibG9jayBkYXRhIGFuZCBzZXR0aW5nIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcy4KClRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGluIHRoZSBsYXJnZXIgU0VHNiBjb250ZXh0LiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgYW5kIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IHRoaXMgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uIHNjaGVtZSBsb29rcyBsaWtlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgcm91dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWNhcF9hbmRfdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzEtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjMyOnN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9ODU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODYyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjg2MzpcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19FVEhFUk5FVCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODY0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NDM6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTQ0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4OT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MS17XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTkyOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5My1cdFx0Z290byBkcm9wO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTg0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTkwOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExOTEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTI2NT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyNjg6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2OS1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGFuZCBgc2VnNl9sb2NhbC5jYCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGZ1bmN0aW9ucywgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBpdCYjMzk7cyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElQUFJPVE9fSVBJUGAuIFRoYXQgZGVmaW5pdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29ubmVjdGlvbj8gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgc3BlY2lmaWMgZGF0YSBpcyBiZWluZyAmIzM0O2RlY2FwcGVkJiMzNDsgYW5kIHZhbGlkYXRlZCBpbiB0aGlzIGNvbnRleHQ/IFdoYXQga2luZCBvZiBJUHY2IHNlZ21lbnQgcm91dGluZyBpcyBsaWtlbHkgaW52b2x2ZWQsIGdpdmVuIHRoZSB1c2Ugb2YgYElQUFJPVE9fSVBJUGA/CgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIGZvciBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhlIHVzZSBvZiB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB3aXRoIGBJUElQYCwgcHJhY3RpY2FsbHkgc2NyZWFtcyB0aGF0IHRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBsaWtlbHkgaGVhdmlseSBpbmZsdWVuY2VkIGJ5LCBvciBkZXBlbmRlbnQgb24sIHRoaXMgSVB2NiBzZWdtZW50IHJvdXRpbmcgaW1wbGVtZW50YXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYmVjYXVzZSBJIHdhbnQgdG8gZ3Jhc3AgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gYXMgY29tcHJlaGVuc2l2ZWx5IGFzIEkgY2FuLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9ucyB3aWxsIGxldCBtZSBrbm93IHdoZXJlIHRvIGxvb2sgaWYgc29tZXRoaW5nIGlzbiYjMzk7dCBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgd2hhdCBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBzeXN0ZW0gZnVuY3Rpb24gY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBoZXJlIGlzIGBJUFY2X1NFRzZfTFdUVU5ORUxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFzc29jaWF0ZWQgd2l0aCBgSVBWNl9TRUc2X0xXVFVOTkVMYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hhdCBpdCBlbmFibGVzIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gVGltZSB0byBnZXQgZG93biB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTI3OT1jb25maWcgSVBWNl9QSU1TTV9WMlxuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgKnRydWUqIGRlcGVuZGVuY2llcz8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHR1bm5lbCBjb25zdHJ1Y3QsIHdoaWNoIG1lYW5zIHRoZXJlJiMzOTtzIGdvdCB0byBiZSBtb3JlIHVuZGVyIHRoZSBob29kIHRoYW4ganVzdCB0aGUgb2J2aW91cyBJUHY2IHN1cHBvcnQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBtb2R1bGVzIHRoaXMgdGhpbmcgaXMgbGVhbmluZyBvbi4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBrbm93IGl0JiMzOTtzICp1c2luZyogSVB2Ni4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byB0aGluZ3MgbGlrZSB0aGUgcmF3IHNvY2tldHMgbGF5ZXIsIHRoZSByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQgKHNwZWNpZmljYWxseSBGSUIgYW5kIFJJQiBzdHVmZiwgcHJvYmFibHkpLCBhbmQgbGlrZWx5IHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBuZXRmaWx0ZXIuIERlcGVuZGluZyBvbiBob3cgc29waGlzdGljYXRlZCB0aGUgaW1wbGVtZW50YXRpb24gaXMsIEkmIzM5O2QgYWxzbyBiZSBjdXJpb3VzIGlmIGl04oCZcyBsZXZlcmFnaW5nIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkIGNhcGFiaWxpdGllcyDigJMgdGhhdCBtaWdodCBnaXZlIG1lIGhpbnRzIGFib3V0IHRoZSB0YXJnZXQgcGxhdGZvcm1zIG9yIGludGVuZGVkIHVzZSBjYXNlcy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggYW55IGFkZHJlc3MgZmFtaWx5IHNwZWNpZmljIG1vZHVsZXMgb3IgaW5mcmFzdHJ1Y3R1cmUgbGlrZSBORCBvciBNTEQsIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgc2VnbWVudHMgYXJlIGJlaW5nIGluamVjdGVkLgoKU28gSSYjMzk7bSByZWFsbHkgbG9va2luZyBmb3IgaG93IGRlZXBseSBpbnRlZ3JhdGVkIHRoaXMgaXMgaW50byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBJcyBpdCBhIHNlbGYtY29udGFpbmVkIG1vZHVsZSwgb3IgZG9lcyBpdCB0aWdodGx5IGNvdXBsZSB3aXRoIG90aGVyIGJpdHMgb2YgdGhlIGtlcm5lbD8gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgY29tcGxleGl0eSBvZiB0cm91Ymxlc2hvb3RpbmcsIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cywgYW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuIEJhc2ljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93ICYjMzQ7Y2xlYW4mIzM0OyB0aGUgYWJzdHJhY3Rpb24gaXMsIG9yIGlmIGl0IGlzIGluaGVyZW50bHkgbWVzc3kgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gcHJlcGFyZWQgZm9yIGl0IHRvIGJlIGNvbXBsZXgsIGdpdmVuIHRoZSBuYXR1cmUgb2Ygc2VnbWVudCByb3V0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc2ltcGxlIGBtb2RpbmZvYCBvdXRwdXQgYW5kIGxvb2sgYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGFuZCBhbnkgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZSBwaWVjZXMgaW4gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODY6XHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG4gMjg3Olx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMjg4Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyODk6XHRcdHNlbGVjdCBMV1RVTk5FTFxuIDI5MDpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDI5MTpcdFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXG4gMjkyOlx0XHRoZWxwXG4gMjkzOlx0XHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxuIDI5NDpcdFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAyOTU6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIHdpdGggTDIgVHVubmVsaW5nIENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gaG9taW5nIGluIG9uIHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBjb25maWd1cmF0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGUgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gaG93IHRoZXkgYmVoYXZlLiBGaXJzdCwgSSBoYXZlIHRvIGNoZWNrIGlmIHRoZXkmIzM5O3JlIHN0YXRpYywgYW5kLCB5ZXMsIHRoZXkgYXJlLiBUaGF0JiMzOTtzIGdvb2QsIGl0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgYSBiaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZSBzcGVjaWZpYyBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB1dGlsaXplZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTM2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MzpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjQtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTg4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk4OTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkwLVx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA0LVx0XHRcdCAgICAgICBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IsIHNrYi1cdTAwM2VkZXYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNTpcdFx0XHQgICAgICAgTlVMTCwgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA2LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDc6XHRyZXR1cm4gaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYik7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwOC1kcm9wOlxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE1LVx0XHQub3B0YXR0cnNcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MTY6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfZHg0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBzZWc2X2FjdGlvbl90YWJsZWAgQ29udGV4dCoqCgpSaWdodCwgc28gdGhlc2UgaXRlbXMgSSYjMzk7bSBsb29raW5nIGF0IGFyZSBkZWZpbml0ZWx5IGxpbmtlZCB0byB0aGUgYHNlZzZfYWN0aW9uX3RhYmxlYC4gTm93LCBteSBuZXh0IG1vdmUgaXMgY2xlYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgdGFibGUuIE15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcgdGhyb3VnaCBwb3RlbnRpYWwgdXNlcy4uLiB3aGVyZSBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp1c2VkKj8gV2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGl0PyBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiBoZXJlLiBUaGlzIGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfYWN0aW9uX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc4OnN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzktXHR7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTgyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODM6XHRjb3VudCA9IEFSUkFZX1NJWkUoc2VnNl9hY3Rpb25fdGFibGUpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg1Olx0XHRkZXNjID0gXHUwMDI2c2VnNl9hY3Rpb25fdGFibGVbaV07XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ni1cdFx0aWYgKGRlc2MtXHUwMDNlYWN0aW9uID09IGFjdGlvbilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjctXHQgKiBvcHRpb25hbCwgaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgbWVzc2VkIHNvbWV0aGluZyB1cCBpbiB0aGVcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDY4Olx0ICogc2VnNl9hY3Rpb25fdGFibGUuIFRoZXJlZm9yZSwgdGhpcyBjaGVjayBpcyByZXF1aXJlZCBmb3IgU1J2NlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjktXHQgKiBiZWhhdmlvcnMgdG8gd29yayBwcm9wZXJseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IElucHV0IFByb2Nlc3NpbmcgUGVyc3BlY3RpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZmxvdyBvZiBkYXRhIHdpdGhpbiB0aGlzIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaW5wdXRzIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IHRoZSBgaW5wdXRgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgYmVpbmcgaW52b2tlZCBmcm9tIHRoZSBgc2VnNl9sb2NhbF9pbnB1dGAgY29udGV4dC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbm5lY3Rpb24uIFRoaXMgdGVsbHMgbWUgdGhhdCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgbGlrZWx5IHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBsb2NhbGx5LWRlc3RpbmVkIHBhY2tldHMgdXNpbmcgc2VnbWVudCByb3V0aW5nIHY2IChTUnY2KS4gVGhlIGZhY3QgdGhhdCBhIGZ1bmN0aW9uICpwb2ludGVyKiBpcyB1c2VkIGZvciBgaW5wdXRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbGV2ZWwgb2YgbW9kdWxhcml0eSBhbmQgY29uZmlndXJhYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiB0aG9zZSBsb2NhbGx5LWRlc3RpbmVkIHBhY2tldHMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGRpZmZlcmVudCB0eXBlcyBvZiBpbnB1dCBwcm9jZXNzaW5nIGFyZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgYGlucHV0YCBwb2ludGVyIHVzZWQuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRlcmlhIHRoYXQgZGV0ZXJtaW5lIHdoaWNoIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIHRoYXQgcG9pbnRlci4gSXMgaXQgYmFzZWQgb24gcGFja2V0IHR5cGUsIHNvdXJjZSwgZGVzdGluYXRpb24sIG9yIHNvbWUgb3RoZXIgaWRlbnRpZmllciB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU1J2Nj8gVGhhdCBjb25uZWN0aW9uIGlzIHRoZSBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGBzZWc2X2xvY2FsX2lucHV0YCBhbmQgdGhlIHBvc3NpYmxlIGBpbnB1dGAgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTU5OD1zdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYxNjpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MzctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjM5LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjUwOlx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NTEtfVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfbG9jYWxfb3BzID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVx0LmRlc3Ryb3lfc3RhdGVcdD0gc2VnNl9sb2NhbF9kZXN0cm95X3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XHQuaW5wdXRcdFx0PSBzZWc2X2xvY2FsX2lucHV0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODItXHQuZmlsbF9lbmNhcFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipJbnRlcm5hbCBOZXR3b3JrIE1vZHVsZSBBbmFseXNpcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzIHdpdGhpbiB0aGUgYGx3dHVubmVsX2VuY2FwX29wc2Agc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0lzIHRoaXMgc3RhdGljPyBJdCBmZWVscyBsaWtlIGFuIGVudHJ5IHBvaW50LCB3aGljaCB1c3VhbGx5IGxlYW5zIHRvd2FyZCBub24tc3RhdGljLiYjMzQ7IEFjdHVhbGx5LCBvbiBzZWNvbmQgdGhvdWdodCwgaXQgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSByZXN0IG9mIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogZnVuY3Rpb25zIGluIHRoaXMgZmlsZSB0aGF0IGFyZSBub24tc3RhdGljLiBJdCYjMzk7cyB1bnVzdWFsIGZvciBhbiBlbnRyeSBwb2ludCB0byBiZSBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBub3QgaW1wb3NzaWJsZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vZHVsZSBpcyBkZXNpZ25lZC4gSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIG1vZHVsZS4gQSBxdWljayBzY2FuIG9mIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJlc3Qgb3ZlcnZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTMzOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNDEtXHRcdFx0c3RydWN0IGluNl9hZGRyICpuaGFkZHIsIHUzMiB0YmxfaWQpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY4ODppbnQgX19pbml0IHNlZzZfbG9jYWxfaW5pdCh2b2lkKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDA5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBhbmQgUG90ZW50aWFsIEFsdGVybmF0aXZlcyoqCgpBbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSB0aGluayBhYm91dCB0aGUgYHNlZzZfbG9jYWxfaW5wdXRgIGZ1bmN0aW9uLiBJdCBpbW1lZGlhdGVseSBzdHJpa2VzIG1lIHRoYXQgdGhpcyBvbmUgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIGFuZCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG90aGVyIG1vZHVsZXMuIFRoaXMgY2hhcmFjdGVyaXN0aWMgbmF0dXJhbGx5IG1ha2VzIG1lIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBkZXNpZ24gaW1wbGljYXRpb25zLiBJcyB0aGlzIGRlbGliZXJhdGUgZW5jYXBzdWxhdGlvbiwgb3IgaXMgaXQgc2ltcGx5IGEgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRldGFpbD8KClRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhZGRyZXNzIGlzIHdoZXRoZXIgdGhlcmUgaXMgYW55ICpvdGhlciogZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0IHRoYXQgaXMgKm5vdCogc3RhdGljLCBzb21ldGhpbmcgdGhhdCBtaWdodCByZXByZXNlbnQgYW4gYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnQgb3IgYSBmdW5jdGlvbiB3aXRoIGJyb2FkZXIgdmlzaWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBzdGF0aWMgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGRpY3RhdGUgaG93IEkgY29udGludWUgbXkgaW52ZXN0aWdhdGlvbiwgYW5kIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlYmFzZSB3b3Jrcy4gSWRlbnRpZnlpbmcgd2hldGhlciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhpcyBpc3N1ZSBvciBub3QgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2ODg9aW50IF9faW5pdCBzZWc2X2xvY2FsX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNzI0OnZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRUc2IExvY2FsIElucHV0IEVudHJ5IFBvaW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBsd3R1bm5lbGAgaW5wdXQgd29ya3MsIGFuZCBpdCBsb29rcyBsaWtlIGBzZWc2X2xvY2FsX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gSG9sZCBvbiBhIHNlY29uZCwgdGhhdCBwcm9tcHQgaXMgbWFraW5nIG1lIHRoaW5rLiBJdCBwcmVmZXJzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgY29tcGlsZXIgaW5saW5lcyB0aG9zZSBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCByZW1vdmVzIGRpc3RpbmN0IHN5bWJvbHMsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGUgcHJvbXB0LiBCdXQgaGVyZSYjMzk7cyB0aGUgY2F0Y2g6IGlmIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB1c2VkIGVsc2V3aGVyZSwgZm9yIGV4YW1wbGUgaW4gYHNlZzZfbG9jYWxfb3BzYCwgdGhhdCBjb3VsZCBwcmV2ZW50IGlubGluaW5nLiBTbyBsZXQmIzM5O3MgY2hlY2sgaWYgYHNlZzZfbG9jYWxfaW5wdXRgICppcyogc3RhdGljLiBZZXAsIGl0IGlzLgoKQWxyaWdodCwgd2hhdCBlbHNlIGlzIHRoZXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBjYW5kaWRhdGVzLiBUaGlua2luZyB0aHJvdWdoIHRoaXMuLi4gSSB0aGluayBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgdGhlIHN0cm9uZ2VzdCBjb250ZW5kZXIsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBjb250ZXh0LiBJIHNlZSBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYCBhcyBhbm90aGVyIHBvc3NpYmlsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29ycmVjdCBpbiBteSBhc3N1bXB0aW9ucyB0aG91Z2gsIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgc2VnNl9sb2NhbF9pbnB1dGAgaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gY29uZmlybSBteSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzU6XHRcdHJldHVybiByYztcbjE2MzY6XHR9XG4xNjM3Olx0XG4xNjM4Olx0c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4xNjM5Olx0e1xuMTY0MDpcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSkge1xuMTY0MTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE2NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjQzOlx0XHR9XG4xNjQ0Olx0XG4xNjQ1Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcbjE2NDY6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX0xPQ0FMX0lOLFxuMTY0NzpcdFx0XHRcdCAgICAgICBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IsIHNrYi1cdTAwM2VkZXYsIE5VTEwsXG4xNjQ4Olx0XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG4xNjQ5Olx0XG4xNjUwOlx0XHRyZXR1cm4gc2VnNl9sb2NhbF9pbnB1dF9jb3JlKGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYik7XG4xNjUxOlx0fVxuMTY1MjpcdFxuMTY1MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2xvY2FsX3BvbGljeVtTRUc2X0xPQ0FMX01BWCAmIzQzOyAxXSA9IHtcbjE2NTQ6XHRcdFtTRUc2X0xPQ0FMX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBgc2VnNl9sb2NhbGAgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgYHNlZzZfbG9jYWxgIGNvbXBvbmVudHMuICpgc2VnNl9sb2NhbF9pbnB1dGAqIGFuZCAqYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAqLCB5ZWFoLCB0aGV5IHNlZW0gc29saWQsIHRoZXkmIzM5O3JlIGRvaW5nIHdoYXQgdGhleSBuZWVkIHRvLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uLCB3aGF0IGFib3V0ICpgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAqPyBUaGF0IG9uZSYjMzk7cyBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0IGFuZCBldmFsdWF0ZSBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGZ1bmN0aW9uaW5nIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHRoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2xvY2FsX2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDQxPXN0YXRpYyBpbnQgcGFyc2VfbmxhX2FjdGlvbihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjUwNy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTA4OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTA5LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY3OTpcdC5idWlsZF9zdGF0ZVx0PSBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXHQuZGVzdHJveV9zdGF0ZVx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzZWc2X2xvY2FsYCBNb2R1bGUgZm9yIEFQSSBTeW1ib2wgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgc2VnNl9sb2NhbGAgc3R1ZmYsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGJ1aWxkaW5nIHRoZSBsd3R1bm5lbCBzdGF0ZSB1c2luZyBgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAuIFRoZSBjaGFuZ2UgaXMgaW4gYGRlY2FwX2FuZF92YWxpZGF0ZWAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhlc2UgYXJlIGFjdGlvbnMgZm9yIGBzZWc2X2xvY2FsYCwgc28gbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcgYHNlZzZfbG9jYWxfaW5wdXRgIGFuZCBgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAgYXJlIGdvb2QgY2FuZGlkYXRlcy4KCldhaXQgYSBzZWNvbmQsIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSB3cmlua2xlLiBUaGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSByYXRpb25hbGUgaXMgdGhhdCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB0aGV5IGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIExvb2tpbmcgZm9yIGEgbm9uLXN0YXRpYyBvcHRpb24sIEkgc2VlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBpcyBub24tc3RhdGljLCBidXQgaXQgaXNuJiMzOTt0IHRoZSBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRoZSBBUEkgZW50cnlwb2ludCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU2luY2UgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIGFuIGVudHJ5IHBvaW50LCBhbmQgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0IHdvcmtzISBHcmVhdCEgSSYjMzk7bGwgZGVmaW5pdGVseSBpbmNsdWRlIGBzZWc2X2xvY2FsX2lucHV0YC4gSSYjMzk7bGwgYWxzbyBicmluZyBpbiBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYC4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLCBzaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGluIGBzZWc2X2FjdGlvbl90YWJsZWAuIFRoZXNlIHNob3VsZCBhbHNvIG5vdCBiZSBpbmxpbmVkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcmVzdHJpY3Rpb25zLiBUaGUgbWFpbiBjb25maWcgaXMgYElQVjZfU0VHNl9MV1RVTk5FTGAsIHdoaWNoIEkgZXhwZWN0LiBJJiMzOTttIGNoZWNraW5nIGZvciBvdGhlcnMgdG8gYmUgY2VydGFpbi4gYElQVjZgIGlzIHJlcXVpcmVkIGJ5IGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBhbmQgYExXVFVOTkVMYCBpcyBzZWxlY3RlZCBieSBpdC4gU28sIGBJUFY2X1NFRzZfTFdUVU5ORUxgIHNlZW1zIHRvIGJlIHRoZSBjb250cm9sbGluZyBvbmUuIEkmIzM5O20gZ29vZCB0byBnbyB0aGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdH1cbiAyMzE6XHRcbiAyMzI6XHRzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxuIDIzMzpcdHtcbiAyMzQ6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIDIzNTpcdFx0dW5zaWduZWQgaW50IG9mZiA9IDA7XG4gMjM2Olx0XG4gMjM3Olx0XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbiAyMzg6XHRcdGlmIChzcmggXHUwMDI2XHUwMDI2IHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0IFx1MDAzZSAwKVxuIDIzOTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjQwOlx0XG4gMjQxOlx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDI0MjpcdFx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbiAyNDM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0NDpcdCNlbmRpZlxuIDI0NTpcdFxuIDI0NjpcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmYsIHByb3RvLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiAyNDc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0ODpcdFxuIDI0OTpcdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxuIDI1MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjUxOlx0XG4gMjUyOlx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDI1NTpcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAyNTY6XHRcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gMjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTg6XHRcbiAyNTk6XHRcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiAyNjA6XHRcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuIDI2MTpcdFxuIDI2MjpcdFx0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuIDI2MzpcdFx0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFxuIDI2NjpcdFx0cmV0dXJuIHRydWU7XG4gMjY3Olx0fVxuIDI2ODpcdFxuIDI2OTpcdHN0YXRpYyB2b2lkIGFkdmFuY2VfbmV4dHNlZyhzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgc3RydWN0IGluNl9hZGRyICpkYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJUElQIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBmdW5jdGlvbmFsIGJ1Zywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYElQUFJPVE9fSVBJUGAgcGF0aC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjbGVhcmluZyBgSVBDQihza2IpYCBhbmQgcmVzdG9yaW5nIGBpaWZgLCB3aGljaCBpcyBnb29kLiBUaGUgbGFjayBvZiBjbGVhcmluZyBjb3VsZCBsZWFkIHRvIHByb2JsZW1zIHdpdGggdW5pbml0aWFsaXplZCBkYXRhIGRvd24gdGhlIGxpbmUgaW4gdGhlIElQdjQgc3RhY2ssIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgYSB3b3J0aHdoaWxlIGZpeCBhbmQsIHllYWgsIHNvbWV0aGluZyBJIHNob3VsZCBwcmlvcml0aXplIGZ1enppbmcgdG8gZW5zdXJlIGl0JiMzOTtzIHJvYnVzdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIGp1bXBpbmcgb3V0IGFyZSBgc2VnNl9sb2NhbF9pbnB1dGAsIGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBwYXRjaCBtZW50aW9ucyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gQWxyaWdodCwgaXQgZGVwZW5kcyBvbiBgSVBWNmAgYW5kIHNlbGVjdHMgYExXVFVOTkVMYCwgYERTVF9DQUNIRWAsIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBUaGF0JiMzOTtzIHJlYXNvbmFibGU7IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGl0c2VsZiBzZWVtcyBzdWZmaWNpZW50IHRvIGJlIGVuYWJsZWQuCgpOb3csIEkmIzM5O2xsIGNoZWNrIG9uIHRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcy4gTGV0JiMzOTtzIHNlZSBpZiBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGFyZSBzdGF0aWM7IFl1cCwgdGhleSBhcmUuIEFyZSB0aGV5IGlubGluZWQ/IE5vLCB0aGV5IGFyZSBub3QuIFRoZXkgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiBgc2VnNl9hY3Rpb25fdGFibGVgLCBzbyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gTWlnaHQgYmUgYmVzdCB0byBmb2N1cyBvbiBgc2VnNl9sb2NhbF9pbnB1dGAgaW5zdGVhZC4KCkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ4MgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2VnbWVudCBSb3V0aW5nIChTUnY2KSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhpcyBvdmVyLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gRnJvbSBteSBwZXJzcGVjdGl2ZSwgYElQVjZfU0VHNl9MV1RVTk5FTGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCYjMzk7cyB0cnVseSByZWxldmFudCBoZXJlLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gaW4gYSBtb3JlIGZvcm1hbCB3YXk6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBpcyBhIHNvbGlkICYjMzQ7dHJ1ZSYjMzQ7IGZyb20gbWUuCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIGlzIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgYnVnIHJlbGF0ZWQgdG8gSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGxvY2FsIHByb2Nlc3NpbmcuIFNwZWNpZmljYWxseSwgd2hlbiBhbiBJUHY0LWluLUlQdjYgcGFja2V0ICh1c2luZyBJUFBST1RPXF9JUElQKSBpcyBkZWNhcHN1bGF0ZWQsIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhc24mIzM5O3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZC4gVGhpcyBtZWFucyB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhayBpbnRvIHRoZSBJUHY0IHN0YWNrLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZXJyb3IgdGhhdCBuZWVkcyBpbW1lZGlhdGUgYWRkcmVzc2luZyBiZWNhdXNlIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBleHBvc2luZyB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB0aGUgbmV0d29yayBzdGFjay4gVGhpcyBpcyBhIGRpcmVjdCBmaXggd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNvbmNlcm5zIHBhY2tldCByZWFjaGFiaWxpdHkuCiogICAqKkZvY3VzU3ltYm9scyoqOiBUaGUgbGlrZWx5IGFyZWFzIG9mIGNvbmNlcm4gYXJlIGBzZWc2X2xvY2FsX2lucHV0YCwgYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgLCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHNlZ21lbnQgcm91dGluZyBwcm9jZXNzLiBJdCYjMzk7cyBvYnZpb3VzIHRvIG1lIHRoaXMgc2hvdWxkIGJlIGEgcHJpbWFyeSB0YXJnZXQgZm9yIHRob3JvdWdoIGFuYWx5c2lzLgoqICAgKipFbmFibGVDb25maWdzKio6IENvbmZpcm1pbmcsIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGlzIHRoZSBzaW5nbGUgY29uZmlndXJhdGlvbiBpdGVtIG9mIHNpZ25pZmljYW5jZS4KClNvLCBvdmVyYWxsLCBhIG5lY2Vzc2FyeSBmaXggZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGRhdGEgbGVha2FnZSBpbiBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBzbyBpdCB3YXJyYW50cyBzZXJpb3VzIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7c2VnNl9sb2NhbF9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X2xvY2FsX2J1aWxkX3N0YXRlJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUnY2KSBsb2NhbCBwcm9jZXNzaW5nIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhcyBub3QgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NC1pbi1JUHY2IHBhY2tldCAoSVBQUk9UT19JUElQKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyB1c2VkIGJ5IHRoZSBJUHY0IHN0YWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDFhYmQyN2ZiZmE1NTY4YWY4ZjJmM2U3ODkwYWU0M2UzOTM3YTYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTA6NDM6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKaW5kZXggMmI0MWU0YzBkZGRkMS4uOTVlYTBiNjI3MjlhYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuYwpAQCAtMjU2LDYgJiM0MzsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bykKIAlpZiAoaXB0dW5uZWxfcHVsbF9vZmZsb2Fkcyhza2IpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkgewomIzQzOwkJaW50IGlpZiA9IElQNkNCKHNrYiktJmd0O2lpZjsKJiM0MzsKJiM0MzsJCW1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7CiYjNDM7CQlJUENCKHNrYiktJmd0O2lpZiA9IGlpZjsKJiM0MzsJfQomIzQzOwogCXJldHVybiB0cnVlOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEyCgkJCQkJCQlvdXRwdXQ6IDIwOQoJCQkJCQkJdGhvdWdodHM6IDIwMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIGZvciBOZWVkc0tNU0FOPXRydWUqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFNwZWNpZmljYWxseSwgdGhpcyBsaW5lIGBtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO2AganVtcHMgb3V0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzaWduIG9mIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgS01TQU4gaXNzdWUuIFRoaXMgaXMgaW4gdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBkZWNhcHN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYW4gSVBJUCBwYWNrZXQgZnJvbSBJUHY2LgoKVGhlIGNvZGUgaXMgemVyb2luZyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWApIGFmdGVyIHJlY2VpdmluZyBhbiBJUElQIHBhY2tldCBmcm9tIGFuIElQdjYgcGFja2V0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBtaWdodCBoYXZlIGhhZCBnYXJiYWdlIGRhdGEgaW4gdGhpcyByZWdpb24gYW5kIHRoYXQgdGhlIElQdjQgY29kZSB3YXMgcG90ZW50aWFsbHkgdXNpbmcgaXQsIGNyZWF0aW5nIGEgcmlzay4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoICpmaXhlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgb3IgKmludHJvZHVjZXMqIG9uZSwgb3IsIHB1dCBhbm90aGVyIHdheSwgd2hldGhlciBpdCAqZXhwb3NlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgb3IgcGVyaGFwcywgKmFkZHJlc3NlcyogYW4gZXhpc3Rpbmcgcmlzay4gU2luY2UgdGhlIHBhdGNoICphZGRzKiB0aGUgYG1lbXNldGAsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGUgY29kZSAqYWRkcmVzc2VzKiBhbiBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLgoKSWYgaXQgKmFkZHJlc3NlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIEtNU0FOIGJlY29tZXMgY3J1Y2lhbC4gVGhpcyBpcyBiZWNhdXNlIEtNU0FOIGlzIHRoZSAqb25seSogdG9vbCB0aGF0IGNhbiByZWxpYWJseSBkZXRlY3QgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcGF0Y2ggYWN0dWFsbHkgKmZpeGVzKiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQsIGltcG9ydGFudGx5LCBkb2VzbiYjMzk7dCBjcmVhdGUgKm5ldyogb25lcy4gIEtBU0FOIGlzIGlycmVsZXZhbnQgaW4gdGhpcyBpbnN0YW5jZS4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGVycm9ycyAodXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMsIGV0Yy4pLCB3aGljaCBhcmUgbm90IHRoZSBwcm9ibGVtIGhlcmUuIEl0JiMzOTtzIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCB0aGF0JiMzOTtzIGNhdXNpbmcgY29uY2Vybi4KCldlIG5lZWQgdG8gY29uc2lkZXIgaWYgYElQQ0Ioc2tiKWAgaXMgZXZlciBpbml0aWFsaXplZCBhbmQgdXNlZCBwcmlvciB0byBkZWNhcHN1bGF0aW9uLiBJZiBpdCB3YXNuJiMzOTt0IGluaXRpYWxpemVkLCBLTVNBTiB3b3VsZCBoYXZlIGRldGVjdGVkIHRoYXQuIFRoZSBwYXRjaCBjb3JyZWN0cyBpdCBieSB6ZXJvaW5nIGl0IG91dC4gQnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZml4IGlzIGNvcnJlY3QuCgpJIGJlbGlldmUgS01TQU4gaXMgZXNzZW50aWFsIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggKmZpeGVzKiB0aGUgYnVnLCBhbmQgZG9lc24mIzM5O3QgcGFydGlhbGx5IGZpeCBpdCAobWVhbmluZyB0aGUgYnVnIHN0aWxsIGV4aXN0cyksIG9yIGludHJvZHVjZSBtb3JlIHNpbWlsYXIgYnVncy4gS01TQU4gd2lsbCB2ZXJpZnkgdGhlIG1lbW9yeSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCkluIHNob3J0LCBiZWNhdXNlIHRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ5IGluaXRpYWxpemluZyBgSVBDQihza2IpYCB3aXRoaW4gdGhlIGRlY2Fwc3VsYXRpb24gcGF0aCwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gS0FTQU4gaXMgdGhlIHdyb25nIHRvb2wgZm9yIHRoZSBqb2IuIEtNU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBtZW1zZXRgIHRvIGluaXRpYWxpemUgYElQQ0Ioc2tiKWAgKHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgd2l0aGluIGBza2ItXHUwMDNlY2JgKSB0byB6ZXJvIGR1cmluZyBJUHY2IHRvIElQdjQgZGVjYXBzdWxhdGlvbiAoYElQUFJPVE9fSVBJUGApLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVnLCB3aGVyZSB0aGUgSVB2NCBzdGFjayBsYXRlciByZWFkcyBmaWVsZHMgZnJvbSBgSVBDQihza2IpYCB0aGF0IHdlcmUgbmV2ZXIgaW5pdGlhbGl6ZWQgKG9yIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemVkIGJ5IHRoZSBJUHY2IGxheWVyKS4gQmVjYXVzZSBLQVNBTiBvbmx5IGRldGVjdHMgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCB3b3VsZCBub3QgZGV0ZWN0IGlmIGBJUENCKHNrYilgIGlzIHJlYWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGNvcnJlY3RseSBhbmQgZnVsbHkgcmVzb2x2ZXMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjA3Ljg5Mjc1ODkxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NjE1MTc3NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfbG9jYWxfaW5wdXRcIixcbiAgICBcInNlZzZfbG9jYWxfYnVpbGRfc3RhdGVcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHg0XCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R0NFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBtZW1zZXRgIHRvIGluaXRpYWxpemUgYElQQ0Ioc2tiKWAgKHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgd2l0aGluIGBza2ItXFx1MDAzZWNiYCkgdG8gemVybyBkdXJpbmcgSVB2NiB0byBJUHY0IGRlY2Fwc3VsYXRpb24gKGBJUFBST1RPX0lQSVBgKS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zywgd2hlcmUgdGhlIElQdjQgc3RhY2sgbGF0ZXIgcmVhZHMgZmllbGRzIGZyb20gYElQQ0Ioc2tiKWAgdGhhdCB3ZXJlIG5ldmVyIGluaXRpYWxpemVkIChvciBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgSVB2NiBsYXllcikuIEJlY2F1c2UgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd291bGQgbm90IGRldGVjdCBpZiBgSVBDQihza2IpYCBpcyByZWFkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgaWYgdGhpcyBwYXRjaCBjb3JyZWN0bHkgYW5kIGZ1bGx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWUsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUnY2KSBsb2NhbCBwcm9jZXNzaW5nIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhcyBub3QgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NC1pbi1JUHY2IHBhY2tldCAoSVBQUk9UT19JUElQKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyB1c2VkIGJ5IHRoZSBJUHY0IHN0YWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0MzowNy44OTI3NjU3NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzgzNzY1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMDFhYmQyN2ZiZmE1NTY4YWY4ZjJmM2U3ODkwYWU0M2UzOTM3YTYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDEwOjQzOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXFxuKysrIGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXFxuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcXG4gXFx0aWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbitcXHRcXHRpbnQgaWlmID0gSVA2Q0Ioc2tiKS1cXHUwMDNlaWlmO1xcbitcXG4rXFx0XFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcXG4rXFx0XFx0SVBDQihza2IpLVxcdTAwM2VpaWYgPSBpaWY7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0MzowOS40MzIxMDgwNDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTE0NzI0NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWc2X2xvY2FsX2lucHV0XCIsXG4gICAgXCJzZWc2X2xvY2FsX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9kdDRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZyB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSB3YXMgbm90IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKElQUFJPVE9fSVBJUCkuIFRoaXMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBieSB0aGUgSVB2NCBzdGFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzAxYWJkMjdmYmZhNTU2OGFmOGYyZjNlNzg5MGFlNDNlMzkzN2E2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEwOjQzOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jIGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXG5pbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXG4rKysgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbkBAIC0yNTYsNiArMjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4gXHRpZiAoaXB0dW5uZWxfcHVsbF9vZmZsb2Fkcyhza2IpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4rXHRcdGludCBpaWYgPSBJUDZDQihza2IpLVx1MDAzZWlpZjtcbitcbitcdFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcbitcdFx0SVBDQihza2IpLVx1MDAzZWlpZiA9IGlpZjtcbitcdH1cbitcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjA5LjQzMjExMDI4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQyMzIzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzZWc2X2xvY2FsLmMgRGVjYXAgYW5kIFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgaXQncyBtb2RpZnlpbmcgdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGNvbmRpdGlvbmFsOiBgaWYgKHByb3RvID09IElQUFJPVE9fSVBJUClgLiBJdCdzIGNoZWNraW5nIGlmIHRoZSBpbm5lciBwcm90b2NvbCBpcyBJUElQLCB3aGljaCBzdWdnZXN0cyBpdCdzIGRlYWxpbmcgd2l0aCBlbmNhcHN1bGF0ZWQgdHJhZmZpYy4gSWYgaXQgKmlzKiBJUElQLCB0aGUgY29kZSB0aGVuIGNsZWFycyB0aGUgYElQQ0Ioc2tiKWAgZGF0YSBhbmQgc2V0cyBgSVBDQihza2IpLVx1MDAzZWlpZiA9IGlpZmAuIFRoaXMgbGlrZWx5IGludm9sdmVzIGNsZWFuaW5nIHVwIHNvbWUgb2YgdGhlIHByZXZpb3VzIElQIGNvbnRyb2wgYmxvY2sgZGF0YSBhbmQgc2V0dGluZyB0aGUgaW5jb21pbmcgaW50ZXJmYWNlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcy5cblxuVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYGRlY2FwX2FuZF92YWxpZGF0ZWAgaW4gdGhlIGxhcmdlciBTRUc2IGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgdGhpcyBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gc2NoZW1lIGxvb2tzIGxpa2UgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSByb3V0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MTIuODU2MzQ1MjgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI2ODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWNhcF9hbmRfdmFsaWRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMTY9c3RhdGljIHN0cnVjdCBpcHY2X3NyX2hkciAqZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzMjpzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTg1Nj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHgyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODYyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo4NjM6XFx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0VUSEVSTkVUKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODY0LVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MzY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0Mi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTQzOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUFY2KSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTQ0LVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05ODk9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MS17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk5MjpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5My1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTE4ND1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4OS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTE5MDpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExOTEtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyNjU9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjcte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjY4OlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUFY2KSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2OS1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjEyLjk3MDYxODcxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDM1MTcyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGRlY2FwX2FuZF92YWxpZGF0ZWAgYW5kIGBzZWc2X2xvY2FsLmNgIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBmdW5jdGlvbnMsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgaXQncyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElQUFJPVE9fSVBJUGAuIFRoYXQgZGVmaW5pdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29ubmVjdGlvbj8gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBxdWVzdGlvbnMgaW4gbXkgaGVhZDogV2hhdCBzcGVjaWZpYyBkYXRhIGlzIGJlaW5nIFwiZGVjYXBwZWRcIiBhbmQgdmFsaWRhdGVkIGluIHRoaXMgY29udGV4dD8gV2hhdCBraW5kIG9mIElQdjYgc2VnbWVudCByb3V0aW5nIGlzIGxpa2VseSBpbnZvbHZlZCwgZ2l2ZW4gdGhlIHVzZSBvZiBgSVBQUk9UT19JUElQYD9cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFRoZSB1c2Ugb2YgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgd2l0aCBgSVBJUGAsIHByYWN0aWNhbGx5IHNjcmVhbXMgdGhhdCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgbGlrZWx5IGhlYXZpbHkgaW5mbHVlbmNlZCBieSwgb3IgZGVwZW5kZW50IG9uLCB0aGlzIElQdjYgc2VnbWVudCByb3V0aW5nIGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGJlY2F1c2UgSSB3YW50IHRvIGdyYXNwIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtIGFzIGNvbXByZWhlbnNpdmVseSBhcyBJIGNhbi4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbnMgd2lsbCBsZXQgbWUga25vdyB3aGVyZSB0byBsb29rIGlmIHNvbWV0aGluZyBpc24ndCBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgd2hhdCBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBzeXN0ZW0gZnVuY3Rpb24gY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MTcuODc0MTM4MDUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTkwNDY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICs9IGNhbGlwc28ub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjYtaXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MTguMDY2MDQ2OTc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDAyMjYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGhlcmUgaXMgYElQVjZfU0VHNl9MV1RVTk5FTGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3MgZGlnIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBzaG91bGQgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXNzb2NpYXRlZCB3aXRoIGBJUFY2X1NFRzZfTFdUVU5ORUxgIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgdGhpbmcgYWN0dWFsbHkgKmRvZXMqIGFuZCB3aGF0IGl0IGVuYWJsZXMgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBUaW1lIHRvIGdldCBkb3duIHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MjIuNjMwMDc0MzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTQyMzU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MjMuNzc5NTAyMTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMTM0NjEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBJUFY2X1NFRzZfTFdUVU5ORUxgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgKnRydWUqIGRlcGVuZGVuY2llcz8gV2UncmUgZGVhbGluZyB3aXRoIGEgdHVubmVsIGNvbnN0cnVjdCwgd2hpY2ggbWVhbnMgdGhlcmUncyBnb3QgdG8gYmUgbW9yZSB1bmRlciB0aGUgaG9vZCB0aGFuIGp1c3QgdGhlIG9idmlvdXMgSVB2NiBzdXBwb3J0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBtb2R1bGVzIHRoaXMgdGhpbmcgaXMgbGVhbmluZyBvbi4gSXQncyBub3QgZW5vdWdoIHRvIGtub3cgaXQncyAqdXNpbmcqIElQdjYuXG5cbkknbSBleHBlY3RpbmcgdG8gZmluZCByZWZlcmVuY2VzIHRvIHRoaW5ncyBsaWtlIHRoZSByYXcgc29ja2V0cyBsYXllciwgdGhlIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCAoc3BlY2lmaWNhbGx5IEZJQiBhbmQgUklCIHN0dWZmLCBwcm9iYWJseSksIGFuZCBsaWtlbHkgc29tZSBpbnRlcmFjdGlvbiB3aXRoIG5ldGZpbHRlci4gRGVwZW5kaW5nIG9uIGhvdyBzb3BoaXN0aWNhdGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBpcywgSSdkIGFsc28gYmUgY3VyaW91cyBpZiBpdOKAmXMgbGV2ZXJhZ2luZyBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMg4oCTIHRoYXQgbWlnaHQgZ2l2ZSBtZSBoaW50cyBhYm91dCB0aGUgdGFyZ2V0IHBsYXRmb3JtcyBvciBpbnRlbmRlZCB1c2UgY2FzZXMuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGFueSBhZGRyZXNzIGZhbWlseSBzcGVjaWZpYyBtb2R1bGVzIG9yIGluZnJhc3RydWN0dXJlIGxpa2UgTkQgb3IgTUxELCBkZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNlZ21lbnRzIGFyZSBiZWluZyBpbmplY3RlZC5cblxuU28gSSdtIHJlYWxseSBsb29raW5nIGZvciBob3cgZGVlcGx5IGludGVncmF0ZWQgdGhpcyBpcyBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suIElzIGl0IGEgc2VsZi1jb250YWluZWQgbW9kdWxlLCBvciBkb2VzIGl0IHRpZ2h0bHkgY291cGxlIHdpdGggb3RoZXIgYml0cyBvZiB0aGUga2VybmVsPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb21wbGV4aXR5IG9mIHRyb3VibGVzaG9vdGluZywgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgXCJjbGVhblwiIHRoZSBhYnN0cmFjdGlvbiBpcywgb3IgaWYgaXQgaXMgaW5oZXJlbnRseSBtZXNzeSBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSdtIHByZXBhcmVkIGZvciBpdCB0byBiZSBjb21wbGV4LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHNlZ21lbnQgcm91dGluZy4gSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc2ltcGxlIGBtb2RpbmZvYCBvdXRwdXQgYW5kIGxvb2sgYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGFuZCBhbnkgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZSBwaWVjZXMgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjI3LjcwMDg1MTE2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NjpcXHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxuIDI4NzpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMjg4OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyODk6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDI5MDpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDI5MTpcXHRcXHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG4gMjkyOlxcdFxcdGhlbHBcXG4gMjkzOlxcdFxcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XFxuIDI5NDpcXHRcXHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxcbiAyOTU6XFx0XFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MjcuNzAwOTM5NjU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDQyMzc4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBMMiBUdW5uZWxpbmcgQ29kZSoqXG5cblJpZ2h0LCBzbyBJJ20gaG9taW5nIGluIG9uIHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBjb25maWd1cmF0aW9uIOKAkyB0aGF0J3MgdGhlIGNvcmUgb2Ygd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZSBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiBob3cgdGhleSBiZWhhdmUuIEZpcnN0LCBJIGhhdmUgdG8gY2hlY2sgaWYgdGhleSdyZSBzdGF0aWMsIGFuZCwgeWVzLCB0aGV5IGFyZS4gVGhhdCdzIGdvb2QsIGl0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgYSBiaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZSBzcGVjaWZpYyBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB1dGlsaXplZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjMxLjIwNTE4MDI4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMTg1NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlucHV0X2FjdGlvbl9lbmRfZHg0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTM2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MzpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTY0LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk4OC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTg5OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkwLVxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA0LVxcdFxcdFxcdCAgICAgICBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNTpcXHRcXHRcXHQgICAgICAgTlVMTCwgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNzpcXHRyZXR1cm4gaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA4LWRyb3A6XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3OD1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE1LVxcdFxcdC5vcHRhdHRyc1xcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTE2OlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MzEuMzg2MzcwMjAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDQyNDE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc2VnNl9hY3Rpb25fdGFibGVgIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhlc2UgaXRlbXMgSSdtIGxvb2tpbmcgYXQgYXJlIGRlZmluaXRlbHkgbGlua2VkIHRvIHRoZSBgc2VnNl9hY3Rpb25fdGFibGVgLiBOb3csIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyB0YWJsZS4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHBvdGVudGlhbCB1c2VzLi4uIHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgKnVzZWQqPyBXaGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBkZXBlbmRlbnQgb24gaXQ/IEkgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUgdG8gc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaGVyZS4gVGhpcyBpcyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6MzQuNzkwNjE0NDg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQ1OTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2FjdGlvbl90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MjE9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzctXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0Nzg6c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzktXFx0e1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODM6XFx0Y291bnQgPSBBUlJBWV9TSVpFKHNlZzZfYWN0aW9uX3RhYmxlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg1OlxcdFxcdGRlc2MgPSBcXHUwMDI2c2VnNl9hY3Rpb25fdGFibGVbaV07XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODYtXFx0XFx0aWYgKGRlc2MtXFx1MDAzZWFjdGlvbiA9PSBhY3Rpb24pXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQ2Ny1cXHQgKiBvcHRpb25hbCwgaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgbWVzc2VkIHNvbWV0aGluZyB1cCBpbiB0aGVcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQ2ODpcXHQgKiBzZWc2X2FjdGlvbl90YWJsZS4gVGhlcmVmb3JlLCB0aGlzIGNoZWNrIGlzIHJlcXVpcmVkIGZvciBTUnY2XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjktXFx0ICogYmVoYXZpb3JzIHRvIHdvcmsgcHJvcGVybHkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjM0Ljg4MjA4MDgxM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ3OTMwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBJbnB1dCBQcm9jZXNzaW5nIFBlcnNwZWN0aXZlKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGRhdGEgd2l0aGluIHRoaXMgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpbnB1dHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIGBpbnB1dGAgZnVuY3Rpb24gcG9pbnRlciBpcyBiZWluZyBpbnZva2VkIGZyb20gdGhlIGBzZWc2X2xvY2FsX2lucHV0YCBjb250ZXh0LiBUaGF0J3MgdGhlIGtleSBjb25uZWN0aW9uLiBUaGlzIHRlbGxzIG1lIHRoYXQgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIGxpa2VseSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgbG9jYWxseS1kZXN0aW5lZCBwYWNrZXRzIHVzaW5nIHNlZ21lbnQgcm91dGluZyB2NiAoU1J2NikuIFRoZSBmYWN0IHRoYXQgYSBmdW5jdGlvbiAqcG9pbnRlciogaXMgdXNlZCBmb3IgYGlucHV0YCBzdHJvbmdseSBzdWdnZXN0cyBhIGxldmVsIG9mIG1vZHVsYXJpdHkgYW5kIGNvbmZpZ3VyYWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2YgdGhvc2UgbG9jYWxseS1kZXN0aW5lZCBwYWNrZXRzLiBJdCdzIGxpa2VseSB0aGF0IGRpZmZlcmVudCB0eXBlcyBvZiBpbnB1dCBwcm9jZXNzaW5nIGFyZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgYGlucHV0YCBwb2ludGVyIHVzZWQuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgdGhhdCBkZXRlcm1pbmUgd2hpY2ggZnVuY3Rpb24gaXMgYXNzaWduZWQgdG8gdGhhdCBwb2ludGVyLiBJcyBpdCBiYXNlZCBvbiBwYWNrZXQgdHlwZSwgc291cmNlLCBkZXN0aW5hdGlvbiwgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyIHdpdGhpbiB0aGUgY29udGV4dCBvZiBTUnY2PyBUaGF0IGNvbm5lY3Rpb24gaXMgdGhlIHBvaW50LiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSBgc2VnNl9sb2NhbF9pbnB1dGAgYW5kIHRoZSBwb3NzaWJsZSBgaW5wdXRgIGZ1bmN0aW9ucyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0MzozOS4wMzAwMTM3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyNjk0MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTg9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTY6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzOS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XFx0XFx0XFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NTA6XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY1MS19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XFx0LmlucHV0XFx0XFx0PSBzZWc2X2xvY2FsX2lucHV0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgyLVxcdC5maWxsX2VuY2FwXFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjM5LjA5MjI4NzQ1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ0NzIzODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JraW5nIGV4cGVydDpcblxuKipJbnRlcm5hbCBOZXR3b3JrIE1vZHVsZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2VnNl9sb2NhbF9pbnB1dGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW5jb21pbmcgcGFja2V0cyB3aXRoaW4gdGhlIGBsd3R1bm5lbF9lbmNhcF9vcHNgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIHN0YXRpYz8gSXQgZmVlbHMgbGlrZSBhbiBlbnRyeSBwb2ludCwgd2hpY2ggdXN1YWxseSBsZWFucyB0b3dhcmQgbm9uLXN0YXRpYy5cIiBBY3R1YWxseSwgb24gc2Vjb25kIHRob3VnaHQsIGl0ICppcyogc3RhdGljLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgcmVzdCBvZiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdGhhdCBhcmUgbm9uLXN0YXRpYy4gSXQncyB1bnVzdWFsIGZvciBhbiBlbnRyeSBwb2ludCB0byBiZSBzdGF0aWMsIGJ1dCBpdCdzIG5vdCBpbXBvc3NpYmxlLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtb2R1bGUgaXMgZGVzaWduZWQuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBtb2R1bGUuIEEgcXVpY2sgc2NhbiBvZiBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6NDIuNzM3MDE1Njg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzM3MTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI3OT1zZWc2X2xvb2t1cF9hbnlfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMzktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjM0MDppbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNDEtXFx0XFx0XFx0c3RydWN0IGluNl9hZGRyICpuaGFkZHIsIHUzMiB0YmxfaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjg3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjg4OmludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0Mzo0Mi43OTQzOTQ3MTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMzY5NzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBhbmQgUG90ZW50aWFsIEFsdGVybmF0aXZlcyoqXG5cbkFscmlnaHQsIGxldCBtZSBxdWlja2x5IHRoaW5rIGFib3V0IHRoZSBgc2VnNl9sb2NhbF9pbnB1dGAgZnVuY3Rpb24uIEl0IGltbWVkaWF0ZWx5IHN0cmlrZXMgbWUgdGhhdCB0aGlzIG9uZSBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdCwgYW5kIGl0J3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIGNoYXJhY3RlcmlzdGljIG5hdHVyYWxseSBtYWtlcyBtZSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgZGVzaWduIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBkZWxpYmVyYXRlIGVuY2Fwc3VsYXRpb24sIG9yIGlzIGl0IHNpbXBseSBhIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkZXRhaWw/XG5cblRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhZGRyZXNzIGlzIHdoZXRoZXIgdGhlcmUgaXMgYW55ICpvdGhlciogZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0IHRoYXQgaXMgKm5vdCogc3RhdGljLCBzb21ldGhpbmcgdGhhdCBtaWdodCByZXByZXNlbnQgYW4gYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnQgb3IgYSBmdW5jdGlvbiB3aXRoIGJyb2FkZXIgdmlzaWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBzdGF0aWMgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGRpY3RhdGUgaG93IEkgY29udGludWUgbXkgaW52ZXN0aWdhdGlvbiwgYW5kIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlYmFzZSB3b3Jrcy4gSWRlbnRpZnlpbmcgd2hldGhlciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhpcyBpc3N1ZSBvciBub3QgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6NDcuMzA4MDk2NTQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDU2MzI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjg4PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyNDp2b2lkIHNlZzZfbG9jYWxfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNzI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDM6NDcuMzc4NjYzNDg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTgwNjk4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRUc2IExvY2FsIElucHV0IEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgbHd0dW5uZWxgIGlucHV0IHdvcmtzLCBhbmQgaXQgbG9va3MgbGlrZSBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQgcHJvbXB0IGlzIG1ha2luZyBtZSB0aGluay4gSXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGNvbXBpbGVyIGlubGluZXMgdGhvc2UgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggcmVtb3ZlcyBkaXN0aW5jdCBzeW1ib2xzLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgdGhlIHByb21wdC4gQnV0IGhlcmUncyB0aGUgY2F0Y2g6IGlmIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB1c2VkIGVsc2V3aGVyZSwgZm9yIGV4YW1wbGUgaW4gYHNlZzZfbG9jYWxfb3BzYCwgdGhhdCBjb3VsZCBwcmV2ZW50IGlubGluaW5nLiBTbyBsZXQncyBjaGVjayBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgKmlzKiBzdGF0aWMuIFllcCwgaXQgaXMuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyB0aGVyZT8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgY2FuZGlkYXRlcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLi4uIEkgdGhpbmsgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIHRoZSBzdHJvbmdlc3QgY29udGVuZGVyLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgY29udGV4dC4gSSBzZWUgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgYXMgYW5vdGhlciBwb3NzaWJpbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29ycmVjdCBpbiBteSBhc3N1bXB0aW9ucyB0aG91Z2gsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBzZWc2X2xvY2FsX2lucHV0YCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCB0byBjb25maXJtIG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjUyLjA3NjczNTU0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MzU6XFx0XFx0cmV0dXJuIHJjO1xcbjE2MzY6XFx0fVxcbjE2Mzc6XFx0XFxuMTYzODpcXHRzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNjM5OlxcdHtcXG4xNjQwOlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQVjYpKSB7XFxuMTY0MTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNjQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2NDM6XFx0XFx0fVxcbjE2NDQ6XFx0XFxuMTY0NTpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bmZfaG9va3NfbHd0dW5uZWxfZW5hYmxlZCkpXFxuMTY0NjpcXHRcXHRcXHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0lQVjYsIE5GX0lORVRfTE9DQUxfSU4sXFxuMTY0NzpcXHRcXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxuMTY0ODpcXHRcXHRcXHRcXHQgICAgICAgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKTtcXG4xNjQ5OlxcdFxcbjE2NTA6XFx0XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4xNjUxOlxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfbG9jYWxfcG9saWN5W1NFRzZfTE9DQUxfTUFYICsgMV0gPSB7XFxuMTY1NDpcXHRcXHRbU0VHNl9MT0NBTF9BQ1RJT05dXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0Mzo1Mi4wNzY4NjcwMzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMDA2MDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIGBzZWc2X2xvY2FsYCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgYHNlZzZfbG9jYWxgIGNvbXBvbmVudHMuICpgc2VnNl9sb2NhbF9pbnB1dGAqIGFuZCAqYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAqLCB5ZWFoLCB0aGV5IHNlZW0gc29saWQsIHRoZXkncmUgZG9pbmcgd2hhdCB0aGV5IG5lZWQgdG8uIEJ1dCwgYW5kIHRoaXMgaXMgd2hlcmUgSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiwgd2hhdCBhYm91dCAqYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgKj8gVGhhdCBvbmUncyBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0IGFuZCBldmFsdWF0ZSBpdHMgcm9sZSBhbmQgaG93IGl0J3MgZnVuY3Rpb25pbmcgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgdGhlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjU1LjE3NjkzMDA3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyNzc0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9idWlsZF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0NDE9c3RhdGljIGludCBwYXJzZV9ubGFfYWN0aW9uKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1MDctXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI1MDg6c3RhdGljIGludCBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTA5LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2Nzk6XFx0LmJ1aWxkX3N0YXRlXFx0PSBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQzOjU1LjI2ODIxMzYzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIxNDYyOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgc2VnNl9sb2NhbGAgTW9kdWxlIGZvciBBUEkgU3ltYm9sIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsYCBzdHVmZiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYnVpbGRpbmcgdGhlIGx3dHVubmVsIHN0YXRlIHVzaW5nIGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYC4gVGhlIGNoYW5nZSBpcyBpbiBgZGVjYXBfYW5kX3ZhbGlkYXRlYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBUaGVzZSBhcmUgYWN0aW9ucyBmb3IgYHNlZzZfbG9jYWxgLCBzbyBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbiBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIHRoaW5raW5nIGBzZWc2X2xvY2FsX2lucHV0YCBhbmQgYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgIGFyZSBnb29kIGNhbmRpZGF0ZXMuXG5cbldhaXQgYSBzZWNvbmQsIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMuIFRoYXQncyBhIGJpdCBvZiBhIHdyaW5rbGUuIFRoZSBpbnN0cnVjdGlvbnMgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgYW5kIHRoZXkgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBMb29raW5nIGZvciBhIG5vbi1zdGF0aWMgb3B0aW9uLCBJIHNlZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgaXMgbm9uLXN0YXRpYywgYnV0IGl0IGlzbid0IHRoZSBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRoZSBBUEkgZW50cnlwb2ludCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU2luY2UgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIGFuIGVudHJ5IHBvaW50LCBhbmQgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgaXQgc2hvdWxkbid0IGJlIGlubGluZWQuIFRoYXQgd29ya3MhIEdyZWF0ISBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgc2VnNl9sb2NhbF9pbnB1dGAuIEknbGwgYWxzbyBicmluZyBpbiBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYC5cblxuSSdtIGFsc28gY29uc2lkZXJpbmcgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgc2luY2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBpbiBgc2VnNl9hY3Rpb25fdGFibGVgLiBUaGVzZSBzaG91bGQgYWxzbyBub3QgYmUgaW5saW5lZC5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciByZXN0cmljdGlvbnMuIFRoZSBtYWluIGNvbmZpZyBpcyBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgd2hpY2ggSSBleHBlY3QuIEknbSBjaGVja2luZyBmb3Igb3RoZXJzIHRvIGJlIGNlcnRhaW4uIGBJUFY2YCBpcyByZXF1aXJlZCBieSBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBMV1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgaXQuIFNvLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBzZWVtcyB0byBiZSB0aGUgY29udHJvbGxpbmcgb25lLiBJJ20gZ29vZCB0byBnbyB0aGVyZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYGRlY2FwX2FuZF92YWxpZGF0ZWAgaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQ0OjAyLjg4OTY3OTQyMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHR9XFxuIDIzMTpcXHRcXG4gMjMyOlxcdHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxuIDIzMzpcXHR7XFxuIDIzNDpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gMjM1OlxcdFxcdHVuc2lnbmVkIGludCBvZmYgPSAwO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcXG4gMjM4OlxcdFxcdGlmIChzcmggXFx1MDAyNlxcdTAwMjYgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0IFxcdTAwM2UgMClcXG4gMjM5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQwOlxcdFxcbiAyNDE6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAyNDI6XFx0XFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNDQ6XFx0I2VuZGlmXFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNm9mZiwgcHJvdG8sIE5VTEwsIE5VTEwpIFxcdTAwM2MgMClcXG4gMjQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDI1NTpcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAyNTY6XFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbiAyNjA6XFx0XFx0XFx0aW50IGlpZiA9IElQNkNCKHNrYiktXFx1MDAzZWlpZjtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcXG4gMjYzOlxcdFxcdFxcdElQQ0Ioc2tiKS1cXHUwMDNlaWlmID0gaWlmO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFxuIDI2NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIHZvaWQgYWR2YW5jZV9uZXh0c2VnKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDowMi44ODk4MDkxMTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxMDk1MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQSVAgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBJUFBST1RPX0lQSVBgIHBhdGguIEl0IGxvb2tzIGxpa2UgaXQncyBjbGVhcmluZyBgSVBDQihza2IpYCBhbmQgcmVzdG9yaW5nIGBpaWZgLCB3aGljaCBpcyBnb29kLiBUaGUgbGFjayBvZiBjbGVhcmluZyBjb3VsZCBsZWFkIHRvIHByb2JsZW1zIHdpdGggdW5pbml0aWFsaXplZCBkYXRhIGRvd24gdGhlIGxpbmUgaW4gdGhlIElQdjQgc3RhY2ssIHNvIGl0J3MgZGVmaW5pdGVseSBhIHdvcnRod2hpbGUgZml4IGFuZCwgeWVhaCwgc29tZXRoaW5nIEkgc2hvdWxkIHByaW9yaXRpemUgZnV6emluZyB0byBlbnN1cmUgaXQncyByb2J1c3QuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGF0IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXJlIGBzZWc2X2xvY2FsX2lucHV0YCwgYHNlZzZfbG9jYWxfYnVpbGRfc3RhdGVgLCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgcGF0Y2ggbWVudGlvbnMgYElQVjZfU0VHNl9MV1RVTk5FTGAuIExldCBtZSBxdWlja2x5IGNoZWNrIGl0cyBkZXBlbmRlbmNpZXMuIEFscmlnaHQsIGl0IGRlcGVuZHMgb24gYElQVjZgIGFuZCBzZWxlY3RzIGBMV1RVTk5FTGAsIGBEU1RfQ0FDSEVgLCBhbmQgYElQVjZfTVVMVElQTEVfVEFCTEVTYC4gVGhhdCdzIHJlYXNvbmFibGU7IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGl0c2VsZiBzZWVtcyBzdWZmaWNpZW50IHRvIGJlIGVuYWJsZWQuXG5cbk5vdywgSSdsbCBjaGVjayBvbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIExldCdzIHNlZSBpZiBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGFyZSBzdGF0aWM7IFl1cCwgdGhleSBhcmUuIEFyZSB0aGV5IGlubGluZWQ/IE5vLCB0aGV5IGFyZSBub3QuIFRoZXkgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiBgc2VnNl9hY3Rpb25fdGFibGVgLCBzbyB0aGV5J3JlIG5vdCBpbmxpbmVkLiBNaWdodCBiZSBiZXN0IHRvIGZvY3VzIG9uIGBzZWc2X2xvY2FsX2lucHV0YCBpbnN0ZWFkLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDQ6MDguNjAwNzY0NTgxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMzgzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9MjQ9aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgKz0gY2FsaXBzby5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MjU6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUwpICs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNi1pcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSArPSBzZWc2X2htYWMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDowOC43NjY4MDY3NDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5MjQ3MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBvdmVyLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBGcm9tIG15IHBlcnNwZWN0aXZlLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgdHJ1bHkgcmVsZXZhbnQgaGVyZS5cblxuTGV0J3MgYnJlYWsgaXQgZG93biBpbiBhIG1vcmUgZm9ybWFsIHdheTpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IEFic29sdXRlbHkuIFRoaXMgaXMgYSBzb2xpZCBcInRydWVcIiBmcm9tIG1lLlxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgaXMgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBidWcgcmVsYXRlZCB0byBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgbG9jYWwgcHJvY2Vzc2luZy4gU3BlY2lmaWNhbGx5LCB3aGVuIGFuIElQdjQtaW4tSVB2NiBwYWNrZXQgKHVzaW5nIElQUFJPVE9cXF9JUElQKSBpcyBkZWNhcHN1bGF0ZWQsIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIHdhc24ndCBiZWluZyBwcm9wZXJseSBjbGVhcmVkLiBUaGlzIG1lYW5zIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBsZWFrIGludG8gdGhlIElQdjQgc3RhY2suIFRoYXQncyBhIGNyaXRpY2FsIGVycm9yIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGFkZHJlc3NpbmcgYmVjYXVzZSBvZiB0aGUgcG9zc2liaWxpdHkgb2YgZXhwb3NpbmcgdGhpcyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdGhlIG5ldHdvcmsgc3RhY2suIFRoaXMgaXMgYSBkaXJlY3QgZml4IHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjb25jZXJucyBwYWNrZXQgcmVhY2hhYmlsaXR5LlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFRoZSBsaWtlbHkgYXJlYXMgb2YgY29uY2VybiBhcmUgYHNlZzZfbG9jYWxfaW5wdXRgLCBgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZWAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgc2VnbWVudCByb3V0aW5nIHByb2Nlc3MuIEl0J3Mgb2J2aW91cyB0byBtZSB0aGlzIHNob3VsZCBiZSBhIHByaW1hcnkgdGFyZ2V0IGZvciB0aG9yb3VnaCBhbmFseXNpcy5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogQ29uZmlybWluZywgYElQVjZfU0VHNl9MV1RVTk5FTGAgaXMgdGhlIHNpbmdsZSBjb25maWd1cmF0aW9uIGl0ZW0gb2Ygc2lnbmlmaWNhbmNlLlxuXG5Tbywgb3ZlcmFsbCwgYSBuZWNlc3NhcnkgZml4IGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBkYXRhIGxlYWthZ2UgaW4gYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBzbyBpdCB3YXJyYW50cyBzZXJpb3VzIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQ0OjE0LjQ1OTI4MDU3NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA3MDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwic2VnNl9sb2NhbF9idWlsZF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGxvY2FsIHByb2Nlc3Npbmcgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgd2FzIG5vdCBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0LWluLUlQdjYgcGFja2V0IChJUFBST1RPX0lQSVApLiBUaGlzIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHVzZWQgYnkgdGhlIElQdjQgc3RhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwic2VnNl9sb2NhbF9idWlsZF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGxvY2FsIHByb2Nlc3Npbmcgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgd2FzIG5vdCBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0LWluLUlQdjYgcGFja2V0IChJUFBST1RPX0lQSVApLiBUaGlzIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHVzZWQgYnkgdGhlIElQdjQgc3RhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEwOjQ0OjE0LjU3OTM1NzMyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5Mjg1NjY2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDoxNC41Nzk4MDI0ODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI5MjgxMTc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVxcdTAwM2VjYmApIHRvIHplcm8gZHVyaW5nIElQdjYgdG8gSVB2NCBkZWNhcHN1bGF0aW9uIChgSVBQUk9UT19JUElQYCkuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBidWcsIHdoZXJlIHRoZSBJUHY0IHN0YWNrIGxhdGVyIHJlYWRzIGZpZWxkcyBmcm9tIGBJUENCKHNrYilgIHRoYXQgd2VyZSBuZXZlciBpbml0aWFsaXplZCAob3Igb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIElQdjYgbGF5ZXIpLiBCZWNhdXNlIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlKSBhbmQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0IHdvdWxkIG5vdCBkZXRlY3QgaWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5IGlmIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFuZCBmdWxseSByZXNvbHZlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDFhYmQyN2ZiZmE1NTY4YWY4ZjJmM2U3ODkwYWU0M2UzOTM3YTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTA6NDM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTA6NDQ6MTQuNTc5ODAzNTA1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTI4MDkyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBmb3IgTmVlZHNLTVNBTj10cnVlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCB0aGlzIGxpbmUgYG1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7YCBqdW1wcyBvdXQuIFRoYXQncyBhIGNsYXNzaWMgc2lnbiBvZiBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIEtNU0FOIGlzc3VlLiBUaGlzIGlzIGluIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBkZWNhcHN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYW4gSVBJUCBwYWNrZXQgZnJvbSBJUHY2LlxuXG5UaGUgY29kZSBpcyB6ZXJvaW5nIG91dCB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChgSVBDQihza2IpYCkgYWZ0ZXIgcmVjZWl2aW5nIGFuIElQSVAgcGFja2V0IGZyb20gYW4gSVB2NiBwYWNrZXQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIG1pZ2h0IGhhdmUgaGFkIGdhcmJhZ2UgZGF0YSBpbiB0aGlzIHJlZ2lvbiBhbmQgdGhhdCB0aGUgSVB2NCBjb2RlIHdhcyBwb3RlbnRpYWxseSB1c2luZyBpdCwgY3JlYXRpbmcgYSByaXNrLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCAqZml4ZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIG9yICppbnRyb2R1Y2VzKiBvbmUsIG9yLCBwdXQgYW5vdGhlciB3YXksIHdoZXRoZXIgaXQgKmV4cG9zZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIG9yIHBlcmhhcHMsICphZGRyZXNzZXMqIGFuIGV4aXN0aW5nIHJpc2suIFNpbmNlIHRoZSBwYXRjaCAqYWRkcyogdGhlIGBtZW1zZXRgLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGNvZGUgKmFkZHJlc3NlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay5cblxuSWYgaXQgKmFkZHJlc3NlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIEtNU0FOIGJlY29tZXMgY3J1Y2lhbC4gVGhpcyBpcyBiZWNhdXNlIEtNU0FOIGlzIHRoZSAqb25seSogdG9vbCB0aGF0IGNhbiByZWxpYWJseSBkZXRlY3QgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcGF0Y2ggYWN0dWFsbHkgKmZpeGVzKiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQsIGltcG9ydGFudGx5LCBkb2Vzbid0IGNyZWF0ZSAqbmV3KiBvbmVzLiAgS0FTQU4gaXMgaXJyZWxldmFudCBpbiB0aGlzIGluc3RhbmNlLiBJdCBmb2N1c2VzIG9uIG1lbW9yeSBzYWZldHkgZXJyb3JzICh1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgZXRjLiksIHdoaWNoIGFyZSBub3QgdGhlIHByb2JsZW0gaGVyZS4gSXQncyBhbiB1bmluaXRpYWxpemVkIHJlYWQgdGhhdCdzIGNhdXNpbmcgY29uY2Vybi5cblxuV2UgbmVlZCB0byBjb25zaWRlciBpZiBgSVBDQihza2IpYCBpcyBldmVyIGluaXRpYWxpemVkIGFuZCB1c2VkIHByaW9yIHRvIGRlY2Fwc3VsYXRpb24uIElmIGl0IHdhc24ndCBpbml0aWFsaXplZCwgS01TQU4gd291bGQgaGF2ZSBkZXRlY3RlZCB0aGF0LiBUaGUgcGF0Y2ggY29ycmVjdHMgaXQgYnkgemVyb2luZyBpdCBvdXQuIEJ1dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBjb3JyZWN0LlxuXG5JIGJlbGlldmUgS01TQU4gaXMgZXNzZW50aWFsIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggKmZpeGVzKiB0aGUgYnVnLCBhbmQgZG9lc24ndCBwYXJ0aWFsbHkgZml4IGl0IChtZWFuaW5nIHRoZSBidWcgc3RpbGwgZXhpc3RzKSwgb3IgaW50cm9kdWNlIG1vcmUgc2ltaWxhciBidWdzLiBLTVNBTiB3aWxsIHZlcmlmeSB0aGUgbWVtb3J5IGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5JbiBzaG9ydCwgYmVjYXVzZSB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBieSBpbml0aWFsaXppbmcgYElQQ0Ioc2tiKWAgd2l0aGluIHRoZSBkZWNhcHN1bGF0aW9uIHBhdGgsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgcmVxdWlyZWQuIEtBU0FOIGlzIHRoZSB3cm9uZyB0b29sIGZvciB0aGUgam9iLiBLTVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyLCJPdXRwdXRUb2tlbnMiOjIwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMDo0NDozNy41MDc4OTk0MTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgbWVtc2V0YCB0byBpbml0aWFsaXplIGBJUENCKHNrYilgICh0aGUgSVB2NCBjb250cm9sIGJsb2NrIHdpdGhpbiBgc2tiLVxcdTAwM2VjYmApIHRvIHplcm8gZHVyaW5nIElQdjYgdG8gSVB2NCBkZWNhcHN1bGF0aW9uIChgSVBQUk9UT19JUElQYCkuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBidWcsIHdoZXJlIHRoZSBJUHY0IHN0YWNrIGxhdGVyIHJlYWRzIGZpZWxkcyBmcm9tIGBJUENCKHNrYilgIHRoYXQgd2VyZSBuZXZlciBpbml0aWFsaXplZCAob3Igb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIElQdjYgbGF5ZXIpLiBCZWNhdXNlIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlKSBhbmQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0IHdvdWxkIG5vdCBkZXRlY3QgaWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5IGlmIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFuZCBmdWxseSByZXNvbHZlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYG1lbXNldGAgdG8gaW5pdGlhbGl6ZSBgSVBDQihza2IpYCAodGhlIElQdjQgY29udHJvbCBibG9jayB3aXRoaW4gYHNrYi1cXHUwMDNlY2JgKSB0byB6ZXJvIGR1cmluZyBJUHY2IHRvIElQdjQgZGVjYXBzdWxhdGlvbiAoYElQUFJPVE9fSVBJUGApLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVnLCB3aGVyZSB0aGUgSVB2NCBzdGFjayBsYXRlciByZWFkcyBmaWVsZHMgZnJvbSBgSVBDQihza2IpYCB0aGF0IHdlcmUgbmV2ZXIgaW5pdGlhbGl6ZWQgKG9yIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemVkIGJ5IHRoZSBJUHY2IGxheWVyKS4gQmVjYXVzZSBLQVNBTiBvbmx5IGRldGVjdHMgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCB3b3VsZCBub3QgZGV0ZWN0IGlmIGBJUENCKHNrYilgIGlzIHJlYWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGNvcnJlY3RseSBhbmQgZnVsbHkgcmVzb2x2ZXMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqmkdd[1] Phase: Succeeded StartedAt: 2026-08-17 10:44:48 +0000 UTC FinishedAt: 2026-08-17 10:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 10:44:48 +0000 UTC FinishedAt: 2026-08-17 10:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2] Phase: Succeeded StartedAt: 2026-08-17 10:44:48 +0000 UTC FinishedAt: 2026-08-17 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 10:44:48 +0000 UTC FinishedAt: 2026-08-17 14:28:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","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-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 10:44:48 +0000 UTC FinishedAt: 2026-08-17 10:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 10:44:48 +0000 UTC FinishedAt: 2026-08-17 10:44:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"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-workflowqmkdd/series-workflowqmkdd-convert-artifact-4279201303/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 10:44:59 +0000 UTC FinishedAt: 2026-08-17 11:01:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 10:44:59 +0000 UTC FinishedAt: 2026-08-17 11:01:34 +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:*fb5a1a11-b4be-455f-86f4-5a54658490ba,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-workflowqmkdd/series-workflowqmkdd-convert-artifact-4279201303/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": "cf1b52e0-24ce-4cfc-b15e-0bb313600fcd", "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-workflowqmkdd/series-workflowqmkdd-build-action-3343002477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 10:44:59 +0000 UTC FinishedAt: 2026-08-17 11:01:24 +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:*fb5a1a11-b4be-455f-86f4-5a54658490ba,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-workflowqmkdd/series-workflowqmkdd-convert-artifact-4279201303/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": "cf1b52e0-24ce-4cfc-b15e-0bb313600fcd", "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-workflowqmkdd/series-workflowqmkdd-build-action-3343002477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 11:01:34 +0000 UTC FinishedAt: 2026-08-17 11:01:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 11:01:34 +0000 UTC FinishedAt: 2026-08-17 11:01:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 11:01:34 +0000 UTC FinishedAt: 2026-08-17 11:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 11:01:34 +0000 UTC FinishedAt: 2026-08-17 11:01:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","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-workflowqmkdd/series-workflowqmkdd-convert-artifact-1739526470/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 11:01:44 +0000 UTC FinishedAt: 2026-08-17 11:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 11:01:44 +0000 UTC FinishedAt: 2026-08-17 11:03:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cf1b52e0-24ce-4cfc-b15e-0bb313600fcd,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-workflowqmkdd/series-workflowqmkdd-build-action-3343002477/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-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 11:03:53 +0000 UTC FinishedAt: 2026-08-17 11:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 11:03:53 +0000 UTC FinishedAt: 2026-08-17 11:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 11:03:53 +0000 UTC FinishedAt: 2026-08-17 11:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 11:03:53 +0000 UTC FinishedAt: 2026-08-17 11:21:11 +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:*fb5a1a11-b4be-455f-86f4-5a54658490ba,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-workflowqmkdd/series-workflowqmkdd-convert-artifact-1739526470/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": "bfb92a59-e335-4220-9ea5-b437d9f8cfac", "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-workflowqmkdd/series-workflowqmkdd-build-action-2602275978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 11:03:53 +0000 UTC FinishedAt: 2026-08-17 11:21:01 +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:*fb5a1a11-b4be-455f-86f4-5a54658490ba,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-workflowqmkdd/series-workflowqmkdd-convert-artifact-1739526470/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": "bfb92a59-e335-4220-9ea5-b437d9f8cfac", "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-workflowqmkdd/series-workflowqmkdd-build-action-2602275978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 11:21:11 +0000 UTC FinishedAt: 2026-08-17 11:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 11:21:11 +0000 UTC FinishedAt: 2026-08-17 11:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 11:21:11 +0000 UTC FinishedAt: 2026-08-17 11:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 11:21:11 +0000 UTC FinishedAt: 2026-08-17 11:23:05 +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:*bfb92a59-e335-4220-9ea5-b437d9f8cfac,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-workflowqmkdd/series-workflowqmkdd-build-action-2602275978/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-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 11:23:15 +0000 UTC FinishedAt: 2026-08-17 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 11:23:15 +0000 UTC FinishedAt: 2026-08-17 14:28:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"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:*cf1b52e0-24ce-4cfc-b15e-0bb313600fcd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bfb92a59-e335-4220-9ea5-b437d9f8cfac,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-workflowqmkdd/series-workflowqmkdd-build-action-3343002477/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-workflowqmkdd/series-workflowqmkdd-build-action-2602275978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 11:23:15 +0000 UTC FinishedAt: 2026-08-17 11:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 11:23:15 +0000 UTC FinishedAt: 2026-08-17 11:23:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"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-workflowqmkdd/series-workflowqmkdd-convert-artifact-2270435339/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 11:23:15 +0000 UTC FinishedAt: 2026-08-17 11:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 11:23:15 +0000 UTC FinishedAt: 2026-08-17 11:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 11:23:15 +0000 UTC FinishedAt: 2026-08-17 11:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 11:23:25 +0000 UTC FinishedAt: 2026-08-17 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmkdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_local_input","seg6_local_build_state","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL"],"series_id":"8fb208eb-56d2-4e4d-81b6-ca20e76901b3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 11:23:25 +0000 UTC FinishedAt: 2026-08-17 14:28:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cf1b52e0-24ce-4cfc-b15e-0bb313600fcd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bfb92a59-e335-4220-9ea5-b437d9f8cfac,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-workflowqmkdd/series-workflowqmkdd-build-action-3343002477/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-workflowqmkdd/series-workflowqmkdd-build-action-2602275978/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-workflowqmkdd/series-workflowqmkdd-convert-artifact-2270435339/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,}