Name: series-workflow9mrbk Phase: Succeeded StartedAt: 2026-09-07 18:51:48 +0000 UTC FinishedAt: 2026-09-07 19:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[0] Phase: Succeeded StartedAt: 2026-09-07 18:51:48 +0000 UTC FinishedAt: 2026-09-07 19:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 18:51:48 +0000 UTC FinishedAt: 2026-09-07 19:26:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NAMESPACES", "USER_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NAMESPACES", "USER_NS" ], "series_id": "40346966-3a38-4a48-91fd-e4580cd87ab8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__do_sys_listns", "do_listns", "do_listns_userns", "legitimize_ns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZG9fc3lzX2xpc3RucyYjMzQ7LAogICAgJiMzNDtkb19saXN0bnMmIzM0OywKICAgICYjMzQ7ZG9fbGlzdG5zX3VzZXJucyYjMzQ7LAogICAgJiMzNDtsZWdpdGltaXplX25zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWxsb2NhdGUgYW55IG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgZGF0YSBsZW5ndGhzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbGwgZmllbGRzIGFjY2Vzc2VkIChgY2FuZGlkYXRlLVx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVx1MDAzZW5zX2lkYCwgZXRjLikgYmVsb25nIHRvIGluaXRpYWxpemVkIG5hbWVzcGFjZSBzdHJ1Y3R1cmVzIGluIHRoZSBuYW1lc3BhY2UgdHJlZS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjYW5kaWRhdGVgIHVuZGVyIFJDVSBwcmlvciB0byB0YWtpbmcgYSByZWZlcmVuY2Ugd291bGQgYmUgb2JqZWN0IGxpZmV0aW1lL3VzZS1hZnRlci1mcmVlIGlzc3VlcyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9uc3RyZWUuYyBiL2tlcm5lbC9uc3RyZWUuY1xuaW5kZXggNmQxMmU1OTAwYWMwMS4uODMxZjI3OWQxNzRhMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9uc3RyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL25zdHJlZS5jXG5AQCAtNTMzLDE5ICYjNDM7NTMzLDEzIEBAIERFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4ge1xuLVx0c3RydWN0IG5zX2NvbW1vbiAqbnMgX19mcmVlKG5zX3B1dCkgPSBOVUxMO1xuLVxuIFx0aWYgKCFuc19yZXF1ZXN0ZWQoa2xzLCBjYW5kaWRhdGUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdG5zID0gbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShjYW5kaWRhdGUpO1xuLVx0aWYgKCFucylcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRpZiAoIW1heV9saXN0X25zKGtscywgbnMpKVxuJiM0MztcdGlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBub19mcmVlX3B0cihucyk7XG4mIzQzO1x0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZG9fc3lzX2xpc3RucyYjMzQ7LAogICAgJiMzNDtkb19saXN0bnMmIzM0OywKICAgICYjMzQ7ZG9fbGlzdG5zX3VzZXJucyYjMzQ7LAogICAgJiMzNDtsZWdpdGltaXplX25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jCmluZGV4IDZkMTJlNTkwMGFjMDEuLjgzMWYyNzlkMTc0YTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9uc3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbnN0cmVlLmMKQEAgLTUzMywxOSAmIzQzOzUzMywxMyBAQCBERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsCiAJCQkJCQkJICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKQogewotCXN0cnVjdCBuc19jb21tb24gKm5zIF9fZnJlZShuc19wdXQpID0gTlVMTDsKLQogCWlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlucyA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghbWF5X2xpc3RfbnMoa2xzLCBucykpCiYjNDM7CWlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBub19mcmVlX3B0cihucyk7CiYjNDM7CXJldHVybiBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIE5hbWVzcGFjZSBUcmVlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9uc3RyZWUuY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBga2VybmVsL25zdHJlZS5jYCDigJMgSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGZpcmUgdXAgYGdyZXBwZXJgIGRlcGVuZGluZyBvbiB3aGF0IEkgbmVlZCBhbmQgaG93IHF1aWNrbHkgSSB3YW50IHRvIHNjYW4gaXQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSAqZG9lcyouIFdoYXQmIzM5O3MgaXRzIHB1cnBvc2U/IFdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIGl0IHByb3ZpZGUgd2l0aGluIHRoZSBrZXJuZWw/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgaW52b2x2ZWQuIEkmIzM5O2xsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGFyY2hpdGVjdHVyZS4KClRoZW4sIGNvbmZpZyBvcHRpb25zIGFyZSBnb2luZyB0byBiZSBrZXkuIEkgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGNvbnRyb2wgdGhpcyBjb2RlJiMzOTtzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdWJzeXN0ZW1zPyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyB0byByZWFzb24gYWJvdXQgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLgoKRmluYWxseSwgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hvIGNhbGxzIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBuc3RyZWUuY2AgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhZmZlY3RlZCBieSBpdC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgaG93IHRoaXMgcGF0Y2ggY291bGQgaW1wYWN0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEnigJlsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIHNpZGUgZWZmZWN0cywgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zLiBCYXNpY2FsbHksIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbnN0cmVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFx0aWYgKGlzX2N1cnJlbnRfbmFtZXNwYWNlKG5zKSlcbiA1MjE6XHRcdFx0cmV0dXJuIHRydWU7XG4gNTIyOlx0XHRyZXR1cm4gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHRzdGF0aWMgaW5saW5lIHZvaWQgbnNfcHV0KHN0cnVjdCBuc19jb21tb24gKm5zKVxuIDUyNjpcdHtcbiA1Mjc6XHRcdGlmIChucyBcdTAwMjZcdTAwMjYgbnMtXHUwMDNlb3BzKVxuIDUyODpcdFx0XHRucy1cdTAwM2VvcHMtXHUwMDNlcHV0KG5zKTtcbiA1Mjk6XHR9XG4gNTMwOlx0XG4gNTMxOlx0REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxuIDUzMjpcdFxuIDUzMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiA1MzQ6XHRcdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcbiA1MzU6XHR7XG4gNTM2Olx0XHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXG4gNTM3Olx0XHRcdHJldHVybiBOVUxMO1xuIDUzODpcdFxuIDUzOTpcdFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIGNhbmRpZGF0ZSkpXG4gNTQwOlx0XHRcdHJldHVybiBOVUxMO1xuIDU0MTpcdFxuIDU0MjpcdFx0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbiA1NDM6XHR9XG4gNTQ0Olx0XG4gNTQ1Olx0c3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxuIDU0NjpcdHtcbiA1NDc6XHRcdHU2NCBfX3VzZXIgKm5zX2lkcyA9IGtscy1cdTAwM2V1bnNfaWRzO1xuIDU0ODpcdFx0c2l6ZV90IG5yX25zX2lkcyA9IGtscy1cdTAwM2Vucl9uc19pZHM7XG4gNTQ5Olx0XHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IE5VTEwsICpmaXJzdF9ucyA9IE5VTEwsICpwcmV2ID0gTlVMTDtcbiA1NTA6XHRcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7XG4gNTUxOlx0XHRzc2l6ZV90IHJldDtcbiA1NTI6XHRcbiA1NTM6XHRcdFZGU19XQVJOX09OX09OQ0UoIWtscy1cdTAwM2V1c2VyX25zX2lkKTtcbiA1NTQ6XHRcbiA1NTU6XHRcdGlmIChrbHMtXHUwMDNldXNlcl9uc19pZCA9PSBMSVNUTlNfQ1VSUkVOVF9VU0VSKVxuIDU1NjpcdFx0XHRucyA9IHRvX25zX2NvbW1vbihjdXJyZW50X3VzZXJfbnMoKSk7XG4gNTU3Olx0XHRlbHNlIGlmIChrbHMtXHUwMDNldXNlcl9uc19pZClcbiA1NTg6XHRcdFx0bnMgPSBsb29rdXBfbnNfaWQoa2xzLVx1MDAzZXVzZXJfbnNfaWQsIENMT05FX05FV1VTRVIpO1xuIDU1OTpcdFx0aWYgKCFucylcbiA1NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTYxOlx0XHRrbHMtXHUwMDNldXNlcl9ucyA9IHRvX3VzZXJfbnMobnMpO1xuIDU2MjpcdFxuIDU2MzpcdFx0LypcbiA1NjQ6XHRcdCAqIFVzZSB0aGUgcmJ0cmVlIHRvIGZpbmQgdGhlIGZpcnN0IG5hbWVzcGFjZSB3ZSBjYXJlIGFib3V0IGFuZFxuIDU2NTpcdFx0ICogdGhlbiB1c2UgaXQmIzM5O3MgbGlzdCBlbnRyeSB0byBpdGVyYXRlIGZyb20gdGhlcmUuXG4gNTY2Olx0XHQgKi9cbiA1Njc6XHRcdGlmIChrbHMtXHUwMDNlbGFzdF9uc19pZCkge1xuIDU2ODpcdFx0XHRrbHMtXHUwMDNlZmlyc3RfbnMgPSBsb29rdXBfbnNfb3duZXJfYXQoa2xzLVx1MDAzZWxhc3RfbnNfaWQgJiM0MzsgMSwgbnMpO1xuIDU2OTpcdFx0XHRpZiAoIWtscy1cdTAwM2VmaXJzdF9ucylcbiA1NzA6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA1NzE6XHRcdFx0Zmlyc3RfbnMgPSBrbHMtXHUwMDNlZmlyc3RfbnM7XG4gNTcyOlx0XHR9XG4gNTczOlx0XG4gNTc0Olx0XHRyZXQgPSAwO1xuIDU3NTpcdFx0aGVhZCA9IFx1MDAyNnRvX25zX2NvbW1vbihrbHMtXHUwMDNldXNlcl9ucyktXHUwMDNlbnNfb3duZXJfcm9vdC5uc19saXN0X2hlYWQ7XG4gNTc2Olx0XHRrbHMtXHUwMDNldXNlcm5zX2NhcGFibGUgPSBtYXlfc2VlX2FsbF9uYW1lc3BhY2VzKCk7XG4gNTc3Olx0XG4gNTc4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNTc5Olx0XG4gNTgwOlx0XHRpZiAoIWZpcnN0X25zKVxuIDU4MTpcdFx0XHRmaXJzdF9ucyA9IGxpc3RfZW50cnlfcmN1KGhlYWQtXHUwMDNlbmV4dCwgdHlwZW9mKCpmaXJzdF9ucyksIG5zX293bmVyX25vZGUubnNfbGlzdF9lbnRyeSk7XG4gNTgyOlx0XG4gNTgzOlx0XHRucyA9IGZpcnN0X25zO1xuIDU4NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShucywgaGVhZCwgbnNfb3duZXJfbm9kZS5uc19saXN0X2VudHJ5KSB7XG4gNTg1Olx0XHRcdHN0cnVjdCBuc19jb21tb24gKnZhbGlkO1xuIDU4NjpcdFxuIDU4NzpcdFx0XHRpZiAoIW5yX25zX2lkcylcbiA1ODg6XHRcdFx0XHRicmVhaztcbiA1ODk6XHRcbiA1OTA6XHRcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xuIDU5MTpcdFx0XHRpZiAoIXZhbGlkKVxuIDU5MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDU5MzpcdFxuIDU5NDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1OTU6XHRcbiA1OTY6XHRcdFx0bnNfcHV0KHByZXYpO1xuIDU5NzpcdFx0XHRwcmV2ID0gdmFsaWQ7XG4gNTk4Olx0XG4gNTk5Olx0XHRcdGlmIChwdXRfdXNlcih2YWxpZC1cdTAwM2Vuc19pZCwgbnNfaWRzICYjNDM7IHJldCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjExCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBvdXQgbG91ZCBhcyBJIGludmVzdGlnYXRlOgoKKipBbmFseXppbmcgTmFtZXNwYWNlIFRyZWUgT3BlcmF0aW9ucyBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBuYW1lc3BhY2UgdHJlZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGtlcm5lbC9uc3RyZWUuY2AuIEZpcnN0LCBJIGNvdWxkIGp1c3QgcmVhZCB0aGUgd2hvbGUgZmlsZSB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IHRoYXQmIzM5O3MgYSBiaXQgYnJ1dGUgZm9yY2UuIExldCBtZSB0cnkgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFdoZXJlIGRvZXMgdGhpcyBga2VybmVsL25zdHJlZS5jYCBmaXQgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIHN5c3RlbSBjYWxscyBhbmQgaW50ZXJhY3Rpb25zPyBJIGNhbiBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGNhbGxzIHRvIGBkb19saXN0bnNfdXNlcm5zYCBvciBgbGVnaXRpbWl6ZV9uc2Agd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJZiBJIGNhbiBmaW5kIHRoZXNlLCB0aGF0IHdpbGwgc2hvdyBtZSB3aGVyZSB0aGUgc3lzdGVtIGNhbGxzIG9yIGBpb2N0bGBzIGFyZSB0aGF0IGFyZSBjYWxsaW5nIGludG8gYGtlcm5lbC9uc3RyZWUuY2AuIEkgZXhwZWN0IHRoZXNlIHdvdWxkIGJlIHVzZWQgdG8gbGlzdCwgcXVlcnksIG9yIHBvdGVudGlhbGx5IHZhbGlkYXRlIG5hbWVzcGFjZSBjb25maWd1cmF0aW9ucy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCByaWdodD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsZWdpdGltaXplX25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbnN0cmVlLmM9NTMxPURFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbmtlcm5lbC9uc3RyZWUuYy01MzItXG5rZXJuZWwvbnN0cmVlLmM6NTMzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbmtlcm5lbC9uc3RyZWUuYy01MzQtXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4tLVxua2VybmVsL25zdHJlZS5jPTU0NT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG4tLVxua2VybmVsL25zdHJlZS5jLTU4OS1cbmtlcm5lbC9uc3RyZWUuYzo1OTA6XHRcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcbmtlcm5lbC9uc3RyZWUuYy01OTEtXHRcdGlmICghdmFsaWQpXG4tLVxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNzMxLVxua2VybmVsL25zdHJlZS5jOjczMjpcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xua2VybmVsL25zdHJlZS5jLTczMy1cdFx0aWYgKCF2YWxpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYG5zdHJlZWAgU3lzY2FsbCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBuYW1lc3BhY2Ugb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZHJpbGxpbmcgaW50byBga2VybmVsL25zdHJlZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gY2FsbHMgcmVsYXRlZCB0byBuYW1lc3BhY2UgbWFuaXB1bGF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGEgY2VudHJhbCBmdW5jdGlvbiB0aGF0IGRpc3BhdGNoZXMgYmFzZWQgb24gdGhlIHNwZWNpZmljIG5hbWVzcGFjZSBvcGVyYXRpb24gcmVxdWVzdGVkLCBvciBtYXliZSBhIGRlZGljYXRlZCBzeXN0ZW0gY2FsbCBmb3IgZWFjaC4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24sIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW5kIG9mIGNvdXJzZSwgd2hhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbG9vayBsaWtlIHVuZGVyIHRoZSBob29kLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIG1hbmFnaW5nIHRoZSBuYW1lc3BhY2UgdHJlZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBtb3VudGluZywgdW5tb3VudGluZywgY3JlYXRpbmcsIGFuZCBkZXN0cm95aW5nIG5hbWVzcGFjZXMuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbmFtZXNwYWNlIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdXNlIG9mIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgY29uY3VycmVuY3kgcHJpbWl0aXZlcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUga2VybmVsIGVuZm9yY2VzIHNlY3VyaXR5IHBvbGljaWVzIGFuZCBjYXBhYmlsaXRpZXMgcmVsYXRlZCB0byBuYW1lc3BhY2UgYWNjZXNzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdGVsc2VcbiA3MjE6XHRcdFx0aGVhZCA9IFx1MDAyNm5zX3VuaWZpZWRfcm9vdC5uc19saXN0X2hlYWQ7XG4gNzIyOlx0XG4gNzIzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNzI0Olx0XG4gNzI1Olx0XHRpZiAoIWZpcnN0X25zKVxuIDcyNjpcdFx0XHRmaXJzdF9ucyA9IGZpcnN0X25zX2NvbW1vbihoZWFkLCBuc190cmVlKTtcbiA3Mjc6XHRcbiA3Mjg6XHRcdGZvciAobnMgPSBmaXJzdF9uczsgIW5zX2NvbW1vbl9pc19oZWFkKG5zLCBoZWFkLCBuc190cmVlKSBcdTAwMjZcdTAwMjYgbnJfbnNfaWRzO1xuIDcyOTpcdFx0ICAgICBucyA9IG5leHRfbnNfY29tbW9uKG5zLCBuc190cmVlKSkge1xuIDczMDpcdFx0XHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcbiA3MzE6XHRcbiA3MzI6XHRcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xuIDczMzpcdFx0XHRpZiAoIXZhbGlkKVxuIDczNDpcdFx0XHRcdGNvbnRpbnVlO1xuIDczNTpcdFxuIDczNjpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA3Mzc6XHRcbiA3Mzg6XHRcdFx0bnNfcHV0KHByZXYpO1xuIDczOTpcdFx0XHRwcmV2ID0gdmFsaWQ7XG4gNzQwOlx0XG4gNzQxOlx0XHRcdGlmIChwdXRfdXNlcih2YWxpZC1cdTAwM2Vuc19pZCwgbnNfaWRzICYjNDM7IHJldCkpIHtcbiA3NDI6XHRcdFx0XHRuc19wdXQocHJldik7XG4gNzQzOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzQ0Olx0XHRcdH1cbiA3NDU6XHRcbiA3NDY6XHRcdFx0bnJfbnNfaWRzLS07XG4gNzQ3Olx0XHRcdHJldCYjNDM7JiM0Mzs7XG4gNzQ4Olx0XG4gNzQ5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA3NTA6XHRcdH1cbiA3NTE6XHRcbiA3NTI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDc1MzpcdFx0bnNfcHV0KHByZXYpO1xuIDc1NDpcdFx0cmV0dXJuIHJldDtcbiA3NTU6XHR9XG4gNzU2Olx0XG4gNzU3Olx0U1lTQ0FMTF9ERUZJTkU0KGxpc3RucywgY29uc3Qgc3RydWN0IG5zX2lkX3JlcSBfX3VzZXIgKiwgcmVxLFxuIDc1ODpcdFx0XHR1NjQgX191c2VyICosIG5zX2lkcywgc2l6ZV90LCBucl9uc19pZHMsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4gNzU5Olx0e1xuIDc2MDpcdFx0c3RydWN0IGtsaXN0bnMga2xucyBfX2ZyZWUoa2xpc3Ruc19mcmVlKSA9IHt9O1xuIDc2MTpcdFx0Y29uc3Qgc2l6ZV90IG1heGNvdW50ID0gMTAwMDAwMDtcbiA3NjI6XHRcdHN0cnVjdCBuc19pZF9yZXEga3JlcTtcbiA3NjM6XHRcdHNzaXplX3QgcmV0O1xuIDc2NDpcdFxuIDc2NTpcdFx0aWYgKGZsYWdzKVxuIDc2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3Njc6XHRcbiA3Njg6XHRcdGlmICh1bmxpa2VseShucl9uc19pZHMgXHUwMDNlIG1heGNvdW50KSlcbiA3Njk6XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gNzcwOlx0XG4gNzcxOlx0XHRpZiAoIWFjY2Vzc19vayhuc19pZHMsIG5yX25zX2lkcyAqIHNpemVvZigqbnNfaWRzKSkpXG4gNzcyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc3MzpcdFxuIDc3NDpcdFx0cmV0ID0gY29weV9uc19pZF9yZXEocmVxLCBcdTAwMjZrcmVxKTtcbiA3NzU6XHRcdGlmIChyZXQpXG4gNzc2Olx0XHRcdHJldHVybiByZXQ7XG4gNzc3Olx0XG4gNzc4Olx0XHRyZXQgPSBwcmVwYXJlX2tsaXN0bnMoXHUwMDI2a2xucywgXHUwMDI2a3JlcSwgbnNfaWRzLCBucl9uc19pZHMpO1xuIDc3OTpcdFx0aWYgKHJldClcbiA3ODA6XHRcdFx0cmV0dXJuIHJldDtcbiA3ODE6XHRcbiA3ODI6XHRcdGlmIChrcmVxLnVzZXJfbnNfaWQpXG4gNzgzOlx0XHRcdHJldHVybiBkb19saXN0bnNfdXNlcm5zKFx1MDAyNmtsbnMpO1xuIDc4NDpcdFxuIDc4NTpcdFx0cmV0dXJuIGRvX2xpc3RucyhcdTAwMjZrbG5zKTtcbiA3ODY6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKktlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbjogYGxpc3Ruc2AgYW5kIE5hbWVzcGFjZSBUcmVlcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBsaXN0bnNgIHN5c2NhbGwhIEkgbmVlZCB0byBxdWlja2x5IGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIGxvb2sgYXQgYGtlcm5lbC9uc3RyZWUuY2AsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGF0IGNvZGUgdG8gZXZlbiBiZSBjb21waWxlZCBpbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGhlbHBzIG5hcnJvdyBkb3duIHdoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gYGxpc3Ruc2AuIE5leHQgdXAsIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiB1bmRlcnN0YW5kIGhvdyBgbnN0cmVlLmNgIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYGxpc3Ruc2AgKG9yIHJlbGF0ZWQgY29kZSkgaXMgZGVmaW5lZCBhbmQgYnVpbHQsIHdoaWNoIHdpbGwgYmUgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBpdHMgdXNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc3RyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9NYWtlZmlsZT02PW9iai15ICAgICA9IGZvcmsubyBleGVjX2RvbWFpbi5vIGV4ZWNfc3RhdGUubyBwYW5pYy5vIFxcXG4tLVxua2VybmVsL01ha2VmaWxlLTEwLVx0ICAgIGV4dGFibGUubyBwYXJhbXMubyBcXFxua2VybmVsL01ha2VmaWxlOjExOlx0ICAgIGt0aHJlYWQubyBzeXNfbmkubyBuc3Byb3h5Lm8gbnN0cmVlLm8gbnNjb21tb24ubyBcXFxua2VybmVsL01ha2VmaWxlLTEyLVx0ICAgIG5vdGlmaWVyLm8ga3N5c2ZzLm8gY3JlZC5vIHJlYm9vdC5vIFxcXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzo1OTojaW5jbHVkZSBcdTAwM2NsaW51eC9uc3RyZWUuaFx1MDAzZVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4tLVxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvY2dyb3VwL25hbWVzcGFjZS5jLTktXG4tLVxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYz0zNj12b2lkIGZyZWVfY2dyb3VwX25zKHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICpucylcbi0tXG5rZXJuZWwvY2dyb3VwL25hbWVzcGFjZS5jLTQyLVx0bnNfY29tbW9uX2ZyZWUobnMpO1xua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYzo0MzpcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy00NC1cdGtmcmVlX3JjdShucywgbnMubnNfcmN1KTtcbi0tXG5rZXJuZWwvbnNjb21tb24uYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L25zX2NvbW1vbi5oXHUwMDNlXG5rZXJuZWwvbnNjb21tb24uYzo1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvbnNjb21tb24uYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxuLS1cbmtlcm5lbC9uc3Byb3h5LmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG5rZXJuZWwvbnNwcm94eS5jOjMwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvbnNwcm94eS5jLTMxLVxuLS1cbmtlcm5lbC9uc3RyZWUuYy0zLVxua2VybmVsL25zdHJlZS5jOjQ6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC9uc3RyZWUuYy01LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxuLS1cbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMjUtI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2Vcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmM6MjY6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMjctI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC93YWl0LmhcdTAwM2Vcbi0tXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWUuaFx1MDAzZVxuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jPTE0NT12b2lkIGZyZWVfdGltZV9ucyhzdHJ1Y3QgdGltZV9uYW1lc3BhY2UgKm5zKVxuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE1MS1cdHRpbWVuc192ZHNvX2ZyZWVfdnZhcl9wYWdlKG5zKTtcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jOjE1MjpcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xua2VybmVsL3RpbWUvbmFtZXNwYWNlLmMtMTUzLVx0a2ZyZWVfcmN1KG5zLCBucy5uc19yY3UpO1xuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MjQ6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI1LVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTE5ND1zdGF0aWMgdm9pZCBmcmVlX3VzZXJfbnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIyMC1cdFx0bnNfY29tbW9uX2ZyZWUobnMpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MjIxOlx0XHQvKiBDb25jdXJyZW50IG5zdHJlZSB0cmF2ZXJzYWwgZGVwZW5kcyBvbiBhIGdyYWNlIHBlcmlvZC4gKi9cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIyMi1cdFx0a2ZyZWVfcmN1KG5zLCBucy5uc19yY3UpO1xuLS1cbmtlcm5lbC91dHNuYW1lLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19ucy5oXHUwMDNlXG5rZXJuZWwvdXRzbmFtZS5jOjE2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvdXRzbmFtZS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuLS1cbmtlcm5lbC91dHNuYW1lLmM9OTY9dm9pZCBmcmVlX3V0c19ucyhzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqbnMpXG4tLVxua2VybmVsL3V0c25hbWUuYy0xMDEtXHRuc19jb21tb25fZnJlZShucyk7XG5rZXJuZWwvdXRzbmFtZS5jOjEwMjpcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xua2VybmVsL3V0c25hbWUuYy0xMDMtXHRrZnJlZV9yY3UobnMsIG5zLm5zX3JjdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlIGJlaGF2aW9yIG9mIGBrZXJuZWwvbnN0cmVlLmNgIG9yIHRoZSBgc3lzX2xpc3Ruc2Agc3lzdGVtIGNhbGwgaXMgc29tZWhvdyBjb25kaXRpb25hbCwgZ292ZXJuZWQgYnkgYSBzcGVjaWZpYyBjb25maWcgb3B0aW9uLiBJdCYjMzk7cyBhbHdheXMgYmVzdCB0byBydWxlIG91dCBhbnkgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGJlZm9yZSBnb2luZyBkb3duIGEgbW9yZSBjb21wbGV4IGRlYnVnZ2luZyBwYXRoLiBMZXQmIzM5O3Mgc2VlIGlmIGFueSBjb21waWxlLXRpbWUgZmxhZ3MgYXJlIGluIHBsYXkgaGVyZS4gVG8gZG8gdGhhdCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyBga2VybmVsL25zdHJlZS5jYCBmcm9tIHRoZSB2ZXJ5IHRvcC4gSSYjMzk7bGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAyNSBDaHJpc3RpYW4gQnJhdW5lciBcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcdTAwM2UgKi9cbiAgIDM6XHRcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3RyZWUuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Zmc2RlYnVnLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuICAxMDpcdFxuICAxMTpcdHN0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU0VRTE9DSyhuc190cmVlX2xvY2spO1xuICAxMjpcdFxuICAxMzpcdERFRklORV9MT0NLX0dVQVJEXzAobnNfdHJlZV93cml0ZXIsXG4gIDE0Olx0XHRcdCAgICB3cml0ZV9zZXFsb2NrKFx1MDAyNm5zX3RyZWVfbG9jayksXG4gIDE1Olx0XHRcdCAgICB3cml0ZV9zZXF1bmxvY2soXHUwMDI2bnNfdHJlZV9sb2NrKSlcbiAgMTY6XHRcbiAgMTc6XHRERUZJTkVfTE9DS19HVUFSRF8wKG5zX3RyZWVfbG9ja2VkX3JlYWRlcixcbiAgMTg6XHRcdFx0ICAgIHJlYWRfc2VxbG9ja19leGNsKFx1MDAyNm5zX3RyZWVfbG9jayksXG4gIDE5Olx0XHRcdCAgICByZWFkX3NlcXVubG9ja19leGNsKFx1MDAyNm5zX3RyZWVfbG9jaykpXG4gIDIwOlx0XG4gIDIxOlx0c3RhdGljIHN0cnVjdCBuc190cmVlX3Jvb3QgbnNfdW5pZmllZF9yb290ID0geyAvKiBwcm90ZWN0ZWQgYnkgbnNfdHJlZV9sb2NrICovXG4gIDIyOlx0XHQubnNfcmIgPSBSQl9ST09ULFxuICAyMzpcdFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5zX3VuaWZpZWRfcm9vdC5uc19saXN0X2hlYWQpLFxuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RydWN0IG5zX3RyZWVfcm9vdCBtbnRfbnNfdHJlZSA9IHtcbiAgMjc6XHRcdC5uc19yYiA9IFJCX1JPT1QsXG4gIDI4Olx0XHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQobW50X25zX3RyZWUubnNfbGlzdF9oZWFkKSxcbiAgMjk6XHR9O1xuICAzMDpcdFxuICAzMTpcdHN0cnVjdCBuc190cmVlX3Jvb3QgbmV0X25zX3RyZWUgPSB7XG4gIDMyOlx0XHQubnNfcmIgPSBSQl9ST09ULFxuICAzMzpcdFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5ldF9uc190cmVlLm5zX2xpc3RfaGVhZCksXG4gIDM0Olx0fTtcbiAgMzU6XHRFWFBPUlRfU1lNQk9MX0dQTChuZXRfbnNfdHJlZSk7XG4gIDM2Olx0XG4gIDM3Olx0c3RydWN0IG5zX3RyZWVfcm9vdCB1dHNfbnNfdHJlZSA9IHtcbiAgMzg6XHRcdC5uc19yYiA9IFJCX1JPT1QsXG4gIDM5Olx0XHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQodXRzX25zX3RyZWUubnNfbGlzdF9oZWFkKSxcbiAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdHN0cnVjdCBuc190cmVlX3Jvb3QgdXNlcl9uc190cmVlID0ge1xuICA0MzpcdFx0Lm5zX3JiID0gUkJfUk9PVCxcbiAgNDQ6XHRcdC5uc19saXN0X2hlYWQgPSBMSVNUX0hFQURfSU5JVCh1c2VyX25zX3RyZWUubnNfbGlzdF9oZWFkKSxcbiAgNDU6XHR9O1xuICA0NjpcdFxuICA0NzpcdHN0cnVjdCBuc190cmVlX3Jvb3QgaXBjX25zX3RyZWUgPSB7XG4gIDQ4Olx0XHQubnNfcmIgPSBSQl9ST09ULFxuICA0OTpcdFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKGlwY19uc190cmVlLm5zX2xpc3RfaGVhZCksXG4gIDUwOlx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsJiMzOTtzIE5hbWVzcGFjZSBUcmVlIENvZGUqKgoKT2theSwgc28gSSBzZWUgdGhhdCBga2VybmVsL25zdHJlZS5jYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIGBvYmoteWAgd2l0aGluIHRoZSBga2VybmVsL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbWF5X2xpc3RfbnNgIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBuYW1lc3BhY2UgbGlzdGluZyBsb2dpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBjb3JlIGJlaGF2aW9yIGFuZCBzZWN1cml0eSBwb3N0dXJlIG9mIHRoZSBuYW1lc3BhY2Ugc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGBtYXlfbGlzdF9uc2AgaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgaW1wYWN0LCBhcyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgbmFtZXNwYWNlIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcdFx0XHRyZXQgPSBucztcbiA0ODE6XHRcdFx0XHRpZiAobnNfaWQgPT0gbnMtXHUwMDNlbnNfaWQpXG4gNDgyOlx0XHRcdFx0XHRicmVhaztcbiA0ODM6XHRcdFx0XHRub2RlID0gbm9kZS1cdTAwM2VyYl9sZWZ0O1xuIDQ4NDpcdFx0XHR9IGVsc2Uge1xuIDQ4NTpcdFx0XHRcdG5vZGUgPSBub2RlLVx1MDAzZXJiX3JpZ2h0O1xuIDQ4NjpcdFx0XHR9XG4gNDg3Olx0XHR9XG4gNDg4Olx0XG4gNDg5Olx0XHRpZiAocmV0KVxuIDQ5MDpcdFx0XHRyZXQgPSBuc19nZXRfdW5sZXNzX2luYWN0aXZlKHJldCk7XG4gNDkxOlx0XHRyZXR1cm4gcmV0O1xuIDQ5MjpcdH1cbiA0OTM6XHRcbiA0OTQ6XHRzdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbG9va3VwX25zX2lkKHU2NCBtbnRfbnNfaWQsIGludCBuc190eXBlKVxuIDQ5NTpcdHtcbiA0OTY6XHRcdHN0cnVjdCBuc19jb21tb24gKm5zO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0Z3VhcmQocmN1KSgpO1xuIDQ5OTpcdFx0bnMgPSBuc190cmVlX2xvb2t1cF9yY3UobW50X25zX2lkLCBuc190eXBlKTtcbiA1MDA6XHRcdGlmICghbnMpXG4gNTAxOlx0XHRcdHJldHVybiBOVUxMO1xuIDUwMjpcdFxuIDUwMzpcdFx0aWYgKCFuc19nZXRfdW5sZXNzX2luYWN0aXZlKG5zKSlcbiA1MDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTA1Olx0XG4gNTA2Olx0XHRyZXR1cm4gbnM7XG4gNTA3Olx0fVxuIDUwODpcdFxuIDUwOTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbnNfcmVxdWVzdGVkKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gNTEwOlx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4gNTExOlx0e1xuIDUxMjpcdFx0cmV0dXJuICFrbHMtXHUwMDNlbnNfdHlwZSB8fCAoa2xzLVx1MDAzZW5zX3R5cGUgXHUwMDI2IG5zLVx1MDAzZW5zX3R5cGUpO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiA1MTU6XHRzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIG1heV9saXN0X25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gNTE2Olx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1MTc6XHR7XG4gNTE4Olx0XHRpZiAoa2xzLVx1MDAzZXVzZXJfbnMgXHUwMDI2XHUwMDI2IGtscy1cdTAwM2V1c2VybnNfY2FwYWJsZSlcbiA1MTk6XHRcdFx0cmV0dXJuIHRydWU7XG4gNTIwOlx0XHRpZiAoaXNfY3VycmVudF9uYW1lc3BhY2UobnMpKVxuIDUyMTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1MjI6XHRcdHJldHVybiBtYXlfc2VlX2FsbF9uYW1lc3BhY2VzKCk7XG4gNTIzOlx0fVxuIDUyNDpcdFxuIDUyNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuc19wdXQoc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4gNTI2Olx0e1xuIDUyNzpcdFx0aWYgKG5zIFx1MDAyNlx1MDAyNiBucy1cdTAwM2VvcHMpXG4gNTI4Olx0XHRcdG5zLVx1MDAzZW9wcy1cdTAwM2VwdXQobnMpO1xuIDUyOTpcdH1cbiA1MzA6XHRcbiA1MzE6XHRERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXG4gNTMyOlx0XG4gNTMzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbnNfY29tbW9uICpfX211c3RfY2hlY2sgbGVnaXRpbWl6ZV9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxuIDUzNDpcdFx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxlZ2l0aW1pemVfbnNgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBsZWdpdGltaXplX25zYCBmdW5jdGlvbiwgZGVmaW5lZCBpbmxpbmUsIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBQcmV2aW91c2x5LCB0aGUgY29kZSBmZXRjaGVkIGEgbmFtZXNwYWNlIHJlZmVyZW5jZSB3aXRoIGBuc19nZXRfdW5sZXNzX2luYWN0aXZlKClgLCAqdGhlbiogY2hlY2tlZCBgbWF5X2xpc3RfbnMoKWAuIE5vdywgaXQmIzM5O3MgY2hlY2tpbmcgYG1heV9saXN0X25zKClgICpiZWZvcmUqIGFjcXVpcmluZyB0aGUgcmVmZXJlbmNlLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQuCgpJIHNlZSB0aGF0IGBsZWdpdGltaXplX25zYCBpcyBjYWxsZWQgYnkgYGRvX2xpc3Ruc191c2VybnNgLCBgZG9fbGlzdG5zYCwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN5c19saXN0bnNgIHN5c2NhbGwuIFRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KCk5vdywgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29udGV4dC4gIGBsZWdpdGltaXplX25zYCBpcyBpbmxpbmVkLCB3aGljaCBtZWFucyBpdCBnZXRzIGV4cGFuZGVkIHdoZXJlIGl0JiMzOTtzIGNhbGxlZC4gU28sIHRoZSBjYWxsZXJzIGFyZSBrZXk6IGBkb19saXN0bnNfdXNlcm5zYCBhbmQgYGRvX2xpc3Ruc2AuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgbm9uLXN0YXRpYywgb3IgaWYgb3RoZXIgc3ltYm9scyBleGlzdC4gTG9va3MgbGlrZSBib3RoIGFyZSBzdGF0aWMsIGFuZCB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCBpcyB1bHRpbWF0ZWx5IGBfX2RvX3N5c19saXN0bnNgLCBgX19zZV9zeXNfbGlzdG5zYCBvciBgc3lzX2xpc3Ruc2AuIEdpdmVuIHRoZSBjaGFuZ2UgSSYjMzk7dmUgbm90ZWQgaW4gdGhlIHJlZmNvdW50aW5nLCB0aGlzIHNlZW1zIGxpa2UgaXQgY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSB1bmRlciBjb25jdXJyZW50IGFjY2VzcyBvciBwb3RlbnRpYWxseSB3aXRoIHJhY2UgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgc3ltYm9scyBpbiB0aGF0IGZpbGUgdGhhdCBhcmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhsaXN0bnN8ZG9fbGlzdG5zfGxlZ2l0aW1pemVfbnMpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9uc3RyZWUuYz0zOTI9dTY0IF9fbnNfdHJlZV9nZW5faWQoc3RydWN0IG5zX2NvbW1vbiAqbnMsIHU2NCBpZClcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNDAyLVxua2VybmVsL25zdHJlZS5jOjQwMzpzdHJ1Y3Qga2xpc3RucyB7XG5rZXJuZWwvbnN0cmVlLmMtNDA0LVx0dTY0IF9fdXNlciAqdW5zX2lkcztcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNDEzLVxua2VybmVsL25zdHJlZS5jOjQxNDpzdGF0aWMgdm9pZCBfX2ZyZWVfa2xpc3Ruc19mcmVlKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMpXG5rZXJuZWwvbnN0cmVlLmMtNDE1LXtcbi0tXG5rZXJuZWwvbnN0cmVlLmM9NDI0PXN0YXRpYyBpbnQgY29weV9uc19pZF9yZXEoY29uc3Qgc3RydWN0IG5zX2lkX3JlcSBfX3VzZXIgKnJlcSxcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNDQ5LVxua2VybmVsL25zdHJlZS5jOjQ1MDpzdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2tsaXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscywgc3RydWN0IG5zX2lkX3JlcSAqa3JlcSxcbmtlcm5lbC9uc3RyZWUuYy00NTEtXHRcdFx0XHQgIHU2NCBfX3VzZXIgKm5zX2lkcywgc2l6ZV90IG5yX25zX2lkcylcbi0tXG5rZXJuZWwvbnN0cmVlLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgbnNfY29tbW9uICpsb29rdXBfbnNfaWQodTY0IG1udF9uc19pZCwgaW50IG5zX3R5cGUpXG4tLVxua2VybmVsL25zdHJlZS5jLTUwOC1cbmtlcm5lbC9uc3RyZWUuYzo1MDk6c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBuc19yZXF1ZXN0ZWQoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbmtlcm5lbC9uc3RyZWUuYy01MTAtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4tLVxua2VybmVsL25zdHJlZS5jLTUxNC1cbmtlcm5lbC9uc3RyZWUuYzo1MTU6c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBtYXlfbGlzdF9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxua2VybmVsL25zdHJlZS5jLTUxNi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbmtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxua2VybmVsL25zdHJlZS5jLTUzMi1cbmtlcm5lbC9uc3RyZWUuYzo1MzM6c3RhdGljIGlubGluZSBzdHJ1Y3QgbnNfY29tbW9uICpfX211c3RfY2hlY2sgbGVnaXRpbWl6ZV9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxua2VybmVsL25zdHJlZS5jLTUzNC1cdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNTQ0LVxua2VybmVsL25zdHJlZS5jOjU0NTpzdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG5rZXJuZWwvbnN0cmVlLmMtNTQ2LXtcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNTg5LVxua2VybmVsL25zdHJlZS5jOjU5MDpcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xua2VybmVsL25zdHJlZS5jLTU5MS1cdFx0aWYgKCF2YWxpZClcbi0tXG5rZXJuZWwvbnN0cmVlLmM9NjgwPXN0YXRpYyBpbmxpbmUgYm9vbCBuc19jb21tb25faXNfaGVhZChzdHJ1Y3QgbnNfY29tbW9uICpucyxcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNjg4LVxua2VybmVsL25zdHJlZS5jOjY4OTpzdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcbmtlcm5lbC9uc3RyZWUuYy02OTAte1xuLS1cbmtlcm5lbC9uc3RyZWUuYy03MzEtXG5rZXJuZWwvbnN0cmVlLmM6NzMyOlx0XHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XG5rZXJuZWwvbnN0cmVlLmMtNzMzLVx0XHRpZiAoIXZhbGlkKVxuLS1cbmtlcm5lbC9uc3RyZWUuYy03NTYtXG5rZXJuZWwvbnN0cmVlLmM6NzU3OlNZU0NBTExfREVGSU5FNChsaXN0bnMsIGNvbnN0IHN0cnVjdCBuc19pZF9yZXEgX191c2VyICosIHJlcSxcbmtlcm5lbC9uc3RyZWUuYy03NTgtXHRcdHU2NCBfX3VzZXIgKiwgbnNfaWRzLCBzaXplX3QsIG5yX25zX2lkcywgdW5zaWduZWQgaW50LCBmbGFncylcbmtlcm5lbC9uc3RyZWUuYy03NTkte1xua2VybmVsL25zdHJlZS5jOjc2MDpcdHN0cnVjdCBrbGlzdG5zIGtsbnMgX19mcmVlKGtsaXN0bnNfZnJlZSkgPSB7fTtcbmtlcm5lbC9uc3RyZWUuYy03NjEtXHRjb25zdCBzaXplX3QgbWF4Y291bnQgPSAxMDAwMDAwO1xuLS1cbmtlcm5lbC9uc3RyZWUuYy03NzctXG5rZXJuZWwvbnN0cmVlLmM6Nzc4Olx0cmV0ID0gcHJlcGFyZV9rbGlzdG5zKFx1MDAyNmtsbnMsIFx1MDAyNmtyZXEsIG5zX2lkcywgbnJfbnNfaWRzKTtcbmtlcm5lbC9uc3RyZWUuYy03NzktXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9uc3RyZWUuYy03ODItXHRpZiAoa3JlcS51c2VyX25zX2lkKVxua2VybmVsL25zdHJlZS5jOjc4MzpcdFx0cmV0dXJuIGRvX2xpc3Ruc191c2VybnMoXHUwMDI2a2xucyk7XG5rZXJuZWwvbnN0cmVlLmMtNzg0LVxua2VybmVsL25zdHJlZS5jOjc4NTpcdHJldHVybiBkb19saXN0bnMoXHUwMDI2a2xucyk7XG5rZXJuZWwvbnN0cmVlLmMtNzg2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnN0cmVlLmNgIGNvZGUgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7RG8gSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWZvcmUgSSBldmVuIHN0YXJ0PyYjMzQ7IFNlZW1zIGxpa2UgZ29vZCBwcmFjdGljZSB0byBjaGVjayBpZiB0aGUgYnVpbGQgcHJvY2VzcyBjb25kaXRpb25hbGx5IGNvbXBpbGVzIHRoaXMgZmlsZS4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBga2VybmVsL01ha2VmaWxlYC4gTGV0IG1lIGp1c3QgdmVyaWZ54oCmIEFoLCB0aGVyZSBpdCBpcyEgYG5zdHJlZS5vYCBpcyByaWdodCB0aGVyZSB1bmRlciBgb2JqLXlgLiBTbyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBjb2RlLiBUaGF0IG1lYW5zIGl04oCZcyBhbHdheXMgYnVpbHQgaW4sIGFuZCBJIHNob3VsZG4mIzM5O3QgaGF2ZSB0byBmaWRkbGUgd2l0aCBhbnkgZXh0ZXJuYWwgY29uZmlncyB0byBldmVuIHN0YXJ0IGFuYWx5emluZyBpdC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGdsYW5jZSBhdCBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIG51YW5jZSB0byB0aGlzLiBJdCYjMzk7cyByYXJlIGZvciB0aGVzZSBiYXNpYyBuYW1lc3BhY2VzIGxpa2UgYFVTRVJfTlNgIGFuZCBgTkFNRVNQQUNFU2AgdG8gYmUgYW55dGhpbmcgKmJ1dCogYnVpbHQtaW4sIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IGdvdGNoYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOQU1FU1BBQ0VTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXG5pbml0L0tjb25maWctMTQwOC1cbmluaXQvS2NvbmZpZzoxNDA5Om1lbnVjb25maWcgTkFNRVNQQUNFU1xuaW5pdC9LY29uZmlnLTE0MTAtXHRib29sIFwmIzM0O05hbWVzcGFjZXMgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTEKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgTkFNRVNQQUNFU2AgYW5kIGBVU0VSX05TYCBqdW1wIG91dCBhdCBtZSBhcyByZWxldmFudCBjb25maWd1cmF0aW9ucywgZXZlbiB0aG91Z2ggYG5zdHJlZS5jYCBpcyBpbiBgb2JqLXlgLiBJdCYjMzk7cyBhbHdheXMgYSBzb2xpZCBwcmFjdGljZSB0byBlbnN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgaWYgYW55dGhpbmcgaGVyZSBldmVuICp0b3VjaGVzKiBuYW1lc3BhY2VzLCB3aGljaCBpdCBsb29rcyBsaWtlIGl0IGRvZXMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIGlzIGxpa2VseSBhZmZlY3RpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gYF9fZG9fc3lzX2xpc3Ruc2AsIGBkb19saXN0bnNgLCBgZG9fbGlzdG5zX3VzZXJuc2AsIGFuZCBgbGVnaXRpbWl6ZV9uc2AuIFRob3NlIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIGFjdGlvbiBpcy4KCkkgY29uZmlybWVkIGJ5IGNoZWNraW5nIHRoZSBkaWZmIHRoYXQgYGtlcm5lbC9uc3RyZWUuY2AgaXMgdGhlICpvbmx5KiBmaWxlIHRvdWNoZWQsIHdoaWNoIG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgYW5kIHZhbGlkYXRlcyB0aGUgYWJvdmUgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBhc3NlbWJsZSB0aGUga2V5IGZpbmRpbmdzLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGxlZ2l0aW1pemVfbnMoKWAgd2l0aGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBvcmRlciBvZiBob3cgd2UgY2hlY2sgbmFtZXNwYWNlIGFjY2Vzc2liaWxpdHkgKGBtYXlfbGlzdF9uc2ApIGFnYWluc3QgZ2V0dGluZyB0aGUgbmFtZXNwYWNlIHJlZmVyZW5jZSAoYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgKSB3aGlsZSBpdGVyYXRpbmcgaW4gYGxpc3Ruc2AuCgpUaGlzIGNoYW5nZSAqZGlyZWN0bHkqIGltcGFjdHMgY29yZSBuYW1lc3BhY2UgaW5zcGVjdGlvbiBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwg4oCTIHNwZWNpZmljYWxseSBgZG9fbGlzdG5zYCBhbmQgYGRvX2xpc3Ruc191c2VybnNgLiBUaGUgYWNjZXNzIG9yZGVyIGNoYW5nZSBpcyBjcml0aWNhbC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgZnV6ei13b3J0aHkuIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkFNRVNQQUNFUyYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kb19zeXNfbGlzdG5zJiMzNDssCiAgICAmIzM0O2RvX2xpc3RucyYjMzQ7LAogICAgJiMzNDtkb19saXN0bnNfdXNlcm5zJiMzNDssCiAgICAmIzM0O2xlZ2l0aW1pemVfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGVnaXRpbWl6ZV9ucygpIGluIGtlcm5lbC9uc3RyZWUuYywgcmVvcmRlcmluZyBwZXJtaXNzaW9uIGNoZWNrcyAobWF5X2xpc3RfbnMpIHByaW9yIHRvIGF0dGVtcHRpbmcgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIChuc19nZXRfdW5sZXNzX2luYWN0aXZlKSBkdXJpbmcgbmFtZXNwYWNlIGl0ZXJhdGlvbi4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gY29yZSBuYW1lc3BhY2UgaGFuZGxpbmcgYWNjZXNzaWJsZSB2aWEgdGhlIGxpc3RucyBzeXNjYWxsIChkb19saXN0bnMgYW5kIGRvX2xpc3Ruc191c2VybnMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RvX3N5c19saXN0bnMmIzM0OywKICAgICYjMzQ7ZG9fbGlzdG5zJiMzNDssCiAgICAmIzM0O2RvX2xpc3Ruc191c2VybnMmIzM0OywKICAgICYjMzQ7bGVnaXRpbWl6ZV9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsZWdpdGltaXplX25zKCkgaW4ga2VybmVsL25zdHJlZS5jLCByZW9yZGVyaW5nIHBlcm1pc3Npb24gY2hlY2tzIChtYXlfbGlzdF9ucykgcHJpb3IgdG8gYXR0ZW1wdGluZyByZWZlcmVuY2UgYWNxdWlzaXRpb24gKG5zX2dldF91bmxlc3NfaW5hY3RpdmUpIGR1cmluZyBuYW1lc3BhY2UgaXRlcmF0aW9uLiBUaGlzIGNoYW5nZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiBjb3JlIG5hbWVzcGFjZSBoYW5kbGluZyBhY2Nlc3NpYmxlIHZpYSB0aGUgbGlzdG5zIHN5c2NhbGwgKGRvX2xpc3RucyBhbmQgZG9fbGlzdG5zX3VzZXJucykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbGVnaXRpbWl6ZV9ucygpYCBpbiBga2VybmVsL25zdHJlZS5jYCB0byBwZXJmb3JtIHRoZSBgbWF5X2xpc3RfbnMoKWAgcGVybWlzc2lvbiBjaGVjayBvbiB0aGUgY2FuZGlkYXRlIG5hbWVzcGFjZSBwcmlvciB0byBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdmlhIGBuc19nZXRfdW5sZXNzX2luYWN0aXZlKClgLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSByZWZlcmVuY2UgYWNxdWlzaXRpb24gYW5kIGNsZWFudXAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXHUwMDNlbnNfdHlwZWAsIGBjYW5kaWRhdGUtXHUwMDNlbnNfaWRgLCBldGMuKSBiZWxvbmcgdG8gaW5pdGlhbGl6ZWQgbmFtZXNwYWNlIHN0cnVjdHVyZXMgaW4gdGhlIG5hbWVzcGFjZSB0cmVlLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyByZWxhdGVkIHRvIGRlcmVmZXJlbmNpbmcgYGNhbmRpZGF0ZWAgdW5kZXIgUkNVIHByaW9yIHRvIHRha2luZyBhIHJlZmVyZW5jZSB3b3VsZCBiZSBvYmplY3QgbGlmZXRpbWUvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jCmluZGV4IDZkMTJlNTkwMGFjMDEuLjgzMWYyNzlkMTc0YTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9uc3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbnN0cmVlLmMKQEAgLTUzMywxOSAmIzQzOzUzMywxMyBAQCBERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsCiAJCQkJCQkJICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKQogewotCXN0cnVjdCBuc19jb21tb24gKm5zIF9fZnJlZShuc19wdXQpID0gTlVMTDsKLQogCWlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlucyA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghbWF5X2xpc3RfbnMoa2xzLCBucykpCiYjNDM7CWlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBub19mcmVlX3B0cihucyk7CiYjNDM7CXJldHVybiBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBgbnN0cmVlLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjaGFuZ2VzLiBGaXJzdCwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgcGF0Y2ggaXRzZWxmIOKAkyB3aGF0IG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHByb3Bvc2VkPyBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBleGFtaW5lIHRoZSByZWxldmFudCBjb2RlIHN1cnJvdW5kaW5nIHRoZSBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL25zdHJlZS5jYC4gSSYjMzk7bGwgd2FudCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGUgZXhpc3RpbmcgY29kZSBhcm91bmQgdGhlIHNlY3Rpb24gdGhhdCYjMzk7cyBiZWVuIHRvdWNoZWQsIGxpa2VseSBuZWFyIGxpbmUgNTMzLiBJJiMzOTtsbCBwcm9iYWJseSBncmFiIGl0IHVzaW5nIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9yIHBlcmhhcHMgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIGZpbmQgaXQgcXVpY2tseSB3aXRoIHNvbWUgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcyYjMzk7IGltcGxpY2F0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBhZGphY2VudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9uc3RyZWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0aWYgKCFucylcbiA1MDE6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTAyOlx0XG4gNTAzOlx0XHRpZiAoIW5zX2dldF91bmxlc3NfaW5hY3RpdmUobnMpKVxuIDUwNDpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1MDU6XHRcbiA1MDY6XHRcdHJldHVybiBucztcbiA1MDc6XHR9XG4gNTA4Olx0XG4gNTA5Olx0c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBuc19yZXF1ZXN0ZWQoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiA1MTA6XHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1MTE6XHR7XG4gNTEyOlx0XHRyZXR1cm4gIWtscy1cdTAwM2Vuc190eXBlIHx8IChrbHMtXHUwMDNlbnNfdHlwZSBcdTAwMjYgbnMtXHUwMDNlbnNfdHlwZSk7XG4gNTEzOlx0fVxuIDUxNDpcdFxuIDUxNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbWF5X2xpc3RfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiA1MTY6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuc19jb21tb24gKm5zKVxuIDUxNzpcdHtcbiA1MTg6XHRcdGlmIChrbHMtXHUwMDNldXNlcl9ucyBcdTAwMjZcdTAwMjYga2xzLVx1MDAzZXVzZXJuc19jYXBhYmxlKVxuIDUxOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1MjA6XHRcdGlmIChpc19jdXJyZW50X25hbWVzcGFjZShucykpXG4gNTIxOlx0XHRcdHJldHVybiB0cnVlO1xuIDUyMjpcdFx0cmV0dXJuIG1heV9zZWVfYWxsX25hbWVzcGFjZXMoKTtcbiA1MjM6XHR9XG4gNTI0Olx0XG4gNTI1Olx0c3RhdGljIGlubGluZSB2b2lkIG5zX3B1dChzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1MjY6XHR7XG4gNTI3Olx0XHRpZiAobnMgXHUwMDI2XHUwMDI2IG5zLVx1MDAzZW9wcylcbiA1Mjg6XHRcdFx0bnMtXHUwMDNlb3BzLVx1MDAzZXB1dChucyk7XG4gNTI5Olx0fVxuIDUzMDpcdFxuIDUzMTpcdERFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbiA1MzI6XHRcbiA1MzM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gNTM0Olx0XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4gNTM1Olx0e1xuIDUzNjpcdFx0aWYgKCFuc19yZXF1ZXN0ZWQoa2xzLCBjYW5kaWRhdGUpKVxuIDUzNzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1Mzg6XHRcbiA1Mzk6XHRcdGlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKVxuIDU0MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1NDE6XHRcbiA1NDI6XHRcdHJldHVybiBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7XG4gNTQzOlx0fVxuIDU0NDpcdFxuIDU0NTpcdHN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscylcbiA1NDY6XHR7XG4gNTQ3Olx0XHR1NjQgX191c2VyICpuc19pZHMgPSBrbHMtXHUwMDNldW5zX2lkcztcbiA1NDg6XHRcdHNpemVfdCBucl9uc19pZHMgPSBrbHMtXHUwMDNlbnJfbnNfaWRzO1xuIDU0OTpcdFx0c3RydWN0IG5zX2NvbW1vbiAqbnMgPSBOVUxMLCAqZmlyc3RfbnMgPSBOVUxMLCAqcHJldiA9IE5VTEw7XG4gNTUwOlx0XHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkO1xuIDU1MTpcdFx0c3NpemVfdCByZXQ7XG4gNTUyOlx0XG4gNTUzOlx0XHRWRlNfV0FSTl9PTl9PTkNFKCFrbHMtXHUwMDNldXNlcl9uc19pZCk7XG4gNTU0Olx0XG4gNTU1Olx0XHRpZiAoa2xzLVx1MDAzZXVzZXJfbnNfaWQgPT0gTElTVE5TX0NVUlJFTlRfVVNFUilcbiA1NTY6XHRcdFx0bnMgPSB0b19uc19jb21tb24oY3VycmVudF91c2VyX25zKCkpO1xuIDU1NzpcdFx0ZWxzZSBpZiAoa2xzLVx1MDAzZXVzZXJfbnNfaWQpXG4gNTU4Olx0XHRcdG5zID0gbG9va3VwX25zX2lkKGtscy1cdTAwM2V1c2VyX25zX2lkLCBDTE9ORV9ORVdVU0VSKTtcbiA1NTk6XHRcdGlmICghbnMpXG4gNTYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU2MTpcdFx0a2xzLVx1MDAzZXVzZXJfbnMgPSB0b191c2VyX25zKG5zKTtcbiA1NjI6XHRcbiA1NjM6XHRcdC8qXG4gNTY0Olx0XHQgKiBVc2UgdGhlIHJidHJlZSB0byBmaW5kIHRoZSBmaXJzdCBuYW1lc3BhY2Ugd2UgY2FyZSBhYm91dCBhbmRcbiA1NjU6XHRcdCAqIHRoZW4gdXNlIGl0JiMzOTtzIGxpc3QgZW50cnkgdG8gaXRlcmF0ZSBmcm9tIHRoZXJlLlxuIDU2NjpcdFx0ICovXG4gNTY3Olx0XHRpZiAoa2xzLVx1MDAzZWxhc3RfbnNfaWQpIHtcbiA1Njg6XHRcdFx0a2xzLVx1MDAzZWZpcnN0X25zID0gbG9va3VwX25zX293bmVyX2F0KGtscy1cdTAwM2VsYXN0X25zX2lkICYjNDM7IDEsIG5zKTtcbiA1Njk6XHRcdFx0aWYgKCFrbHMtXHUwMDNlZmlyc3RfbnMpXG4gNTcwOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gNTcxOlx0XHRcdGZpcnN0X25zID0ga2xzLVx1MDAzZWZpcnN0X25zO1xuIDU3MjpcdFx0fVxuIDU3MzpcdFxuIDU3NDpcdFx0cmV0ID0gMDtcbiA1NzU6XHRcdGhlYWQgPSBcdTAwMjZ0b19uc19jb21tb24oa2xzLVx1MDAzZXVzZXJfbnMpLVx1MDAzZW5zX293bmVyX3Jvb3QubnNfbGlzdF9oZWFkO1xuIDU3NjpcdFx0a2xzLVx1MDAzZXVzZXJuc19jYXBhYmxlID0gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xuIDU3NzpcdFxuIDU3ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDU3OTpcdFxuIDU4MDpcdFx0aWYgKCFmaXJzdF9ucylcbiA1ODE6XHRcdFx0Zmlyc3RfbnMgPSBsaXN0X2VudHJ5X3JjdShoZWFkLVx1MDAzZW5leHQsIHR5cGVvZigqZmlyc3RfbnMpLCBuc19vd25lcl9ub2RlLm5zX2xpc3RfZW50cnkpO1xuIDU4MjpcdFxuIDU4MzpcdFx0bnMgPSBmaXJzdF9ucztcbiA1ODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UobnMsIGhlYWQsIG5zX293bmVyX25vZGUubnNfbGlzdF9lbnRyeSkge1xuIDU4NTpcdFx0XHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcbiA1ODY6XHRcbiA1ODc6XHRcdFx0aWYgKCFucl9uc19pZHMpXG4gNTg4Olx0XHRcdFx0YnJlYWs7XG4gNTg5Olx0XG4gNTkwOlx0XHRcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcbiA1OTE6XHRcdFx0aWYgKCF2YWxpZClcbiA1OTI6XHRcdFx0XHRjb250aW51ZTtcbiA1OTM6XHRcbiA1OTQ6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNTk1Olx0XG4gNTk2Olx0XHRcdG5zX3B1dChwcmV2KTtcbiA1OTc6XHRcdFx0cHJldiA9IHZhbGlkO1xuIDU5ODpcdFxuIDU5OTpcdFx0XHRpZiAocHV0X3VzZXIodmFsaWQtXHUwMDNlbnNfaWQsIG5zX2lkcyAmIzQzOyByZXQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGtlcm5lbC9uc3RyZWUuYyBhbmQgdGhlIFVzZSBvZiBgbGVnaXRpbWl6ZV9uc2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGUgYGtlcm5lbC9uc3RyZWUuY2AgZmlsZSB3b3Jrcy4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgZnVuY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgYGxlZ2l0aW1pemVfbnNgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhhdCBmaWxlLiBTZWVpbmcgdGhlIGNvbnRleHQgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgcHVycG9zZSBieSBjaGVja2luZyB3aGVyZSBpdHMgZW1wbG95ZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkcyB0b3dhcmRzIHRoZSBmdW5jdGlvbnMgZGV0YWlscy4gSSB0aGluayBieSBkb2luZyB0aGlzIEkmIzM5O2xsIGJlIGFibGUgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSwgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBtb3JlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVnaXRpbWl6ZV9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbnN0cmVlLmM9NTMxPURFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbmtlcm5lbC9uc3RyZWUuYy01MzItXG5rZXJuZWwvbnN0cmVlLmM6NTMzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbmtlcm5lbC9uc3RyZWUuYy01MzQtXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4tLVxua2VybmVsL25zdHJlZS5jPTU0NT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG4tLVxua2VybmVsL25zdHJlZS5jLTU4OS1cbmtlcm5lbC9uc3RyZWUuYzo1OTA6XHRcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcbmtlcm5lbC9uc3RyZWUuYy01OTEtXHRcdGlmICghdmFsaWQpXG4tLVxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNzMxLVxua2VybmVsL25zdHJlZS5jOjczMjpcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xua2VybmVsL25zdHJlZS5jLTczMy1cdFx0aWYgKCF2YWxpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBEZWVwIERpdmUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCBhbmQgYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgLiBJIGtub3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBrZXksIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHZhbHVlIG9mIGBjYW5kaWRhdGVgIGlzIHdpdGhpbiB0aGUgYGxlZ2l0aW1pemVfbnNgIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSB2YWx1ZSBvZiB0aGF0IHZhcmlhYmxlIHdvdWxkIGxpa2VseSB0ZWxsIG1lIHRoZSBlbnRpcmUgc3RvcnkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWFkIGxpbmVzIDUwMC01MzAgYWdhaW4sIGl0JiMzOTtzIHBvc3NpYmxlIEkgbWlzc2VkIGEgY2x1ZSBpbiBteSBwcmV2aW91cyBwYXNzLCBvciBhbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCB3aWxsIGdpdmUgbWUgY29udGV4dC4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfY3VycmVudF9uYW1lc3BhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnNmcy5jPTQ1Nj1zdGF0aWMgaW50IG5zZnNfZW5jb2RlX2ZoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqZmgsIGludCAqbWF4X2xlbixcbi0tXG5mcy9uc2ZzLmMtNDc4LVxuZnMvbnNmcy5jOjQ3OTpib29sIGlzX2N1cnJlbnRfbmFtZXNwYWNlKHN0cnVjdCBuc19jb21tb24gKm5zKVxuZnMvbnNmcy5jLTQ4MC17XG4tLVxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC0xMC1cbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6MTE6Ym9vbCBpc19jdXJyZW50X25hbWVzcGFjZShzdHJ1Y3QgbnNfY29tbW9uICpucyk7XG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oLTEyLWludCBfX25zX2NvbW1vbl9pbml0KHN0cnVjdCBuc19jb21tb24gKm5zLCB1MzIgbnNfdHlwZSwgY29uc3Qgc3RydWN0IHByb2NfbnNfb3BlcmF0aW9ucyAqb3BzLCBpbnQgaW51bSk7XG4tLVxua2VybmVsL25zdHJlZS5jPTUxNT1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIG1heV9saXN0X25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4tLVxua2VybmVsL25zdHJlZS5jLTUxOS1cdFx0cmV0dXJuIHRydWU7XG5rZXJuZWwvbnN0cmVlLmM6NTIwOlx0aWYgKGlzX2N1cnJlbnRfbmFtZXNwYWNlKG5zKSlcbmtlcm5lbC9uc3RyZWUuYy01MjEtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZnMvbnNmcy5jYCBmb3IgTmFtZXNwYWNlIEluc3BlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgbmFtZXNwYWNlIGhhbmRsaW5nIGlzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCBmdW5jdGlvbiBpbiBgZnMvbnNmcy5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGRldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIG5hbWVzcGFjZSBpcyB0aGUgYWN0aXZlIG9uZS4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBpZWNlIHdoZW4gZGVhbGluZyB3aXRoIGlzb2xhdGlvbiBhbmQgY29udGV4dCBzd2l0Y2hlcywgYnV0IGEgcmVmcmVzaGVyIGlzIGFsd2F5cyB1c2VmdWwsIGVzcGVjaWFsbHkgd2hlbiB3b3JraW5nIG9uIGEgbnVhbmNlZCBmZWF0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBjdXJyZW50IHRocmVhZCBhbmQgcG90ZW50aWFsbHkgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSBuYW1lc3BhY2UuIFRoZW4sIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW1wYWN0IG9uIHJlbGF0ZWQgY2FsbHMgbGlrZSBgdGFza19hY3RpdmVfbmFtZXNwYWNlYC4gSSYjMzk7bGwgd2FudCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB0byB0cnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25zZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc1Olx0XHRmaWQtXHUwMDNlbnNfaW51bVx0PSBpbm9kZS1cdTAwM2VpX2lubztcbiA0NzY6XHRcdHJldHVybiBGSUxFSURfTlNGUztcbiA0Nzc6XHR9XG4gNDc4Olx0XG4gNDc5Olx0Ym9vbCBpc19jdXJyZW50X25hbWVzcGFjZShzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA0ODA6XHR7XG4gNDgxOlx0XHRzd2l0Y2ggKG5zLVx1MDAzZW5zX3R5cGUpIHtcbiA0ODI6XHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcbiA0ODM6XHRcdGNhc2UgQ0xPTkVfTkVXQ0dST1VQOlxuIDQ4NDpcdFx0XHRyZXR1cm4gY3VycmVudF9pbl9uYW1lc3BhY2UodG9fY2dfbnMobnMpKTtcbiA0ODU6XHQjZW5kaWZcbiA0ODY6XHQjaWZkZWYgQ09ORklHX0lQQ19OU1xuIDQ4NzpcdFx0Y2FzZSBDTE9ORV9ORVdJUEM6XG4gNDg4Olx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19pcGNfbnMobnMpKTtcbiA0ODk6XHQjZW5kaWZcbiA0OTA6XHRcdGNhc2UgQ0xPTkVfTkVXTlM6XG4gNDkxOlx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19tbnRfbnMobnMpKTtcbiA0OTI6XHQjaWZkZWYgQ09ORklHX05FVF9OU1xuIDQ5MzpcdFx0Y2FzZSBDTE9ORV9ORVdORVQ6XG4gNDk0Olx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19uZXRfbnMobnMpKTtcbiA0OTU6XHQjZW5kaWZcbiA0OTY6XHQjaWZkZWYgQ09ORklHX1BJRF9OU1xuIDQ5NzpcdFx0Y2FzZSBDTE9ORV9ORVdQSUQ6XG4gNDk4Olx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19waWRfbnMobnMpKTtcbiA0OTk6XHQjZW5kaWZcbiA1MDA6XHQjaWZkZWYgQ09ORklHX1RJTUVfTlNcbiA1MDE6XHRcdGNhc2UgQ0xPTkVfTkVXVElNRTpcbiA1MDI6XHRcdFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3RpbWVfbnMobnMpKTtcbiA1MDM6XHQjZW5kaWZcbiA1MDQ6XHQjaWZkZWYgQ09ORklHX1VTRVJfTlNcbiA1MDU6XHRcdGNhc2UgQ0xPTkVfTkVXVVNFUjpcbiA1MDY6XHRcdFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3VzZXJfbnMobnMpKTtcbiA1MDc6XHQjZW5kaWZcbiA1MDg6XHQjaWZkZWYgQ09ORklHX1VUU19OU1xuIDUwOTpcdFx0Y2FzZSBDTE9ORV9ORVdVVFM6XG4gNTEwOlx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b191dHNfbnMobnMpKTtcbiA1MTE6XHQjZW5kaWZcbiA1MTI6XHRcdGRlZmF1bHQ6XG4gNTEzOlx0XHRcdFZGU19XQVJOX09OX09OQ0UodHJ1ZSk7XG4gNTE0Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMwoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiA4MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucywgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGNoYW5nZSBpbiBgbGVnaXRpbWl6ZV9uc2AuIFRoZSBvcmlnaW5hbCBjb2RlIHRvb2sgYSByZWZlcmVuY2UgdG8gYGNhbmRpZGF0ZWAgKmJlZm9yZSogY2hlY2tpbmcgYG1heV9saXN0X25zYC4gVGhlIHBhdGNoIHJldmVyc2VzIHRoaXMsIGNoZWNraW5nIGBtYXlfbGlzdF9uc2AgKmJlZm9yZSogaW5jcmVtZW50aW5nIHRoZSByZWZjb3VudCB2aWEgYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhbiBvcHRpbWl6YXRpb24sIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiBpbmNyZW1lbnRpbmcgYW5kIGRlY3JlbWVudGluZyB0aGUgcmVmY291bnQgaWYgdGhlIGFjY2VzcyBpc24mIzM5O3QgcGVybWl0dGVkLgoKTXkgaW1tZWRpYXRlIGZvY3VzLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIG9uIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2VzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UsIGdpdmVuIHRoZSBSQ1UgY29udGV4dC4gV2UgYXJlIHVuZGVyIFJDVSByZWFkIGxvY2ssIGJ1dCB0aGUgb3JkZXJpbmcgY2hhbmdlIHNoaWZ0cyB0aGUgcG9pbnQgYXQgd2hpY2ggd2UmIzM5O3ZlICpndWFyYW50ZWVkKiB0aGF0IGBjYW5kaWRhdGVgIGlzIHZhbGlkLgoKSG93ZXZlciwgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3QgS01TQU4gcmVkIGZsYWdzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgZmllbGRzICpjb3VsZCogYmUgdW5pbml0aWFsaXplZC4gVGhlcmUmIzM5O3Mgbm8gY2hhbmdlIGluIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgd291bGQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgbm90IGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBwYXRjaCYjMzk7cyBzY29wZS4gTm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBsZW5ndGhzIGFyZSBwcmVzZW50LCB3aGljaCBjb3VsZCByZXN1bHQgaW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gYHB1dF91c2VyKClgIGlzIHVzZWQgc2FmZWx5LCBjb3B5aW5nIGFuIGV4aXN0aW5nIGB1NjQgbnNfaWRgLiBUaGUgcG90ZW50aWFsIHJpc2sgaXMgbW9yZSBhbGlnbmVkIHdpdGggS0FTQU4gZHVlIHRvIHRoZSBvcmRlcmluZyBjaGFuZ2UgYW5kIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4KClRoZSBLTVNBTiBhc3BlY3RzIChyZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBzZWVtIGNvbXBsZXRlbHkgYWJzZW50LiBUaGlzIHBhdGNoIGlzIGFib3V0ICp3aGVuKiB3ZSBjaGVjayB0aGUgcGVybWlzc2lvbnMgYW5kICp3aGV0aGVyKiB3ZSBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LCBub3QgKndoYXQqIGRhdGEgaXMgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24gdGhhdCBoYXMgS0FTQU4gaW1wbGljYXRpb25zIGlmIHRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMuCgpUaGVyZWZvcmUsIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCB0aGUgYEtNU0FOUmVhc29uaW5nYCB3b3VsZCBmb2N1cyBvbiB0aGlzIGNoYW5nZSBiZWluZyBhbiBvcHRpbWl6YXRpb24gdG8gcmVmY291bnQgbWFuYWdlbWVudCwgbm90IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsZWdpdGltaXplX25zKClgIGluIGBrZXJuZWwvbnN0cmVlLmNgIHRvIHBlcmZvcm0gdGhlIGBtYXlfbGlzdF9ucygpYCBwZXJtaXNzaW9uIGNoZWNrIG9uIHRoZSBjYW5kaWRhdGUgbmFtZXNwYWNlIHByaW9yIHRvIGFjcXVpcmluZyBhIHJlZmVyZW5jZSB2aWEgYG5zX2dldF91bmxlc3NfaW5hY3RpdmUoKWAsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZSBhY3F1aXNpdGlvbiBhbmQgY2xlYW51cC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsbG9jYXRlIGFueSBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGRhdGEgbGVuZ3Rocywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQWxsIGZpZWxkcyBhY2Nlc3NlZCAoYGNhbmRpZGF0ZS1cdTAwM2Vuc190eXBlYCwgYGNhbmRpZGF0ZS1cdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWxsb2NhdGUgYW55IG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgZGF0YSBsZW5ndGhzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbGwgZmllbGRzIGFjY2Vzc2VkIChgY2FuZGlkYXRlLVx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVx1MDAzZW5zX2lkYCwgZXRjLikgYmVsb25nIHRvIGluaXRpYWxpemVkIG5hbWVzcGFjZSBzdHJ1Y3R1cmVzIGluIHRoZSBuYW1lc3BhY2UgdHJlZS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjYW5kaWRhdGVgIHVuZGVyIFJDVSBwcmlvciB0byB0YWtpbmcgYSByZWZlcmVuY2Ugd291bGQgYmUgb2JqZWN0IGxpZmV0aW1lL3VzZS1hZnRlci1mcmVlIGlzc3VlcyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI0OjUzLjE4MzIxODU3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjM3OTg4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RvX3N5c19saXN0bnNcIixcbiAgICBcImRvX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zX3VzZXJuc1wiLFxuICAgIFwibGVnaXRpbWl6ZV9uc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXFx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVxcdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjQ6NTMuMTgzMjIzNDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ1MzIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZDliNjY3OTM5MDI3OWE4NThmOWRiZGE4NmZjMTc3M2NmYmY3NTMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTk6MjQ6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jXFxuaW5kZXggNmQxMmU1OTAwYWMwMS4uODMxZjI3OWQxNzRhMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbnN0cmVlLmNcXG4rKysgYi9rZXJuZWwvbnN0cmVlLmNcXG5AQCAtNTMzLDE5ICs1MzMsMTMgQEAgREVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbnNfY29tbW9uICpucyBfX2ZyZWUobnNfcHV0KSA9IE5VTEw7XFxuLVxcbiBcXHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0bnMgPSBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7XFxuLVxcdGlmICghbnMpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIG5zKSlcXG4rXFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIGNhbmRpZGF0ZSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0cmV0dXJuIG5vX2ZyZWVfcHRyKG5zKTtcXG4rXFx0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNDo1My42NTg0ODg1NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MjkwNDA2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RvX3N5c19saXN0bnNcIixcbiAgICBcImRvX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zX3VzZXJuc1wiLFxuICAgIFwibGVnaXRpbWl6ZV9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDliNjY3OTM5MDI3OWE4NThmOWRiZGE4NmZjMTc3M2NmYmY3NTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxOToyNDo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9uc3RyZWUuYyBiL2tlcm5lbC9uc3RyZWUuY1xuaW5kZXggNmQxMmU1OTAwYWMwMS4uODMxZjI3OWQxNzRhMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9uc3RyZWUuY1xuKysrIGIva2VybmVsL25zdHJlZS5jXG5AQCAtNTMzLDE5ICs1MzMsMTMgQEAgREVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiBcdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgbnNfY29tbW9uICpucyBfX2ZyZWUobnNfcHV0KSA9IE5VTEw7XG4tXG4gXHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0bnMgPSBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7XG4tXHRpZiAoIW5zKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdGlmICghbWF5X2xpc3RfbnMoa2xzLCBucykpXG4rXHRpZiAoIW1heV9saXN0X25zKGtscywgY2FuZGlkYXRlKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRyZXR1cm4gbm9fZnJlZV9wdHIobnMpO1xuK1x0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjQ6NTMuNjU4NDg5NjgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMDQ3NzYwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTmFtZXNwYWNlIFRyZWUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrZXJuZWwvbnN0cmVlLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0LiBMZXQncyBkaWcgaW50byB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBwdWxsIHVwIGBrZXJuZWwvbnN0cmVlLmNgIOKAkyBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCBkZXBlbmRpbmcgb24gd2hhdCBJIG5lZWQgYW5kIGhvdyBxdWlja2x5IEkgd2FudCB0byBzY2FuIGl0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSAqZG9lcyouIFdoYXQncyBpdHMgcHVycG9zZT8gV2hhdCBmdW5jdGlvbmFsaXR5IGRvZXMgaXQgcHJvdmlkZSB3aXRoaW4gdGhlIGtlcm5lbD8gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkLiBJJ2xsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGFyY2hpdGVjdHVyZS5cblxuVGhlbiwgY29uZmlnIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleS4gSSBuZWVkIHRvIGtub3cgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29udHJvbCB0aGlzIGNvZGUncyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcz8gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyB0byByZWFzb24gYWJvdXQgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLlxuXG5GaW5hbGx5LCBJJ2xsIGlkZW50aWZ5IHRoZSBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHdobyBjYWxscyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbnN0cmVlLmNgIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWZmZWN0ZWQgYnkgaXQuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyB0aGlzIHBhdGNoIGNvdWxkIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJ4oCZbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBzaWRlIGVmZmVjdHMsIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToxMS45NjMyNjgwNzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL25zdHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXHRpZiAoaXNfY3VycmVudF9uYW1lc3BhY2UobnMpKVxcbiA1MjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUyMjpcXHRcXHRyZXR1cm4gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuIDUyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbnNfcHV0KHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0aWYgKG5zIFxcdTAwMjZcXHUwMDI2IG5zLVxcdTAwM2VvcHMpXFxuIDUyODpcXHRcXHRcXHRucy1cXHUwMDNlb3BzLVxcdTAwM2VwdXQobnMpO1xcbiA1Mjk6XFx0fVxcbiA1MzA6XFx0XFxuIDUzMTpcXHRERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXFxuIDUzMjpcXHRcXG4gNTMzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG4gNTM0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcXG4gNTM1OlxcdHtcXG4gNTM2OlxcdFxcdGlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSlcXG4gNTM3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRpZiAoIW1heV9saXN0X25zKGtscywgY2FuZGlkYXRlKSlcXG4gNTQwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRyZXR1cm4gbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShjYW5kaWRhdGUpO1xcbiA1NDM6XFx0fVxcbiA1NDQ6XFx0XFxuIDU0NTpcXHRzdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXFxuIDU0NjpcXHR7XFxuIDU0NzpcXHRcXHR1NjQgX191c2VyICpuc19pZHMgPSBrbHMtXFx1MDAzZXVuc19pZHM7XFxuIDU0ODpcXHRcXHRzaXplX3QgbnJfbnNfaWRzID0ga2xzLVxcdTAwM2Vucl9uc19pZHM7XFxuIDU0OTpcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IE5VTEwsICpmaXJzdF9ucyA9IE5VTEwsICpwcmV2ID0gTlVMTDtcXG4gNTUwOlxcdFxcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7XFxuIDU1MTpcXHRcXHRzc2l6ZV90IHJldDtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0VkZTX1dBUk5fT05fT05DRSgha2xzLVxcdTAwM2V1c2VyX25zX2lkKTtcXG4gNTU0OlxcdFxcbiA1NTU6XFx0XFx0aWYgKGtscy1cXHUwMDNldXNlcl9uc19pZCA9PSBMSVNUTlNfQ1VSUkVOVF9VU0VSKVxcbiA1NTY6XFx0XFx0XFx0bnMgPSB0b19uc19jb21tb24oY3VycmVudF91c2VyX25zKCkpO1xcbiA1NTc6XFx0XFx0ZWxzZSBpZiAoa2xzLVxcdTAwM2V1c2VyX25zX2lkKVxcbiA1NTg6XFx0XFx0XFx0bnMgPSBsb29rdXBfbnNfaWQoa2xzLVxcdTAwM2V1c2VyX25zX2lkLCBDTE9ORV9ORVdVU0VSKTtcXG4gNTU5OlxcdFxcdGlmICghbnMpXFxuIDU2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTYxOlxcdFxcdGtscy1cXHUwMDNldXNlcl9ucyA9IHRvX3VzZXJfbnMobnMpO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHQvKlxcbiA1NjQ6XFx0XFx0ICogVXNlIHRoZSByYnRyZWUgdG8gZmluZCB0aGUgZmlyc3QgbmFtZXNwYWNlIHdlIGNhcmUgYWJvdXQgYW5kXFxuIDU2NTpcXHRcXHQgKiB0aGVuIHVzZSBpdCdzIGxpc3QgZW50cnkgdG8gaXRlcmF0ZSBmcm9tIHRoZXJlLlxcbiA1NjY6XFx0XFx0ICovXFxuIDU2NzpcXHRcXHRpZiAoa2xzLVxcdTAwM2VsYXN0X25zX2lkKSB7XFxuIDU2ODpcXHRcXHRcXHRrbHMtXFx1MDAzZWZpcnN0X25zID0gbG9va3VwX25zX293bmVyX2F0KGtscy1cXHUwMDNlbGFzdF9uc19pZCArIDEsIG5zKTtcXG4gNTY5OlxcdFxcdFxcdGlmICgha2xzLVxcdTAwM2VmaXJzdF9ucylcXG4gNTcwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA1NzE6XFx0XFx0XFx0Zmlyc3RfbnMgPSBrbHMtXFx1MDAzZWZpcnN0X25zO1xcbiA1NzI6XFx0XFx0fVxcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRyZXQgPSAwO1xcbiA1NzU6XFx0XFx0aGVhZCA9IFxcdTAwMjZ0b19uc19jb21tb24oa2xzLVxcdTAwM2V1c2VyX25zKS1cXHUwMDNlbnNfb3duZXJfcm9vdC5uc19saXN0X2hlYWQ7XFxuIDU3NjpcXHRcXHRrbHMtXFx1MDAzZXVzZXJuc19jYXBhYmxlID0gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xcbiA1Nzc6XFx0XFxuIDU3ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDU3OTpcXHRcXG4gNTgwOlxcdFxcdGlmICghZmlyc3RfbnMpXFxuIDU4MTpcXHRcXHRcXHRmaXJzdF9ucyA9IGxpc3RfZW50cnlfcmN1KGhlYWQtXFx1MDAzZW5leHQsIHR5cGVvZigqZmlyc3RfbnMpLCBuc19vd25lcl9ub2RlLm5zX2xpc3RfZW50cnkpO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRucyA9IGZpcnN0X25zO1xcbiA1ODQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShucywgaGVhZCwgbnNfb3duZXJfbm9kZS5uc19saXN0X2VudHJ5KSB7XFxuIDU4NTpcXHRcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcXG4gNTg2OlxcdFxcbiA1ODc6XFx0XFx0XFx0aWYgKCFucl9uc19pZHMpXFxuIDU4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0XFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xcbiA1OTE6XFx0XFx0XFx0aWYgKCF2YWxpZClcXG4gNTkyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1OTM6XFx0XFxuIDU5NDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTk1OlxcdFxcbiA1OTY6XFx0XFx0XFx0bnNfcHV0KHByZXYpO1xcbiA1OTc6XFx0XFx0XFx0cHJldiA9IHZhbGlkO1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRcXHRpZiAocHV0X3VzZXIodmFsaWQtXFx1MDAzZW5zX2lkLCBuc19pZHMgKyByZXQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjExLjk2MzM4Nzc5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTY2NjIxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBvdXQgbG91ZCBhcyBJIGludmVzdGlnYXRlOlxuXG4qKkFuYWx5emluZyBOYW1lc3BhY2UgVHJlZSBPcGVyYXRpb25zIGluIHRoZSBLZXJuZWwqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBuYW1lc3BhY2UgdHJlZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGtlcm5lbC9uc3RyZWUuY2AuIEZpcnN0LCBJIGNvdWxkIGp1c3QgcmVhZCB0aGUgd2hvbGUgZmlsZSB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IHRoYXQncyBhIGJpdCBicnV0ZSBmb3JjZS4gTGV0IG1lIHRyeSBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2guIEknbSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBXaGVyZSBkb2VzIHRoaXMgYGtlcm5lbC9uc3RyZWUuY2AgZml0IGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiBzeXN0ZW0gY2FsbHMgYW5kIGludGVyYWN0aW9ucz8gSSBjYW4gc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byBgZG9fbGlzdG5zX3VzZXJuc2Agb3IgYGxlZ2l0aW1pemVfbnNgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSWYgSSBjYW4gZmluZCB0aGVzZSwgdGhhdCB3aWxsIHNob3cgbWUgd2hlcmUgdGhlIHN5c3RlbSBjYWxscyBvciBgaW9jdGxgcyBhcmUgdGhhdCBhcmUgY2FsbGluZyBpbnRvIGBrZXJuZWwvbnN0cmVlLmNgLiBJIGV4cGVjdCB0aGVzZSB3b3VsZCBiZSB1c2VkIHRvIGxpc3QsIHF1ZXJ5LCBvciBwb3RlbnRpYWxseSB2YWxpZGF0ZSBuYW1lc3BhY2UgY29uZmlndXJhdGlvbnMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBlZmZlY3RpdmUgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjE0LjQ2MDA1MTY2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc0NDQxOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGVnaXRpbWl6ZV9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbmtlcm5lbC9uc3RyZWUuYy01MzItXFxua2VybmVsL25zdHJlZS5jOjUzMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NTQ1PXN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy01ODktXFxua2VybmVsL25zdHJlZS5jOjU5MDpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTU5MS1cXHRcXHRpZiAoIXZhbGlkKVxcbi0tXFxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03MzEtXFxua2VybmVsL25zdHJlZS5jOjczMjpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTczMy1cXHRcXHRpZiAoIXZhbGlkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToxNC44Mzc1MDMwMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODEzNzk5ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbnN0cmVlYCBTeXNjYWxsIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSB3YW50IHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbmFtZXNwYWNlIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gTGV0J3Mgc3RhcnQgYnkgZHJpbGxpbmcgaW50byBga2VybmVsL25zdHJlZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gY2FsbHMgcmVsYXRlZCB0byBuYW1lc3BhY2UgbWFuaXB1bGF0aW9uLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhIGNlbnRyYWwgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBuYW1lc3BhY2Ugb3BlcmF0aW9uIHJlcXVlc3RlZCwgb3IgbWF5YmUgYSBkZWRpY2F0ZWQgc3lzdGVtIGNhbGwgZm9yIGVhY2guIEknbSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24sIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW5kIG9mIGNvdXJzZSwgd2hhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbG9vayBsaWtlIHVuZGVyIHRoZSBob29kLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBmdW5jdGlvbnMgbWFuYWdpbmcgdGhlIG5hbWVzcGFjZSB0cmVlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIG1vdW50aW5nLCB1bm1vdW50aW5nLCBjcmVhdGluZywgYW5kIGRlc3Ryb3lpbmcgbmFtZXNwYWNlcy4gSSdtIGtlZW4gdG8gc2VlIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IG5hbWVzcGFjZSBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgdXNlIG9mIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgY29uY3VycmVuY3kgcHJpbWl0aXZlcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIEZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IHRoZSBrZXJuZWwgZW5mb3JjZXMgc2VjdXJpdHkgcG9saWNpZXMgYW5kIGNhcGFiaWxpdGllcyByZWxhdGVkIHRvIG5hbWVzcGFjZSBhY2Nlc3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToxNy42NTEzMDU3NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbnN0cmVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIwOlxcdFxcdGVsc2VcXG4gNzIxOlxcdFxcdFxcdGhlYWQgPSBcXHUwMDI2bnNfdW5pZmllZF9yb290Lm5zX2xpc3RfaGVhZDtcXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHRpZiAoIWZpcnN0X25zKVxcbiA3MjY6XFx0XFx0XFx0Zmlyc3RfbnMgPSBmaXJzdF9uc19jb21tb24oaGVhZCwgbnNfdHJlZSk7XFxuIDcyNzpcXHRcXG4gNzI4OlxcdFxcdGZvciAobnMgPSBmaXJzdF9uczsgIW5zX2NvbW1vbl9pc19oZWFkKG5zLCBoZWFkLCBuc190cmVlKSBcXHUwMDI2XFx1MDAyNiBucl9uc19pZHM7XFxuIDcyOTpcXHRcXHQgICAgIG5zID0gbmV4dF9uc19jb21tb24obnMsIG5zX3RyZWUpKSB7XFxuIDczMDpcXHRcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcXG4gNzMxOlxcdFxcbiA3MzI6XFx0XFx0XFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xcbiA3MzM6XFx0XFx0XFx0aWYgKCF2YWxpZClcXG4gNzM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0XFx0bnNfcHV0KHByZXYpO1xcbiA3Mzk6XFx0XFx0XFx0cHJldiA9IHZhbGlkO1xcbiA3NDA6XFx0XFxuIDc0MTpcXHRcXHRcXHRpZiAocHV0X3VzZXIodmFsaWQtXFx1MDAzZW5zX2lkLCBuc19pZHMgKyByZXQpKSB7XFxuIDc0MjpcXHRcXHRcXHRcXHRuc19wdXQocHJldik7XFxuIDc0MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNzQ0OlxcdFxcdFxcdH1cXG4gNzQ1OlxcdFxcbiA3NDY6XFx0XFx0XFx0bnJfbnNfaWRzLS07XFxuIDc0NzpcXHRcXHRcXHRyZXQrKztcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3NTA6XFx0XFx0fVxcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzUzOlxcdFxcdG5zX3B1dChwcmV2KTtcXG4gNzU0OlxcdFxcdHJldHVybiByZXQ7XFxuIDc1NTpcXHR9XFxuIDc1NjpcXHRcXG4gNzU3OlxcdFNZU0NBTExfREVGSU5FNChsaXN0bnMsIGNvbnN0IHN0cnVjdCBuc19pZF9yZXEgX191c2VyICosIHJlcSxcXG4gNzU4OlxcdFxcdFxcdHU2NCBfX3VzZXIgKiwgbnNfaWRzLCBzaXplX3QsIG5yX25zX2lkcywgdW5zaWduZWQgaW50LCBmbGFncylcXG4gNzU5OlxcdHtcXG4gNzYwOlxcdFxcdHN0cnVjdCBrbGlzdG5zIGtsbnMgX19mcmVlKGtsaXN0bnNfZnJlZSkgPSB7fTtcXG4gNzYxOlxcdFxcdGNvbnN0IHNpemVfdCBtYXhjb3VudCA9IDEwMDAwMDA7XFxuIDc2MjpcXHRcXHRzdHJ1Y3QgbnNfaWRfcmVxIGtyZXE7XFxuIDc2MzpcXHRcXHRzc2l6ZV90IHJldDtcXG4gNzY0OlxcdFxcbiA3NjU6XFx0XFx0aWYgKGZsYWdzKVxcbiA3NjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGlmICh1bmxpa2VseShucl9uc19pZHMgXFx1MDAzZSBtYXhjb3VudCkpXFxuIDc2OTpcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gNzcwOlxcdFxcbiA3NzE6XFx0XFx0aWYgKCFhY2Nlc3Nfb2sobnNfaWRzLCBucl9uc19pZHMgKiBzaXplb2YoKm5zX2lkcykpKVxcbiA3NzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdHJldCA9IGNvcHlfbnNfaWRfcmVxKHJlcSwgXFx1MDAyNmtyZXEpO1xcbiA3NzU6XFx0XFx0aWYgKHJldClcXG4gNzc2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDc3NzpcXHRcXG4gNzc4OlxcdFxcdHJldCA9IHByZXBhcmVfa2xpc3RucyhcXHUwMDI2a2xucywgXFx1MDAyNmtyZXEsIG5zX2lkcywgbnJfbnNfaWRzKTtcXG4gNzc5OlxcdFxcdGlmIChyZXQpXFxuIDc4MDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRcXHRpZiAoa3JlcS51c2VyX25zX2lkKVxcbiA3ODM6XFx0XFx0XFx0cmV0dXJuIGRvX2xpc3Ruc191c2VybnMoXFx1MDAyNmtsbnMpO1xcbiA3ODQ6XFx0XFxuIDc4NTpcXHRcXHRyZXR1cm4gZG9fbGlzdG5zKFxcdTAwMjZrbG5zKTtcXG4gNzg2OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MTcuNjUxNDEwNDE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MDA0OTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqS2VybmVsIE1vZHVsZSBJbnZlc3RpZ2F0aW9uOiBgbGlzdG5zYCBhbmQgTmFtZXNwYWNlIFRyZWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgbGlzdG5zYCBzeXNjYWxsISBJIG5lZWQgdG8gcXVpY2tseSBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0byBsb29rIGF0IGBrZXJuZWwvbnN0cmVlLmNgLCBzbyBJJ2xsIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGF0IGNvZGUgdG8gZXZlbiBiZSBjb21waWxlZCBpbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGhlbHBzIG5hcnJvdyBkb3duIHdoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gYGxpc3Ruc2AuIE5leHQgdXAsIEknbGwganVtcCBpbnRvIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBga2VybmVsL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgSSBjYW4gdW5kZXJzdGFuZCBob3cgYG5zdHJlZS5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGBsaXN0bnNgIChvciByZWxhdGVkIGNvZGUpIGlzIGRlZmluZWQgYW5kIGJ1aWx0LCB3aGljaCB3aWxsIGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaXRzIHVzZSBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MTkuOTMxNDYyNTIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODIwODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc3RyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvTWFrZWZpbGU9Nj1vYmoteSAgICAgPSBmb3JrLm8gZXhlY19kb21haW4ubyBleGVjX3N0YXRlLm8gcGFuaWMubyBcXFxcXFxuLS1cXG5rZXJuZWwvTWFrZWZpbGUtMTAtXFx0ICAgIGV4dGFibGUubyBwYXJhbXMubyBcXFxcXFxua2VybmVsL01ha2VmaWxlOjExOlxcdCAgICBrdGhyZWFkLm8gc3lzX25pLm8gbnNwcm94eS5vIG5zdHJlZS5vIG5zY29tbW9uLm8gXFxcXFxcbmtlcm5lbC9NYWtlZmlsZS0xMi1cXHQgICAgbm90aWZpZXIubyBrc3lzZnMubyBjcmVkLm8gcmVib290Lm8gXFxcXFxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01OC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzo1OTojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19ucy5oXFx1MDAzZVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy05LVxcbi0tXFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYz0zNj12b2lkIGZyZWVfY2dyb3VwX25zKHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICpucylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtNDItXFx0bnNfY29tbW9uX2ZyZWUobnMpO1xcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM6NDM6XFx0LyogQ29uY3VycmVudCBuc3RyZWUgdHJhdmVyc2FsIGRlcGVuZHMgb24gYSBncmFjZSBwZXJpb2QuICovXFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy00NC1cXHRrZnJlZV9yY3UobnMsIG5zLm5zX3JjdSk7XFxuLS1cXG5rZXJuZWwvbnNjb21tb24uYy00LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc19jb21tb24uaFxcdTAwM2VcXG5rZXJuZWwvbnNjb21tb24uYzo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvbnNjb21tb24uYy02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX25zLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxua2VybmVsL25zcHJveHkuYzozMDojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL25zcHJveHkuYy0zMS1cXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy0zLVxcbmtlcm5lbC9uc3RyZWUuYzo0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvbnN0cmVlLmMtNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19ucy5oXFx1MDAzZVxcbi0tXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYy0yNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYzoyNjojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYy0yNy0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC93YWl0LmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25zdHJlZS5oXFx1MDAzZVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYz0xNDU9dm9pZCBmcmVlX3RpbWVfbnMoc3RydWN0IHRpbWVfbmFtZXNwYWNlICpucylcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE1MS1cXHR0aW1lbnNfdmRzb19mcmVlX3Z2YXJfcGFnZShucyk7XFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTUyOlxcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE1My1cXHRrZnJlZV9yY3UobnMsIG5zLm5zX3JjdSk7XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc29ydC5oXFx1MDAzZVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjI0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yNS1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTE5ND1zdGF0aWMgdm9pZCBmcmVlX3VzZXJfbnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjIwLVxcdFxcdG5zX2NvbW1vbl9mcmVlKG5zKTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyMjE6XFx0XFx0LyogQ29uY3VycmVudCBuc3RyZWUgdHJhdmVyc2FsIGRlcGVuZHMgb24gYSBncmFjZSBwZXJpb2QuICovXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjIyLVxcdFxcdGtmcmVlX3JjdShucywgbnMubnNfcmN1KTtcXG4tLVxcbmtlcm5lbC91dHNuYW1lLmMtMTUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfbnMuaFxcdTAwM2VcXG5rZXJuZWwvdXRzbmFtZS5jOjE2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvdXRzbmFtZS5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvdXRzbmFtZS5jPTk2PXZvaWQgZnJlZV91dHNfbnMoc3RydWN0IHV0c19uYW1lc3BhY2UgKm5zKVxcbi0tXFxua2VybmVsL3V0c25hbWUuYy0xMDEtXFx0bnNfY29tbW9uX2ZyZWUobnMpO1xcbmtlcm5lbC91dHNuYW1lLmM6MTAyOlxcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xcbmtlcm5lbC91dHNuYW1lLmMtMTAzLVxcdGtmcmVlX3JjdShucywgbnMubnNfcmN1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MTkuOTg5Njc2NjE3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDM2OTAwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZSBiZWhhdmlvciBvZiBga2VybmVsL25zdHJlZS5jYCBvciB0aGUgYHN5c19saXN0bnNgIHN5c3RlbSBjYWxsIGlzIHNvbWVob3cgY29uZGl0aW9uYWwsIGdvdmVybmVkIGJ5IGEgc3BlY2lmaWMgY29uZmlnIG9wdGlvbi4gSXQncyBhbHdheXMgYmVzdCB0byBydWxlIG91dCBhbnkgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGJlZm9yZSBnb2luZyBkb3duIGEgbW9yZSBjb21wbGV4IGRlYnVnZ2luZyBwYXRoLiBMZXQncyBzZWUgaWYgYW55IGNvbXBpbGUtdGltZSBmbGFncyBhcmUgaW4gcGxheSBoZXJlLiBUbyBkbyB0aGF0IEknbSBnb2luZyB0byBzdGFydCBieSBzY3J1dGluaXppbmcgYGtlcm5lbC9uc3RyZWUuY2AgZnJvbSB0aGUgdmVyeSB0b3AuIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToyMi42MzMzNjk5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL25zdHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDI1IENocmlzdGlhbiBCcmF1bmVyIFxcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcXHUwMDNlICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX25zLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Zmc2RlYnVnLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbiAgMTA6XFx0XFxuICAxMTpcXHRzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NFUUxPQ0sobnNfdHJlZV9sb2NrKTtcXG4gIDEyOlxcdFxcbiAgMTM6XFx0REVGSU5FX0xPQ0tfR1VBUkRfMChuc190cmVlX3dyaXRlcixcXG4gIDE0OlxcdFxcdFxcdCAgICB3cml0ZV9zZXFsb2NrKFxcdTAwMjZuc190cmVlX2xvY2spLFxcbiAgMTU6XFx0XFx0XFx0ICAgIHdyaXRlX3NlcXVubG9jayhcXHUwMDI2bnNfdHJlZV9sb2NrKSlcXG4gIDE2OlxcdFxcbiAgMTc6XFx0REVGSU5FX0xPQ0tfR1VBUkRfMChuc190cmVlX2xvY2tlZF9yZWFkZXIsXFxuICAxODpcXHRcXHRcXHQgICAgcmVhZF9zZXFsb2NrX2V4Y2woXFx1MDAyNm5zX3RyZWVfbG9jayksXFxuICAxOTpcXHRcXHRcXHQgICAgcmVhZF9zZXF1bmxvY2tfZXhjbChcXHUwMDI2bnNfdHJlZV9sb2NrKSlcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RhdGljIHN0cnVjdCBuc190cmVlX3Jvb3QgbnNfdW5pZmllZF9yb290ID0geyAvKiBwcm90ZWN0ZWQgYnkgbnNfdHJlZV9sb2NrICovXFxuICAyMjpcXHRcXHQubnNfcmIgPSBSQl9ST09ULFxcbiAgMjM6XFx0XFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5zX3VuaWZpZWRfcm9vdC5uc19saXN0X2hlYWQpLFxcbiAgMjQ6XFx0fTtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RydWN0IG5zX3RyZWVfcm9vdCBtbnRfbnNfdHJlZSA9IHtcXG4gIDI3OlxcdFxcdC5uc19yYiA9IFJCX1JPT1QsXFxuICAyODpcXHRcXHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQobW50X25zX3RyZWUubnNfbGlzdF9oZWFkKSxcXG4gIDI5OlxcdH07XFxuICAzMDpcXHRcXG4gIDMxOlxcdHN0cnVjdCBuc190cmVlX3Jvb3QgbmV0X25zX3RyZWUgPSB7XFxuICAzMjpcXHRcXHQubnNfcmIgPSBSQl9ST09ULFxcbiAgMzM6XFx0XFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5ldF9uc190cmVlLm5zX2xpc3RfaGVhZCksXFxuICAzNDpcXHR9O1xcbiAgMzU6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmV0X25zX3RyZWUpO1xcbiAgMzY6XFx0XFxuICAzNzpcXHRzdHJ1Y3QgbnNfdHJlZV9yb290IHV0c19uc190cmVlID0ge1xcbiAgMzg6XFx0XFx0Lm5zX3JiID0gUkJfUk9PVCxcXG4gIDM5OlxcdFxcdC5uc19saXN0X2hlYWQgPSBMSVNUX0hFQURfSU5JVCh1dHNfbnNfdHJlZS5uc19saXN0X2hlYWQpLFxcbiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RydWN0IG5zX3RyZWVfcm9vdCB1c2VyX25zX3RyZWUgPSB7XFxuICA0MzpcXHRcXHQubnNfcmIgPSBSQl9ST09ULFxcbiAgNDQ6XFx0XFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKHVzZXJfbnNfdHJlZS5uc19saXN0X2hlYWQpLFxcbiAgNDU6XFx0fTtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0c3RydWN0IG5zX3RyZWVfcm9vdCBpcGNfbnNfdHJlZSA9IHtcXG4gIDQ4OlxcdFxcdC5uc19yYiA9IFJCX1JPT1QsXFxuICA0OTpcXHRcXHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQoaXBjX25zX3RyZWUubnNfbGlzdF9oZWFkKSxcXG4gIDUwOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjIyLjYzMzUwMzU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMzk5ODM5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBOYW1lc3BhY2UgVHJlZSBDb2RlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga2VybmVsL25zdHJlZS5jYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIGBvYmoteWAgd2l0aGluIHRoZSBga2VybmVsL01ha2VmaWxlYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYG1heV9saXN0X25zYCBhbmQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgbW9kaWZpY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgbmFtZXNwYWNlIGxpc3RpbmcgbG9naWMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhdGNoIGFsdGVycyB0aGUgY29yZSBiZWhhdmlvciBhbmQgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGUgbmFtZXNwYWNlIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBgbWF5X2xpc3RfbnNgIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIGltcGFjdCwgYXMgaXQncyB0aGUgZ2F0ZWtlZXBlciBmb3IgbmFtZXNwYWNlIHZpc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjI1Ljg3MzQ4OTg5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL25zdHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRcXHRcXHRyZXQgPSBucztcXG4gNDgxOlxcdFxcdFxcdFxcdGlmIChuc19pZCA9PSBucy1cXHUwMDNlbnNfaWQpXFxuIDQ4MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDgzOlxcdFxcdFxcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VyYl9sZWZ0O1xcbiA0ODQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDg1OlxcdFxcdFxcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VyYl9yaWdodDtcXG4gNDg2OlxcdFxcdFxcdH1cXG4gNDg3OlxcdFxcdH1cXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0aWYgKHJldClcXG4gNDkwOlxcdFxcdFxcdHJldCA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUocmV0KTtcXG4gNDkxOlxcdFxcdHJldHVybiByZXQ7XFxuIDQ5MjpcXHR9XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdHN0YXRpYyBzdHJ1Y3QgbnNfY29tbW9uICpsb29rdXBfbnNfaWQodTY0IG1udF9uc19pZCwgaW50IG5zX3R5cGUpXFxuIDQ5NTpcXHR7XFxuIDQ5NjpcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICpucztcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0Z3VhcmQocmN1KSgpO1xcbiA0OTk6XFx0XFx0bnMgPSBuc190cmVlX2xvb2t1cF9yY3UobW50X25zX2lkLCBuc190eXBlKTtcXG4gNTAwOlxcdFxcdGlmICghbnMpXFxuIDUwMTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0aWYgKCFuc19nZXRfdW5sZXNzX2luYWN0aXZlKG5zKSlcXG4gNTA0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHRyZXR1cm4gbnM7XFxuIDUwNzpcXHR9XFxuIDUwODpcXHRcXG4gNTA5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbnNfcmVxdWVzdGVkKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxuIDUxMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MTE6XFx0e1xcbiA1MTI6XFx0XFx0cmV0dXJuICFrbHMtXFx1MDAzZW5zX3R5cGUgfHwgKGtscy1cXHUwMDNlbnNfdHlwZSBcXHUwMDI2IG5zLVxcdTAwM2Vuc190eXBlKTtcXG4gNTEzOlxcdH1cXG4gNTE0OlxcdFxcbiA1MTU6XFx0c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBtYXlfbGlzdF9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxcbiA1MTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MTc6XFx0e1xcbiA1MTg6XFx0XFx0aWYgKGtscy1cXHUwMDNldXNlcl9ucyBcXHUwMDI2XFx1MDAyNiBrbHMtXFx1MDAzZXVzZXJuc19jYXBhYmxlKVxcbiA1MTk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUyMDpcXHRcXHRpZiAoaXNfY3VycmVudF9uYW1lc3BhY2UobnMpKVxcbiA1MjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUyMjpcXHRcXHRyZXR1cm4gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuIDUyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbnNfcHV0KHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0aWYgKG5zIFxcdTAwMjZcXHUwMDI2IG5zLVxcdTAwM2VvcHMpXFxuIDUyODpcXHRcXHRcXHRucy1cXHUwMDNlb3BzLVxcdTAwM2VwdXQobnMpO1xcbiA1Mjk6XFx0fVxcbiA1MzA6XFx0XFxuIDUzMTpcXHRERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXFxuIDUzMjpcXHRcXG4gNTMzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG4gNTM0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MjUuODczNjUxMzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTMxODI2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbGVnaXRpbWl6ZV9uc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBsZWdpdGltaXplX25zYCBmdW5jdGlvbiwgZGVmaW5lZCBpbmxpbmUsIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBQcmV2aW91c2x5LCB0aGUgY29kZSBmZXRjaGVkIGEgbmFtZXNwYWNlIHJlZmVyZW5jZSB3aXRoIGBuc19nZXRfdW5sZXNzX2luYWN0aXZlKClgLCAqdGhlbiogY2hlY2tlZCBgbWF5X2xpc3RfbnMoKWAuIE5vdywgaXQncyBjaGVja2luZyBgbWF5X2xpc3RfbnMoKWAgKmJlZm9yZSogYWNxdWlyaW5nIHRoZSByZWZlcmVuY2UuIFRoYXQncyBhIHNpZ25pZmljYW50IHNoaWZ0LlxuXG5JIHNlZSB0aGF0IGBsZWdpdGltaXplX25zYCBpcyBjYWxsZWQgYnkgYGRvX2xpc3Ruc191c2VybnNgLCBgZG9fbGlzdG5zYCwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN5c19saXN0bnNgIHN5c2NhbGwuIFRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvbnRleHQuICBgbGVnaXRpbWl6ZV9uc2AgaXMgaW5saW5lZCwgd2hpY2ggbWVhbnMgaXQgZ2V0cyBleHBhbmRlZCB3aGVyZSBpdCdzIGNhbGxlZC4gU28sIHRoZSBjYWxsZXJzIGFyZSBrZXk6IGBkb19saXN0bnNfdXNlcm5zYCBhbmQgYGRvX2xpc3Ruc2AuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBub24tc3RhdGljLCBvciBpZiBvdGhlciBzeW1ib2xzIGV4aXN0LiBMb29rcyBsaWtlIGJvdGggYXJlIHN0YXRpYywgYW5kIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIHVsdGltYXRlbHkgYF9fZG9fc3lzX2xpc3Ruc2AsIGBfX3NlX3N5c19saXN0bnNgIG9yIGBzeXNfbGlzdG5zYC4gR2l2ZW4gdGhlIGNoYW5nZSBJJ3ZlIG5vdGVkIGluIHRoZSByZWZjb3VudGluZywgdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgY29uY3VycmVudCBhY2Nlc3Mgb3IgcG90ZW50aWFsbHkgd2l0aCByYWNlIGNvbmRpdGlvbnMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgc3ltYm9scyBpbiB0aGF0IGZpbGUgdGhhdCBhcmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTozMC43MjY4Mzc0NTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQ3NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihsaXN0bnN8ZG9fbGlzdG5zfGxlZ2l0aW1pemVfbnMpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9uc3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbnN0cmVlLmM9MzkyPXU2NCBfX25zX3RyZWVfZ2VuX2lkKHN0cnVjdCBuc19jb21tb24gKm5zLCB1NjQgaWQpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmMtNDAyLVxcbmtlcm5lbC9uc3RyZWUuYzo0MDM6c3RydWN0IGtsaXN0bnMge1xcbmtlcm5lbC9uc3RyZWUuYy00MDQtXFx0dTY0IF9fdXNlciAqdW5zX2lkcztcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy00MTMtXFxua2VybmVsL25zdHJlZS5jOjQxNDpzdGF0aWMgdm9pZCBfX2ZyZWVfa2xpc3Ruc19mcmVlKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMpXFxua2VybmVsL25zdHJlZS5jLTQxNS17XFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NDI0PXN0YXRpYyBpbnQgY29weV9uc19pZF9yZXEoY29uc3Qgc3RydWN0IG5zX2lkX3JlcSBfX3VzZXIgKnJlcSxcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy00NDktXFxua2VybmVsL25zdHJlZS5jOjQ1MDpzdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2tsaXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscywgc3RydWN0IG5zX2lkX3JlcSAqa3JlcSxcXG5rZXJuZWwvbnN0cmVlLmMtNDUxLVxcdFxcdFxcdFxcdCAgdTY0IF9fdXNlciAqbnNfaWRzLCBzaXplX3QgbnJfbnNfaWRzKVxcbi0tXFxua2VybmVsL25zdHJlZS5jPTQ5ND1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbG9va3VwX25zX2lkKHU2NCBtbnRfbnNfaWQsIGludCBuc190eXBlKVxcbi0tXFxua2VybmVsL25zdHJlZS5jLTUwOC1cXG5rZXJuZWwvbnN0cmVlLmM6NTA5OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbnNfcmVxdWVzdGVkKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUxMC1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKm5zKVxcbi0tXFxua2VybmVsL25zdHJlZS5jLTUxNC1cXG5rZXJuZWwvbnN0cmVlLmM6NTE1OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbWF5X2xpc3RfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG5rZXJuZWwvbnN0cmVlLmMtNTE2LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbmtlcm5lbC9uc3RyZWUuYy01MzItXFxua2VybmVsL25zdHJlZS5jOjUzMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmMtNTQ0LVxcbmtlcm5lbC9uc3RyZWUuYzo1NDU6c3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxcbmtlcm5lbC9uc3RyZWUuYy01NDYte1xcbi0tXFxua2VybmVsL25zdHJlZS5jLTU4OS1cXG5rZXJuZWwvbnN0cmVlLmM6NTkwOlxcdFxcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcXG5rZXJuZWwvbnN0cmVlLmMtNTkxLVxcdFxcdGlmICghdmFsaWQpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NjgwPXN0YXRpYyBpbmxpbmUgYm9vbCBuc19jb21tb25faXNfaGVhZChzdHJ1Y3QgbnNfY29tbW9uICpucyxcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy02ODgtXFxua2VybmVsL25zdHJlZS5jOjY4OTpzdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG5rZXJuZWwvbnN0cmVlLmMtNjkwLXtcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03MzEtXFxua2VybmVsL25zdHJlZS5jOjczMjpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTczMy1cXHRcXHRpZiAoIXZhbGlkKVxcbi0tXFxua2VybmVsL25zdHJlZS5jLTc1Ni1cXG5rZXJuZWwvbnN0cmVlLmM6NzU3OlNZU0NBTExfREVGSU5FNChsaXN0bnMsIGNvbnN0IHN0cnVjdCBuc19pZF9yZXEgX191c2VyICosIHJlcSxcXG5rZXJuZWwvbnN0cmVlLmMtNzU4LVxcdFxcdHU2NCBfX3VzZXIgKiwgbnNfaWRzLCBzaXplX3QsIG5yX25zX2lkcywgdW5zaWduZWQgaW50LCBmbGFncylcXG5rZXJuZWwvbnN0cmVlLmMtNzU5LXtcXG5rZXJuZWwvbnN0cmVlLmM6NzYwOlxcdHN0cnVjdCBrbGlzdG5zIGtsbnMgX19mcmVlKGtsaXN0bnNfZnJlZSkgPSB7fTtcXG5rZXJuZWwvbnN0cmVlLmMtNzYxLVxcdGNvbnN0IHNpemVfdCBtYXhjb3VudCA9IDEwMDAwMDA7XFxuLS1cXG5rZXJuZWwvbnN0cmVlLmMtNzc3LVxcbmtlcm5lbC9uc3RyZWUuYzo3Nzg6XFx0cmV0ID0gcHJlcGFyZV9rbGlzdG5zKFxcdTAwMjZrbG5zLCBcXHUwMDI2a3JlcSwgbnNfaWRzLCBucl9uc19pZHMpO1xcbmtlcm5lbC9uc3RyZWUuYy03NzktXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03ODItXFx0aWYgKGtyZXEudXNlcl9uc19pZClcXG5rZXJuZWwvbnN0cmVlLmM6NzgzOlxcdFxcdHJldHVybiBkb19saXN0bnNfdXNlcm5zKFxcdTAwMjZrbG5zKTtcXG5rZXJuZWwvbnN0cmVlLmMtNzg0LVxcbmtlcm5lbC9uc3RyZWUuYzo3ODU6XFx0cmV0dXJuIGRvX2xpc3RucyhcXHUwMDI2a2xucyk7XFxua2VybmVsL25zdHJlZS5jLTc4Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjMwLjc3Mzg5MDQzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzc5NzkwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuc3RyZWUuY2AgY29kZSBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJEbyBJIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBJIGV2ZW4gc3RhcnQ/XCIgU2VlbXMgbGlrZSBnb29kIHByYWN0aWNlIHRvIGNoZWNrIGlmIHRoZSBidWlsZCBwcm9jZXNzIGNvbmRpdGlvbmFsbHkgY29tcGlsZXMgdGhpcyBmaWxlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGBrZXJuZWwvTWFrZWZpbGVgLiBMZXQgbWUganVzdCB2ZXJpZnnigKYgQWgsIHRoZXJlIGl0IGlzISBgbnN0cmVlLm9gIGlzIHJpZ2h0IHRoZXJlIHVuZGVyIGBvYmoteWAuIFNvIGl0IGxvb2tzIGxpa2UgaXQncyBhbHdheXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgY29kZS4gVGhhdCBtZWFucyBpdOKAmXMgYWx3YXlzIGJ1aWx0IGluLCBhbmQgSSBzaG91bGRuJ3QgaGF2ZSB0byBmaWRkbGUgd2l0aCBhbnkgZXh0ZXJuYWwgY29uZmlncyB0byBldmVuIHN0YXJ0IGFuYWx5emluZyBpdC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZ2xhbmNlIGF0IGBpbml0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBvdGhlciBudWFuY2UgdG8gdGhpcy4gSXQncyByYXJlIGZvciB0aGVzZSBiYXNpYyBuYW1lc3BhY2VzIGxpa2UgYFVTRVJfTlNgIGFuZCBgTkFNRVNQQUNFU2AgdG8gYmUgYW55dGhpbmcgKmJ1dCogYnVpbHQtaW4sIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjMzLjU1MzY4NDI2NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NzU1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5BTUVTUEFDRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTE0MDgtXFxuaW5pdC9LY29uZmlnOjE0MDk6bWVudWNvbmZpZyBOQU1FU1BBQ0VTXFxuaW5pdC9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiTmFtZXNwYWNlcyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzMuNTk4NjcwNDc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNjY5NDc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgTkFNRVNQQUNFU2AgYW5kIGBVU0VSX05TYCBqdW1wIG91dCBhdCBtZSBhcyByZWxldmFudCBjb25maWd1cmF0aW9ucywgZXZlbiB0aG91Z2ggYG5zdHJlZS5jYCBpcyBpbiBgb2JqLXlgLiBJdCdzIGFsd2F5cyBhIHNvbGlkIHByYWN0aWNlIHRvIGVuc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCBpZiBhbnl0aGluZyBoZXJlIGV2ZW4gKnRvdWNoZXMqIG5hbWVzcGFjZXMsIHdoaWNoIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIGlzIGxpa2VseSBhZmZlY3RpbmcuIEknbSBmb2N1c2luZyBvbiBgX19kb19zeXNfbGlzdG5zYCwgYGRvX2xpc3Ruc2AsIGBkb19saXN0bnNfdXNlcm5zYCwgYW5kIGBsZWdpdGltaXplX25zYC4gVGhvc2Ugc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgYWN0aW9uIGlzLlxuXG5JIGNvbmZpcm1lZCBieSBjaGVja2luZyB0aGUgZGlmZiB0aGF0IGBrZXJuZWwvbnN0cmVlLmNgIGlzIHRoZSAqb25seSogZmlsZSB0b3VjaGVkLCB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHksIGFuZCB2YWxpZGF0ZXMgdGhlIGFib3ZlIGZvY3VzLlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSBrZXkgZmluZGluZ3MuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgY2VudGVyIGFyb3VuZCBgbGVnaXRpbWl6ZV9ucygpYCB3aXRoaW4gYGtlcm5lbC9uc3RyZWUuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyB0d2Vha2luZyB0aGUgb3JkZXIgb2YgaG93IHdlIGNoZWNrIG5hbWVzcGFjZSBhY2Nlc3NpYmlsaXR5IChgbWF5X2xpc3RfbnNgKSBhZ2FpbnN0IGdldHRpbmcgdGhlIG5hbWVzcGFjZSByZWZlcmVuY2UgKGBuc19nZXRfdW5sZXNzX2luYWN0aXZlYCkgd2hpbGUgaXRlcmF0aW5nIGluIGBsaXN0bnNgLlxuXG5UaGlzIGNoYW5nZSAqZGlyZWN0bHkqIGltcGFjdHMgY29yZSBuYW1lc3BhY2UgaW5zcGVjdGlvbiBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwg4oCTIHNwZWNpZmljYWxseSBgZG9fbGlzdG5zYCBhbmQgYGRvX2xpc3Ruc191c2VybnNgLiBUaGUgYWNjZXNzIG9yZGVyIGNoYW5nZSBpcyBjcml0aWNhbC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIEknbSBnb2luZyB0byBmbGFnIHRoaXMgYXMgZnV6ei13b3J0aHkuIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM1MSwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzcuODY1NjIxNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI3MDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkFNRVNQQUNFU1wiLFxuICAgIFwiVVNFUl9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZG9fc3lzX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zXCIsXG4gICAgXCJkb19saXN0bnNfdXNlcm5zXCIsXG4gICAgXCJsZWdpdGltaXplX25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGVnaXRpbWl6ZV9ucygpIGluIGtlcm5lbC9uc3RyZWUuYywgcmVvcmRlcmluZyBwZXJtaXNzaW9uIGNoZWNrcyAobWF5X2xpc3RfbnMpIHByaW9yIHRvIGF0dGVtcHRpbmcgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIChuc19nZXRfdW5sZXNzX2luYWN0aXZlKSBkdXJpbmcgbmFtZXNwYWNlIGl0ZXJhdGlvbi4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gY29yZSBuYW1lc3BhY2UgaGFuZGxpbmcgYWNjZXNzaWJsZSB2aWEgdGhlIGxpc3RucyBzeXNjYWxsIChkb19saXN0bnMgYW5kIGRvX2xpc3Ruc191c2VybnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RvX3N5c19saXN0bnNcIixcbiAgICBcImRvX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zX3VzZXJuc1wiLFxuICAgIFwibGVnaXRpbWl6ZV9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzcuOTQ4ODk4OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4ODcyMjk4OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzcuOTQ5MzkzOTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODg3MTc5OTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXFx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVxcdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jXG5pbmRleCA2ZDEyZTU5MDBhYzAxLi44MzFmMjc5ZDE3NGEzIDEwMDY0NFxuLS0tIGEva2VybmVsL25zdHJlZS5jXG4rKysgYi9rZXJuZWwvbnN0cmVlLmNcbkBAIC01MzMsMTkgKzUzMywxMyBAQCBERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbnNfY29tbW9uICpfX211c3RfY2hlY2sgbGVnaXRpbWl6ZV9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxuIFx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKVxuIHtcbi1cdHN0cnVjdCBuc19jb21tb24gKm5zIF9fZnJlZShuc19wdXQpID0gTlVMTDtcbi1cbiBcdGlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRucyA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbi1cdGlmICghbnMpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIG5zKSlcbitcdGlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBub19mcmVlX3B0cihucyk7XG4rXHRyZXR1cm4gbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShjYW5kaWRhdGUpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTozNy45NDkzOTQ3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTc1NjU5OTUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gYG5zdHJlZS5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gRmlyc3QsIEknbGwgemVybyBpbiBvbiB0aGUgcGF0Y2ggaXRzZWxmIOKAkyB3aGF0IG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHByb3Bvc2VkPyBUaGVuLCBJJ2xsIG5lZWQgdG8gZXhwYW5kIG15IHZpZXcgYW5kIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgc3Vycm91bmRpbmcgdGhlIHBhdGNoLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJJ2xsIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIGNvZGUgYXJvdW5kIHRoZSBzZWN0aW9uIHRoYXQncyBiZWVuIHRvdWNoZWQsIGxpa2VseSBuZWFyIGxpbmUgNTMzLiBJJ2xsIHByb2JhYmx5IGdyYWIgaXQgdXNpbmcgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb3IgcGVyaGFwcyBgZ3JlcHBlcmAgaWYgSSBqdXN0IHdhbnQgdG8gZmluZCBpdCBxdWlja2x5IHdpdGggc29tZSBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzJyBpbXBsaWNhdGlvbnMgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggYWRqYWNlbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NDkuNzA1OTk4NTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbnN0cmVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRpZiAoIW5zKVxcbiA1MDE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDUwMjpcXHRcXG4gNTAzOlxcdFxcdGlmICghbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShucykpXFxuIDUwNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTA1OlxcdFxcbiA1MDY6XFx0XFx0cmV0dXJuIG5zO1xcbiA1MDc6XFx0fVxcbiA1MDg6XFx0XFxuIDUwOTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIG5zX3JlcXVlc3RlZChjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxcbiA1MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTExOlxcdHtcXG4gNTEyOlxcdFxcdHJldHVybiAha2xzLVxcdTAwM2Vuc190eXBlIHx8IChrbHMtXFx1MDAzZW5zX3R5cGUgXFx1MDAyNiBucy1cXHUwMDNlbnNfdHlwZSk7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbWF5X2xpc3RfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG4gNTE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTE3OlxcdHtcXG4gNTE4OlxcdFxcdGlmIChrbHMtXFx1MDAzZXVzZXJfbnMgXFx1MDAyNlxcdTAwMjYga2xzLVxcdTAwM2V1c2VybnNfY2FwYWJsZSlcXG4gNTE5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1MjA6XFx0XFx0aWYgKGlzX2N1cnJlbnRfbmFtZXNwYWNlKG5zKSlcXG4gNTIxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1MjI6XFx0XFx0cmV0dXJuIG1heV9zZWVfYWxsX25hbWVzcGFjZXMoKTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0c3RhdGljIGlubGluZSB2b2lkIG5zX3B1dChzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTI2OlxcdHtcXG4gNTI3OlxcdFxcdGlmIChucyBcXHUwMDI2XFx1MDAyNiBucy1cXHUwMDNlb3BzKVxcbiA1Mjg6XFx0XFx0XFx0bnMtXFx1MDAzZW9wcy1cXHUwMDNlcHV0KG5zKTtcXG4gNTI5OlxcdH1cXG4gNTMwOlxcdFxcbiA1MzE6XFx0REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbiA1MzI6XFx0XFxuIDUzMzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxuIDUzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuIDUzNTpcXHR7XFxuIDUzNjpcXHRcXHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXFxuIDUzNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0XFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIGNhbmRpZGF0ZSkpXFxuIDU0MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0XFx0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcXG4gNTQzOlxcdH1cXG4gNTQ0OlxcdFxcbiA1NDU6XFx0c3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxcbiA1NDY6XFx0e1xcbiA1NDc6XFx0XFx0dTY0IF9fdXNlciAqbnNfaWRzID0ga2xzLVxcdTAwM2V1bnNfaWRzO1xcbiA1NDg6XFx0XFx0c2l6ZV90IG5yX25zX2lkcyA9IGtscy1cXHUwMDNlbnJfbnNfaWRzO1xcbiA1NDk6XFx0XFx0c3RydWN0IG5zX2NvbW1vbiAqbnMgPSBOVUxMLCAqZmlyc3RfbnMgPSBOVUxMLCAqcHJldiA9IE5VTEw7XFxuIDU1MDpcXHRcXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkO1xcbiA1NTE6XFx0XFx0c3NpemVfdCByZXQ7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdFZGU19XQVJOX09OX09OQ0UoIWtscy1cXHUwMDNldXNlcl9uc19pZCk7XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdGlmIChrbHMtXFx1MDAzZXVzZXJfbnNfaWQgPT0gTElTVE5TX0NVUlJFTlRfVVNFUilcXG4gNTU2OlxcdFxcdFxcdG5zID0gdG9fbnNfY29tbW9uKGN1cnJlbnRfdXNlcl9ucygpKTtcXG4gNTU3OlxcdFxcdGVsc2UgaWYgKGtscy1cXHUwMDNldXNlcl9uc19pZClcXG4gNTU4OlxcdFxcdFxcdG5zID0gbG9va3VwX25zX2lkKGtscy1cXHUwMDNldXNlcl9uc19pZCwgQ0xPTkVfTkVXVVNFUik7XFxuIDU1OTpcXHRcXHRpZiAoIW5zKVxcbiA1NjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU2MTpcXHRcXHRrbHMtXFx1MDAzZXVzZXJfbnMgPSB0b191c2VyX25zKG5zKTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0LypcXG4gNTY0OlxcdFxcdCAqIFVzZSB0aGUgcmJ0cmVlIHRvIGZpbmQgdGhlIGZpcnN0IG5hbWVzcGFjZSB3ZSBjYXJlIGFib3V0IGFuZFxcbiA1NjU6XFx0XFx0ICogdGhlbiB1c2UgaXQncyBsaXN0IGVudHJ5IHRvIGl0ZXJhdGUgZnJvbSB0aGVyZS5cXG4gNTY2OlxcdFxcdCAqL1xcbiA1Njc6XFx0XFx0aWYgKGtscy1cXHUwMDNlbGFzdF9uc19pZCkge1xcbiA1Njg6XFx0XFx0XFx0a2xzLVxcdTAwM2VmaXJzdF9ucyA9IGxvb2t1cF9uc19vd25lcl9hdChrbHMtXFx1MDAzZWxhc3RfbnNfaWQgKyAxLCBucyk7XFxuIDU2OTpcXHRcXHRcXHRpZiAoIWtscy1cXHUwMDNlZmlyc3RfbnMpXFxuIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gNTcxOlxcdFxcdFxcdGZpcnN0X25zID0ga2xzLVxcdTAwM2VmaXJzdF9ucztcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0cmV0ID0gMDtcXG4gNTc1OlxcdFxcdGhlYWQgPSBcXHUwMDI2dG9fbnNfY29tbW9uKGtscy1cXHUwMDNldXNlcl9ucyktXFx1MDAzZW5zX293bmVyX3Jvb3QubnNfbGlzdF9oZWFkO1xcbiA1NzY6XFx0XFx0a2xzLVxcdTAwM2V1c2VybnNfY2FwYWJsZSA9IG1heV9zZWVfYWxsX25hbWVzcGFjZXMoKTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRpZiAoIWZpcnN0X25zKVxcbiA1ODE6XFx0XFx0XFx0Zmlyc3RfbnMgPSBsaXN0X2VudHJ5X3JjdShoZWFkLVxcdTAwM2VuZXh0LCB0eXBlb2YoKmZpcnN0X25zKSwgbnNfb3duZXJfbm9kZS5uc19saXN0X2VudHJ5KTtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0bnMgPSBmaXJzdF9ucztcXG4gNTg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UobnMsIGhlYWQsIG5zX293bmVyX25vZGUubnNfbGlzdF9lbnRyeSkge1xcbiA1ODU6XFx0XFx0XFx0c3RydWN0IG5zX2NvbW1vbiAqdmFsaWQ7XFxuIDU4NjpcXHRcXG4gNTg3OlxcdFxcdFxcdGlmICghbnJfbnNfaWRzKVxcbiA1ODg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdFxcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcXG4gNTkxOlxcdFxcdFxcdGlmICghdmFsaWQpXFxuIDU5MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDU5NTpcXHRcXG4gNTk2OlxcdFxcdFxcdG5zX3B1dChwcmV2KTtcXG4gNTk3OlxcdFxcdFxcdHByZXYgPSB2YWxpZDtcXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0XFx0aWYgKHB1dF91c2VyKHZhbGlkLVxcdTAwM2Vuc19pZCwgbnNfaWRzICsgcmV0KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTo0OS43MDYxMjY1MDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNTk4OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGtlcm5lbC9uc3RyZWUuYyBhbmQgdGhlIFVzZSBvZiBgbGVnaXRpbWl6ZV9uc2AqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoZSBga2VybmVsL25zdHJlZS5jYCBmaWxlIHdvcmtzLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLCBzbyBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgYGxlZ2l0aW1pemVfbnNgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhhdCBmaWxlLiBTZWVpbmcgdGhlIGNvbnRleHQgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgcHVycG9zZSBieSBjaGVja2luZyB3aGVyZSBpdHMgZW1wbG95ZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmRzIHRvd2FyZHMgdGhlIGZ1bmN0aW9ucyBkZXRhaWxzLiBJIHRoaW5rIGJ5IGRvaW5nIHRoaXMgSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgbW9yZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjUxLjY0MjExODY5MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MDE3NTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsZWdpdGltaXplX25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbmtlcm5lbC9uc3RyZWUuYy01MzItXFxua2VybmVsL25zdHJlZS5jOjUzMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NTQ1PXN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy01ODktXFxua2VybmVsL25zdHJlZS5jOjU5MDpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTU5MS1cXHRcXHRpZiAoIXZhbGlkKVxcbi0tXFxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03MzEtXFxua2VybmVsL25zdHJlZS5jOjczMjpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTczMy1cXHRcXHRpZiAoIXZhbGlkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTo1My40OTIzMDA1NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2Nzg0MzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgRGVlcCBEaXZlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCBhbmQgYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgLiBJIGtub3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBrZXksIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHZhbHVlIG9mIGBjYW5kaWRhdGVgIGlzIHdpdGhpbiB0aGUgYGxlZ2l0aW1pemVfbnNgIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSB2YWx1ZSBvZiB0aGF0IHZhcmlhYmxlIHdvdWxkIGxpa2VseSB0ZWxsIG1lIHRoZSBlbnRpcmUgc3RvcnkuIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgbGluZXMgNTAwLTUzMCBhZ2FpbiwgaXQncyBwb3NzaWJsZSBJIG1pc3NlZCBhIGNsdWUgaW4gbXkgcHJldmlvdXMgcGFzcywgb3IgYWx0ZXJuYXRpdmVseSwgYSBxdWljayBzZWFyY2ggZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBpc19jdXJyZW50X25hbWVzcGFjZWAgd2lsbCBnaXZlIG1lIGNvbnRleHQuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTo1NS42NjAxNDc3NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzY0MDkxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfY3VycmVudF9uYW1lc3BhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnNmcy5jPTQ1Nj1zdGF0aWMgaW50IG5zZnNfZW5jb2RlX2ZoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqZmgsIGludCAqbWF4X2xlbixcXG4tLVxcbmZzL25zZnMuYy00NzgtXFxuZnMvbnNmcy5jOjQ3OTpib29sIGlzX2N1cnJlbnRfbmFtZXNwYWNlKHN0cnVjdCBuc19jb21tb24gKm5zKVxcbmZzL25zZnMuYy00ODAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC0xMC1cXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjExOmJvb2wgaXNfY3VycmVudF9uYW1lc3BhY2Uoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtMTItaW50IF9fbnNfY29tbW9uX2luaXQoc3RydWN0IG5zX2NvbW1vbiAqbnMsIHUzMiBuc190eXBlLCBjb25zdCBzdHJ1Y3QgcHJvY19uc19vcGVyYXRpb25zICpvcHMsIGludCBpbnVtKTtcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYz01MTU9c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBtYXlfbGlzdF9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxcbi0tXFxua2VybmVsL25zdHJlZS5jLTUxOS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5rZXJuZWwvbnN0cmVlLmM6NTIwOlxcdGlmIChpc19jdXJyZW50X25hbWVzcGFjZShucykpXFxua2VybmVsL25zdHJlZS5jLTUyMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NTcuNDk2NTYyMjAzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODg3Nzc1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGZzL25zZnMuY2AgZm9yIE5hbWVzcGFjZSBJbnNwZWN0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBuYW1lc3BhY2UgaGFuZGxpbmcgaXMgY3VycmVudGx5IGltcGxlbWVudGVkLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgaXNfY3VycmVudF9uYW1lc3BhY2VgIGZ1bmN0aW9uIGluIGBmcy9uc2ZzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIHBhcnRpY3VsYXIgbmFtZXNwYWNlIGlzIHRoZSBhY3RpdmUgb25lLiBJIGtub3cgdGhpcyBpcyBhIGNvcmUgcGllY2Ugd2hlbiBkZWFsaW5nIHdpdGggaXNvbGF0aW9uIGFuZCBjb250ZXh0IHN3aXRjaGVzLCBidXQgYSByZWZyZXNoZXIgaXMgYWx3YXlzIHVzZWZ1bCwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgb24gYSBudWFuY2VkIGZlYXR1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgY3VycmVudCB0aHJlYWQgYW5kIHBvdGVudGlhbGx5IGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgbmFtZXNwYWNlLiBUaGVuLCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGltcGFjdCBvbiByZWxhdGVkIGNhbGxzIGxpa2UgYHRhc2tfYWN0aXZlX25hbWVzcGFjZWAuIEknbGwgd2FudCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NTkuNzg1MzQyMzUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25zZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFx0ZmlkLVxcdTAwM2Vuc19pbnVtXFx0PSBpbm9kZS1cXHUwMDNlaV9pbm87XFxuIDQ3NjpcXHRcXHRyZXR1cm4gRklMRUlEX05TRlM7XFxuIDQ3NzpcXHR9XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdGJvb2wgaXNfY3VycmVudF9uYW1lc3BhY2Uoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuIDQ4MDpcXHR7XFxuIDQ4MTpcXHRcXHRzd2l0Y2ggKG5zLVxcdTAwM2Vuc190eXBlKSB7XFxuIDQ4MjpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG4gNDgzOlxcdFxcdGNhc2UgQ0xPTkVfTkVXQ0dST1VQOlxcbiA0ODQ6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX2NnX25zKG5zKSk7XFxuIDQ4NTpcXHQjZW5kaWZcXG4gNDg2OlxcdCNpZmRlZiBDT05GSUdfSVBDX05TXFxuIDQ4NzpcXHRcXHRjYXNlIENMT05FX05FV0lQQzpcXG4gNDg4OlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19pcGNfbnMobnMpKTtcXG4gNDg5OlxcdCNlbmRpZlxcbiA0OTA6XFx0XFx0Y2FzZSBDTE9ORV9ORVdOUzpcXG4gNDkxOlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19tbnRfbnMobnMpKTtcXG4gNDkyOlxcdCNpZmRlZiBDT05GSUdfTkVUX05TXFxuIDQ5MzpcXHRcXHRjYXNlIENMT05FX05FV05FVDpcXG4gNDk0OlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19uZXRfbnMobnMpKTtcXG4gNDk1OlxcdCNlbmRpZlxcbiA0OTY6XFx0I2lmZGVmIENPTkZJR19QSURfTlNcXG4gNDk3OlxcdFxcdGNhc2UgQ0xPTkVfTkVXUElEOlxcbiA0OTg6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3BpZF9ucyhucykpO1xcbiA0OTk6XFx0I2VuZGlmXFxuIDUwMDpcXHQjaWZkZWYgQ09ORklHX1RJTUVfTlNcXG4gNTAxOlxcdFxcdGNhc2UgQ0xPTkVfTkVXVElNRTpcXG4gNTAyOlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b190aW1lX25zKG5zKSk7XFxuIDUwMzpcXHQjZW5kaWZcXG4gNTA0OlxcdCNpZmRlZiBDT05GSUdfVVNFUl9OU1xcbiA1MDU6XFx0XFx0Y2FzZSBDTE9ORV9ORVdVU0VSOlxcbiA1MDY6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3VzZXJfbnMobnMpKTtcXG4gNTA3OlxcdCNlbmRpZlxcbiA1MDg6XFx0I2lmZGVmIENPTkZJR19VVFNfTlNcXG4gNTA5OlxcdFxcdGNhc2UgQ0xPTkVfTkVXVVRTOlxcbiA1MTA6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3V0c19ucyhucykpO1xcbiA1MTE6XFx0I2VuZGlmXFxuIDUxMjpcXHRcXHRkZWZhdWx0OlxcbiA1MTM6XFx0XFx0XFx0VkZTX1dBUk5fT05fT05DRSh0cnVlKTtcXG4gNTE0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NTkuNzg1NDMzMTAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDM1NzM4MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnMsIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgY2hhbmdlIGluIGBsZWdpdGltaXplX25zYC4gVGhlIG9yaWdpbmFsIGNvZGUgdG9vayBhIHJlZmVyZW5jZSB0byBgY2FuZGlkYXRlYCAqYmVmb3JlKiBjaGVja2luZyBgbWF5X2xpc3RfbnNgLiBUaGUgcGF0Y2ggcmV2ZXJzZXMgdGhpcywgY2hlY2tpbmcgYG1heV9saXN0X25zYCAqYmVmb3JlKiBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZWAuIEl0J3MgZXNzZW50aWFsbHkgYW4gb3B0aW1pemF0aW9uLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IGlmIHRoZSBhY2Nlc3MgaXNuJ3QgcGVybWl0dGVkLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMsIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgb24gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZXMgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgZ2l2ZW4gdGhlIFJDVSBjb250ZXh0LiBXZSBhcmUgdW5kZXIgUkNVIHJlYWQgbG9jaywgYnV0IHRoZSBvcmRlcmluZyBjaGFuZ2Ugc2hpZnRzIHRoZSBwb2ludCBhdCB3aGljaCB3ZSd2ZSAqZ3VhcmFudGVlZCogdGhhdCBgY2FuZGlkYXRlYCBpcyB2YWxpZC5cblxuSG93ZXZlciwgSSBkb24ndCBzZWUgYW55IGRpcmVjdCBLTVNBTiByZWQgZmxhZ3MuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHdoZXJlIGZpZWxkcyAqY291bGQqIGJlIHVuaW5pdGlhbGl6ZWQuIFRoZXJlJ3Mgbm8gY2hhbmdlIGluIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgd291bGQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSdyZSBub3QgYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHBhdGNoJ3Mgc2NvcGUuIE5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBidWZmZXIgbGVuZ3RocyBhcmUgcHJlc2VudCwgd2hpY2ggY291bGQgcmVzdWx0IGluIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIFRoZSBwYXRjaCBkb2Vzbid0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gYHB1dF91c2VyKClgIGlzIHVzZWQgc2FmZWx5LCBjb3B5aW5nIGFuIGV4aXN0aW5nIGB1NjQgbnNfaWRgLiBUaGUgcG90ZW50aWFsIHJpc2sgaXMgbW9yZSBhbGlnbmVkIHdpdGggS0FTQU4gZHVlIHRvIHRoZSBvcmRlcmluZyBjaGFuZ2UgYW5kIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy5cblxuVGhlIEtNU0FOIGFzcGVjdHMgKHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkpIHNlZW0gY29tcGxldGVseSBhYnNlbnQuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgKndoZW4qIHdlIGNoZWNrIHRoZSBwZXJtaXNzaW9ucyBhbmQgKndoZXRoZXIqIHdlIGluY3JlbWVudCB0aGUgcmVmY291bnQsIG5vdCAqd2hhdCogZGF0YSBpcyBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFuIG9wdGltaXphdGlvbiB0aGF0IGhhcyBLQVNBTiBpbXBsaWNhdGlvbnMgaWYgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucy5cblxuVGhlcmVmb3JlLCBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgdGhlIGBLTVNBTlJlYXNvbmluZ2Agd291bGQgZm9jdXMgb24gdGhpcyBjaGFuZ2UgYmVpbmcgYW4gb3B0aW1pemF0aW9uIHRvIHJlZmNvdW50IG1hbmFnZW1lbnQsIG5vdCB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAzLCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI2OjE2LjgyMTE3NDQ0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXFx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVxcdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsZWdpdGltaXplX25zKClgIGluIGBrZXJuZWwvbnN0cmVlLmNgIHRvIHBlcmZvcm0gdGhlIGBtYXlfbGlzdF9ucygpYCBwZXJtaXNzaW9uIGNoZWNrIG9uIHRoZSBjYW5kaWRhdGUgbmFtZXNwYWNlIHByaW9yIHRvIGFjcXVpcmluZyBhIHJlZmVyZW5jZSB2aWEgYG5zX2dldF91bmxlc3NfaW5hY3RpdmUoKWAsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZSBhY3F1aXNpdGlvbiBhbmQgY2xlYW51cC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWxsb2NhdGUgYW55IG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgZGF0YSBsZW5ndGhzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbGwgZmllbGRzIGFjY2Vzc2VkIChgY2FuZGlkYXRlLVxcdTAwM2Vuc190eXBlYCwgYGNhbmRpZGF0ZS1cXHUwMDNlbnNfaWRgLCBldGMuKSBiZWxvbmcgdG8gaW5pdGlhbGl6ZWQgbmFtZXNwYWNlIHN0cnVjdHVyZXMgaW4gdGhlIG5hbWVzcGFjZSB0cmVlLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyByZWxhdGVkIHRvIGRlcmVmZXJlbmNpbmcgYGNhbmRpZGF0ZWAgdW5kZXIgUkNVIHByaW9yIHRvIHRha2luZyBhIHJlZmVyZW5jZSB3b3VsZCBiZSBvYmplY3QgbGlmZXRpbWUvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9mrbk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 18:51:48 +0000 UTC FinishedAt: 2026-09-07 19:26:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NAMESPACES", "USER_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NAMESPACES", "USER_NS" ], "series_id": "40346966-3a38-4a48-91fd-e4580cd87ab8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__do_sys_listns", "do_listns", "do_listns_userns", "legitimize_ns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZG9fc3lzX2xpc3RucyYjMzQ7LAogICAgJiMzNDtkb19saXN0bnMmIzM0OywKICAgICYjMzQ7ZG9fbGlzdG5zX3VzZXJucyYjMzQ7LAogICAgJiMzNDtsZWdpdGltaXplX25zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWxsb2NhdGUgYW55IG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgZGF0YSBsZW5ndGhzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbGwgZmllbGRzIGFjY2Vzc2VkIChgY2FuZGlkYXRlLVx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVx1MDAzZW5zX2lkYCwgZXRjLikgYmVsb25nIHRvIGluaXRpYWxpemVkIG5hbWVzcGFjZSBzdHJ1Y3R1cmVzIGluIHRoZSBuYW1lc3BhY2UgdHJlZS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjYW5kaWRhdGVgIHVuZGVyIFJDVSBwcmlvciB0byB0YWtpbmcgYSByZWZlcmVuY2Ugd291bGQgYmUgb2JqZWN0IGxpZmV0aW1lL3VzZS1hZnRlci1mcmVlIGlzc3VlcyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9uc3RyZWUuYyBiL2tlcm5lbC9uc3RyZWUuY1xuaW5kZXggNmQxMmU1OTAwYWMwMS4uODMxZjI3OWQxNzRhMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9uc3RyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL25zdHJlZS5jXG5AQCAtNTMzLDE5ICYjNDM7NTMzLDEzIEBAIERFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4ge1xuLVx0c3RydWN0IG5zX2NvbW1vbiAqbnMgX19mcmVlKG5zX3B1dCkgPSBOVUxMO1xuLVxuIFx0aWYgKCFuc19yZXF1ZXN0ZWQoa2xzLCBjYW5kaWRhdGUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdG5zID0gbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShjYW5kaWRhdGUpO1xuLVx0aWYgKCFucylcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRpZiAoIW1heV9saXN0X25zKGtscywgbnMpKVxuJiM0MztcdGlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBub19mcmVlX3B0cihucyk7XG4mIzQzO1x0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZG9fc3lzX2xpc3RucyYjMzQ7LAogICAgJiMzNDtkb19saXN0bnMmIzM0OywKICAgICYjMzQ7ZG9fbGlzdG5zX3VzZXJucyYjMzQ7LAogICAgJiMzNDtsZWdpdGltaXplX25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jCmluZGV4IDZkMTJlNTkwMGFjMDEuLjgzMWYyNzlkMTc0YTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9uc3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbnN0cmVlLmMKQEAgLTUzMywxOSAmIzQzOzUzMywxMyBAQCBERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsCiAJCQkJCQkJICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKQogewotCXN0cnVjdCBuc19jb21tb24gKm5zIF9fZnJlZShuc19wdXQpID0gTlVMTDsKLQogCWlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlucyA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghbWF5X2xpc3RfbnMoa2xzLCBucykpCiYjNDM7CWlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBub19mcmVlX3B0cihucyk7CiYjNDM7CXJldHVybiBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIE5hbWVzcGFjZSBUcmVlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9uc3RyZWUuY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBga2VybmVsL25zdHJlZS5jYCDigJMgSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGZpcmUgdXAgYGdyZXBwZXJgIGRlcGVuZGluZyBvbiB3aGF0IEkgbmVlZCBhbmQgaG93IHF1aWNrbHkgSSB3YW50IHRvIHNjYW4gaXQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSAqZG9lcyouIFdoYXQmIzM5O3MgaXRzIHB1cnBvc2U/IFdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIGl0IHByb3ZpZGUgd2l0aGluIHRoZSBrZXJuZWw/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgaW52b2x2ZWQuIEkmIzM5O2xsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGFyY2hpdGVjdHVyZS4KClRoZW4sIGNvbmZpZyBvcHRpb25zIGFyZSBnb2luZyB0byBiZSBrZXkuIEkgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGNvbnRyb2wgdGhpcyBjb2RlJiMzOTtzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdWJzeXN0ZW1zPyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyB0byByZWFzb24gYWJvdXQgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLgoKRmluYWxseSwgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hvIGNhbGxzIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBuc3RyZWUuY2AgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhZmZlY3RlZCBieSBpdC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgaG93IHRoaXMgcGF0Y2ggY291bGQgaW1wYWN0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEnigJlsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIHNpZGUgZWZmZWN0cywgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zLiBCYXNpY2FsbHksIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbnN0cmVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFx0aWYgKGlzX2N1cnJlbnRfbmFtZXNwYWNlKG5zKSlcbiA1MjE6XHRcdFx0cmV0dXJuIHRydWU7XG4gNTIyOlx0XHRyZXR1cm4gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHRzdGF0aWMgaW5saW5lIHZvaWQgbnNfcHV0KHN0cnVjdCBuc19jb21tb24gKm5zKVxuIDUyNjpcdHtcbiA1Mjc6XHRcdGlmIChucyBcdTAwMjZcdTAwMjYgbnMtXHUwMDNlb3BzKVxuIDUyODpcdFx0XHRucy1cdTAwM2VvcHMtXHUwMDNlcHV0KG5zKTtcbiA1Mjk6XHR9XG4gNTMwOlx0XG4gNTMxOlx0REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxuIDUzMjpcdFxuIDUzMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiA1MzQ6XHRcdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcbiA1MzU6XHR7XG4gNTM2Olx0XHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXG4gNTM3Olx0XHRcdHJldHVybiBOVUxMO1xuIDUzODpcdFxuIDUzOTpcdFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIGNhbmRpZGF0ZSkpXG4gNTQwOlx0XHRcdHJldHVybiBOVUxMO1xuIDU0MTpcdFxuIDU0MjpcdFx0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbiA1NDM6XHR9XG4gNTQ0Olx0XG4gNTQ1Olx0c3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxuIDU0NjpcdHtcbiA1NDc6XHRcdHU2NCBfX3VzZXIgKm5zX2lkcyA9IGtscy1cdTAwM2V1bnNfaWRzO1xuIDU0ODpcdFx0c2l6ZV90IG5yX25zX2lkcyA9IGtscy1cdTAwM2Vucl9uc19pZHM7XG4gNTQ5Olx0XHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IE5VTEwsICpmaXJzdF9ucyA9IE5VTEwsICpwcmV2ID0gTlVMTDtcbiA1NTA6XHRcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7XG4gNTUxOlx0XHRzc2l6ZV90IHJldDtcbiA1NTI6XHRcbiA1NTM6XHRcdFZGU19XQVJOX09OX09OQ0UoIWtscy1cdTAwM2V1c2VyX25zX2lkKTtcbiA1NTQ6XHRcbiA1NTU6XHRcdGlmIChrbHMtXHUwMDNldXNlcl9uc19pZCA9PSBMSVNUTlNfQ1VSUkVOVF9VU0VSKVxuIDU1NjpcdFx0XHRucyA9IHRvX25zX2NvbW1vbihjdXJyZW50X3VzZXJfbnMoKSk7XG4gNTU3Olx0XHRlbHNlIGlmIChrbHMtXHUwMDNldXNlcl9uc19pZClcbiA1NTg6XHRcdFx0bnMgPSBsb29rdXBfbnNfaWQoa2xzLVx1MDAzZXVzZXJfbnNfaWQsIENMT05FX05FV1VTRVIpO1xuIDU1OTpcdFx0aWYgKCFucylcbiA1NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTYxOlx0XHRrbHMtXHUwMDNldXNlcl9ucyA9IHRvX3VzZXJfbnMobnMpO1xuIDU2MjpcdFxuIDU2MzpcdFx0LypcbiA1NjQ6XHRcdCAqIFVzZSB0aGUgcmJ0cmVlIHRvIGZpbmQgdGhlIGZpcnN0IG5hbWVzcGFjZSB3ZSBjYXJlIGFib3V0IGFuZFxuIDU2NTpcdFx0ICogdGhlbiB1c2UgaXQmIzM5O3MgbGlzdCBlbnRyeSB0byBpdGVyYXRlIGZyb20gdGhlcmUuXG4gNTY2Olx0XHQgKi9cbiA1Njc6XHRcdGlmIChrbHMtXHUwMDNlbGFzdF9uc19pZCkge1xuIDU2ODpcdFx0XHRrbHMtXHUwMDNlZmlyc3RfbnMgPSBsb29rdXBfbnNfb3duZXJfYXQoa2xzLVx1MDAzZWxhc3RfbnNfaWQgJiM0MzsgMSwgbnMpO1xuIDU2OTpcdFx0XHRpZiAoIWtscy1cdTAwM2VmaXJzdF9ucylcbiA1NzA6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA1NzE6XHRcdFx0Zmlyc3RfbnMgPSBrbHMtXHUwMDNlZmlyc3RfbnM7XG4gNTcyOlx0XHR9XG4gNTczOlx0XG4gNTc0Olx0XHRyZXQgPSAwO1xuIDU3NTpcdFx0aGVhZCA9IFx1MDAyNnRvX25zX2NvbW1vbihrbHMtXHUwMDNldXNlcl9ucyktXHUwMDNlbnNfb3duZXJfcm9vdC5uc19saXN0X2hlYWQ7XG4gNTc2Olx0XHRrbHMtXHUwMDNldXNlcm5zX2NhcGFibGUgPSBtYXlfc2VlX2FsbF9uYW1lc3BhY2VzKCk7XG4gNTc3Olx0XG4gNTc4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNTc5Olx0XG4gNTgwOlx0XHRpZiAoIWZpcnN0X25zKVxuIDU4MTpcdFx0XHRmaXJzdF9ucyA9IGxpc3RfZW50cnlfcmN1KGhlYWQtXHUwMDNlbmV4dCwgdHlwZW9mKCpmaXJzdF9ucyksIG5zX293bmVyX25vZGUubnNfbGlzdF9lbnRyeSk7XG4gNTgyOlx0XG4gNTgzOlx0XHRucyA9IGZpcnN0X25zO1xuIDU4NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShucywgaGVhZCwgbnNfb3duZXJfbm9kZS5uc19saXN0X2VudHJ5KSB7XG4gNTg1Olx0XHRcdHN0cnVjdCBuc19jb21tb24gKnZhbGlkO1xuIDU4NjpcdFxuIDU4NzpcdFx0XHRpZiAoIW5yX25zX2lkcylcbiA1ODg6XHRcdFx0XHRicmVhaztcbiA1ODk6XHRcbiA1OTA6XHRcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xuIDU5MTpcdFx0XHRpZiAoIXZhbGlkKVxuIDU5MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDU5MzpcdFxuIDU5NDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1OTU6XHRcbiA1OTY6XHRcdFx0bnNfcHV0KHByZXYpO1xuIDU5NzpcdFx0XHRwcmV2ID0gdmFsaWQ7XG4gNTk4Olx0XG4gNTk5Olx0XHRcdGlmIChwdXRfdXNlcih2YWxpZC1cdTAwM2Vuc19pZCwgbnNfaWRzICYjNDM7IHJldCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjExCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBvdXQgbG91ZCBhcyBJIGludmVzdGlnYXRlOgoKKipBbmFseXppbmcgTmFtZXNwYWNlIFRyZWUgT3BlcmF0aW9ucyBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBuYW1lc3BhY2UgdHJlZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGtlcm5lbC9uc3RyZWUuY2AuIEZpcnN0LCBJIGNvdWxkIGp1c3QgcmVhZCB0aGUgd2hvbGUgZmlsZSB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IHRoYXQmIzM5O3MgYSBiaXQgYnJ1dGUgZm9yY2UuIExldCBtZSB0cnkgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFdoZXJlIGRvZXMgdGhpcyBga2VybmVsL25zdHJlZS5jYCBmaXQgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIHN5c3RlbSBjYWxscyBhbmQgaW50ZXJhY3Rpb25zPyBJIGNhbiBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGNhbGxzIHRvIGBkb19saXN0bnNfdXNlcm5zYCBvciBgbGVnaXRpbWl6ZV9uc2Agd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJZiBJIGNhbiBmaW5kIHRoZXNlLCB0aGF0IHdpbGwgc2hvdyBtZSB3aGVyZSB0aGUgc3lzdGVtIGNhbGxzIG9yIGBpb2N0bGBzIGFyZSB0aGF0IGFyZSBjYWxsaW5nIGludG8gYGtlcm5lbC9uc3RyZWUuY2AuIEkgZXhwZWN0IHRoZXNlIHdvdWxkIGJlIHVzZWQgdG8gbGlzdCwgcXVlcnksIG9yIHBvdGVudGlhbGx5IHZhbGlkYXRlIG5hbWVzcGFjZSBjb25maWd1cmF0aW9ucy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCByaWdodD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsZWdpdGltaXplX25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbnN0cmVlLmM9NTMxPURFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbmtlcm5lbC9uc3RyZWUuYy01MzItXG5rZXJuZWwvbnN0cmVlLmM6NTMzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbmtlcm5lbC9uc3RyZWUuYy01MzQtXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4tLVxua2VybmVsL25zdHJlZS5jPTU0NT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG4tLVxua2VybmVsL25zdHJlZS5jLTU4OS1cbmtlcm5lbC9uc3RyZWUuYzo1OTA6XHRcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcbmtlcm5lbC9uc3RyZWUuYy01OTEtXHRcdGlmICghdmFsaWQpXG4tLVxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNzMxLVxua2VybmVsL25zdHJlZS5jOjczMjpcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xua2VybmVsL25zdHJlZS5jLTczMy1cdFx0aWYgKCF2YWxpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYG5zdHJlZWAgU3lzY2FsbCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBuYW1lc3BhY2Ugb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZHJpbGxpbmcgaW50byBga2VybmVsL25zdHJlZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gY2FsbHMgcmVsYXRlZCB0byBuYW1lc3BhY2UgbWFuaXB1bGF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGEgY2VudHJhbCBmdW5jdGlvbiB0aGF0IGRpc3BhdGNoZXMgYmFzZWQgb24gdGhlIHNwZWNpZmljIG5hbWVzcGFjZSBvcGVyYXRpb24gcmVxdWVzdGVkLCBvciBtYXliZSBhIGRlZGljYXRlZCBzeXN0ZW0gY2FsbCBmb3IgZWFjaC4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24sIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW5kIG9mIGNvdXJzZSwgd2hhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbG9vayBsaWtlIHVuZGVyIHRoZSBob29kLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIG1hbmFnaW5nIHRoZSBuYW1lc3BhY2UgdHJlZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBtb3VudGluZywgdW5tb3VudGluZywgY3JlYXRpbmcsIGFuZCBkZXN0cm95aW5nIG5hbWVzcGFjZXMuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbmFtZXNwYWNlIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdXNlIG9mIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgY29uY3VycmVuY3kgcHJpbWl0aXZlcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUga2VybmVsIGVuZm9yY2VzIHNlY3VyaXR5IHBvbGljaWVzIGFuZCBjYXBhYmlsaXRpZXMgcmVsYXRlZCB0byBuYW1lc3BhY2UgYWNjZXNzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdGVsc2VcbiA3MjE6XHRcdFx0aGVhZCA9IFx1MDAyNm5zX3VuaWZpZWRfcm9vdC5uc19saXN0X2hlYWQ7XG4gNzIyOlx0XG4gNzIzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNzI0Olx0XG4gNzI1Olx0XHRpZiAoIWZpcnN0X25zKVxuIDcyNjpcdFx0XHRmaXJzdF9ucyA9IGZpcnN0X25zX2NvbW1vbihoZWFkLCBuc190cmVlKTtcbiA3Mjc6XHRcbiA3Mjg6XHRcdGZvciAobnMgPSBmaXJzdF9uczsgIW5zX2NvbW1vbl9pc19oZWFkKG5zLCBoZWFkLCBuc190cmVlKSBcdTAwMjZcdTAwMjYgbnJfbnNfaWRzO1xuIDcyOTpcdFx0ICAgICBucyA9IG5leHRfbnNfY29tbW9uKG5zLCBuc190cmVlKSkge1xuIDczMDpcdFx0XHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcbiA3MzE6XHRcbiA3MzI6XHRcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xuIDczMzpcdFx0XHRpZiAoIXZhbGlkKVxuIDczNDpcdFx0XHRcdGNvbnRpbnVlO1xuIDczNTpcdFxuIDczNjpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA3Mzc6XHRcbiA3Mzg6XHRcdFx0bnNfcHV0KHByZXYpO1xuIDczOTpcdFx0XHRwcmV2ID0gdmFsaWQ7XG4gNzQwOlx0XG4gNzQxOlx0XHRcdGlmIChwdXRfdXNlcih2YWxpZC1cdTAwM2Vuc19pZCwgbnNfaWRzICYjNDM7IHJldCkpIHtcbiA3NDI6XHRcdFx0XHRuc19wdXQocHJldik7XG4gNzQzOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzQ0Olx0XHRcdH1cbiA3NDU6XHRcbiA3NDY6XHRcdFx0bnJfbnNfaWRzLS07XG4gNzQ3Olx0XHRcdHJldCYjNDM7JiM0Mzs7XG4gNzQ4Olx0XG4gNzQ5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA3NTA6XHRcdH1cbiA3NTE6XHRcbiA3NTI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDc1MzpcdFx0bnNfcHV0KHByZXYpO1xuIDc1NDpcdFx0cmV0dXJuIHJldDtcbiA3NTU6XHR9XG4gNzU2Olx0XG4gNzU3Olx0U1lTQ0FMTF9ERUZJTkU0KGxpc3RucywgY29uc3Qgc3RydWN0IG5zX2lkX3JlcSBfX3VzZXIgKiwgcmVxLFxuIDc1ODpcdFx0XHR1NjQgX191c2VyICosIG5zX2lkcywgc2l6ZV90LCBucl9uc19pZHMsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4gNzU5Olx0e1xuIDc2MDpcdFx0c3RydWN0IGtsaXN0bnMga2xucyBfX2ZyZWUoa2xpc3Ruc19mcmVlKSA9IHt9O1xuIDc2MTpcdFx0Y29uc3Qgc2l6ZV90IG1heGNvdW50ID0gMTAwMDAwMDtcbiA3NjI6XHRcdHN0cnVjdCBuc19pZF9yZXEga3JlcTtcbiA3NjM6XHRcdHNzaXplX3QgcmV0O1xuIDc2NDpcdFxuIDc2NTpcdFx0aWYgKGZsYWdzKVxuIDc2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3Njc6XHRcbiA3Njg6XHRcdGlmICh1bmxpa2VseShucl9uc19pZHMgXHUwMDNlIG1heGNvdW50KSlcbiA3Njk6XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gNzcwOlx0XG4gNzcxOlx0XHRpZiAoIWFjY2Vzc19vayhuc19pZHMsIG5yX25zX2lkcyAqIHNpemVvZigqbnNfaWRzKSkpXG4gNzcyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc3MzpcdFxuIDc3NDpcdFx0cmV0ID0gY29weV9uc19pZF9yZXEocmVxLCBcdTAwMjZrcmVxKTtcbiA3NzU6XHRcdGlmIChyZXQpXG4gNzc2Olx0XHRcdHJldHVybiByZXQ7XG4gNzc3Olx0XG4gNzc4Olx0XHRyZXQgPSBwcmVwYXJlX2tsaXN0bnMoXHUwMDI2a2xucywgXHUwMDI2a3JlcSwgbnNfaWRzLCBucl9uc19pZHMpO1xuIDc3OTpcdFx0aWYgKHJldClcbiA3ODA6XHRcdFx0cmV0dXJuIHJldDtcbiA3ODE6XHRcbiA3ODI6XHRcdGlmIChrcmVxLnVzZXJfbnNfaWQpXG4gNzgzOlx0XHRcdHJldHVybiBkb19saXN0bnNfdXNlcm5zKFx1MDAyNmtsbnMpO1xuIDc4NDpcdFxuIDc4NTpcdFx0cmV0dXJuIGRvX2xpc3RucyhcdTAwMjZrbG5zKTtcbiA3ODY6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKktlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbjogYGxpc3Ruc2AgYW5kIE5hbWVzcGFjZSBUcmVlcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBsaXN0bnNgIHN5c2NhbGwhIEkgbmVlZCB0byBxdWlja2x5IGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIGxvb2sgYXQgYGtlcm5lbC9uc3RyZWUuY2AsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGF0IGNvZGUgdG8gZXZlbiBiZSBjb21waWxlZCBpbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGhlbHBzIG5hcnJvdyBkb3duIHdoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gYGxpc3Ruc2AuIE5leHQgdXAsIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiB1bmRlcnN0YW5kIGhvdyBgbnN0cmVlLmNgIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYGxpc3Ruc2AgKG9yIHJlbGF0ZWQgY29kZSkgaXMgZGVmaW5lZCBhbmQgYnVpbHQsIHdoaWNoIHdpbGwgYmUgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBpdHMgdXNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc3RyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9NYWtlZmlsZT02PW9iai15ICAgICA9IGZvcmsubyBleGVjX2RvbWFpbi5vIGV4ZWNfc3RhdGUubyBwYW5pYy5vIFxcXG4tLVxua2VybmVsL01ha2VmaWxlLTEwLVx0ICAgIGV4dGFibGUubyBwYXJhbXMubyBcXFxua2VybmVsL01ha2VmaWxlOjExOlx0ICAgIGt0aHJlYWQubyBzeXNfbmkubyBuc3Byb3h5Lm8gbnN0cmVlLm8gbnNjb21tb24ubyBcXFxua2VybmVsL01ha2VmaWxlLTEyLVx0ICAgIG5vdGlmaWVyLm8ga3N5c2ZzLm8gY3JlZC5vIHJlYm9vdC5vIFxcXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzo1OTojaW5jbHVkZSBcdTAwM2NsaW51eC9uc3RyZWUuaFx1MDAzZVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4tLVxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvY2dyb3VwL25hbWVzcGFjZS5jLTktXG4tLVxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYz0zNj12b2lkIGZyZWVfY2dyb3VwX25zKHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICpucylcbi0tXG5rZXJuZWwvY2dyb3VwL25hbWVzcGFjZS5jLTQyLVx0bnNfY29tbW9uX2ZyZWUobnMpO1xua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYzo0MzpcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy00NC1cdGtmcmVlX3JjdShucywgbnMubnNfcmN1KTtcbi0tXG5rZXJuZWwvbnNjb21tb24uYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L25zX2NvbW1vbi5oXHUwMDNlXG5rZXJuZWwvbnNjb21tb24uYzo1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvbnNjb21tb24uYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxuLS1cbmtlcm5lbC9uc3Byb3h5LmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG5rZXJuZWwvbnNwcm94eS5jOjMwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvbnNwcm94eS5jLTMxLVxuLS1cbmtlcm5lbC9uc3RyZWUuYy0zLVxua2VybmVsL25zdHJlZS5jOjQ6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC9uc3RyZWUuYy01LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxuLS1cbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMjUtI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2Vcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmM6MjY6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMjctI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC93YWl0LmhcdTAwM2Vcbi0tXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWUuaFx1MDAzZVxuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jPTE0NT12b2lkIGZyZWVfdGltZV9ucyhzdHJ1Y3QgdGltZV9uYW1lc3BhY2UgKm5zKVxuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE1MS1cdHRpbWVuc192ZHNvX2ZyZWVfdnZhcl9wYWdlKG5zKTtcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jOjE1MjpcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xua2VybmVsL3RpbWUvbmFtZXNwYWNlLmMtMTUzLVx0a2ZyZWVfcmN1KG5zLCBucy5uc19yY3UpO1xuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MjQ6I2luY2x1ZGUgXHUwMDNjbGludXgvbnN0cmVlLmhcdTAwM2Vcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI1LVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTE5ND1zdGF0aWMgdm9pZCBmcmVlX3VzZXJfbnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIyMC1cdFx0bnNfY29tbW9uX2ZyZWUobnMpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MjIxOlx0XHQvKiBDb25jdXJyZW50IG5zdHJlZSB0cmF2ZXJzYWwgZGVwZW5kcyBvbiBhIGdyYWNlIHBlcmlvZC4gKi9cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIyMi1cdFx0a2ZyZWVfcmN1KG5zLCBucy5uc19yY3UpO1xuLS1cbmtlcm5lbC91dHNuYW1lLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19ucy5oXHUwMDNlXG5rZXJuZWwvdXRzbmFtZS5jOjE2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25zdHJlZS5oXHUwMDNlXG5rZXJuZWwvdXRzbmFtZS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuLS1cbmtlcm5lbC91dHNuYW1lLmM9OTY9dm9pZCBmcmVlX3V0c19ucyhzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqbnMpXG4tLVxua2VybmVsL3V0c25hbWUuYy0xMDEtXHRuc19jb21tb25fZnJlZShucyk7XG5rZXJuZWwvdXRzbmFtZS5jOjEwMjpcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xua2VybmVsL3V0c25hbWUuYy0xMDMtXHRrZnJlZV9yY3UobnMsIG5zLm5zX3JjdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlIGJlaGF2aW9yIG9mIGBrZXJuZWwvbnN0cmVlLmNgIG9yIHRoZSBgc3lzX2xpc3Ruc2Agc3lzdGVtIGNhbGwgaXMgc29tZWhvdyBjb25kaXRpb25hbCwgZ292ZXJuZWQgYnkgYSBzcGVjaWZpYyBjb25maWcgb3B0aW9uLiBJdCYjMzk7cyBhbHdheXMgYmVzdCB0byBydWxlIG91dCBhbnkgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGJlZm9yZSBnb2luZyBkb3duIGEgbW9yZSBjb21wbGV4IGRlYnVnZ2luZyBwYXRoLiBMZXQmIzM5O3Mgc2VlIGlmIGFueSBjb21waWxlLXRpbWUgZmxhZ3MgYXJlIGluIHBsYXkgaGVyZS4gVG8gZG8gdGhhdCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyBga2VybmVsL25zdHJlZS5jYCBmcm9tIHRoZSB2ZXJ5IHRvcC4gSSYjMzk7bGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAyNSBDaHJpc3RpYW4gQnJhdW5lciBcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcdTAwM2UgKi9cbiAgIDM6XHRcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3RyZWUuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Zmc2RlYnVnLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuICAxMDpcdFxuICAxMTpcdHN0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU0VRTE9DSyhuc190cmVlX2xvY2spO1xuICAxMjpcdFxuICAxMzpcdERFRklORV9MT0NLX0dVQVJEXzAobnNfdHJlZV93cml0ZXIsXG4gIDE0Olx0XHRcdCAgICB3cml0ZV9zZXFsb2NrKFx1MDAyNm5zX3RyZWVfbG9jayksXG4gIDE1Olx0XHRcdCAgICB3cml0ZV9zZXF1bmxvY2soXHUwMDI2bnNfdHJlZV9sb2NrKSlcbiAgMTY6XHRcbiAgMTc6XHRERUZJTkVfTE9DS19HVUFSRF8wKG5zX3RyZWVfbG9ja2VkX3JlYWRlcixcbiAgMTg6XHRcdFx0ICAgIHJlYWRfc2VxbG9ja19leGNsKFx1MDAyNm5zX3RyZWVfbG9jayksXG4gIDE5Olx0XHRcdCAgICByZWFkX3NlcXVubG9ja19leGNsKFx1MDAyNm5zX3RyZWVfbG9jaykpXG4gIDIwOlx0XG4gIDIxOlx0c3RhdGljIHN0cnVjdCBuc190cmVlX3Jvb3QgbnNfdW5pZmllZF9yb290ID0geyAvKiBwcm90ZWN0ZWQgYnkgbnNfdHJlZV9sb2NrICovXG4gIDIyOlx0XHQubnNfcmIgPSBSQl9ST09ULFxuICAyMzpcdFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5zX3VuaWZpZWRfcm9vdC5uc19saXN0X2hlYWQpLFxuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RydWN0IG5zX3RyZWVfcm9vdCBtbnRfbnNfdHJlZSA9IHtcbiAgMjc6XHRcdC5uc19yYiA9IFJCX1JPT1QsXG4gIDI4Olx0XHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQobW50X25zX3RyZWUubnNfbGlzdF9oZWFkKSxcbiAgMjk6XHR9O1xuICAzMDpcdFxuICAzMTpcdHN0cnVjdCBuc190cmVlX3Jvb3QgbmV0X25zX3RyZWUgPSB7XG4gIDMyOlx0XHQubnNfcmIgPSBSQl9ST09ULFxuICAzMzpcdFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5ldF9uc190cmVlLm5zX2xpc3RfaGVhZCksXG4gIDM0Olx0fTtcbiAgMzU6XHRFWFBPUlRfU1lNQk9MX0dQTChuZXRfbnNfdHJlZSk7XG4gIDM2Olx0XG4gIDM3Olx0c3RydWN0IG5zX3RyZWVfcm9vdCB1dHNfbnNfdHJlZSA9IHtcbiAgMzg6XHRcdC5uc19yYiA9IFJCX1JPT1QsXG4gIDM5Olx0XHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQodXRzX25zX3RyZWUubnNfbGlzdF9oZWFkKSxcbiAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdHN0cnVjdCBuc190cmVlX3Jvb3QgdXNlcl9uc190cmVlID0ge1xuICA0MzpcdFx0Lm5zX3JiID0gUkJfUk9PVCxcbiAgNDQ6XHRcdC5uc19saXN0X2hlYWQgPSBMSVNUX0hFQURfSU5JVCh1c2VyX25zX3RyZWUubnNfbGlzdF9oZWFkKSxcbiAgNDU6XHR9O1xuICA0NjpcdFxuICA0NzpcdHN0cnVjdCBuc190cmVlX3Jvb3QgaXBjX25zX3RyZWUgPSB7XG4gIDQ4Olx0XHQubnNfcmIgPSBSQl9ST09ULFxuICA0OTpcdFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKGlwY19uc190cmVlLm5zX2xpc3RfaGVhZCksXG4gIDUwOlx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsJiMzOTtzIE5hbWVzcGFjZSBUcmVlIENvZGUqKgoKT2theSwgc28gSSBzZWUgdGhhdCBga2VybmVsL25zdHJlZS5jYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIGBvYmoteWAgd2l0aGluIHRoZSBga2VybmVsL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbWF5X2xpc3RfbnNgIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBuYW1lc3BhY2UgbGlzdGluZyBsb2dpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBjb3JlIGJlaGF2aW9yIGFuZCBzZWN1cml0eSBwb3N0dXJlIG9mIHRoZSBuYW1lc3BhY2Ugc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGBtYXlfbGlzdF9uc2AgaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgaW1wYWN0LCBhcyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgbmFtZXNwYWNlIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcdFx0XHRyZXQgPSBucztcbiA0ODE6XHRcdFx0XHRpZiAobnNfaWQgPT0gbnMtXHUwMDNlbnNfaWQpXG4gNDgyOlx0XHRcdFx0XHRicmVhaztcbiA0ODM6XHRcdFx0XHRub2RlID0gbm9kZS1cdTAwM2VyYl9sZWZ0O1xuIDQ4NDpcdFx0XHR9IGVsc2Uge1xuIDQ4NTpcdFx0XHRcdG5vZGUgPSBub2RlLVx1MDAzZXJiX3JpZ2h0O1xuIDQ4NjpcdFx0XHR9XG4gNDg3Olx0XHR9XG4gNDg4Olx0XG4gNDg5Olx0XHRpZiAocmV0KVxuIDQ5MDpcdFx0XHRyZXQgPSBuc19nZXRfdW5sZXNzX2luYWN0aXZlKHJldCk7XG4gNDkxOlx0XHRyZXR1cm4gcmV0O1xuIDQ5MjpcdH1cbiA0OTM6XHRcbiA0OTQ6XHRzdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbG9va3VwX25zX2lkKHU2NCBtbnRfbnNfaWQsIGludCBuc190eXBlKVxuIDQ5NTpcdHtcbiA0OTY6XHRcdHN0cnVjdCBuc19jb21tb24gKm5zO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0Z3VhcmQocmN1KSgpO1xuIDQ5OTpcdFx0bnMgPSBuc190cmVlX2xvb2t1cF9yY3UobW50X25zX2lkLCBuc190eXBlKTtcbiA1MDA6XHRcdGlmICghbnMpXG4gNTAxOlx0XHRcdHJldHVybiBOVUxMO1xuIDUwMjpcdFxuIDUwMzpcdFx0aWYgKCFuc19nZXRfdW5sZXNzX2luYWN0aXZlKG5zKSlcbiA1MDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTA1Olx0XG4gNTA2Olx0XHRyZXR1cm4gbnM7XG4gNTA3Olx0fVxuIDUwODpcdFxuIDUwOTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbnNfcmVxdWVzdGVkKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gNTEwOlx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4gNTExOlx0e1xuIDUxMjpcdFx0cmV0dXJuICFrbHMtXHUwMDNlbnNfdHlwZSB8fCAoa2xzLVx1MDAzZW5zX3R5cGUgXHUwMDI2IG5zLVx1MDAzZW5zX3R5cGUpO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiA1MTU6XHRzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIG1heV9saXN0X25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gNTE2Olx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1MTc6XHR7XG4gNTE4Olx0XHRpZiAoa2xzLVx1MDAzZXVzZXJfbnMgXHUwMDI2XHUwMDI2IGtscy1cdTAwM2V1c2VybnNfY2FwYWJsZSlcbiA1MTk6XHRcdFx0cmV0dXJuIHRydWU7XG4gNTIwOlx0XHRpZiAoaXNfY3VycmVudF9uYW1lc3BhY2UobnMpKVxuIDUyMTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1MjI6XHRcdHJldHVybiBtYXlfc2VlX2FsbF9uYW1lc3BhY2VzKCk7XG4gNTIzOlx0fVxuIDUyNDpcdFxuIDUyNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuc19wdXQoc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4gNTI2Olx0e1xuIDUyNzpcdFx0aWYgKG5zIFx1MDAyNlx1MDAyNiBucy1cdTAwM2VvcHMpXG4gNTI4Olx0XHRcdG5zLVx1MDAzZW9wcy1cdTAwM2VwdXQobnMpO1xuIDUyOTpcdH1cbiA1MzA6XHRcbiA1MzE6XHRERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXG4gNTMyOlx0XG4gNTMzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbnNfY29tbW9uICpfX211c3RfY2hlY2sgbGVnaXRpbWl6ZV9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxuIDUzNDpcdFx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxlZ2l0aW1pemVfbnNgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBsZWdpdGltaXplX25zYCBmdW5jdGlvbiwgZGVmaW5lZCBpbmxpbmUsIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBQcmV2aW91c2x5LCB0aGUgY29kZSBmZXRjaGVkIGEgbmFtZXNwYWNlIHJlZmVyZW5jZSB3aXRoIGBuc19nZXRfdW5sZXNzX2luYWN0aXZlKClgLCAqdGhlbiogY2hlY2tlZCBgbWF5X2xpc3RfbnMoKWAuIE5vdywgaXQmIzM5O3MgY2hlY2tpbmcgYG1heV9saXN0X25zKClgICpiZWZvcmUqIGFjcXVpcmluZyB0aGUgcmVmZXJlbmNlLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQuCgpJIHNlZSB0aGF0IGBsZWdpdGltaXplX25zYCBpcyBjYWxsZWQgYnkgYGRvX2xpc3Ruc191c2VybnNgLCBgZG9fbGlzdG5zYCwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN5c19saXN0bnNgIHN5c2NhbGwuIFRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KCk5vdywgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29udGV4dC4gIGBsZWdpdGltaXplX25zYCBpcyBpbmxpbmVkLCB3aGljaCBtZWFucyBpdCBnZXRzIGV4cGFuZGVkIHdoZXJlIGl0JiMzOTtzIGNhbGxlZC4gU28sIHRoZSBjYWxsZXJzIGFyZSBrZXk6IGBkb19saXN0bnNfdXNlcm5zYCBhbmQgYGRvX2xpc3Ruc2AuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgbm9uLXN0YXRpYywgb3IgaWYgb3RoZXIgc3ltYm9scyBleGlzdC4gTG9va3MgbGlrZSBib3RoIGFyZSBzdGF0aWMsIGFuZCB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCBpcyB1bHRpbWF0ZWx5IGBfX2RvX3N5c19saXN0bnNgLCBgX19zZV9zeXNfbGlzdG5zYCBvciBgc3lzX2xpc3Ruc2AuIEdpdmVuIHRoZSBjaGFuZ2UgSSYjMzk7dmUgbm90ZWQgaW4gdGhlIHJlZmNvdW50aW5nLCB0aGlzIHNlZW1zIGxpa2UgaXQgY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSB1bmRlciBjb25jdXJyZW50IGFjY2VzcyBvciBwb3RlbnRpYWxseSB3aXRoIHJhY2UgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgc3ltYm9scyBpbiB0aGF0IGZpbGUgdGhhdCBhcmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhsaXN0bnN8ZG9fbGlzdG5zfGxlZ2l0aW1pemVfbnMpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL25zdHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9uc3RyZWUuYz0zOTI9dTY0IF9fbnNfdHJlZV9nZW5faWQoc3RydWN0IG5zX2NvbW1vbiAqbnMsIHU2NCBpZClcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNDAyLVxua2VybmVsL25zdHJlZS5jOjQwMzpzdHJ1Y3Qga2xpc3RucyB7XG5rZXJuZWwvbnN0cmVlLmMtNDA0LVx0dTY0IF9fdXNlciAqdW5zX2lkcztcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNDEzLVxua2VybmVsL25zdHJlZS5jOjQxNDpzdGF0aWMgdm9pZCBfX2ZyZWVfa2xpc3Ruc19mcmVlKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMpXG5rZXJuZWwvbnN0cmVlLmMtNDE1LXtcbi0tXG5rZXJuZWwvbnN0cmVlLmM9NDI0PXN0YXRpYyBpbnQgY29weV9uc19pZF9yZXEoY29uc3Qgc3RydWN0IG5zX2lkX3JlcSBfX3VzZXIgKnJlcSxcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNDQ5LVxua2VybmVsL25zdHJlZS5jOjQ1MDpzdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2tsaXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscywgc3RydWN0IG5zX2lkX3JlcSAqa3JlcSxcbmtlcm5lbC9uc3RyZWUuYy00NTEtXHRcdFx0XHQgIHU2NCBfX3VzZXIgKm5zX2lkcywgc2l6ZV90IG5yX25zX2lkcylcbi0tXG5rZXJuZWwvbnN0cmVlLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgbnNfY29tbW9uICpsb29rdXBfbnNfaWQodTY0IG1udF9uc19pZCwgaW50IG5zX3R5cGUpXG4tLVxua2VybmVsL25zdHJlZS5jLTUwOC1cbmtlcm5lbC9uc3RyZWUuYzo1MDk6c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBuc19yZXF1ZXN0ZWQoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbmtlcm5lbC9uc3RyZWUuYy01MTAtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4tLVxua2VybmVsL25zdHJlZS5jLTUxNC1cbmtlcm5lbC9uc3RyZWUuYzo1MTU6c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBtYXlfbGlzdF9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxua2VybmVsL25zdHJlZS5jLTUxNi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbmtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxua2VybmVsL25zdHJlZS5jLTUzMi1cbmtlcm5lbC9uc3RyZWUuYzo1MzM6c3RhdGljIGlubGluZSBzdHJ1Y3QgbnNfY29tbW9uICpfX211c3RfY2hlY2sgbGVnaXRpbWl6ZV9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxua2VybmVsL25zdHJlZS5jLTUzNC1cdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNTQ0LVxua2VybmVsL25zdHJlZS5jOjU0NTpzdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG5rZXJuZWwvbnN0cmVlLmMtNTQ2LXtcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNTg5LVxua2VybmVsL25zdHJlZS5jOjU5MDpcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xua2VybmVsL25zdHJlZS5jLTU5MS1cdFx0aWYgKCF2YWxpZClcbi0tXG5rZXJuZWwvbnN0cmVlLmM9NjgwPXN0YXRpYyBpbmxpbmUgYm9vbCBuc19jb21tb25faXNfaGVhZChzdHJ1Y3QgbnNfY29tbW9uICpucyxcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNjg4LVxua2VybmVsL25zdHJlZS5jOjY4OTpzdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcbmtlcm5lbC9uc3RyZWUuYy02OTAte1xuLS1cbmtlcm5lbC9uc3RyZWUuYy03MzEtXG5rZXJuZWwvbnN0cmVlLmM6NzMyOlx0XHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XG5rZXJuZWwvbnN0cmVlLmMtNzMzLVx0XHRpZiAoIXZhbGlkKVxuLS1cbmtlcm5lbC9uc3RyZWUuYy03NTYtXG5rZXJuZWwvbnN0cmVlLmM6NzU3OlNZU0NBTExfREVGSU5FNChsaXN0bnMsIGNvbnN0IHN0cnVjdCBuc19pZF9yZXEgX191c2VyICosIHJlcSxcbmtlcm5lbC9uc3RyZWUuYy03NTgtXHRcdHU2NCBfX3VzZXIgKiwgbnNfaWRzLCBzaXplX3QsIG5yX25zX2lkcywgdW5zaWduZWQgaW50LCBmbGFncylcbmtlcm5lbC9uc3RyZWUuYy03NTkte1xua2VybmVsL25zdHJlZS5jOjc2MDpcdHN0cnVjdCBrbGlzdG5zIGtsbnMgX19mcmVlKGtsaXN0bnNfZnJlZSkgPSB7fTtcbmtlcm5lbC9uc3RyZWUuYy03NjEtXHRjb25zdCBzaXplX3QgbWF4Y291bnQgPSAxMDAwMDAwO1xuLS1cbmtlcm5lbC9uc3RyZWUuYy03NzctXG5rZXJuZWwvbnN0cmVlLmM6Nzc4Olx0cmV0ID0gcHJlcGFyZV9rbGlzdG5zKFx1MDAyNmtsbnMsIFx1MDAyNmtyZXEsIG5zX2lkcywgbnJfbnNfaWRzKTtcbmtlcm5lbC9uc3RyZWUuYy03NzktXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9uc3RyZWUuYy03ODItXHRpZiAoa3JlcS51c2VyX25zX2lkKVxua2VybmVsL25zdHJlZS5jOjc4MzpcdFx0cmV0dXJuIGRvX2xpc3Ruc191c2VybnMoXHUwMDI2a2xucyk7XG5rZXJuZWwvbnN0cmVlLmMtNzg0LVxua2VybmVsL25zdHJlZS5jOjc4NTpcdHJldHVybiBkb19saXN0bnMoXHUwMDI2a2xucyk7XG5rZXJuZWwvbnN0cmVlLmMtNzg2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnN0cmVlLmNgIGNvZGUgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7RG8gSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWZvcmUgSSBldmVuIHN0YXJ0PyYjMzQ7IFNlZW1zIGxpa2UgZ29vZCBwcmFjdGljZSB0byBjaGVjayBpZiB0aGUgYnVpbGQgcHJvY2VzcyBjb25kaXRpb25hbGx5IGNvbXBpbGVzIHRoaXMgZmlsZS4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBga2VybmVsL01ha2VmaWxlYC4gTGV0IG1lIGp1c3QgdmVyaWZ54oCmIEFoLCB0aGVyZSBpdCBpcyEgYG5zdHJlZS5vYCBpcyByaWdodCB0aGVyZSB1bmRlciBgb2JqLXlgLiBTbyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBjb2RlLiBUaGF0IG1lYW5zIGl04oCZcyBhbHdheXMgYnVpbHQgaW4sIGFuZCBJIHNob3VsZG4mIzM5O3QgaGF2ZSB0byBmaWRkbGUgd2l0aCBhbnkgZXh0ZXJuYWwgY29uZmlncyB0byBldmVuIHN0YXJ0IGFuYWx5emluZyBpdC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGdsYW5jZSBhdCBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIG51YW5jZSB0byB0aGlzLiBJdCYjMzk7cyByYXJlIGZvciB0aGVzZSBiYXNpYyBuYW1lc3BhY2VzIGxpa2UgYFVTRVJfTlNgIGFuZCBgTkFNRVNQQUNFU2AgdG8gYmUgYW55dGhpbmcgKmJ1dCogYnVpbHQtaW4sIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IGdvdGNoYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOQU1FU1BBQ0VTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXG5pbml0L0tjb25maWctMTQwOC1cbmluaXQvS2NvbmZpZzoxNDA5Om1lbnVjb25maWcgTkFNRVNQQUNFU1xuaW5pdC9LY29uZmlnLTE0MTAtXHRib29sIFwmIzM0O05hbWVzcGFjZXMgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTEKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgTkFNRVNQQUNFU2AgYW5kIGBVU0VSX05TYCBqdW1wIG91dCBhdCBtZSBhcyByZWxldmFudCBjb25maWd1cmF0aW9ucywgZXZlbiB0aG91Z2ggYG5zdHJlZS5jYCBpcyBpbiBgb2JqLXlgLiBJdCYjMzk7cyBhbHdheXMgYSBzb2xpZCBwcmFjdGljZSB0byBlbnN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgaWYgYW55dGhpbmcgaGVyZSBldmVuICp0b3VjaGVzKiBuYW1lc3BhY2VzLCB3aGljaCBpdCBsb29rcyBsaWtlIGl0IGRvZXMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIGlzIGxpa2VseSBhZmZlY3RpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gYF9fZG9fc3lzX2xpc3Ruc2AsIGBkb19saXN0bnNgLCBgZG9fbGlzdG5zX3VzZXJuc2AsIGFuZCBgbGVnaXRpbWl6ZV9uc2AuIFRob3NlIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIGFjdGlvbiBpcy4KCkkgY29uZmlybWVkIGJ5IGNoZWNraW5nIHRoZSBkaWZmIHRoYXQgYGtlcm5lbC9uc3RyZWUuY2AgaXMgdGhlICpvbmx5KiBmaWxlIHRvdWNoZWQsIHdoaWNoIG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgYW5kIHZhbGlkYXRlcyB0aGUgYWJvdmUgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBhc3NlbWJsZSB0aGUga2V5IGZpbmRpbmdzLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGxlZ2l0aW1pemVfbnMoKWAgd2l0aGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBvcmRlciBvZiBob3cgd2UgY2hlY2sgbmFtZXNwYWNlIGFjY2Vzc2liaWxpdHkgKGBtYXlfbGlzdF9uc2ApIGFnYWluc3QgZ2V0dGluZyB0aGUgbmFtZXNwYWNlIHJlZmVyZW5jZSAoYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgKSB3aGlsZSBpdGVyYXRpbmcgaW4gYGxpc3Ruc2AuCgpUaGlzIGNoYW5nZSAqZGlyZWN0bHkqIGltcGFjdHMgY29yZSBuYW1lc3BhY2UgaW5zcGVjdGlvbiBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwg4oCTIHNwZWNpZmljYWxseSBgZG9fbGlzdG5zYCBhbmQgYGRvX2xpc3Ruc191c2VybnNgLiBUaGUgYWNjZXNzIG9yZGVyIGNoYW5nZSBpcyBjcml0aWNhbC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgZnV6ei13b3J0aHkuIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkFNRVNQQUNFUyYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kb19zeXNfbGlzdG5zJiMzNDssCiAgICAmIzM0O2RvX2xpc3RucyYjMzQ7LAogICAgJiMzNDtkb19saXN0bnNfdXNlcm5zJiMzNDssCiAgICAmIzM0O2xlZ2l0aW1pemVfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGVnaXRpbWl6ZV9ucygpIGluIGtlcm5lbC9uc3RyZWUuYywgcmVvcmRlcmluZyBwZXJtaXNzaW9uIGNoZWNrcyAobWF5X2xpc3RfbnMpIHByaW9yIHRvIGF0dGVtcHRpbmcgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIChuc19nZXRfdW5sZXNzX2luYWN0aXZlKSBkdXJpbmcgbmFtZXNwYWNlIGl0ZXJhdGlvbi4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gY29yZSBuYW1lc3BhY2UgaGFuZGxpbmcgYWNjZXNzaWJsZSB2aWEgdGhlIGxpc3RucyBzeXNjYWxsIChkb19saXN0bnMgYW5kIGRvX2xpc3Ruc191c2VybnMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RvX3N5c19saXN0bnMmIzM0OywKICAgICYjMzQ7ZG9fbGlzdG5zJiMzNDssCiAgICAmIzM0O2RvX2xpc3Ruc191c2VybnMmIzM0OywKICAgICYjMzQ7bGVnaXRpbWl6ZV9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsZWdpdGltaXplX25zKCkgaW4ga2VybmVsL25zdHJlZS5jLCByZW9yZGVyaW5nIHBlcm1pc3Npb24gY2hlY2tzIChtYXlfbGlzdF9ucykgcHJpb3IgdG8gYXR0ZW1wdGluZyByZWZlcmVuY2UgYWNxdWlzaXRpb24gKG5zX2dldF91bmxlc3NfaW5hY3RpdmUpIGR1cmluZyBuYW1lc3BhY2UgaXRlcmF0aW9uLiBUaGlzIGNoYW5nZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiBjb3JlIG5hbWVzcGFjZSBoYW5kbGluZyBhY2Nlc3NpYmxlIHZpYSB0aGUgbGlzdG5zIHN5c2NhbGwgKGRvX2xpc3RucyBhbmQgZG9fbGlzdG5zX3VzZXJucykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbGVnaXRpbWl6ZV9ucygpYCBpbiBga2VybmVsL25zdHJlZS5jYCB0byBwZXJmb3JtIHRoZSBgbWF5X2xpc3RfbnMoKWAgcGVybWlzc2lvbiBjaGVjayBvbiB0aGUgY2FuZGlkYXRlIG5hbWVzcGFjZSBwcmlvciB0byBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdmlhIGBuc19nZXRfdW5sZXNzX2luYWN0aXZlKClgLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSByZWZlcmVuY2UgYWNxdWlzaXRpb24gYW5kIGNsZWFudXAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXHUwMDNlbnNfdHlwZWAsIGBjYW5kaWRhdGUtXHUwMDNlbnNfaWRgLCBldGMuKSBiZWxvbmcgdG8gaW5pdGlhbGl6ZWQgbmFtZXNwYWNlIHN0cnVjdHVyZXMgaW4gdGhlIG5hbWVzcGFjZSB0cmVlLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyByZWxhdGVkIHRvIGRlcmVmZXJlbmNpbmcgYGNhbmRpZGF0ZWAgdW5kZXIgUkNVIHByaW9yIHRvIHRha2luZyBhIHJlZmVyZW5jZSB3b3VsZCBiZSBvYmplY3QgbGlmZXRpbWUvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jCmluZGV4IDZkMTJlNTkwMGFjMDEuLjgzMWYyNzlkMTc0YTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9uc3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbnN0cmVlLmMKQEAgLTUzMywxOSAmIzQzOzUzMywxMyBAQCBERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsCiAJCQkJCQkJICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKQogewotCXN0cnVjdCBuc19jb21tb24gKm5zIF9fZnJlZShuc19wdXQpID0gTlVMTDsKLQogCWlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlucyA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghbWF5X2xpc3RfbnMoa2xzLCBucykpCiYjNDM7CWlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBub19mcmVlX3B0cihucyk7CiYjNDM7CXJldHVybiBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBgbnN0cmVlLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjaGFuZ2VzLiBGaXJzdCwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgcGF0Y2ggaXRzZWxmIOKAkyB3aGF0IG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHByb3Bvc2VkPyBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBleGFtaW5lIHRoZSByZWxldmFudCBjb2RlIHN1cnJvdW5kaW5nIHRoZSBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL25zdHJlZS5jYC4gSSYjMzk7bGwgd2FudCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGUgZXhpc3RpbmcgY29kZSBhcm91bmQgdGhlIHNlY3Rpb24gdGhhdCYjMzk7cyBiZWVuIHRvdWNoZWQsIGxpa2VseSBuZWFyIGxpbmUgNTMzLiBJJiMzOTtsbCBwcm9iYWJseSBncmFiIGl0IHVzaW5nIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9yIHBlcmhhcHMgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIGZpbmQgaXQgcXVpY2tseSB3aXRoIHNvbWUgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcyYjMzk7IGltcGxpY2F0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBhZGphY2VudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9uc3RyZWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0aWYgKCFucylcbiA1MDE6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTAyOlx0XG4gNTAzOlx0XHRpZiAoIW5zX2dldF91bmxlc3NfaW5hY3RpdmUobnMpKVxuIDUwNDpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1MDU6XHRcbiA1MDY6XHRcdHJldHVybiBucztcbiA1MDc6XHR9XG4gNTA4Olx0XG4gNTA5Olx0c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBuc19yZXF1ZXN0ZWQoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiA1MTA6XHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1MTE6XHR7XG4gNTEyOlx0XHRyZXR1cm4gIWtscy1cdTAwM2Vuc190eXBlIHx8IChrbHMtXHUwMDNlbnNfdHlwZSBcdTAwMjYgbnMtXHUwMDNlbnNfdHlwZSk7XG4gNTEzOlx0fVxuIDUxNDpcdFxuIDUxNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbWF5X2xpc3RfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiA1MTY6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuc19jb21tb24gKm5zKVxuIDUxNzpcdHtcbiA1MTg6XHRcdGlmIChrbHMtXHUwMDNldXNlcl9ucyBcdTAwMjZcdTAwMjYga2xzLVx1MDAzZXVzZXJuc19jYXBhYmxlKVxuIDUxOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1MjA6XHRcdGlmIChpc19jdXJyZW50X25hbWVzcGFjZShucykpXG4gNTIxOlx0XHRcdHJldHVybiB0cnVlO1xuIDUyMjpcdFx0cmV0dXJuIG1heV9zZWVfYWxsX25hbWVzcGFjZXMoKTtcbiA1MjM6XHR9XG4gNTI0Olx0XG4gNTI1Olx0c3RhdGljIGlubGluZSB2b2lkIG5zX3B1dChzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1MjY6XHR7XG4gNTI3Olx0XHRpZiAobnMgXHUwMDI2XHUwMDI2IG5zLVx1MDAzZW9wcylcbiA1Mjg6XHRcdFx0bnMtXHUwMDNlb3BzLVx1MDAzZXB1dChucyk7XG4gNTI5Olx0fVxuIDUzMDpcdFxuIDUzMTpcdERFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbiA1MzI6XHRcbiA1MzM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4gNTM0Olx0XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4gNTM1Olx0e1xuIDUzNjpcdFx0aWYgKCFuc19yZXF1ZXN0ZWQoa2xzLCBjYW5kaWRhdGUpKVxuIDUzNzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1Mzg6XHRcbiA1Mzk6XHRcdGlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKVxuIDU0MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1NDE6XHRcbiA1NDI6XHRcdHJldHVybiBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7XG4gNTQzOlx0fVxuIDU0NDpcdFxuIDU0NTpcdHN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscylcbiA1NDY6XHR7XG4gNTQ3Olx0XHR1NjQgX191c2VyICpuc19pZHMgPSBrbHMtXHUwMDNldW5zX2lkcztcbiA1NDg6XHRcdHNpemVfdCBucl9uc19pZHMgPSBrbHMtXHUwMDNlbnJfbnNfaWRzO1xuIDU0OTpcdFx0c3RydWN0IG5zX2NvbW1vbiAqbnMgPSBOVUxMLCAqZmlyc3RfbnMgPSBOVUxMLCAqcHJldiA9IE5VTEw7XG4gNTUwOlx0XHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkO1xuIDU1MTpcdFx0c3NpemVfdCByZXQ7XG4gNTUyOlx0XG4gNTUzOlx0XHRWRlNfV0FSTl9PTl9PTkNFKCFrbHMtXHUwMDNldXNlcl9uc19pZCk7XG4gNTU0Olx0XG4gNTU1Olx0XHRpZiAoa2xzLVx1MDAzZXVzZXJfbnNfaWQgPT0gTElTVE5TX0NVUlJFTlRfVVNFUilcbiA1NTY6XHRcdFx0bnMgPSB0b19uc19jb21tb24oY3VycmVudF91c2VyX25zKCkpO1xuIDU1NzpcdFx0ZWxzZSBpZiAoa2xzLVx1MDAzZXVzZXJfbnNfaWQpXG4gNTU4Olx0XHRcdG5zID0gbG9va3VwX25zX2lkKGtscy1cdTAwM2V1c2VyX25zX2lkLCBDTE9ORV9ORVdVU0VSKTtcbiA1NTk6XHRcdGlmICghbnMpXG4gNTYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU2MTpcdFx0a2xzLVx1MDAzZXVzZXJfbnMgPSB0b191c2VyX25zKG5zKTtcbiA1NjI6XHRcbiA1NjM6XHRcdC8qXG4gNTY0Olx0XHQgKiBVc2UgdGhlIHJidHJlZSB0byBmaW5kIHRoZSBmaXJzdCBuYW1lc3BhY2Ugd2UgY2FyZSBhYm91dCBhbmRcbiA1NjU6XHRcdCAqIHRoZW4gdXNlIGl0JiMzOTtzIGxpc3QgZW50cnkgdG8gaXRlcmF0ZSBmcm9tIHRoZXJlLlxuIDU2NjpcdFx0ICovXG4gNTY3Olx0XHRpZiAoa2xzLVx1MDAzZWxhc3RfbnNfaWQpIHtcbiA1Njg6XHRcdFx0a2xzLVx1MDAzZWZpcnN0X25zID0gbG9va3VwX25zX293bmVyX2F0KGtscy1cdTAwM2VsYXN0X25zX2lkICYjNDM7IDEsIG5zKTtcbiA1Njk6XHRcdFx0aWYgKCFrbHMtXHUwMDNlZmlyc3RfbnMpXG4gNTcwOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gNTcxOlx0XHRcdGZpcnN0X25zID0ga2xzLVx1MDAzZWZpcnN0X25zO1xuIDU3MjpcdFx0fVxuIDU3MzpcdFxuIDU3NDpcdFx0cmV0ID0gMDtcbiA1NzU6XHRcdGhlYWQgPSBcdTAwMjZ0b19uc19jb21tb24oa2xzLVx1MDAzZXVzZXJfbnMpLVx1MDAzZW5zX293bmVyX3Jvb3QubnNfbGlzdF9oZWFkO1xuIDU3NjpcdFx0a2xzLVx1MDAzZXVzZXJuc19jYXBhYmxlID0gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xuIDU3NzpcdFxuIDU3ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDU3OTpcdFxuIDU4MDpcdFx0aWYgKCFmaXJzdF9ucylcbiA1ODE6XHRcdFx0Zmlyc3RfbnMgPSBsaXN0X2VudHJ5X3JjdShoZWFkLVx1MDAzZW5leHQsIHR5cGVvZigqZmlyc3RfbnMpLCBuc19vd25lcl9ub2RlLm5zX2xpc3RfZW50cnkpO1xuIDU4MjpcdFxuIDU4MzpcdFx0bnMgPSBmaXJzdF9ucztcbiA1ODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UobnMsIGhlYWQsIG5zX293bmVyX25vZGUubnNfbGlzdF9lbnRyeSkge1xuIDU4NTpcdFx0XHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcbiA1ODY6XHRcbiA1ODc6XHRcdFx0aWYgKCFucl9uc19pZHMpXG4gNTg4Olx0XHRcdFx0YnJlYWs7XG4gNTg5Olx0XG4gNTkwOlx0XHRcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcbiA1OTE6XHRcdFx0aWYgKCF2YWxpZClcbiA1OTI6XHRcdFx0XHRjb250aW51ZTtcbiA1OTM6XHRcbiA1OTQ6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNTk1Olx0XG4gNTk2Olx0XHRcdG5zX3B1dChwcmV2KTtcbiA1OTc6XHRcdFx0cHJldiA9IHZhbGlkO1xuIDU5ODpcdFxuIDU5OTpcdFx0XHRpZiAocHV0X3VzZXIodmFsaWQtXHUwMDNlbnNfaWQsIG5zX2lkcyAmIzQzOyByZXQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGtlcm5lbC9uc3RyZWUuYyBhbmQgdGhlIFVzZSBvZiBgbGVnaXRpbWl6ZV9uc2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGUgYGtlcm5lbC9uc3RyZWUuY2AgZmlsZSB3b3Jrcy4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgZnVuY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgYGxlZ2l0aW1pemVfbnNgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhhdCBmaWxlLiBTZWVpbmcgdGhlIGNvbnRleHQgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgcHVycG9zZSBieSBjaGVja2luZyB3aGVyZSBpdHMgZW1wbG95ZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkcyB0b3dhcmRzIHRoZSBmdW5jdGlvbnMgZGV0YWlscy4gSSB0aGluayBieSBkb2luZyB0aGlzIEkmIzM5O2xsIGJlIGFibGUgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSwgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBtb3JlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVnaXRpbWl6ZV9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbnN0cmVlLmM9NTMxPURFRklORV9GUkVFKG5zX3B1dCwgc3RydWN0IG5zX2NvbW1vbiAqLCBpZiAoIUlTX0VSUl9PUl9OVUxMKF9UKSkgbnNfcHV0KF9UKSlcbmtlcm5lbC9uc3RyZWUuYy01MzItXG5rZXJuZWwvbnN0cmVlLmM6NTMzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbmtlcm5lbC9uc3RyZWUuYy01MzQtXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXG4tLVxua2VybmVsL25zdHJlZS5jPTU0NT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG4tLVxua2VybmVsL25zdHJlZS5jLTU4OS1cbmtlcm5lbC9uc3RyZWUuYzo1OTA6XHRcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcbmtlcm5lbC9uc3RyZWUuYy01OTEtXHRcdGlmICghdmFsaWQpXG4tLVxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcbi0tXG5rZXJuZWwvbnN0cmVlLmMtNzMxLVxua2VybmVsL25zdHJlZS5jOjczMjpcdFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xua2VybmVsL25zdHJlZS5jLTczMy1cdFx0aWYgKCF2YWxpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBEZWVwIERpdmUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCBhbmQgYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgLiBJIGtub3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBrZXksIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHZhbHVlIG9mIGBjYW5kaWRhdGVgIGlzIHdpdGhpbiB0aGUgYGxlZ2l0aW1pemVfbnNgIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSB2YWx1ZSBvZiB0aGF0IHZhcmlhYmxlIHdvdWxkIGxpa2VseSB0ZWxsIG1lIHRoZSBlbnRpcmUgc3RvcnkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWFkIGxpbmVzIDUwMC01MzAgYWdhaW4sIGl0JiMzOTtzIHBvc3NpYmxlIEkgbWlzc2VkIGEgY2x1ZSBpbiBteSBwcmV2aW91cyBwYXNzLCBvciBhbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCB3aWxsIGdpdmUgbWUgY29udGV4dC4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfY3VycmVudF9uYW1lc3BhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnNmcy5jPTQ1Nj1zdGF0aWMgaW50IG5zZnNfZW5jb2RlX2ZoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqZmgsIGludCAqbWF4X2xlbixcbi0tXG5mcy9uc2ZzLmMtNDc4LVxuZnMvbnNmcy5jOjQ3OTpib29sIGlzX2N1cnJlbnRfbmFtZXNwYWNlKHN0cnVjdCBuc19jb21tb24gKm5zKVxuZnMvbnNmcy5jLTQ4MC17XG4tLVxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC0xMC1cbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6MTE6Ym9vbCBpc19jdXJyZW50X25hbWVzcGFjZShzdHJ1Y3QgbnNfY29tbW9uICpucyk7XG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oLTEyLWludCBfX25zX2NvbW1vbl9pbml0KHN0cnVjdCBuc19jb21tb24gKm5zLCB1MzIgbnNfdHlwZSwgY29uc3Qgc3RydWN0IHByb2NfbnNfb3BlcmF0aW9ucyAqb3BzLCBpbnQgaW51bSk7XG4tLVxua2VybmVsL25zdHJlZS5jPTUxNT1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIG1heV9saXN0X25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXG4tLVxua2VybmVsL25zdHJlZS5jLTUxOS1cdFx0cmV0dXJuIHRydWU7XG5rZXJuZWwvbnN0cmVlLmM6NTIwOlx0aWYgKGlzX2N1cnJlbnRfbmFtZXNwYWNlKG5zKSlcbmtlcm5lbC9uc3RyZWUuYy01MjEtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZnMvbnNmcy5jYCBmb3IgTmFtZXNwYWNlIEluc3BlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgbmFtZXNwYWNlIGhhbmRsaW5nIGlzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCBmdW5jdGlvbiBpbiBgZnMvbnNmcy5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGRldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIG5hbWVzcGFjZSBpcyB0aGUgYWN0aXZlIG9uZS4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBpZWNlIHdoZW4gZGVhbGluZyB3aXRoIGlzb2xhdGlvbiBhbmQgY29udGV4dCBzd2l0Y2hlcywgYnV0IGEgcmVmcmVzaGVyIGlzIGFsd2F5cyB1c2VmdWwsIGVzcGVjaWFsbHkgd2hlbiB3b3JraW5nIG9uIGEgbnVhbmNlZCBmZWF0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBjdXJyZW50IHRocmVhZCBhbmQgcG90ZW50aWFsbHkgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSBuYW1lc3BhY2UuIFRoZW4sIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW1wYWN0IG9uIHJlbGF0ZWQgY2FsbHMgbGlrZSBgdGFza19hY3RpdmVfbmFtZXNwYWNlYC4gSSYjMzk7bGwgd2FudCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB0byB0cnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25zZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc1Olx0XHRmaWQtXHUwMDNlbnNfaW51bVx0PSBpbm9kZS1cdTAwM2VpX2lubztcbiA0NzY6XHRcdHJldHVybiBGSUxFSURfTlNGUztcbiA0Nzc6XHR9XG4gNDc4Olx0XG4gNDc5Olx0Ym9vbCBpc19jdXJyZW50X25hbWVzcGFjZShzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA0ODA6XHR7XG4gNDgxOlx0XHRzd2l0Y2ggKG5zLVx1MDAzZW5zX3R5cGUpIHtcbiA0ODI6XHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcbiA0ODM6XHRcdGNhc2UgQ0xPTkVfTkVXQ0dST1VQOlxuIDQ4NDpcdFx0XHRyZXR1cm4gY3VycmVudF9pbl9uYW1lc3BhY2UodG9fY2dfbnMobnMpKTtcbiA0ODU6XHQjZW5kaWZcbiA0ODY6XHQjaWZkZWYgQ09ORklHX0lQQ19OU1xuIDQ4NzpcdFx0Y2FzZSBDTE9ORV9ORVdJUEM6XG4gNDg4Olx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19pcGNfbnMobnMpKTtcbiA0ODk6XHQjZW5kaWZcbiA0OTA6XHRcdGNhc2UgQ0xPTkVfTkVXTlM6XG4gNDkxOlx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19tbnRfbnMobnMpKTtcbiA0OTI6XHQjaWZkZWYgQ09ORklHX05FVF9OU1xuIDQ5MzpcdFx0Y2FzZSBDTE9ORV9ORVdORVQ6XG4gNDk0Olx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19uZXRfbnMobnMpKTtcbiA0OTU6XHQjZW5kaWZcbiA0OTY6XHQjaWZkZWYgQ09ORklHX1BJRF9OU1xuIDQ5NzpcdFx0Y2FzZSBDTE9ORV9ORVdQSUQ6XG4gNDk4Olx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19waWRfbnMobnMpKTtcbiA0OTk6XHQjZW5kaWZcbiA1MDA6XHQjaWZkZWYgQ09ORklHX1RJTUVfTlNcbiA1MDE6XHRcdGNhc2UgQ0xPTkVfTkVXVElNRTpcbiA1MDI6XHRcdFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3RpbWVfbnMobnMpKTtcbiA1MDM6XHQjZW5kaWZcbiA1MDQ6XHQjaWZkZWYgQ09ORklHX1VTRVJfTlNcbiA1MDU6XHRcdGNhc2UgQ0xPTkVfTkVXVVNFUjpcbiA1MDY6XHRcdFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3VzZXJfbnMobnMpKTtcbiA1MDc6XHQjZW5kaWZcbiA1MDg6XHQjaWZkZWYgQ09ORklHX1VUU19OU1xuIDUwOTpcdFx0Y2FzZSBDTE9ORV9ORVdVVFM6XG4gNTEwOlx0XHRcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b191dHNfbnMobnMpKTtcbiA1MTE6XHQjZW5kaWZcbiA1MTI6XHRcdGRlZmF1bHQ6XG4gNTEzOlx0XHRcdFZGU19XQVJOX09OX09OQ0UodHJ1ZSk7XG4gNTE0Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMwoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiA4MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucywgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGNoYW5nZSBpbiBgbGVnaXRpbWl6ZV9uc2AuIFRoZSBvcmlnaW5hbCBjb2RlIHRvb2sgYSByZWZlcmVuY2UgdG8gYGNhbmRpZGF0ZWAgKmJlZm9yZSogY2hlY2tpbmcgYG1heV9saXN0X25zYC4gVGhlIHBhdGNoIHJldmVyc2VzIHRoaXMsIGNoZWNraW5nIGBtYXlfbGlzdF9uc2AgKmJlZm9yZSogaW5jcmVtZW50aW5nIHRoZSByZWZjb3VudCB2aWEgYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhbiBvcHRpbWl6YXRpb24sIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiBpbmNyZW1lbnRpbmcgYW5kIGRlY3JlbWVudGluZyB0aGUgcmVmY291bnQgaWYgdGhlIGFjY2VzcyBpc24mIzM5O3QgcGVybWl0dGVkLgoKTXkgaW1tZWRpYXRlIGZvY3VzLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIG9uIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2VzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UsIGdpdmVuIHRoZSBSQ1UgY29udGV4dC4gV2UgYXJlIHVuZGVyIFJDVSByZWFkIGxvY2ssIGJ1dCB0aGUgb3JkZXJpbmcgY2hhbmdlIHNoaWZ0cyB0aGUgcG9pbnQgYXQgd2hpY2ggd2UmIzM5O3ZlICpndWFyYW50ZWVkKiB0aGF0IGBjYW5kaWRhdGVgIGlzIHZhbGlkLgoKSG93ZXZlciwgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3QgS01TQU4gcmVkIGZsYWdzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgZmllbGRzICpjb3VsZCogYmUgdW5pbml0aWFsaXplZC4gVGhlcmUmIzM5O3Mgbm8gY2hhbmdlIGluIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgd291bGQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgbm90IGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBwYXRjaCYjMzk7cyBzY29wZS4gTm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBsZW5ndGhzIGFyZSBwcmVzZW50LCB3aGljaCBjb3VsZCByZXN1bHQgaW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gYHB1dF91c2VyKClgIGlzIHVzZWQgc2FmZWx5LCBjb3B5aW5nIGFuIGV4aXN0aW5nIGB1NjQgbnNfaWRgLiBUaGUgcG90ZW50aWFsIHJpc2sgaXMgbW9yZSBhbGlnbmVkIHdpdGggS0FTQU4gZHVlIHRvIHRoZSBvcmRlcmluZyBjaGFuZ2UgYW5kIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4KClRoZSBLTVNBTiBhc3BlY3RzIChyZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBzZWVtIGNvbXBsZXRlbHkgYWJzZW50LiBUaGlzIHBhdGNoIGlzIGFib3V0ICp3aGVuKiB3ZSBjaGVjayB0aGUgcGVybWlzc2lvbnMgYW5kICp3aGV0aGVyKiB3ZSBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LCBub3QgKndoYXQqIGRhdGEgaXMgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24gdGhhdCBoYXMgS0FTQU4gaW1wbGljYXRpb25zIGlmIHRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMuCgpUaGVyZWZvcmUsIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCB0aGUgYEtNU0FOUmVhc29uaW5nYCB3b3VsZCBmb2N1cyBvbiB0aGlzIGNoYW5nZSBiZWluZyBhbiBvcHRpbWl6YXRpb24gdG8gcmVmY291bnQgbWFuYWdlbWVudCwgbm90IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsZWdpdGltaXplX25zKClgIGluIGBrZXJuZWwvbnN0cmVlLmNgIHRvIHBlcmZvcm0gdGhlIGBtYXlfbGlzdF9ucygpYCBwZXJtaXNzaW9uIGNoZWNrIG9uIHRoZSBjYW5kaWRhdGUgbmFtZXNwYWNlIHByaW9yIHRvIGFjcXVpcmluZyBhIHJlZmVyZW5jZSB2aWEgYG5zX2dldF91bmxlc3NfaW5hY3RpdmUoKWAsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZSBhY3F1aXNpdGlvbiBhbmQgY2xlYW51cC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsbG9jYXRlIGFueSBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGRhdGEgbGVuZ3Rocywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQWxsIGZpZWxkcyBhY2Nlc3NlZCAoYGNhbmRpZGF0ZS1cdTAwM2Vuc190eXBlYCwgYGNhbmRpZGF0ZS1cdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWxsb2NhdGUgYW55IG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgZGF0YSBsZW5ndGhzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbGwgZmllbGRzIGFjY2Vzc2VkIChgY2FuZGlkYXRlLVx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVx1MDAzZW5zX2lkYCwgZXRjLikgYmVsb25nIHRvIGluaXRpYWxpemVkIG5hbWVzcGFjZSBzdHJ1Y3R1cmVzIGluIHRoZSBuYW1lc3BhY2UgdHJlZS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjYW5kaWRhdGVgIHVuZGVyIFJDVSBwcmlvciB0byB0YWtpbmcgYSByZWZlcmVuY2Ugd291bGQgYmUgb2JqZWN0IGxpZmV0aW1lL3VzZS1hZnRlci1mcmVlIGlzc3VlcyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI0OjUzLjE4MzIxODU3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjM3OTg4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RvX3N5c19saXN0bnNcIixcbiAgICBcImRvX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zX3VzZXJuc1wiLFxuICAgIFwibGVnaXRpbWl6ZV9uc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXFx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVxcdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjQ6NTMuMTgzMjIzNDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ1MzIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZDliNjY3OTM5MDI3OWE4NThmOWRiZGE4NmZjMTc3M2NmYmY3NTMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTk6MjQ6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jXFxuaW5kZXggNmQxMmU1OTAwYWMwMS4uODMxZjI3OWQxNzRhMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbnN0cmVlLmNcXG4rKysgYi9rZXJuZWwvbnN0cmVlLmNcXG5AQCAtNTMzLDE5ICs1MzMsMTMgQEAgREVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbnNfY29tbW9uICpucyBfX2ZyZWUobnNfcHV0KSA9IE5VTEw7XFxuLVxcbiBcXHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0bnMgPSBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7XFxuLVxcdGlmICghbnMpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIG5zKSlcXG4rXFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIGNhbmRpZGF0ZSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0cmV0dXJuIG5vX2ZyZWVfcHRyKG5zKTtcXG4rXFx0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNDo1My42NTg0ODg1NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MjkwNDA2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RvX3N5c19saXN0bnNcIixcbiAgICBcImRvX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zX3VzZXJuc1wiLFxuICAgIFwibGVnaXRpbWl6ZV9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDliNjY3OTM5MDI3OWE4NThmOWRiZGE4NmZjMTc3M2NmYmY3NTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxOToyNDo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9uc3RyZWUuYyBiL2tlcm5lbC9uc3RyZWUuY1xuaW5kZXggNmQxMmU1OTAwYWMwMS4uODMxZjI3OWQxNzRhMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9uc3RyZWUuY1xuKysrIGIva2VybmVsL25zdHJlZS5jXG5AQCAtNTMzLDE5ICs1MzMsMTMgQEAgREVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcbiBcdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgbnNfY29tbW9uICpucyBfX2ZyZWUobnNfcHV0KSA9IE5VTEw7XG4tXG4gXHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0bnMgPSBuc19nZXRfdW5sZXNzX2luYWN0aXZlKGNhbmRpZGF0ZSk7XG4tXHRpZiAoIW5zKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdGlmICghbWF5X2xpc3RfbnMoa2xzLCBucykpXG4rXHRpZiAoIW1heV9saXN0X25zKGtscywgY2FuZGlkYXRlKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRyZXR1cm4gbm9fZnJlZV9wdHIobnMpO1xuK1x0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjQ6NTMuNjU4NDg5NjgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMDQ3NzYwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTmFtZXNwYWNlIFRyZWUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrZXJuZWwvbnN0cmVlLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0LiBMZXQncyBkaWcgaW50byB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBwdWxsIHVwIGBrZXJuZWwvbnN0cmVlLmNgIOKAkyBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCBkZXBlbmRpbmcgb24gd2hhdCBJIG5lZWQgYW5kIGhvdyBxdWlja2x5IEkgd2FudCB0byBzY2FuIGl0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSAqZG9lcyouIFdoYXQncyBpdHMgcHVycG9zZT8gV2hhdCBmdW5jdGlvbmFsaXR5IGRvZXMgaXQgcHJvdmlkZSB3aXRoaW4gdGhlIGtlcm5lbD8gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkLiBJJ2xsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGFyY2hpdGVjdHVyZS5cblxuVGhlbiwgY29uZmlnIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleS4gSSBuZWVkIHRvIGtub3cgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29udHJvbCB0aGlzIGNvZGUncyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcz8gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyB0byByZWFzb24gYWJvdXQgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLlxuXG5GaW5hbGx5LCBJJ2xsIGlkZW50aWZ5IHRoZSBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHdobyBjYWxscyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbnN0cmVlLmNgIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWZmZWN0ZWQgYnkgaXQuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyB0aGlzIHBhdGNoIGNvdWxkIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJ4oCZbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBzaWRlIGVmZmVjdHMsIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToxMS45NjMyNjgwNzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL25zdHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXHRpZiAoaXNfY3VycmVudF9uYW1lc3BhY2UobnMpKVxcbiA1MjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUyMjpcXHRcXHRyZXR1cm4gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuIDUyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbnNfcHV0KHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0aWYgKG5zIFxcdTAwMjZcXHUwMDI2IG5zLVxcdTAwM2VvcHMpXFxuIDUyODpcXHRcXHRcXHRucy1cXHUwMDNlb3BzLVxcdTAwM2VwdXQobnMpO1xcbiA1Mjk6XFx0fVxcbiA1MzA6XFx0XFxuIDUzMTpcXHRERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXFxuIDUzMjpcXHRcXG4gNTMzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG4gNTM0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcXG4gNTM1OlxcdHtcXG4gNTM2OlxcdFxcdGlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSlcXG4gNTM3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRpZiAoIW1heV9saXN0X25zKGtscywgY2FuZGlkYXRlKSlcXG4gNTQwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRyZXR1cm4gbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShjYW5kaWRhdGUpO1xcbiA1NDM6XFx0fVxcbiA1NDQ6XFx0XFxuIDU0NTpcXHRzdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXFxuIDU0NjpcXHR7XFxuIDU0NzpcXHRcXHR1NjQgX191c2VyICpuc19pZHMgPSBrbHMtXFx1MDAzZXVuc19pZHM7XFxuIDU0ODpcXHRcXHRzaXplX3QgbnJfbnNfaWRzID0ga2xzLVxcdTAwM2Vucl9uc19pZHM7XFxuIDU0OTpcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IE5VTEwsICpmaXJzdF9ucyA9IE5VTEwsICpwcmV2ID0gTlVMTDtcXG4gNTUwOlxcdFxcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7XFxuIDU1MTpcXHRcXHRzc2l6ZV90IHJldDtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0VkZTX1dBUk5fT05fT05DRSgha2xzLVxcdTAwM2V1c2VyX25zX2lkKTtcXG4gNTU0OlxcdFxcbiA1NTU6XFx0XFx0aWYgKGtscy1cXHUwMDNldXNlcl9uc19pZCA9PSBMSVNUTlNfQ1VSUkVOVF9VU0VSKVxcbiA1NTY6XFx0XFx0XFx0bnMgPSB0b19uc19jb21tb24oY3VycmVudF91c2VyX25zKCkpO1xcbiA1NTc6XFx0XFx0ZWxzZSBpZiAoa2xzLVxcdTAwM2V1c2VyX25zX2lkKVxcbiA1NTg6XFx0XFx0XFx0bnMgPSBsb29rdXBfbnNfaWQoa2xzLVxcdTAwM2V1c2VyX25zX2lkLCBDTE9ORV9ORVdVU0VSKTtcXG4gNTU5OlxcdFxcdGlmICghbnMpXFxuIDU2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTYxOlxcdFxcdGtscy1cXHUwMDNldXNlcl9ucyA9IHRvX3VzZXJfbnMobnMpO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHQvKlxcbiA1NjQ6XFx0XFx0ICogVXNlIHRoZSByYnRyZWUgdG8gZmluZCB0aGUgZmlyc3QgbmFtZXNwYWNlIHdlIGNhcmUgYWJvdXQgYW5kXFxuIDU2NTpcXHRcXHQgKiB0aGVuIHVzZSBpdCdzIGxpc3QgZW50cnkgdG8gaXRlcmF0ZSBmcm9tIHRoZXJlLlxcbiA1NjY6XFx0XFx0ICovXFxuIDU2NzpcXHRcXHRpZiAoa2xzLVxcdTAwM2VsYXN0X25zX2lkKSB7XFxuIDU2ODpcXHRcXHRcXHRrbHMtXFx1MDAzZWZpcnN0X25zID0gbG9va3VwX25zX293bmVyX2F0KGtscy1cXHUwMDNlbGFzdF9uc19pZCArIDEsIG5zKTtcXG4gNTY5OlxcdFxcdFxcdGlmICgha2xzLVxcdTAwM2VmaXJzdF9ucylcXG4gNTcwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA1NzE6XFx0XFx0XFx0Zmlyc3RfbnMgPSBrbHMtXFx1MDAzZWZpcnN0X25zO1xcbiA1NzI6XFx0XFx0fVxcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRyZXQgPSAwO1xcbiA1NzU6XFx0XFx0aGVhZCA9IFxcdTAwMjZ0b19uc19jb21tb24oa2xzLVxcdTAwM2V1c2VyX25zKS1cXHUwMDNlbnNfb3duZXJfcm9vdC5uc19saXN0X2hlYWQ7XFxuIDU3NjpcXHRcXHRrbHMtXFx1MDAzZXVzZXJuc19jYXBhYmxlID0gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xcbiA1Nzc6XFx0XFxuIDU3ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDU3OTpcXHRcXG4gNTgwOlxcdFxcdGlmICghZmlyc3RfbnMpXFxuIDU4MTpcXHRcXHRcXHRmaXJzdF9ucyA9IGxpc3RfZW50cnlfcmN1KGhlYWQtXFx1MDAzZW5leHQsIHR5cGVvZigqZmlyc3RfbnMpLCBuc19vd25lcl9ub2RlLm5zX2xpc3RfZW50cnkpO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRucyA9IGZpcnN0X25zO1xcbiA1ODQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShucywgaGVhZCwgbnNfb3duZXJfbm9kZS5uc19saXN0X2VudHJ5KSB7XFxuIDU4NTpcXHRcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcXG4gNTg2OlxcdFxcbiA1ODc6XFx0XFx0XFx0aWYgKCFucl9uc19pZHMpXFxuIDU4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0XFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xcbiA1OTE6XFx0XFx0XFx0aWYgKCF2YWxpZClcXG4gNTkyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1OTM6XFx0XFxuIDU5NDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTk1OlxcdFxcbiA1OTY6XFx0XFx0XFx0bnNfcHV0KHByZXYpO1xcbiA1OTc6XFx0XFx0XFx0cHJldiA9IHZhbGlkO1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRcXHRpZiAocHV0X3VzZXIodmFsaWQtXFx1MDAzZW5zX2lkLCBuc19pZHMgKyByZXQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjExLjk2MzM4Nzc5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTY2NjIxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBvdXQgbG91ZCBhcyBJIGludmVzdGlnYXRlOlxuXG4qKkFuYWx5emluZyBOYW1lc3BhY2UgVHJlZSBPcGVyYXRpb25zIGluIHRoZSBLZXJuZWwqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBuYW1lc3BhY2UgdHJlZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGtlcm5lbC9uc3RyZWUuY2AuIEZpcnN0LCBJIGNvdWxkIGp1c3QgcmVhZCB0aGUgd2hvbGUgZmlsZSB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IHRoYXQncyBhIGJpdCBicnV0ZSBmb3JjZS4gTGV0IG1lIHRyeSBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2guIEknbSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBXaGVyZSBkb2VzIHRoaXMgYGtlcm5lbC9uc3RyZWUuY2AgZml0IGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiBzeXN0ZW0gY2FsbHMgYW5kIGludGVyYWN0aW9ucz8gSSBjYW4gc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byBgZG9fbGlzdG5zX3VzZXJuc2Agb3IgYGxlZ2l0aW1pemVfbnNgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSWYgSSBjYW4gZmluZCB0aGVzZSwgdGhhdCB3aWxsIHNob3cgbWUgd2hlcmUgdGhlIHN5c3RlbSBjYWxscyBvciBgaW9jdGxgcyBhcmUgdGhhdCBhcmUgY2FsbGluZyBpbnRvIGBrZXJuZWwvbnN0cmVlLmNgLiBJIGV4cGVjdCB0aGVzZSB3b3VsZCBiZSB1c2VkIHRvIGxpc3QsIHF1ZXJ5LCBvciBwb3RlbnRpYWxseSB2YWxpZGF0ZSBuYW1lc3BhY2UgY29uZmlndXJhdGlvbnMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBlZmZlY3RpdmUgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjE0LjQ2MDA1MTY2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc0NDQxOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGVnaXRpbWl6ZV9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbmtlcm5lbC9uc3RyZWUuYy01MzItXFxua2VybmVsL25zdHJlZS5jOjUzMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NTQ1PXN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy01ODktXFxua2VybmVsL25zdHJlZS5jOjU5MDpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTU5MS1cXHRcXHRpZiAoIXZhbGlkKVxcbi0tXFxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03MzEtXFxua2VybmVsL25zdHJlZS5jOjczMjpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTczMy1cXHRcXHRpZiAoIXZhbGlkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToxNC44Mzc1MDMwMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODEzNzk5ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbnN0cmVlYCBTeXNjYWxsIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSB3YW50IHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbmFtZXNwYWNlIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gTGV0J3Mgc3RhcnQgYnkgZHJpbGxpbmcgaW50byBga2VybmVsL25zdHJlZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gY2FsbHMgcmVsYXRlZCB0byBuYW1lc3BhY2UgbWFuaXB1bGF0aW9uLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhIGNlbnRyYWwgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBuYW1lc3BhY2Ugb3BlcmF0aW9uIHJlcXVlc3RlZCwgb3IgbWF5YmUgYSBkZWRpY2F0ZWQgc3lzdGVtIGNhbGwgZm9yIGVhY2guIEknbSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24sIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW5kIG9mIGNvdXJzZSwgd2hhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbG9vayBsaWtlIHVuZGVyIHRoZSBob29kLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBmdW5jdGlvbnMgbWFuYWdpbmcgdGhlIG5hbWVzcGFjZSB0cmVlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIG1vdW50aW5nLCB1bm1vdW50aW5nLCBjcmVhdGluZywgYW5kIGRlc3Ryb3lpbmcgbmFtZXNwYWNlcy4gSSdtIGtlZW4gdG8gc2VlIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IG5hbWVzcGFjZSBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgdXNlIG9mIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgY29uY3VycmVuY3kgcHJpbWl0aXZlcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIEZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IHRoZSBrZXJuZWwgZW5mb3JjZXMgc2VjdXJpdHkgcG9saWNpZXMgYW5kIGNhcGFiaWxpdGllcyByZWxhdGVkIHRvIG5hbWVzcGFjZSBhY2Nlc3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToxNy42NTEzMDU3NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbnN0cmVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIwOlxcdFxcdGVsc2VcXG4gNzIxOlxcdFxcdFxcdGhlYWQgPSBcXHUwMDI2bnNfdW5pZmllZF9yb290Lm5zX2xpc3RfaGVhZDtcXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHRpZiAoIWZpcnN0X25zKVxcbiA3MjY6XFx0XFx0XFx0Zmlyc3RfbnMgPSBmaXJzdF9uc19jb21tb24oaGVhZCwgbnNfdHJlZSk7XFxuIDcyNzpcXHRcXG4gNzI4OlxcdFxcdGZvciAobnMgPSBmaXJzdF9uczsgIW5zX2NvbW1vbl9pc19oZWFkKG5zLCBoZWFkLCBuc190cmVlKSBcXHUwMDI2XFx1MDAyNiBucl9uc19pZHM7XFxuIDcyOTpcXHRcXHQgICAgIG5zID0gbmV4dF9uc19jb21tb24obnMsIG5zX3RyZWUpKSB7XFxuIDczMDpcXHRcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICp2YWxpZDtcXG4gNzMxOlxcdFxcbiA3MzI6XFx0XFx0XFx0dmFsaWQgPSBsZWdpdGltaXplX25zKGtscywgbnMpO1xcbiA3MzM6XFx0XFx0XFx0aWYgKCF2YWxpZClcXG4gNzM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0XFx0bnNfcHV0KHByZXYpO1xcbiA3Mzk6XFx0XFx0XFx0cHJldiA9IHZhbGlkO1xcbiA3NDA6XFx0XFxuIDc0MTpcXHRcXHRcXHRpZiAocHV0X3VzZXIodmFsaWQtXFx1MDAzZW5zX2lkLCBuc19pZHMgKyByZXQpKSB7XFxuIDc0MjpcXHRcXHRcXHRcXHRuc19wdXQocHJldik7XFxuIDc0MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNzQ0OlxcdFxcdFxcdH1cXG4gNzQ1OlxcdFxcbiA3NDY6XFx0XFx0XFx0bnJfbnNfaWRzLS07XFxuIDc0NzpcXHRcXHRcXHRyZXQrKztcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3NTA6XFx0XFx0fVxcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzUzOlxcdFxcdG5zX3B1dChwcmV2KTtcXG4gNzU0OlxcdFxcdHJldHVybiByZXQ7XFxuIDc1NTpcXHR9XFxuIDc1NjpcXHRcXG4gNzU3OlxcdFNZU0NBTExfREVGSU5FNChsaXN0bnMsIGNvbnN0IHN0cnVjdCBuc19pZF9yZXEgX191c2VyICosIHJlcSxcXG4gNzU4OlxcdFxcdFxcdHU2NCBfX3VzZXIgKiwgbnNfaWRzLCBzaXplX3QsIG5yX25zX2lkcywgdW5zaWduZWQgaW50LCBmbGFncylcXG4gNzU5OlxcdHtcXG4gNzYwOlxcdFxcdHN0cnVjdCBrbGlzdG5zIGtsbnMgX19mcmVlKGtsaXN0bnNfZnJlZSkgPSB7fTtcXG4gNzYxOlxcdFxcdGNvbnN0IHNpemVfdCBtYXhjb3VudCA9IDEwMDAwMDA7XFxuIDc2MjpcXHRcXHRzdHJ1Y3QgbnNfaWRfcmVxIGtyZXE7XFxuIDc2MzpcXHRcXHRzc2l6ZV90IHJldDtcXG4gNzY0OlxcdFxcbiA3NjU6XFx0XFx0aWYgKGZsYWdzKVxcbiA3NjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGlmICh1bmxpa2VseShucl9uc19pZHMgXFx1MDAzZSBtYXhjb3VudCkpXFxuIDc2OTpcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gNzcwOlxcdFxcbiA3NzE6XFx0XFx0aWYgKCFhY2Nlc3Nfb2sobnNfaWRzLCBucl9uc19pZHMgKiBzaXplb2YoKm5zX2lkcykpKVxcbiA3NzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdHJldCA9IGNvcHlfbnNfaWRfcmVxKHJlcSwgXFx1MDAyNmtyZXEpO1xcbiA3NzU6XFx0XFx0aWYgKHJldClcXG4gNzc2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDc3NzpcXHRcXG4gNzc4OlxcdFxcdHJldCA9IHByZXBhcmVfa2xpc3RucyhcXHUwMDI2a2xucywgXFx1MDAyNmtyZXEsIG5zX2lkcywgbnJfbnNfaWRzKTtcXG4gNzc5OlxcdFxcdGlmIChyZXQpXFxuIDc4MDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRcXHRpZiAoa3JlcS51c2VyX25zX2lkKVxcbiA3ODM6XFx0XFx0XFx0cmV0dXJuIGRvX2xpc3Ruc191c2VybnMoXFx1MDAyNmtsbnMpO1xcbiA3ODQ6XFx0XFxuIDc4NTpcXHRcXHRyZXR1cm4gZG9fbGlzdG5zKFxcdTAwMjZrbG5zKTtcXG4gNzg2OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MTcuNjUxNDEwNDE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MDA0OTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqS2VybmVsIE1vZHVsZSBJbnZlc3RpZ2F0aW9uOiBgbGlzdG5zYCBhbmQgTmFtZXNwYWNlIFRyZWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgbGlzdG5zYCBzeXNjYWxsISBJIG5lZWQgdG8gcXVpY2tseSBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0byBsb29rIGF0IGBrZXJuZWwvbnN0cmVlLmNgLCBzbyBJJ2xsIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGF0IGNvZGUgdG8gZXZlbiBiZSBjb21waWxlZCBpbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGhlbHBzIG5hcnJvdyBkb3duIHdoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gYGxpc3Ruc2AuIE5leHQgdXAsIEknbGwganVtcCBpbnRvIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBga2VybmVsL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgSSBjYW4gdW5kZXJzdGFuZCBob3cgYG5zdHJlZS5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGBsaXN0bnNgIChvciByZWxhdGVkIGNvZGUpIGlzIGRlZmluZWQgYW5kIGJ1aWx0LCB3aGljaCB3aWxsIGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaXRzIHVzZSBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MTkuOTMxNDYyNTIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODIwODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc3RyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvTWFrZWZpbGU9Nj1vYmoteSAgICAgPSBmb3JrLm8gZXhlY19kb21haW4ubyBleGVjX3N0YXRlLm8gcGFuaWMubyBcXFxcXFxuLS1cXG5rZXJuZWwvTWFrZWZpbGUtMTAtXFx0ICAgIGV4dGFibGUubyBwYXJhbXMubyBcXFxcXFxua2VybmVsL01ha2VmaWxlOjExOlxcdCAgICBrdGhyZWFkLm8gc3lzX25pLm8gbnNwcm94eS5vIG5zdHJlZS5vIG5zY29tbW9uLm8gXFxcXFxcbmtlcm5lbC9NYWtlZmlsZS0xMi1cXHQgICAgbm90aWZpZXIubyBrc3lzZnMubyBjcmVkLm8gcmVib290Lm8gXFxcXFxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01OC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzo1OTojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19ucy5oXFx1MDAzZVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy05LVxcbi0tXFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYz0zNj12b2lkIGZyZWVfY2dyb3VwX25zKHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICpucylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtNDItXFx0bnNfY29tbW9uX2ZyZWUobnMpO1xcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM6NDM6XFx0LyogQ29uY3VycmVudCBuc3RyZWUgdHJhdmVyc2FsIGRlcGVuZHMgb24gYSBncmFjZSBwZXJpb2QuICovXFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy00NC1cXHRrZnJlZV9yY3UobnMsIG5zLm5zX3JjdSk7XFxuLS1cXG5rZXJuZWwvbnNjb21tb24uYy00LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc19jb21tb24uaFxcdTAwM2VcXG5rZXJuZWwvbnNjb21tb24uYzo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvbnNjb21tb24uYy02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX25zLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxua2VybmVsL25zcHJveHkuYzozMDojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL25zcHJveHkuYy0zMS1cXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy0zLVxcbmtlcm5lbC9uc3RyZWUuYzo0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvbnN0cmVlLmMtNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19ucy5oXFx1MDAzZVxcbi0tXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYy0yNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYzoyNjojaW5jbHVkZSBcXHUwMDNjbGludXgvbnN0cmVlLmhcXHUwMDNlXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYy0yNy0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC93YWl0LmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25zdHJlZS5oXFx1MDAzZVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYz0xNDU9dm9pZCBmcmVlX3RpbWVfbnMoc3RydWN0IHRpbWVfbmFtZXNwYWNlICpucylcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE1MS1cXHR0aW1lbnNfdmRzb19mcmVlX3Z2YXJfcGFnZShucyk7XFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTUyOlxcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE1My1cXHRrZnJlZV9yY3UobnMsIG5zLm5zX3JjdSk7XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc29ydC5oXFx1MDAzZVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjI0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yNS1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTE5ND1zdGF0aWMgdm9pZCBmcmVlX3VzZXJfbnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjIwLVxcdFxcdG5zX2NvbW1vbl9mcmVlKG5zKTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyMjE6XFx0XFx0LyogQ29uY3VycmVudCBuc3RyZWUgdHJhdmVyc2FsIGRlcGVuZHMgb24gYSBncmFjZSBwZXJpb2QuICovXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjIyLVxcdFxcdGtmcmVlX3JjdShucywgbnMubnNfcmN1KTtcXG4tLVxcbmtlcm5lbC91dHNuYW1lLmMtMTUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfbnMuaFxcdTAwM2VcXG5rZXJuZWwvdXRzbmFtZS5jOjE2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG5rZXJuZWwvdXRzbmFtZS5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvdXRzbmFtZS5jPTk2PXZvaWQgZnJlZV91dHNfbnMoc3RydWN0IHV0c19uYW1lc3BhY2UgKm5zKVxcbi0tXFxua2VybmVsL3V0c25hbWUuYy0xMDEtXFx0bnNfY29tbW9uX2ZyZWUobnMpO1xcbmtlcm5lbC91dHNuYW1lLmM6MTAyOlxcdC8qIENvbmN1cnJlbnQgbnN0cmVlIHRyYXZlcnNhbCBkZXBlbmRzIG9uIGEgZ3JhY2UgcGVyaW9kLiAqL1xcbmtlcm5lbC91dHNuYW1lLmMtMTAzLVxcdGtmcmVlX3JjdShucywgbnMubnNfcmN1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MTkuOTg5Njc2NjE3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDM2OTAwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZSBiZWhhdmlvciBvZiBga2VybmVsL25zdHJlZS5jYCBvciB0aGUgYHN5c19saXN0bnNgIHN5c3RlbSBjYWxsIGlzIHNvbWVob3cgY29uZGl0aW9uYWwsIGdvdmVybmVkIGJ5IGEgc3BlY2lmaWMgY29uZmlnIG9wdGlvbi4gSXQncyBhbHdheXMgYmVzdCB0byBydWxlIG91dCBhbnkgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGJlZm9yZSBnb2luZyBkb3duIGEgbW9yZSBjb21wbGV4IGRlYnVnZ2luZyBwYXRoLiBMZXQncyBzZWUgaWYgYW55IGNvbXBpbGUtdGltZSBmbGFncyBhcmUgaW4gcGxheSBoZXJlLiBUbyBkbyB0aGF0IEknbSBnb2luZyB0byBzdGFydCBieSBzY3J1dGluaXppbmcgYGtlcm5lbC9uc3RyZWUuY2AgZnJvbSB0aGUgdmVyeSB0b3AuIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNToyMi42MzMzNjk5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL25zdHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDI1IENocmlzdGlhbiBCcmF1bmVyIFxcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcXHUwMDNlICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3RyZWUuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX25zLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Zmc2RlYnVnLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbiAgMTA6XFx0XFxuICAxMTpcXHRzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NFUUxPQ0sobnNfdHJlZV9sb2NrKTtcXG4gIDEyOlxcdFxcbiAgMTM6XFx0REVGSU5FX0xPQ0tfR1VBUkRfMChuc190cmVlX3dyaXRlcixcXG4gIDE0OlxcdFxcdFxcdCAgICB3cml0ZV9zZXFsb2NrKFxcdTAwMjZuc190cmVlX2xvY2spLFxcbiAgMTU6XFx0XFx0XFx0ICAgIHdyaXRlX3NlcXVubG9jayhcXHUwMDI2bnNfdHJlZV9sb2NrKSlcXG4gIDE2OlxcdFxcbiAgMTc6XFx0REVGSU5FX0xPQ0tfR1VBUkRfMChuc190cmVlX2xvY2tlZF9yZWFkZXIsXFxuICAxODpcXHRcXHRcXHQgICAgcmVhZF9zZXFsb2NrX2V4Y2woXFx1MDAyNm5zX3RyZWVfbG9jayksXFxuICAxOTpcXHRcXHRcXHQgICAgcmVhZF9zZXF1bmxvY2tfZXhjbChcXHUwMDI2bnNfdHJlZV9sb2NrKSlcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RhdGljIHN0cnVjdCBuc190cmVlX3Jvb3QgbnNfdW5pZmllZF9yb290ID0geyAvKiBwcm90ZWN0ZWQgYnkgbnNfdHJlZV9sb2NrICovXFxuICAyMjpcXHRcXHQubnNfcmIgPSBSQl9ST09ULFxcbiAgMjM6XFx0XFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5zX3VuaWZpZWRfcm9vdC5uc19saXN0X2hlYWQpLFxcbiAgMjQ6XFx0fTtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RydWN0IG5zX3RyZWVfcm9vdCBtbnRfbnNfdHJlZSA9IHtcXG4gIDI3OlxcdFxcdC5uc19yYiA9IFJCX1JPT1QsXFxuICAyODpcXHRcXHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQobW50X25zX3RyZWUubnNfbGlzdF9oZWFkKSxcXG4gIDI5OlxcdH07XFxuICAzMDpcXHRcXG4gIDMxOlxcdHN0cnVjdCBuc190cmVlX3Jvb3QgbmV0X25zX3RyZWUgPSB7XFxuICAzMjpcXHRcXHQubnNfcmIgPSBSQl9ST09ULFxcbiAgMzM6XFx0XFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKG5ldF9uc190cmVlLm5zX2xpc3RfaGVhZCksXFxuICAzNDpcXHR9O1xcbiAgMzU6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmV0X25zX3RyZWUpO1xcbiAgMzY6XFx0XFxuICAzNzpcXHRzdHJ1Y3QgbnNfdHJlZV9yb290IHV0c19uc190cmVlID0ge1xcbiAgMzg6XFx0XFx0Lm5zX3JiID0gUkJfUk9PVCxcXG4gIDM5OlxcdFxcdC5uc19saXN0X2hlYWQgPSBMSVNUX0hFQURfSU5JVCh1dHNfbnNfdHJlZS5uc19saXN0X2hlYWQpLFxcbiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RydWN0IG5zX3RyZWVfcm9vdCB1c2VyX25zX3RyZWUgPSB7XFxuICA0MzpcXHRcXHQubnNfcmIgPSBSQl9ST09ULFxcbiAgNDQ6XFx0XFx0Lm5zX2xpc3RfaGVhZCA9IExJU1RfSEVBRF9JTklUKHVzZXJfbnNfdHJlZS5uc19saXN0X2hlYWQpLFxcbiAgNDU6XFx0fTtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0c3RydWN0IG5zX3RyZWVfcm9vdCBpcGNfbnNfdHJlZSA9IHtcXG4gIDQ4OlxcdFxcdC5uc19yYiA9IFJCX1JPT1QsXFxuICA0OTpcXHRcXHQubnNfbGlzdF9oZWFkID0gTElTVF9IRUFEX0lOSVQoaXBjX25zX3RyZWUubnNfbGlzdF9oZWFkKSxcXG4gIDUwOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjIyLjYzMzUwMzU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMzk5ODM5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBOYW1lc3BhY2UgVHJlZSBDb2RlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga2VybmVsL25zdHJlZS5jYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIGBvYmoteWAgd2l0aGluIHRoZSBga2VybmVsL01ha2VmaWxlYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYG1heV9saXN0X25zYCBhbmQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgbW9kaWZpY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgbmFtZXNwYWNlIGxpc3RpbmcgbG9naWMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhdGNoIGFsdGVycyB0aGUgY29yZSBiZWhhdmlvciBhbmQgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGUgbmFtZXNwYWNlIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBgbWF5X2xpc3RfbnNgIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIGltcGFjdCwgYXMgaXQncyB0aGUgZ2F0ZWtlZXBlciBmb3IgbmFtZXNwYWNlIHZpc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjI1Ljg3MzQ4OTg5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL25zdHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRcXHRcXHRyZXQgPSBucztcXG4gNDgxOlxcdFxcdFxcdFxcdGlmIChuc19pZCA9PSBucy1cXHUwMDNlbnNfaWQpXFxuIDQ4MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDgzOlxcdFxcdFxcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VyYl9sZWZ0O1xcbiA0ODQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDg1OlxcdFxcdFxcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VyYl9yaWdodDtcXG4gNDg2OlxcdFxcdFxcdH1cXG4gNDg3OlxcdFxcdH1cXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0aWYgKHJldClcXG4gNDkwOlxcdFxcdFxcdHJldCA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUocmV0KTtcXG4gNDkxOlxcdFxcdHJldHVybiByZXQ7XFxuIDQ5MjpcXHR9XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdHN0YXRpYyBzdHJ1Y3QgbnNfY29tbW9uICpsb29rdXBfbnNfaWQodTY0IG1udF9uc19pZCwgaW50IG5zX3R5cGUpXFxuIDQ5NTpcXHR7XFxuIDQ5NjpcXHRcXHRzdHJ1Y3QgbnNfY29tbW9uICpucztcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0Z3VhcmQocmN1KSgpO1xcbiA0OTk6XFx0XFx0bnMgPSBuc190cmVlX2xvb2t1cF9yY3UobW50X25zX2lkLCBuc190eXBlKTtcXG4gNTAwOlxcdFxcdGlmICghbnMpXFxuIDUwMTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0aWYgKCFuc19nZXRfdW5sZXNzX2luYWN0aXZlKG5zKSlcXG4gNTA0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHRyZXR1cm4gbnM7XFxuIDUwNzpcXHR9XFxuIDUwODpcXHRcXG4gNTA5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbnNfcmVxdWVzdGVkKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxuIDUxMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MTE6XFx0e1xcbiA1MTI6XFx0XFx0cmV0dXJuICFrbHMtXFx1MDAzZW5zX3R5cGUgfHwgKGtscy1cXHUwMDNlbnNfdHlwZSBcXHUwMDI2IG5zLVxcdTAwM2Vuc190eXBlKTtcXG4gNTEzOlxcdH1cXG4gNTE0OlxcdFxcbiA1MTU6XFx0c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBtYXlfbGlzdF9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxcbiA1MTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MTc6XFx0e1xcbiA1MTg6XFx0XFx0aWYgKGtscy1cXHUwMDNldXNlcl9ucyBcXHUwMDI2XFx1MDAyNiBrbHMtXFx1MDAzZXVzZXJuc19jYXBhYmxlKVxcbiA1MTk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUyMDpcXHRcXHRpZiAoaXNfY3VycmVudF9uYW1lc3BhY2UobnMpKVxcbiA1MjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUyMjpcXHRcXHRyZXR1cm4gbWF5X3NlZV9hbGxfbmFtZXNwYWNlcygpO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuIDUyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbnNfcHV0KHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0aWYgKG5zIFxcdTAwMjZcXHUwMDI2IG5zLVxcdTAwM2VvcHMpXFxuIDUyODpcXHRcXHRcXHRucy1cXHUwMDNlb3BzLVxcdTAwM2VwdXQobnMpO1xcbiA1Mjk6XFx0fVxcbiA1MzA6XFx0XFxuIDUzMTpcXHRERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXFxuIDUzMjpcXHRcXG4gNTMzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5zX2NvbW1vbiAqX19tdXN0X2NoZWNrIGxlZ2l0aW1pemVfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG4gNTM0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuc19jb21tb24gKmNhbmRpZGF0ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MjUuODczNjUxMzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTMxODI2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbGVnaXRpbWl6ZV9uc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBsZWdpdGltaXplX25zYCBmdW5jdGlvbiwgZGVmaW5lZCBpbmxpbmUsIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBQcmV2aW91c2x5LCB0aGUgY29kZSBmZXRjaGVkIGEgbmFtZXNwYWNlIHJlZmVyZW5jZSB3aXRoIGBuc19nZXRfdW5sZXNzX2luYWN0aXZlKClgLCAqdGhlbiogY2hlY2tlZCBgbWF5X2xpc3RfbnMoKWAuIE5vdywgaXQncyBjaGVja2luZyBgbWF5X2xpc3RfbnMoKWAgKmJlZm9yZSogYWNxdWlyaW5nIHRoZSByZWZlcmVuY2UuIFRoYXQncyBhIHNpZ25pZmljYW50IHNoaWZ0LlxuXG5JIHNlZSB0aGF0IGBsZWdpdGltaXplX25zYCBpcyBjYWxsZWQgYnkgYGRvX2xpc3Ruc191c2VybnNgLCBgZG9fbGlzdG5zYCwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN5c19saXN0bnNgIHN5c2NhbGwuIFRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvbnRleHQuICBgbGVnaXRpbWl6ZV9uc2AgaXMgaW5saW5lZCwgd2hpY2ggbWVhbnMgaXQgZ2V0cyBleHBhbmRlZCB3aGVyZSBpdCdzIGNhbGxlZC4gU28sIHRoZSBjYWxsZXJzIGFyZSBrZXk6IGBkb19saXN0bnNfdXNlcm5zYCBhbmQgYGRvX2xpc3Ruc2AuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBub24tc3RhdGljLCBvciBpZiBvdGhlciBzeW1ib2xzIGV4aXN0LiBMb29rcyBsaWtlIGJvdGggYXJlIHN0YXRpYywgYW5kIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIHVsdGltYXRlbHkgYF9fZG9fc3lzX2xpc3Ruc2AsIGBfX3NlX3N5c19saXN0bnNgIG9yIGBzeXNfbGlzdG5zYC4gR2l2ZW4gdGhlIGNoYW5nZSBJJ3ZlIG5vdGVkIGluIHRoZSByZWZjb3VudGluZywgdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgY29uY3VycmVudCBhY2Nlc3Mgb3IgcG90ZW50aWFsbHkgd2l0aCByYWNlIGNvbmRpdGlvbnMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgc3ltYm9scyBpbiB0aGF0IGZpbGUgdGhhdCBhcmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTozMC43MjY4Mzc0NTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQ3NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihsaXN0bnN8ZG9fbGlzdG5zfGxlZ2l0aW1pemVfbnMpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9uc3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbnN0cmVlLmM9MzkyPXU2NCBfX25zX3RyZWVfZ2VuX2lkKHN0cnVjdCBuc19jb21tb24gKm5zLCB1NjQgaWQpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmMtNDAyLVxcbmtlcm5lbC9uc3RyZWUuYzo0MDM6c3RydWN0IGtsaXN0bnMge1xcbmtlcm5lbC9uc3RyZWUuYy00MDQtXFx0dTY0IF9fdXNlciAqdW5zX2lkcztcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy00MTMtXFxua2VybmVsL25zdHJlZS5jOjQxNDpzdGF0aWMgdm9pZCBfX2ZyZWVfa2xpc3Ruc19mcmVlKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMpXFxua2VybmVsL25zdHJlZS5jLTQxNS17XFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NDI0PXN0YXRpYyBpbnQgY29weV9uc19pZF9yZXEoY29uc3Qgc3RydWN0IG5zX2lkX3JlcSBfX3VzZXIgKnJlcSxcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy00NDktXFxua2VybmVsL25zdHJlZS5jOjQ1MDpzdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2tsaXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscywgc3RydWN0IG5zX2lkX3JlcSAqa3JlcSxcXG5rZXJuZWwvbnN0cmVlLmMtNDUxLVxcdFxcdFxcdFxcdCAgdTY0IF9fdXNlciAqbnNfaWRzLCBzaXplX3QgbnJfbnNfaWRzKVxcbi0tXFxua2VybmVsL25zdHJlZS5jPTQ5ND1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbG9va3VwX25zX2lkKHU2NCBtbnRfbnNfaWQsIGludCBuc190eXBlKVxcbi0tXFxua2VybmVsL25zdHJlZS5jLTUwOC1cXG5rZXJuZWwvbnN0cmVlLmM6NTA5OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbnNfcmVxdWVzdGVkKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUxMC1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKm5zKVxcbi0tXFxua2VybmVsL25zdHJlZS5jLTUxNC1cXG5rZXJuZWwvbnN0cmVlLmM6NTE1OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbWF5X2xpc3RfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG5rZXJuZWwvbnN0cmVlLmMtNTE2LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbmtlcm5lbC9uc3RyZWUuYy01MzItXFxua2VybmVsL25zdHJlZS5jOjUzMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmMtNTQ0LVxcbmtlcm5lbC9uc3RyZWUuYzo1NDU6c3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxcbmtlcm5lbC9uc3RyZWUuYy01NDYte1xcbi0tXFxua2VybmVsL25zdHJlZS5jLTU4OS1cXG5rZXJuZWwvbnN0cmVlLmM6NTkwOlxcdFxcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcXG5rZXJuZWwvbnN0cmVlLmMtNTkxLVxcdFxcdGlmICghdmFsaWQpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NjgwPXN0YXRpYyBpbmxpbmUgYm9vbCBuc19jb21tb25faXNfaGVhZChzdHJ1Y3QgbnNfY29tbW9uICpucyxcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy02ODgtXFxua2VybmVsL25zdHJlZS5jOjY4OTpzdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG5rZXJuZWwvbnN0cmVlLmMtNjkwLXtcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03MzEtXFxua2VybmVsL25zdHJlZS5jOjczMjpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTczMy1cXHRcXHRpZiAoIXZhbGlkKVxcbi0tXFxua2VybmVsL25zdHJlZS5jLTc1Ni1cXG5rZXJuZWwvbnN0cmVlLmM6NzU3OlNZU0NBTExfREVGSU5FNChsaXN0bnMsIGNvbnN0IHN0cnVjdCBuc19pZF9yZXEgX191c2VyICosIHJlcSxcXG5rZXJuZWwvbnN0cmVlLmMtNzU4LVxcdFxcdHU2NCBfX3VzZXIgKiwgbnNfaWRzLCBzaXplX3QsIG5yX25zX2lkcywgdW5zaWduZWQgaW50LCBmbGFncylcXG5rZXJuZWwvbnN0cmVlLmMtNzU5LXtcXG5rZXJuZWwvbnN0cmVlLmM6NzYwOlxcdHN0cnVjdCBrbGlzdG5zIGtsbnMgX19mcmVlKGtsaXN0bnNfZnJlZSkgPSB7fTtcXG5rZXJuZWwvbnN0cmVlLmMtNzYxLVxcdGNvbnN0IHNpemVfdCBtYXhjb3VudCA9IDEwMDAwMDA7XFxuLS1cXG5rZXJuZWwvbnN0cmVlLmMtNzc3LVxcbmtlcm5lbC9uc3RyZWUuYzo3Nzg6XFx0cmV0ID0gcHJlcGFyZV9rbGlzdG5zKFxcdTAwMjZrbG5zLCBcXHUwMDI2a3JlcSwgbnNfaWRzLCBucl9uc19pZHMpO1xcbmtlcm5lbC9uc3RyZWUuYy03NzktXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03ODItXFx0aWYgKGtyZXEudXNlcl9uc19pZClcXG5rZXJuZWwvbnN0cmVlLmM6NzgzOlxcdFxcdHJldHVybiBkb19saXN0bnNfdXNlcm5zKFxcdTAwMjZrbG5zKTtcXG5rZXJuZWwvbnN0cmVlLmMtNzg0LVxcbmtlcm5lbC9uc3RyZWUuYzo3ODU6XFx0cmV0dXJuIGRvX2xpc3RucyhcXHUwMDI2a2xucyk7XFxua2VybmVsL25zdHJlZS5jLTc4Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjMwLjc3Mzg5MDQzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzc5NzkwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuc3RyZWUuY2AgY29kZSBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJEbyBJIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBJIGV2ZW4gc3RhcnQ/XCIgU2VlbXMgbGlrZSBnb29kIHByYWN0aWNlIHRvIGNoZWNrIGlmIHRoZSBidWlsZCBwcm9jZXNzIGNvbmRpdGlvbmFsbHkgY29tcGlsZXMgdGhpcyBmaWxlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGBrZXJuZWwvTWFrZWZpbGVgLiBMZXQgbWUganVzdCB2ZXJpZnnigKYgQWgsIHRoZXJlIGl0IGlzISBgbnN0cmVlLm9gIGlzIHJpZ2h0IHRoZXJlIHVuZGVyIGBvYmoteWAuIFNvIGl0IGxvb2tzIGxpa2UgaXQncyBhbHdheXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgY29kZS4gVGhhdCBtZWFucyBpdOKAmXMgYWx3YXlzIGJ1aWx0IGluLCBhbmQgSSBzaG91bGRuJ3QgaGF2ZSB0byBmaWRkbGUgd2l0aCBhbnkgZXh0ZXJuYWwgY29uZmlncyB0byBldmVuIHN0YXJ0IGFuYWx5emluZyBpdC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZ2xhbmNlIGF0IGBpbml0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBvdGhlciBudWFuY2UgdG8gdGhpcy4gSXQncyByYXJlIGZvciB0aGVzZSBiYXNpYyBuYW1lc3BhY2VzIGxpa2UgYFVTRVJfTlNgIGFuZCBgTkFNRVNQQUNFU2AgdG8gYmUgYW55dGhpbmcgKmJ1dCogYnVpbHQtaW4sIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjMzLjU1MzY4NDI2NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NzU1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5BTUVTUEFDRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTE0MDgtXFxuaW5pdC9LY29uZmlnOjE0MDk6bWVudWNvbmZpZyBOQU1FU1BBQ0VTXFxuaW5pdC9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiTmFtZXNwYWNlcyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzMuNTk4NjcwNDc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNjY5NDc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgTkFNRVNQQUNFU2AgYW5kIGBVU0VSX05TYCBqdW1wIG91dCBhdCBtZSBhcyByZWxldmFudCBjb25maWd1cmF0aW9ucywgZXZlbiB0aG91Z2ggYG5zdHJlZS5jYCBpcyBpbiBgb2JqLXlgLiBJdCdzIGFsd2F5cyBhIHNvbGlkIHByYWN0aWNlIHRvIGVuc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCBpZiBhbnl0aGluZyBoZXJlIGV2ZW4gKnRvdWNoZXMqIG5hbWVzcGFjZXMsIHdoaWNoIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIGlzIGxpa2VseSBhZmZlY3RpbmcuIEknbSBmb2N1c2luZyBvbiBgX19kb19zeXNfbGlzdG5zYCwgYGRvX2xpc3Ruc2AsIGBkb19saXN0bnNfdXNlcm5zYCwgYW5kIGBsZWdpdGltaXplX25zYC4gVGhvc2Ugc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgYWN0aW9uIGlzLlxuXG5JIGNvbmZpcm1lZCBieSBjaGVja2luZyB0aGUgZGlmZiB0aGF0IGBrZXJuZWwvbnN0cmVlLmNgIGlzIHRoZSAqb25seSogZmlsZSB0b3VjaGVkLCB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHksIGFuZCB2YWxpZGF0ZXMgdGhlIGFib3ZlIGZvY3VzLlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSBrZXkgZmluZGluZ3MuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgY2VudGVyIGFyb3VuZCBgbGVnaXRpbWl6ZV9ucygpYCB3aXRoaW4gYGtlcm5lbC9uc3RyZWUuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyB0d2Vha2luZyB0aGUgb3JkZXIgb2YgaG93IHdlIGNoZWNrIG5hbWVzcGFjZSBhY2Nlc3NpYmlsaXR5IChgbWF5X2xpc3RfbnNgKSBhZ2FpbnN0IGdldHRpbmcgdGhlIG5hbWVzcGFjZSByZWZlcmVuY2UgKGBuc19nZXRfdW5sZXNzX2luYWN0aXZlYCkgd2hpbGUgaXRlcmF0aW5nIGluIGBsaXN0bnNgLlxuXG5UaGlzIGNoYW5nZSAqZGlyZWN0bHkqIGltcGFjdHMgY29yZSBuYW1lc3BhY2UgaW5zcGVjdGlvbiBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGBsaXN0bnNgIHN5c2NhbGwg4oCTIHNwZWNpZmljYWxseSBgZG9fbGlzdG5zYCBhbmQgYGRvX2xpc3Ruc191c2VybnNgLiBUaGUgYWNjZXNzIG9yZGVyIGNoYW5nZSBpcyBjcml0aWNhbC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIEknbSBnb2luZyB0byBmbGFnIHRoaXMgYXMgZnV6ei13b3J0aHkuIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM1MSwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzcuODY1NjIxNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI3MDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkFNRVNQQUNFU1wiLFxuICAgIFwiVVNFUl9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZG9fc3lzX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zXCIsXG4gICAgXCJkb19saXN0bnNfdXNlcm5zXCIsXG4gICAgXCJsZWdpdGltaXplX25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGVnaXRpbWl6ZV9ucygpIGluIGtlcm5lbC9uc3RyZWUuYywgcmVvcmRlcmluZyBwZXJtaXNzaW9uIGNoZWNrcyAobWF5X2xpc3RfbnMpIHByaW9yIHRvIGF0dGVtcHRpbmcgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIChuc19nZXRfdW5sZXNzX2luYWN0aXZlKSBkdXJpbmcgbmFtZXNwYWNlIGl0ZXJhdGlvbi4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gY29yZSBuYW1lc3BhY2UgaGFuZGxpbmcgYWNjZXNzaWJsZSB2aWEgdGhlIGxpc3RucyBzeXNjYWxsIChkb19saXN0bnMgYW5kIGRvX2xpc3Ruc191c2VybnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RvX3N5c19saXN0bnNcIixcbiAgICBcImRvX2xpc3Ruc1wiLFxuICAgIFwiZG9fbGlzdG5zX3VzZXJuc1wiLFxuICAgIFwibGVnaXRpbWl6ZV9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlZ2l0aW1pemVfbnMoKSBpbiBrZXJuZWwvbnN0cmVlLmMsIHJlb3JkZXJpbmcgcGVybWlzc2lvbiBjaGVja3MgKG1heV9saXN0X25zKSBwcmlvciB0byBhdHRlbXB0aW5nIHJlZmVyZW5jZSBhY3F1aXNpdGlvbiAobnNfZ2V0X3VubGVzc19pbmFjdGl2ZSkgZHVyaW5nIG5hbWVzcGFjZSBpdGVyYXRpb24uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIGNvcmUgbmFtZXNwYWNlIGhhbmRsaW5nIGFjY2Vzc2libGUgdmlhIHRoZSBsaXN0bnMgc3lzY2FsbCAoZG9fbGlzdG5zIGFuZCBkb19saXN0bnNfdXNlcm5zKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzcuOTQ4ODk4OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4ODcyMjk4OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6MzcuOTQ5MzkzOTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODg3MTc5OTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXFx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVxcdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkOWI2Njc5MzkwMjc5YTg1OGY5ZGJkYTg2ZmMxNzczY2ZiZjc1MzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE5OjI0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL25zdHJlZS5jIGIva2VybmVsL25zdHJlZS5jXG5pbmRleCA2ZDEyZTU5MDBhYzAxLi44MzFmMjc5ZDE3NGEzIDEwMDY0NFxuLS0tIGEva2VybmVsL25zdHJlZS5jXG4rKysgYi9rZXJuZWwvbnN0cmVlLmNcbkBAIC01MzMsMTkgKzUzMywxMyBAQCBERUZJTkVfRlJFRShuc19wdXQsIHN0cnVjdCBuc19jb21tb24gKiwgaWYgKCFJU19FUlJfT1JfTlVMTChfVCkpIG5zX3B1dChfVCkpXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbnNfY29tbW9uICpfX211c3RfY2hlY2sgbGVnaXRpbWl6ZV9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxuIFx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5zX2NvbW1vbiAqY2FuZGlkYXRlKVxuIHtcbi1cdHN0cnVjdCBuc19jb21tb24gKm5zIF9fZnJlZShuc19wdXQpID0gTlVMTDtcbi1cbiBcdGlmICghbnNfcmVxdWVzdGVkKGtscywgY2FuZGlkYXRlKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRucyA9IG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcbi1cdGlmICghbnMpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIG5zKSlcbitcdGlmICghbWF5X2xpc3RfbnMoa2xzLCBjYW5kaWRhdGUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBub19mcmVlX3B0cihucyk7XG4rXHRyZXR1cm4gbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShjYW5kaWRhdGUpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBkb19saXN0bnNfdXNlcm5zKHN0cnVjdCBrbGlzdG5zICprbHMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTozNy45NDkzOTQ3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTc1NjU5OTUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gYG5zdHJlZS5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gRmlyc3QsIEknbGwgemVybyBpbiBvbiB0aGUgcGF0Y2ggaXRzZWxmIOKAkyB3aGF0IG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHByb3Bvc2VkPyBUaGVuLCBJJ2xsIG5lZWQgdG8gZXhwYW5kIG15IHZpZXcgYW5kIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgc3Vycm91bmRpbmcgdGhlIHBhdGNoLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvbnN0cmVlLmNgLiBJJ2xsIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIGNvZGUgYXJvdW5kIHRoZSBzZWN0aW9uIHRoYXQncyBiZWVuIHRvdWNoZWQsIGxpa2VseSBuZWFyIGxpbmUgNTMzLiBJJ2xsIHByb2JhYmx5IGdyYWIgaXQgdXNpbmcgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb3IgcGVyaGFwcyBgZ3JlcHBlcmAgaWYgSSBqdXN0IHdhbnQgdG8gZmluZCBpdCBxdWlja2x5IHdpdGggc29tZSBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzJyBpbXBsaWNhdGlvbnMgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggYWRqYWNlbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NDkuNzA1OTk4NTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbnN0cmVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRpZiAoIW5zKVxcbiA1MDE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDUwMjpcXHRcXG4gNTAzOlxcdFxcdGlmICghbnNfZ2V0X3VubGVzc19pbmFjdGl2ZShucykpXFxuIDUwNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTA1OlxcdFxcbiA1MDY6XFx0XFx0cmV0dXJuIG5zO1xcbiA1MDc6XFx0fVxcbiA1MDg6XFx0XFxuIDUwOTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIG5zX3JlcXVlc3RlZChjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxcbiA1MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTExOlxcdHtcXG4gNTEyOlxcdFxcdHJldHVybiAha2xzLVxcdTAwM2Vuc190eXBlIHx8IChrbHMtXFx1MDAzZW5zX3R5cGUgXFx1MDAyNiBucy1cXHUwMDNlbnNfdHlwZSk7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgbWF5X2xpc3RfbnMoY29uc3Qgc3RydWN0IGtsaXN0bnMgKmtscyxcXG4gNTE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTE3OlxcdHtcXG4gNTE4OlxcdFxcdGlmIChrbHMtXFx1MDAzZXVzZXJfbnMgXFx1MDAyNlxcdTAwMjYga2xzLVxcdTAwM2V1c2VybnNfY2FwYWJsZSlcXG4gNTE5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1MjA6XFx0XFx0aWYgKGlzX2N1cnJlbnRfbmFtZXNwYWNlKG5zKSlcXG4gNTIxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1MjI6XFx0XFx0cmV0dXJuIG1heV9zZWVfYWxsX25hbWVzcGFjZXMoKTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0c3RhdGljIGlubGluZSB2b2lkIG5zX3B1dChzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTI2OlxcdHtcXG4gNTI3OlxcdFxcdGlmIChucyBcXHUwMDI2XFx1MDAyNiBucy1cXHUwMDNlb3BzKVxcbiA1Mjg6XFx0XFx0XFx0bnMtXFx1MDAzZW9wcy1cXHUwMDNlcHV0KG5zKTtcXG4gNTI5OlxcdH1cXG4gNTMwOlxcdFxcbiA1MzE6XFx0REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbiA1MzI6XFx0XFxuIDUzMzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxuIDUzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuIDUzNTpcXHR7XFxuIDUzNjpcXHRcXHRpZiAoIW5zX3JlcXVlc3RlZChrbHMsIGNhbmRpZGF0ZSkpXFxuIDUzNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0XFx0aWYgKCFtYXlfbGlzdF9ucyhrbHMsIGNhbmRpZGF0ZSkpXFxuIDU0MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0XFx0cmV0dXJuIG5zX2dldF91bmxlc3NfaW5hY3RpdmUoY2FuZGlkYXRlKTtcXG4gNTQzOlxcdH1cXG4gNTQ0OlxcdFxcbiA1NDU6XFx0c3RhdGljIHNzaXplX3QgZG9fbGlzdG5zX3VzZXJucyhzdHJ1Y3Qga2xpc3RucyAqa2xzKVxcbiA1NDY6XFx0e1xcbiA1NDc6XFx0XFx0dTY0IF9fdXNlciAqbnNfaWRzID0ga2xzLVxcdTAwM2V1bnNfaWRzO1xcbiA1NDg6XFx0XFx0c2l6ZV90IG5yX25zX2lkcyA9IGtscy1cXHUwMDNlbnJfbnNfaWRzO1xcbiA1NDk6XFx0XFx0c3RydWN0IG5zX2NvbW1vbiAqbnMgPSBOVUxMLCAqZmlyc3RfbnMgPSBOVUxMLCAqcHJldiA9IE5VTEw7XFxuIDU1MDpcXHRcXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkO1xcbiA1NTE6XFx0XFx0c3NpemVfdCByZXQ7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdFZGU19XQVJOX09OX09OQ0UoIWtscy1cXHUwMDNldXNlcl9uc19pZCk7XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdGlmIChrbHMtXFx1MDAzZXVzZXJfbnNfaWQgPT0gTElTVE5TX0NVUlJFTlRfVVNFUilcXG4gNTU2OlxcdFxcdFxcdG5zID0gdG9fbnNfY29tbW9uKGN1cnJlbnRfdXNlcl9ucygpKTtcXG4gNTU3OlxcdFxcdGVsc2UgaWYgKGtscy1cXHUwMDNldXNlcl9uc19pZClcXG4gNTU4OlxcdFxcdFxcdG5zID0gbG9va3VwX25zX2lkKGtscy1cXHUwMDNldXNlcl9uc19pZCwgQ0xPTkVfTkVXVVNFUik7XFxuIDU1OTpcXHRcXHRpZiAoIW5zKVxcbiA1NjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU2MTpcXHRcXHRrbHMtXFx1MDAzZXVzZXJfbnMgPSB0b191c2VyX25zKG5zKTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0LypcXG4gNTY0OlxcdFxcdCAqIFVzZSB0aGUgcmJ0cmVlIHRvIGZpbmQgdGhlIGZpcnN0IG5hbWVzcGFjZSB3ZSBjYXJlIGFib3V0IGFuZFxcbiA1NjU6XFx0XFx0ICogdGhlbiB1c2UgaXQncyBsaXN0IGVudHJ5IHRvIGl0ZXJhdGUgZnJvbSB0aGVyZS5cXG4gNTY2OlxcdFxcdCAqL1xcbiA1Njc6XFx0XFx0aWYgKGtscy1cXHUwMDNlbGFzdF9uc19pZCkge1xcbiA1Njg6XFx0XFx0XFx0a2xzLVxcdTAwM2VmaXJzdF9ucyA9IGxvb2t1cF9uc19vd25lcl9hdChrbHMtXFx1MDAzZWxhc3RfbnNfaWQgKyAxLCBucyk7XFxuIDU2OTpcXHRcXHRcXHRpZiAoIWtscy1cXHUwMDNlZmlyc3RfbnMpXFxuIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gNTcxOlxcdFxcdFxcdGZpcnN0X25zID0ga2xzLVxcdTAwM2VmaXJzdF9ucztcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0cmV0ID0gMDtcXG4gNTc1OlxcdFxcdGhlYWQgPSBcXHUwMDI2dG9fbnNfY29tbW9uKGtscy1cXHUwMDNldXNlcl9ucyktXFx1MDAzZW5zX293bmVyX3Jvb3QubnNfbGlzdF9oZWFkO1xcbiA1NzY6XFx0XFx0a2xzLVxcdTAwM2V1c2VybnNfY2FwYWJsZSA9IG1heV9zZWVfYWxsX25hbWVzcGFjZXMoKTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRpZiAoIWZpcnN0X25zKVxcbiA1ODE6XFx0XFx0XFx0Zmlyc3RfbnMgPSBsaXN0X2VudHJ5X3JjdShoZWFkLVxcdTAwM2VuZXh0LCB0eXBlb2YoKmZpcnN0X25zKSwgbnNfb3duZXJfbm9kZS5uc19saXN0X2VudHJ5KTtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0bnMgPSBmaXJzdF9ucztcXG4gNTg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UobnMsIGhlYWQsIG5zX293bmVyX25vZGUubnNfbGlzdF9lbnRyeSkge1xcbiA1ODU6XFx0XFx0XFx0c3RydWN0IG5zX2NvbW1vbiAqdmFsaWQ7XFxuIDU4NjpcXHRcXG4gNTg3OlxcdFxcdFxcdGlmICghbnJfbnNfaWRzKVxcbiA1ODg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdFxcdHZhbGlkID0gbGVnaXRpbWl6ZV9ucyhrbHMsIG5zKTtcXG4gNTkxOlxcdFxcdFxcdGlmICghdmFsaWQpXFxuIDU5MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDU5NTpcXHRcXG4gNTk2OlxcdFxcdFxcdG5zX3B1dChwcmV2KTtcXG4gNTk3OlxcdFxcdFxcdHByZXYgPSB2YWxpZDtcXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0XFx0aWYgKHB1dF91c2VyKHZhbGlkLVxcdTAwM2Vuc19pZCwgbnNfaWRzICsgcmV0KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTo0OS43MDYxMjY1MDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNTk4OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGtlcm5lbC9uc3RyZWUuYyBhbmQgdGhlIFVzZSBvZiBgbGVnaXRpbWl6ZV9uc2AqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoZSBga2VybmVsL25zdHJlZS5jYCBmaWxlIHdvcmtzLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLCBzbyBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgYGxlZ2l0aW1pemVfbnNgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhhdCBmaWxlLiBTZWVpbmcgdGhlIGNvbnRleHQgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgcHVycG9zZSBieSBjaGVja2luZyB3aGVyZSBpdHMgZW1wbG95ZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmRzIHRvd2FyZHMgdGhlIGZ1bmN0aW9ucyBkZXRhaWxzLiBJIHRoaW5rIGJ5IGRvaW5nIHRoaXMgSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgbW9yZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI1OjUxLjY0MjExODY5MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MDE3NTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsZWdpdGltaXplX25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9uc3RyZWUuYz01MzE9REVGSU5FX0ZSRUUobnNfcHV0LCBzdHJ1Y3QgbnNfY29tbW9uICosIGlmICghSVNfRVJSX09SX05VTEwoX1QpKSBuc19wdXQoX1QpKVxcbmtlcm5lbC9uc3RyZWUuYy01MzItXFxua2VybmVsL25zdHJlZS5jOjUzMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuc19jb21tb24gKl9fbXVzdF9jaGVjayBsZWdpdGltaXplX25zKGNvbnN0IHN0cnVjdCBrbGlzdG5zICprbHMsXFxua2VybmVsL25zdHJlZS5jLTUzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbnNfY29tbW9uICpjYW5kaWRhdGUpXFxuLS1cXG5rZXJuZWwvbnN0cmVlLmM9NTQ1PXN0YXRpYyBzc2l6ZV90IGRvX2xpc3Ruc191c2VybnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy01ODktXFxua2VybmVsL25zdHJlZS5jOjU5MDpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTU5MS1cXHRcXHRpZiAoIXZhbGlkKVxcbi0tXFxua2VybmVsL25zdHJlZS5jPTY4OT1zdGF0aWMgc3NpemVfdCBkb19saXN0bnMoc3RydWN0IGtsaXN0bnMgKmtscylcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYy03MzEtXFxua2VybmVsL25zdHJlZS5jOjczMjpcXHRcXHR2YWxpZCA9IGxlZ2l0aW1pemVfbnMoa2xzLCBucyk7XFxua2VybmVsL25zdHJlZS5jLTczMy1cXHRcXHRpZiAoIXZhbGlkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTo1My40OTIzMDA1NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2Nzg0MzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgRGVlcCBEaXZlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGlzX2N1cnJlbnRfbmFtZXNwYWNlYCBhbmQgYG5zX2dldF91bmxlc3NfaW5hY3RpdmVgLiBJIGtub3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBrZXksIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHZhbHVlIG9mIGBjYW5kaWRhdGVgIGlzIHdpdGhpbiB0aGUgYGxlZ2l0aW1pemVfbnNgIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSB2YWx1ZSBvZiB0aGF0IHZhcmlhYmxlIHdvdWxkIGxpa2VseSB0ZWxsIG1lIHRoZSBlbnRpcmUgc3RvcnkuIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgbGluZXMgNTAwLTUzMCBhZ2FpbiwgaXQncyBwb3NzaWJsZSBJIG1pc3NlZCBhIGNsdWUgaW4gbXkgcHJldmlvdXMgcGFzcywgb3IgYWx0ZXJuYXRpdmVseSwgYSBxdWljayBzZWFyY2ggZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBpc19jdXJyZW50X25hbWVzcGFjZWAgd2lsbCBnaXZlIG1lIGNvbnRleHQuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOToyNTo1NS42NjAxNDc3NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzY0MDkxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfY3VycmVudF9uYW1lc3BhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnNmcy5jPTQ1Nj1zdGF0aWMgaW50IG5zZnNfZW5jb2RlX2ZoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqZmgsIGludCAqbWF4X2xlbixcXG4tLVxcbmZzL25zZnMuYy00NzgtXFxuZnMvbnNmcy5jOjQ3OTpib29sIGlzX2N1cnJlbnRfbmFtZXNwYWNlKHN0cnVjdCBuc19jb21tb24gKm5zKVxcbmZzL25zZnMuYy00ODAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC0xMC1cXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjExOmJvb2wgaXNfY3VycmVudF9uYW1lc3BhY2Uoc3RydWN0IG5zX2NvbW1vbiAqbnMpO1xcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtMTItaW50IF9fbnNfY29tbW9uX2luaXQoc3RydWN0IG5zX2NvbW1vbiAqbnMsIHUzMiBuc190eXBlLCBjb25zdCBzdHJ1Y3QgcHJvY19uc19vcGVyYXRpb25zICpvcHMsIGludCBpbnVtKTtcXG4tLVxcbmtlcm5lbC9uc3RyZWUuYz01MTU9c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBtYXlfbGlzdF9ucyhjb25zdCBzdHJ1Y3Qga2xpc3RucyAqa2xzLFxcbi0tXFxua2VybmVsL25zdHJlZS5jLTUxOS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5rZXJuZWwvbnN0cmVlLmM6NTIwOlxcdGlmIChpc19jdXJyZW50X25hbWVzcGFjZShucykpXFxua2VybmVsL25zdHJlZS5jLTUyMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NTcuNDk2NTYyMjAzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODg3Nzc1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGZzL25zZnMuY2AgZm9yIE5hbWVzcGFjZSBJbnNwZWN0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBuYW1lc3BhY2UgaGFuZGxpbmcgaXMgY3VycmVudGx5IGltcGxlbWVudGVkLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgaXNfY3VycmVudF9uYW1lc3BhY2VgIGZ1bmN0aW9uIGluIGBmcy9uc2ZzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIHBhcnRpY3VsYXIgbmFtZXNwYWNlIGlzIHRoZSBhY3RpdmUgb25lLiBJIGtub3cgdGhpcyBpcyBhIGNvcmUgcGllY2Ugd2hlbiBkZWFsaW5nIHdpdGggaXNvbGF0aW9uIGFuZCBjb250ZXh0IHN3aXRjaGVzLCBidXQgYSByZWZyZXNoZXIgaXMgYWx3YXlzIHVzZWZ1bCwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgb24gYSBudWFuY2VkIGZlYXR1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgY3VycmVudCB0aHJlYWQgYW5kIHBvdGVudGlhbGx5IGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgbmFtZXNwYWNlLiBUaGVuLCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGltcGFjdCBvbiByZWxhdGVkIGNhbGxzIGxpa2UgYHRhc2tfYWN0aXZlX25hbWVzcGFjZWAuIEknbGwgd2FudCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NTkuNzg1MzQyMzUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25zZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFx0ZmlkLVxcdTAwM2Vuc19pbnVtXFx0PSBpbm9kZS1cXHUwMDNlaV9pbm87XFxuIDQ3NjpcXHRcXHRyZXR1cm4gRklMRUlEX05TRlM7XFxuIDQ3NzpcXHR9XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdGJvb2wgaXNfY3VycmVudF9uYW1lc3BhY2Uoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuIDQ4MDpcXHR7XFxuIDQ4MTpcXHRcXHRzd2l0Y2ggKG5zLVxcdTAwM2Vuc190eXBlKSB7XFxuIDQ4MjpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG4gNDgzOlxcdFxcdGNhc2UgQ0xPTkVfTkVXQ0dST1VQOlxcbiA0ODQ6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX2NnX25zKG5zKSk7XFxuIDQ4NTpcXHQjZW5kaWZcXG4gNDg2OlxcdCNpZmRlZiBDT05GSUdfSVBDX05TXFxuIDQ4NzpcXHRcXHRjYXNlIENMT05FX05FV0lQQzpcXG4gNDg4OlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19pcGNfbnMobnMpKTtcXG4gNDg5OlxcdCNlbmRpZlxcbiA0OTA6XFx0XFx0Y2FzZSBDTE9ORV9ORVdOUzpcXG4gNDkxOlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19tbnRfbnMobnMpKTtcXG4gNDkyOlxcdCNpZmRlZiBDT05GSUdfTkVUX05TXFxuIDQ5MzpcXHRcXHRjYXNlIENMT05FX05FV05FVDpcXG4gNDk0OlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b19uZXRfbnMobnMpKTtcXG4gNDk1OlxcdCNlbmRpZlxcbiA0OTY6XFx0I2lmZGVmIENPTkZJR19QSURfTlNcXG4gNDk3OlxcdFxcdGNhc2UgQ0xPTkVfTkVXUElEOlxcbiA0OTg6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3BpZF9ucyhucykpO1xcbiA0OTk6XFx0I2VuZGlmXFxuIDUwMDpcXHQjaWZkZWYgQ09ORklHX1RJTUVfTlNcXG4gNTAxOlxcdFxcdGNhc2UgQ0xPTkVfTkVXVElNRTpcXG4gNTAyOlxcdFxcdFxcdHJldHVybiBjdXJyZW50X2luX25hbWVzcGFjZSh0b190aW1lX25zKG5zKSk7XFxuIDUwMzpcXHQjZW5kaWZcXG4gNTA0OlxcdCNpZmRlZiBDT05GSUdfVVNFUl9OU1xcbiA1MDU6XFx0XFx0Y2FzZSBDTE9ORV9ORVdVU0VSOlxcbiA1MDY6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3VzZXJfbnMobnMpKTtcXG4gNTA3OlxcdCNlbmRpZlxcbiA1MDg6XFx0I2lmZGVmIENPTkZJR19VVFNfTlNcXG4gNTA5OlxcdFxcdGNhc2UgQ0xPTkVfTkVXVVRTOlxcbiA1MTA6XFx0XFx0XFx0cmV0dXJuIGN1cnJlbnRfaW5fbmFtZXNwYWNlKHRvX3V0c19ucyhucykpO1xcbiA1MTE6XFx0I2VuZGlmXFxuIDUxMjpcXHRcXHRkZWZhdWx0OlxcbiA1MTM6XFx0XFx0XFx0VkZTX1dBUk5fT05fT05DRSh0cnVlKTtcXG4gNTE0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6MjU6NTkuNzg1NDMzMTAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDM1NzM4MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnMsIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgY2hhbmdlIGluIGBsZWdpdGltaXplX25zYC4gVGhlIG9yaWdpbmFsIGNvZGUgdG9vayBhIHJlZmVyZW5jZSB0byBgY2FuZGlkYXRlYCAqYmVmb3JlKiBjaGVja2luZyBgbWF5X2xpc3RfbnNgLiBUaGUgcGF0Y2ggcmV2ZXJzZXMgdGhpcywgY2hlY2tpbmcgYG1heV9saXN0X25zYCAqYmVmb3JlKiBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZWAuIEl0J3MgZXNzZW50aWFsbHkgYW4gb3B0aW1pemF0aW9uLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IGlmIHRoZSBhY2Nlc3MgaXNuJ3QgcGVybWl0dGVkLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMsIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgb24gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZXMgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgZ2l2ZW4gdGhlIFJDVSBjb250ZXh0LiBXZSBhcmUgdW5kZXIgUkNVIHJlYWQgbG9jaywgYnV0IHRoZSBvcmRlcmluZyBjaGFuZ2Ugc2hpZnRzIHRoZSBwb2ludCBhdCB3aGljaCB3ZSd2ZSAqZ3VhcmFudGVlZCogdGhhdCBgY2FuZGlkYXRlYCBpcyB2YWxpZC5cblxuSG93ZXZlciwgSSBkb24ndCBzZWUgYW55IGRpcmVjdCBLTVNBTiByZWQgZmxhZ3MuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHdoZXJlIGZpZWxkcyAqY291bGQqIGJlIHVuaW5pdGlhbGl6ZWQuIFRoZXJlJ3Mgbm8gY2hhbmdlIGluIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgd291bGQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSdyZSBub3QgYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHBhdGNoJ3Mgc2NvcGUuIE5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBidWZmZXIgbGVuZ3RocyBhcmUgcHJlc2VudCwgd2hpY2ggY291bGQgcmVzdWx0IGluIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIFRoZSBwYXRjaCBkb2Vzbid0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gYHB1dF91c2VyKClgIGlzIHVzZWQgc2FmZWx5LCBjb3B5aW5nIGFuIGV4aXN0aW5nIGB1NjQgbnNfaWRgLiBUaGUgcG90ZW50aWFsIHJpc2sgaXMgbW9yZSBhbGlnbmVkIHdpdGggS0FTQU4gZHVlIHRvIHRoZSBvcmRlcmluZyBjaGFuZ2UgYW5kIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy5cblxuVGhlIEtNU0FOIGFzcGVjdHMgKHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkpIHNlZW0gY29tcGxldGVseSBhYnNlbnQuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgKndoZW4qIHdlIGNoZWNrIHRoZSBwZXJtaXNzaW9ucyBhbmQgKndoZXRoZXIqIHdlIGluY3JlbWVudCB0aGUgcmVmY291bnQsIG5vdCAqd2hhdCogZGF0YSBpcyBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFuIG9wdGltaXphdGlvbiB0aGF0IGhhcyBLQVNBTiBpbXBsaWNhdGlvbnMgaWYgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucy5cblxuVGhlcmVmb3JlLCBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgdGhlIGBLTVNBTlJlYXNvbmluZ2Agd291bGQgZm9jdXMgb24gdGhpcyBjaGFuZ2UgYmVpbmcgYW4gb3B0aW1pemF0aW9uIHRvIHJlZmNvdW50IG1hbmFnZW1lbnQsIG5vdCB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAzLCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjI2OjE2LjgyMTE3NDQ0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxlZ2l0aW1pemVfbnMoKWAgaW4gYGtlcm5lbC9uc3RyZWUuY2AgdG8gcGVyZm9ybSB0aGUgYG1heV9saXN0X25zKClgIHBlcm1pc3Npb24gY2hlY2sgb24gdGhlIGNhbmRpZGF0ZSBuYW1lc3BhY2UgcHJpb3IgdG8gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHZpYSBgbnNfZ2V0X3VubGVzc19pbmFjdGl2ZSgpYCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIGFuZCBjbGVhbnVwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBkYXRhIGxlbmd0aHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFsbCBmaWVsZHMgYWNjZXNzZWQgKGBjYW5kaWRhdGUtXFx1MDAzZW5zX3R5cGVgLCBgY2FuZGlkYXRlLVxcdTAwM2Vuc19pZGAsIGV0Yy4pIGJlbG9uZyB0byBpbml0aWFsaXplZCBuYW1lc3BhY2Ugc3RydWN0dXJlcyBpbiB0aGUgbmFtZXNwYWNlIHRyZWUuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHJlbGF0ZWQgdG8gZGVyZWZlcmVuY2luZyBgY2FuZGlkYXRlYCB1bmRlciBSQ1UgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHdvdWxkIGJlIG9iamVjdCBsaWZldGltZS91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgY292ZXJlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsZWdpdGltaXplX25zKClgIGluIGBrZXJuZWwvbnN0cmVlLmNgIHRvIHBlcmZvcm0gdGhlIGBtYXlfbGlzdF9ucygpYCBwZXJtaXNzaW9uIGNoZWNrIG9uIHRoZSBjYW5kaWRhdGUgbmFtZXNwYWNlIHByaW9yIHRvIGFjcXVpcmluZyBhIHJlZmVyZW5jZSB2aWEgYG5zX2dldF91bmxlc3NfaW5hY3RpdmUoKWAsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZSBhY3F1aXNpdGlvbiBhbmQgY2xlYW51cC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWxsb2NhdGUgYW55IG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgZGF0YSBsZW5ndGhzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbGwgZmllbGRzIGFjY2Vzc2VkIChgY2FuZGlkYXRlLVxcdTAwM2Vuc190eXBlYCwgYGNhbmRpZGF0ZS1cXHUwMDNlbnNfaWRgLCBldGMuKSBiZWxvbmcgdG8gaW5pdGlhbGl6ZWQgbmFtZXNwYWNlIHN0cnVjdHVyZXMgaW4gdGhlIG5hbWVzcGFjZSB0cmVlLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyByZWxhdGVkIHRvIGRlcmVmZXJlbmNpbmcgYGNhbmRpZGF0ZWAgdW5kZXIgUkNVIHByaW9yIHRvIHRha2luZyBhIHJlZmVyZW5jZSB3b3VsZCBiZSBvYmplY3QgbGlmZXRpbWUvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9mrbk[1] Phase: Succeeded StartedAt: 2026-09-07 19:26:28 +0000 UTC FinishedAt: 2026-09-07 19:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 19:26:28 +0000 UTC FinishedAt: 2026-09-07 19:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2] Phase: Succeeded StartedAt: 2026-09-07 19:26:28 +0000 UTC FinishedAt: 2026-09-07 19:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-07 19:26:28 +0000 UTC FinishedAt: 2026-09-07 19:47:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 19:26:28 +0000 UTC FinishedAt: 2026-09-07 19:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 19:26:28 +0000 UTC FinishedAt: 2026-09-07 19:26:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mrbk/series-workflow9mrbk-convert-artifact-4292160733/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 19:26:38 +0000 UTC FinishedAt: 2026-09-07 19:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 19:26:38 +0000 UTC FinishedAt: 2026-09-07 19:42:36 +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:*ac1730ff-ce04-4bb4-9484-cb02b92083ef,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-workflow9mrbk/series-workflow9mrbk-convert-artifact-4292160733/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": "14879e34-9acf-4a94-a39f-8617be275f3b", "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-workflow9mrbk/series-workflow9mrbk-build-action-207093779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 19:26:38 +0000 UTC FinishedAt: 2026-09-07 19:42:26 +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:*ac1730ff-ce04-4bb4-9484-cb02b92083ef,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-workflow9mrbk/series-workflow9mrbk-convert-artifact-4292160733/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": "14879e34-9acf-4a94-a39f-8617be275f3b", "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-workflow9mrbk/series-workflow9mrbk-build-action-207093779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 19:42:36 +0000 UTC FinishedAt: 2026-09-07 19:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 19:42:36 +0000 UTC FinishedAt: 2026-09-07 19:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 19:42:36 +0000 UTC FinishedAt: 2026-09-07 19:42:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 19:42:36 +0000 UTC FinishedAt: 2026-09-07 19:42:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mrbk/series-workflow9mrbk-convert-artifact-2584866488/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 19:42:46 +0000 UTC FinishedAt: 2026-09-07 19:46:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 19:42:46 +0000 UTC FinishedAt: 2026-09-07 19:46:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14879e34-9acf-4a94-a39f-8617be275f3b,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-workflow9mrbk/series-workflow9mrbk-build-action-207093779/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": false },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-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-09-07 19:46:59 +0000 UTC FinishedAt: 2026-09-07 19:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mrbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__do_sys_listns","do_listns","do_listns_userns","legitimize_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NAMESPACES","USER_NS"],"series_id":"40346966-3a38-4a48-91fd-e4580cd87ab8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-09-07 19:46:59 +0000 UTC FinishedAt: 2026-09-07 19:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}