Name: series-workflowd7hvd Phase: Succeeded StartedAt: 2026-08-26 07:46:08 +0000 UTC FinishedAt: 2026-08-26 11:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[0] Phase: Succeeded StartedAt: 2026-08-26 07:46:08 +0000 UTC FinishedAt: 2026-08-26 08:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 07:46:08 +0000 UTC FinishedAt: 2026-08-26 08:05:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_DUALPI2", "NET_SCH_ETS", "NET_SCH_FQ", "NET_SCH_PIE", "NET_SCH_FQ_PIE", "NET_SCH_HHF", "NET_SCH_SFQ" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_DUALPI2", "NET_SCH_ETS", "NET_SCH_FQ", "NET_SCH_PIE", "NET_SCH_FQ_PIE", "NET_SCH_HHF", "NET_SCH_SFQ" ], "series_id": "ce889dfc-dc59-4406-94d4-23b1b0fd77ed" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "drr_change_class", "dualpi2_change", "dualpi2_init", "dualpi2_enqueue_skb", "ets_qdisc_change", "fq_change", "fq_pie_change", "hhf_change", "pie_drop_early", "sfq_change" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RVQUxQSTImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0hIRiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1NGUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rycl9jaGFuZ2VfY2xhc3MmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9pbml0JiMzNDssCiAgICAmIzM0O2R1YWxwaTJfZW5xdWV1ZV9za2ImIzM0OywKICAgICYjMzQ7ZXRzX3FkaXNjX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfcGllX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtoaGZfY2hhbmdlJiMzNDssCiAgICAmIzM0O3BpZV9kcm9wX2Vhcmx5JiMzNDssCiAgICAmIzM0O3NmcV9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyAobWluL21heC9jbGFtcCkgdG8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGxpa2UgYHF1YW50dW1gIGFuZCBNVFUtZGVyaXZlZCB2YWx1ZXMgYWNyb3NzIHZhcmlvdXMgbmV0d29yayBzY2hlZHVsZXJzIChEUlIsIERVQUxQSTIsIEVUUywgRlEsIEZRX1BJRSwgSEhGLCBQSUUsIFNGUSkuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsb2dpY2FsIGJ1Z3Mgc3VjaCBhcyBpbmZpbml0ZSBsb29wcyAoZS5nLiwgemVybyBxdWFudHVtKSwgZGl2aXNpb24gYnkgemVybywgb3IgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9ucy9pbnRlZ2VyIG92ZXJmbG93cyAoZS5nLiwgZXh0cmVtZWx5IGxhcmdlIHF1YW50dW0gb3IgTVRVIHZhbHVlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGhvdyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBoYW5ncykgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgaGFuZyBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzIChxZGlzY3MpIHRvIGNsYW1wIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzLCBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIHplcm8gb3Igb3Zlcmx5IGxhcmdlIHZhbHVlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgcWRpc2NzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyBjbGFtcGluZyBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5pbmRleCA5MWIxZWY4MjRhZmFmLi4wZmZkYWIyN2JhZTQyIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kcnIuY1xuQEAgLTgyLDggJiM0Mzs4Miw5IEBAIHN0YXRpYyBpbnQgZHJyX2NoYW5nZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQsIHUzMiBwYXJlbnRpZCxcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1NwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1wmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdHF1YW50dW0gPSBtYXgoMjU2VSwgcXVhbnR1bSk7XG4gXHR9IGVsc2Vcbi1cdFx0cXVhbnR1bSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpO1xuJiM0MztcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcbiBcdGlmIChjbCAhPSBOVUxMKSB7XG4gXHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuQEAgLTIwOCw5ICYjNDM7MjA4LDExIEBAIHN0YXRpYyB2b2lkIGR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEpXG4gc3RhdGljIHZvaWQgZHVhbHBpMl9jYWxjdWxhdGVfY19wcm90ZWN0aW9uKHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLCB1MzIgd2MpXG4ge1xuJiM0MztcdHUzMiBtdHUgPSBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksIDEsIDEgXHUwMDNjXHUwMDNjIDIwKTtcbiYjNDM7XG4gXHRxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyA9IHdjO1xuIFx0cS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3Yztcbi1cdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICpcbiYjNDM7XHRxLVx1MDAzZWNfcHJvdGVjdGlvbl9pbml0ID0gKHMzMiltdHUgKlxuIFx0XHQoKGludClxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyAtIChpbnQpcS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wpO1xuIFx0ZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24ocSk7XG4gfVxuQEAgLTI4NSw4ICYjNDM7Mjg3LDkgQEAgc3RhdGljIGJvb2wgbXVzdF9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxuIFx0dTY0IGxvY2FsX2xfcHJvYjtcbiBcdGJvb2wgb3ZlcmxvYWQ7XG4gXHR1MzIgcHJvYjtcbiYjNDM7XHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4tXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpXG4mIzQzO1x0aWYgKHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyBcdTAwM2MgMiAqIG10dSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cHJvYiA9IFJFQURfT05DRShxLVx1MDAzZXBpMl9wcm9iKTtcbkBAIC03MTIsNyAmIzQzOzcxNSw4IEBAIHN0YXRpYyB1MzIgZ2V0X21lbW9yeV9saW1pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxpbWl0KVxuIFx0LyogQXBwbHkgcnVsZSBvZiB0aHVtYiwgaS5lLiwgZG91YmxpbmcgdGhlIHBhY2tldCBsZW5ndGgsXG4gXHQgKiB0byBmdXJ0aGVyIGluY2x1ZGUgcGVyIHBhY2tldCBvdmVyaGVhZCBpbiBtZW1vcnlfbGltaXQuXG4gXHQgKi9cbi1cdHU2NCBtZW1saW0gPSBtdWxfdTMyX3UzMihsaW1pdCwgMiAqIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiYjNDM7XHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgMSwgMSBcdTAwM2NcdTAwM2MgMjApKTtcbiBcbiBcdGlmICh1cHBlcl8zMl9iaXRzKG1lbWxpbSkpXG4gXHRcdHJldHVybiBVMzJfTUFYO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5pbmRleCAyNWZjZjQwNzlmZWNlLi5mMjNjOGRjNjhmOGNiIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ldHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xuQEAgLTYzNiw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHQgKi9cbiBcdGZvciAoaSA9IG5zdHJpY3Q7IGkgXHUwMDNjIG5iYW5kczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCFxdWFudGFbaV0pXG4tXHRcdFx0cXVhbnRhW2ldID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7XG4mIzQzO1x0XHRcdHF1YW50YVtpXSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcdH1cbiBcbiBcdC8qIEJlZm9yZSBjb21taXQsIG1ha2Ugc3VyZSB3ZSBjYW4gYWxsb2NhdGUgYWxsIG5ldyBxZGlzY3MgKi9cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbmluZGV4IDYxNDRiNTY4NmYxM2YuLmFiOGU3YzZhZTIwMzkgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuQEAgLTk4MCw3ICYjNDM7OTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0ge1xuLVx0Lm1heCA9IElOVF9NQVgsXG4mIzQzO1x0Lm1heCA9IDEgXHUwMDNjXHUwMDNjIDIwLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX3BvbGljeVtUQ0FfRlFfTUFYICYjNDM7IDFdID0ge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXG5pbmRleCBiMjdkOTU0MTg3MDdhLi41OTgyODQ3ZGY4Zjg1IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuQEAgLTM0MSw3ICYjNDM7MzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdFx0ICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pXG4tXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSk7XG4mIzQzO1x0XHRXUklURV9PTkNFKHEtXHUwMDNlcXVhbnR1bSxcbiYjNDM7XHRcdFx0ICAgbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pKSk7XG4gXG4gXHRpZiAodGJbVENBX0ZRX1BJRV9NRU1PUllfTElNSVRdKVxuIFx0XHRXUklURV9PTkNFKHEtXHUwMDNlbWVtb3J5X2xpbWl0LFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGhmLmMgYi9uZXQvc2NoZWQvc2NoX2hoZi5jXG5pbmRleCA5NmFjYWI2YThkYTAzLi5iYjhlODk1MmY1NTUzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oaGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xuQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX0hIRl9RVUFOVFVNXSlcbi1cdFx0bmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTtcbiYjNDM7XHRcdG5ld19xdWFudHVtID0gbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfUVVBTlRVTV0pKTtcbiBcbiBcdGlmICh0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKVxuIFx0XHRuZXdfaGhmX25vbl9oaF93ZWlnaHQgPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9waWUuY1xuaW5kZXggYjQxZjJkZWYyZTJjYy4uM2I3ODYzZmZkMjg0YyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfcGllLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfcGllLmNcbkBAIC0zNSw3ICYjNDM7MzUsNyBAQCBib29sIHBpZV9kcm9wX2Vhcmx5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxuIHtcbiBcdHU2NCBybmQ7XG4gXHR1NjQgbG9jYWxfcHJvYiA9IHZhcnMtXHUwMDNlcHJvYjtcbi1cdHUzMiBtdHUgPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbiYjNDM7XHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXG4gXHRpZiAodmFycy1cdTAwM2VidXJzdF90aW1lIFx1MDAzZSAwKVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTY2MCw2ICYjNDM7NjYwLDExIEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoY3RsLVx1MDAzZXF1YW50dW0gXHUwMDNlIDEgXHUwMDNjXHUwMDNjIDIwKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtxdWFudHVtIHRvbyBsYXJnZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGN0bC1cdTAwM2VwZXJ0dXJiX3BlcmlvZCBcdTAwM2MgMCB8fFxuIFx0ICAgIGN0bC1cdTAwM2VwZXJ0dXJiX3BlcmlvZCBcdTAwM2UgSU5UX01BWCAvIEhaKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2ludmFsaWQgcGVydHVyYiBwZXJpb2RcJiMzNDspO1xuQEAgLTY4OCw3ICYjNDM7NjkzLDcgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXG4gXHQvKiB1cGRhdGUgYW5kIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gKi9cbiBcdGlmIChjdGwtXHUwMDNlcXVhbnR1bSlcbi1cdFx0cXVhbnR1bSA9IGN0bC1cdTAwM2VxdWFudHVtO1xuJiM0MztcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXHUwMDNlcXVhbnR1bSk7XG4gXHRpZiAoY3RsLVx1MDAzZWZsb3dzKVxuIFx0XHRtYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLVx1MDAzZWZsb3dzLCBTRlFfTUFYX0ZMT1dTKTtcbiBcdGlmIChjdGwtXHUwMDNlZGl2aXNvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EVUFMUEkyJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9ISEYmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9TRlEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcnJfY2hhbmdlX2NsYXNzJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfY2hhbmdlJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfaW5pdCYjMzQ7LAogICAgJiMzNDtkdWFscGkyX2VucXVldWVfc2tiJiMzNDssCiAgICAmIzM0O2V0c19xZGlzY19jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX3BpZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7aGhmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwaWVfZHJvcF9lYXJseSYjMzQ7LAogICAgJiMzNDtzZnFfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG11bHRpcGxlIG5ldHdvcmsgc2NoZWR1bGVycyAocWRpc2NzKSB0byBjbGFtcCBgcXVhbnR1bWAgYW5kIGBtdHVgIHZhbHVlcywgcHJldmVudGluZyBpc3N1ZXMgd2l0aCB6ZXJvIG9yIG92ZXJseSBsYXJnZSB2YWx1ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIHFkaXNjcyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xhbXBpbmcgbG9naWMgYmVoYXZlcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhMzQyNWRjMDhmYmRmYTk3OWY1ZmM2ZDMzZTQ0NjBiMWQzOGQxZDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwODowMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kcnIuYwpAQCAtODIsOCAmIzQzOzgyLDkgQEAgc3RhdGljIGludCBkcnJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLAogCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1NwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVybyYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQlxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pOwogCX0gZWxzZQotCQlxdWFudHVtID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7CiYjNDM7CQlxdWFudHVtID0gbWF4KDI1NlUsICh1MzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpOwogCiAJaWYgKGNsICE9IE5VTEwpIHsKIAkJaWYgKHRjYVtUQ0FfUkFURV0pIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKQEAgLTIwOCw5ICYjNDM7MjA4LDExIEBAIHN0YXRpYyB2b2lkIGR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEpCiBzdGF0aWMgdm9pZCBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb24oc3RydWN0IFFkaXNjICpzY2gsCiAJCQkJCSAgIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsIHUzMiB3YykKIHsKJiM0MzsJdTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSAmbHQ7Jmx0OyAyMCk7CiYjNDM7CiAJcS0mZ3Q7Y19wcm90ZWN0aW9uX3djID0gd2M7CiAJcS0mZ3Q7Y19wcm90ZWN0aW9uX3dsID0gTUFYX1dDIC0gd2M7Ci0JcS0mZ3Q7Y19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICoKJiM0MzsJcS0mZ3Q7Y19wcm90ZWN0aW9uX2luaXQgPSAoczMyKW10dSAqCiAJCSgoaW50KXEtJmd0O2NfcHJvdGVjdGlvbl93YyAtIChpbnQpcS0mZ3Q7Y19wcm90ZWN0aW9uX3dsKTsKIAlkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTsKIH0KQEAgLTI4NSw4ICYjNDM7Mjg3LDkgQEAgc3RhdGljIGJvb2wgbXVzdF9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLAogCXU2NCBsb2NhbF9sX3Byb2I7CiAJYm9vbCBvdmVybG9hZDsKIAl1MzIgcHJvYjsKJiM0MzsJdTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSAmbHQ7Jmx0OyAyMCk7CiAKLQlpZiAoc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmbHQ7IDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSkKJiM0MzsJaWYgKHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJmx0OyAyICogbXR1KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlwcm9iID0gUkVBRF9PTkNFKHEtJmd0O3BpMl9wcm9iKTsKQEAgLTcxMiw3ICYjNDM7NzE1LDggQEAgc3RhdGljIHUzMiBnZXRfbWVtb3J5X2xpbWl0KHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgbGltaXQpCiAJLyogQXBwbHkgcnVsZSBvZiB0aHVtYiwgaS5lLiwgZG91YmxpbmcgdGhlIHBhY2tldCBsZW5ndGgsCiAJICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LgogCSAqLwotCXU2NCBtZW1saW0gPSBtdWxfdTMyX3UzMihsaW1pdCwgMiAqIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTsKJiM0MzsJdTY0IG1lbWxpbSA9IG11bF91MzJfdTMyKGxpbWl0LCAyICogY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLAomIzQzOwkJCQkJCSAgICAgMSwgMSAmbHQ7Jmx0OyAyMCkpOwogCiAJaWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSkKIAkJcmV0dXJuIFUzMl9NQVg7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuYwppbmRleCAyNWZjZjQwNzlmZWNlLi5mMjNjOGRjNjhmOGNiIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZXRzLmMKQEAgLTYzNiw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJICovCiAJZm9yIChpID0gbnN0cmljdDsgaSAmbHQ7IG5iYW5kczsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCFxdWFudGFbaV0pCi0JCQlxdWFudGFbaV0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKJiM0MzsJCQlxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7CiAJfQogCiAJLyogQmVmb3JlIGNvbW1pdCwgbWFrZSBzdXJlIHdlIGNhbiBhbGxvY2F0ZSBhbGwgbmV3IHFkaXNjcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jCmluZGV4IDYxNDRiNTY4NmYxM2YuLmFiOGU3YzZhZTIwMzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZnEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxLmMKQEAgLTk4MCw3ICYjNDM7OTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0gewotCS5tYXggPSBJTlRfTUFYLAomIzQzOwkubWF4ID0gMSAmbHQ7Jmx0OyAyMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmcV9wb2xpY3lbVENBX0ZRX01BWCAmIzQzOyAxXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jCmluZGV4IGIyN2Q5NTQxODcwN2EuLjU5ODI4NDdkZjhmODUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuYwpAQCAtMzQxLDcgJiM0MzszNDEsOCBAQCBzdGF0aWMgaW50IGZxX3BpZV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAkJCSAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfQkVUQV0pKTsKIAogCWlmICh0YltUQ0FfRlFfUElFX1FVQU5UVU1dKQotCQlXUklURV9PTkNFKHEtJmd0O3F1YW50dW0sIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pKTsKJiM0MzsJCVdSSVRFX09OQ0UocS0mZ3Q7cXVhbnR1bSwKJiM0MzsJCQkgICBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9RVUFOVFVNXSkpKTsKIAogCWlmICh0YltUQ0FfRlFfUElFX01FTU9SWV9MSU1JVF0pCiAJCVdSSVRFX09OQ0UocS0mZ3Q7bWVtb3J5X2xpbWl0LApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oaGYuYyBiL25ldC9zY2hlZC9zY2hfaGhmLmMKaW5kZXggOTZhY2FiNmE4ZGEwMy4uYmI4ZTg5NTJmNTU1MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oaGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2hoZi5jCkBAIC01NTEsNyAmIzQzOzU1MSw3IEBAIHN0YXRpYyBpbnQgaGhmX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHRiW1RDQV9ISEZfUVVBTlRVTV0pCi0JCW5ld19xdWFudHVtID0gbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSk7CiYjNDM7CQluZXdfcXVhbnR1bSA9IG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKSk7CiAKIAlpZiAodGJbVENBX0hIRl9OT05fSEhfV0VJR0hUXSkKIAkJbmV3X2hoZl9ub25faGhfd2VpZ2h0ID0gbmxhX2dldF91MzIodGJbVENBX0hIRl9OT05fSEhfV0VJR0hUXSk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9waWUuYwppbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3BpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfcGllLmMKQEAgLTM1LDcgJiM0MzszNSw3IEBAIGJvb2wgcGllX2Ryb3BfZWFybHkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBwaWVfcGFyYW1zICpwYXJhbXMsCiB7CiAJdTY0IHJuZDsKIAl1NjQgbG9jYWxfcHJvYiA9IHZhcnMtJmd0O3Byb2I7Ci0JdTMyIG10dSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOwomIzQzOwl1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxICZsdDsmbHQ7IDIwKTsKIAogCS8qIElmIHRoZXJlIGlzIHN0aWxsIGJ1cnN0IGFsbG93YW5jZSBsZWZ0IHNraXAgcmFuZG9tIGVhcmx5IGRyb3AgKi8KIAlpZiAodmFycy0mZ3Q7YnVyc3RfdGltZSAmZ3Q7IDApCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTY2MCw2ICYjNDM7NjYwLDExIEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKGN0bC0mZ3Q7cXVhbnR1bSAmZ3Q7IDEgJmx0OyZsdDsgMjApIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7cXVhbnR1bSB0b28gbGFyZ2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChjdGwtJmd0O3BlcnR1cmJfcGVyaW9kICZsdDsgMCB8fAogCSAgICBjdGwtJmd0O3BlcnR1cmJfcGVyaW9kICZndDsgSU5UX01BWCAvIEhaKSB7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7aW52YWxpZCBwZXJ0dXJiIHBlcmlvZCYjMzQ7KTsKQEAgLTY4OCw3ICYjNDM7NjkzLDcgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAKIAkvKiB1cGRhdGUgYW5kIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoY3RsLSZndDtxdWFudHVtKQotCQlxdWFudHVtID0gY3RsLSZndDtxdWFudHVtOwomIzQzOwkJcXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtJmd0O3F1YW50dW0pOwogCWlmIChjdGwtJmd0O2Zsb3dzKQogCQltYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLSZndDtmbG93cywgU0ZRX01BWF9GTE9XUyk7CiAJaWYgKGN0bC0mZ3Q7ZGl2aXNvcikgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogODQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgU2NoZWR1bGVyIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYSBidW5jaCBvZiBmaWxlcyBpbiB0aGUgYG5ldC9zY2hlZC9gIGRpcmVjdG9yeS4gU2VlbXMgbGlrZSBpdCYjMzk7cyBtYWlubHkgYWJvdXQgY2xhbXBpbmcgdGhlIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzIGluIHRoZXNlIGRpZmZlcmVudCBxdWV1aW5nIGRpc2NpcGxpbmVzIChxZGlzY3MpIHRvIHByZXZlbnQgcHJvYmxlbXMuIEkgc2VlIGl0IHRvdWNoZXMgYHNjaF9kcnIuY2AsIGBzY2hfZHVhbHBpMi5jYCwgYHNjaF9ldHMuY2AsIGBzY2hfZnEuY2AsIGBzY2hfZnFfcGllLmNgLCBgc2NoX2hoZi5jYCwgYHNjaF9waWUuY2AsIGFuZCBgc2NoX3NmcS5jYC4gIFRoaW5ncyBsaWtlIGVuc3VyaW5nIGBxdWFudHVtYCBpcyBhdCBsZWFzdCAyNTYsIGFuZCBtYWtpbmcgc3VyZSBgbXR1YCBzdGF5cyB3aXRoaW4gcmVhc29uYWJsZSBib3VuZHMuIFRoaXMgaXMgYWxsIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhlc2UgY2hhbmdlcyB2aWEgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgLiBCaW5nbywgdGhpcyBpcyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLgoKTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gYWRkIHRvIHRoZSBmdXp6aW5nIHRhcmdldCYjMzk7cyBgRm9jdXNTeW1ib2xzYC4gU28sIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZmlsZSBieSBmaWxlOgoKKiAgIGBzY2hfZHJyLmNgOiBUaGUgY2hhbmdlIGlzIGhhcHBlbmluZyBpbiBgZHJyX2NoYW5nZV9jbGFzc2AuCiogICBgc2NoX2R1YWxwaTIuY2A6ICBJIHNlZSBjaGFuZ2VzIGluIGBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb25gLCBgbXVzdF9kcm9wYCwgYW5kIGBnZXRfbWVtb3J5X2xpbWl0YC4gIGBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb25gIGlzIGxpa2VseSBoaXQgZnJvbSBgZHVhbHBpMl9jaGFuZ2VgIG9yIGBkdWFscGkyX2luaXRgLCBgbXVzdF9kcm9wYCBmcm9tIGBkdWFscGkyX2VucXVldWVgLCBhbmQgYGdldF9tZW1vcnlfbGltaXRgIGZyb20gYGR1YWxwaTJfaW5pdGAgb3IgYGR1YWxwaTJfY2hhbmdlYC4gSSBzaG91bGQgY2hlY2sgdGhlIGVudHJ5cG9pbnRzLgoqICAgYHNjaF9ldHMuY2A6IGBldHNfcWRpc2NfY2hhbmdlYCBpcyB3aGF0IHRvIGZvY3VzIG9uLgoqICAgYHNjaF9mcS5jYDogSSBzZWUgYGZxX3Jlc2l6ZWAgKHdoaWNoIGlzIGNhbGxlZCBieSBgZnFfY2hhbmdlYCksIGFuZCB0aGUgYGZxX3BvbGljeWAgZGF0YSBzdHJ1Y3R1cmUuCiogICBgc2NoX2ZxX3BpZS5jYDogVGhlIGludGVyZXN0aW5nIGZ1bmN0aW9uIGhlcmUgaXMgYGZxX3BpZV9jaGFuZ2VgLgoqICAgYHNjaF9oaGYuY2A6IFRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgaGhmX2NoYW5nZWAuCiogICBgc2NoX3BpZS5jYDogSSBuZWVkIHRvIGxvb2sgYXQgZWl0aGVyIGBwaWVfZHJvcF9lYXJseWAgb3IgYHBpZV9lbnF1ZXVlYC4KKiAgIGBzY2hfc2ZxLmNgOiBUaGUgcGxhY2UgdG8gZm9jdXMgd2lsbCBiZSBgc2ZxX2NoYW5nZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIHRoZSBvbmVzIHdlJiMzOTtsbCB0YXJnZXQuIEkgcmVtZW1iZXIgYHRjX21vZGlmeV9xZGlzY2AgaXMgZ2VuZXJpYywgSSB3YW50IHRoZSBzcGVjaWZpYyBvbmVzIGZvciBlYWNoIHFkaXNjLgoKKiAgIGBzY2hfZHJyLmNgOiBgZHJyX2NoYW5nZV9jbGFzc2AgaXMgb3VyIGBRZGlzY19jbGFzc19vcHMuY2hhbmdlYCBlbnRyeS4KKiAgIGBzY2hfZHVhbHBpMi5jYDogYGR1YWxwaTJfY2hhbmdlYCwgYGR1YWxwaTJfaW5pdGAsIGFuZCBwb3RlbnRpYWxseSBgZHVhbHBpMl9lbnF1ZXVlYC4KKiAgIGBzY2hfZXRzLmNgOiBgZXRzX3FkaXNjX2NoYW5nZWAuCiogICBgc2NoX2ZxLmNgOiBgZnFfY2hhbmdlYC4KKiAgIGBzY2hfZnFfcGllLmNgOiBgZnFfcGllX2NoYW5nZWAuCiogICBgc2NoX2hoZi5jYDogYGhoZl9jaGFuZ2VgLgoqICAgYHNjaF9waWUuY2A6IE9rYXksIGBwaWVfZHJvcF9lYXJseWAgKmlzbnQqIGV4cG9ydGVkLCBidXQgaXMgaW4gYHNjaF9waWUuY2AgYnV0IGNhbGxlZCBieSBgc2NoX3BpZWAgYW5kIGBzY2hfZnFfcGllYC4gSSYjMzk7bGwgY2hlY2sgYHBpZV9kcm9wX2Vhcmx5YCBvciBgcGllX2VucXVldWVgLgoqICAgYHNjaF9zZnEuY2A6IGBzZnFfY2hhbmdlYC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgbmV4dCB0byB2ZXJpZnkgYWxsIG9mIHRoaXMgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IGRycl9jaGFuZ2VfY2xhc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2Ryci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZHJyLmM9NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRycl9wb2xpY3lbVENBX0RSUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy01Ny1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6NTg6c3RhdGljIGludCBkcnJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLFxubmV0L3NjaGVkL3NjaF9kcnIuYy01OS1cdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gYHNjaF9kdWFscGkyLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgZHVhbC1QSTIgc3lzdGVtIGlzIGluaXRpYWxpemluZyBhbmQgcmVzcG9uZGluZyB0byBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYHNjaF9kdWFscGkyLmNgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBjaGFuZ2UgaGFuZGxpbmcg4oCTIHNvIHRoYXQgbWVhbnMgSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBgZHVhbHBpMl9pbml0YCBhbmQgYGR1YWxwaTJfY2hhbmdlYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgYXJjaGl0ZWN0ZWQsIHdoYXQgdGhleSBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgdGhpbmdzIGNvdWxkIGdldCB0cmlja3kuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgZHVhbHBpMl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz03Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGR1YWxwaTJfcG9saWN5W1RDQV9EVUFMUEkyX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy03OTQtXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzo3OTU6c3RhdGljIGludCBkdWFscGkyX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzk2LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZHVhbHBpMl9pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGgsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZHVhbHBpMl9pbml0YC4gVGhpcyBuYW1lIHN1Z2dlc3RzIGluaXRpYWxpemF0aW9uLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc2V0dXAgbG9naWMgcmVsYXRlZCB0byBhIGBkdWFscGkyYCBtb2R1bGUgb3Igc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipNZW1vcnkgQWxsb2NhdGlvbjoqKiBJcyBpdCBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGJ1ZmZlcnMsIGxvb2t1cCB0YWJsZXMsIG9yIGNvbnRyb2wgcmVnaXN0ZXJzPyBJZiBzbywgd2hhdCBhcmUgdGhlIHNpemVzIGFuZCBwdXJwb3NlIG9mIGVhY2ggYWxsb2NhdGlvbj8KKiAgICoqSGFyZHdhcmUgQ29uZmlndXJhdGlvbjoqKiBJcyBpdCB3cml0aW5nIHRvIGFueSBoYXJkd2FyZSByZWdpc3RlcnM/IElmIHNvLCB3aGF0IGFyZSB0aG9zZSByZWdpc3RlcnMgYW5kIHdoYXQgdmFsdWVzIGFyZSBiZWluZyB3cml0dGVuPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIGNsb2NrIHNwZWVkcywgaW50ZXJydXB0IGVuYWJsZXMsIG9yIHBlcmlwaGVyYWwgbW9kZXMuCiogICAqKlJlc291cmNlIEluaXRpYWxpemF0aW9uOioqIEFyZSB0aGVyZSBhbnkgbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYmVpbmcgaW5pdGlhbGl6ZWQ/IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBwdXJwb3NlLCB3aG8gdXNlcyB0aGVtLCBhbmQgd2hhdCBjcml0aWNhbCBzZWN0aW9ucyB0aGV5IHByb3RlY3QuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgY2hlY2tzIGZvciBwb3RlbnRpYWwgZmFpbHVyZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzPyBJZiBzbywgd2hhdCBhcmUgdGhlIGZhaWx1cmUgY29uZGl0aW9ucyBhbmQgdGhlIGVycm9yIHJlY292ZXJ5L3JlcG9ydGluZyBtZWNoYW5pc21zPwoqICAgKipEZXBlbmRlbmN5IENoZWNraW5nOioqIERvZXMgdGhpcyByb3V0aW5lIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMgYmVpbmcgaW5pdGlhbGl6ZWQgZmlyc3Q/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY2FsbCBvcmRlciBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSB0aGV5JiMzOTtyZSBhZGhlcmVkIHRvLgoqICAgKipQYXJhbWV0ZXIgQ2hlY2tpbmc6KiogRG9lcyBgZHVhbHBpMl9pbml0YCBwZXJmb3JtIGFueSB2YWxpZGF0aW9uIG9mIGlucHV0IHBhcmFtZXRlcnM/IElmIHNvLCB3aGF0IGFyZSB0aGUgYWxsb3dlZCByYW5nZXMgYW5kIHdoYXQgaGFwcGVucyBpZiBpbnZhbGlkIHZhbHVlcyBhcmUgcGFzc2VkPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBhc3BlY3RzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGFjdCByb2xlIGlzIGNyaXRpY2FsIGJlZm9yZSB3b3JraW5nIG9uIGFueSBzeXN0ZW0tbGV2ZWwgY29kZSwgSSBzaG91bGQgaGF2ZSBhbiBleGNlbGxlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGluaXRpYWwgZnVuY3Rpb24sIGVzcGVjaWFsbHkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBmdXR1cmUgb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBkdWFscGkyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz05NDk9c3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9kZWZhdWx0KHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTk3My1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jOjk3NDpzdGF0aWMgaW50IGR1YWxwaTJfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtOTc1LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjAzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBldHNfcWRpc2NfY2hhbmdlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNpbXBsZTogSSYjMzk7dmUgY29tZSBhY3Jvc3MgYGV0c19xZGlzY19jaGFuZ2VgIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0cmFmZmljIHNoYXBpbmcgYW5kIFF1YWxpdHkgb2YgU2VydmljZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGl0cyBiZWhhdmlvcj8gSXMgaXQgcmVsYXRlZCB0byB0aGUgcXVldWluZyBkaXNjaXBsaW5lIGl0c2VsZj8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIG9yIGlzIGl0IGEgbW9yZSBnZW5lcmljIGNoYW5nZT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2h5IGl0JiMzOTtzIG9uIG15IHJhZGFyIGFuZCB3aGF0IGFzcGVjdCBvZiBpdCBJIHNob3VsZCBiZSBtb3N0IGZvY3VzZWQgb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbnZvbHZlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgZXRzX3FkaXNjX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZXRzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9ldHMuYz01NDY9c3RhdGljIGludCBldHNfcWRpc2NfcXVhbnRhX3BhcnNlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpxdWFudGFfYXR0cixcbi0tXG5uZXQvc2NoZWQvc2NoX2V0cy5jLTU4Mi1cbm5ldC9zY2hlZC9zY2hfZXRzLmM6NTgzOnN0YXRpYyBpbnQgZXRzX3FkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9ldHMuYy01ODQtXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgZnFfY2hhbmdlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBgZnFfY2hhbmdlYC4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGF0IGNvdWxkIG1lYW4gZnJlcXVlbmN5IGNoYW5nZSwgZmx1eCBjaGFuZ2UsIGZlYXR1cmUgcXVhbGl0eSBjaGFuZ2UsIG9yIGV2ZW4gYSBmdW5jdGlvbmFsIHF1ZXJ5IGNoYW5nZSAtIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoaWNoIGludGVycHJldGF0aW9uIGlzIG1vc3QgbGlrZWx5IGdpdmVuIHRoZSBwcm9ibGVtIEkmIzM5O20gdGFja2xpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJcyBpdCBzdGFibGU/IElzIGl0IGV4aGliaXRpbmcgdW51c3VhbCBiZWhhdmlvcj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgdmFsdWUgb3IgbGFjayB0aGVyZW9mPyBUaGUgc3BlY2lmaWNzIG9mIHdoYXQmIzM5O3MgKmltcGxpZWQqIGJ5IGBmcV9jaGFuZ2VgIGFyZSBjcnVjaWFsIHRvIHRoZSBuZXh0IHN0ZXBzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoZXJlIHNvbWV0aGluZyBJIHNob3VsZCBiZSBhbnRpY2lwYXRpbmc/JiMzNDsuIEl0JiMzOTtzIGEga2V5IHZhcmlhYmxlLCBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGF0YSBvciBjb2RlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgbG9vayBmb3IgdGhlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IGZxX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxLmM9MTA1Mj1zdGF0aWMgaW50IGZxX2xvYWRfcHJpb21hcChzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3My1cbm5ldC9zY2hlZC9zY2hfZnEuYzoxMDc0OnN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3NS1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBmcV9waWVfY2hhbmdlYCB2YXJpYWJsZSBvciBmdW5jdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHdvcmssIGBmcV9waWVfY2hhbmdlYCBpcyBsaWtlbHkgYSBrZXkgaW5kaWNhdG9yLCBhIGNydWNpYWwgbWV0cmljLCBvciB0aGUgbmFtZSBvZiBhIGNhbGN1bGF0aW9uIG9yIHZpc3VhbGl6YXRpb24uIEdpdmVuIHRoZSB0eXBpY2FsIHNjb3BlIG9mIG15IHdvcmssIGl0IGxpa2VseSByZWZsZWN0cyBhIGNoYW5nZSBpbiBmcmVxdWVuY3ksIGEgc2hpZnQgaW4gcHJvcG9ydGlvbmFsIHJlcHJlc2VudGF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBjaGFuZ2UgaW4gdGhlIGZyZXF1ZW5jeSBkb21haW4gcGllIGNoYXJ0LiBNeSBhdHRlbnRpb24gaGVyZSBzaG93cyBJIGFtIGxpa2VseSBpbiB0aGUgaW52ZXN0aWdhdGl2ZSBwaGFzZS4gSSYjMzk7bSBjaGVja2luZyBpdHMgdmFsdWVzLCBpdHMgaW1wYWN0LCBvciB0aGUgZm9ybXVsYSB3aGljaCBkZWZpbmVzIHRoZSBwaWUgY2hhcnQsIGxpa2VseSBpbiByZXNwb25zZSB0byBhbiBhbm9tYWx5IG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkLiBUaGVyZSBpcyBhIGxvdCByaWRpbmcgb24gdGhpcyBjaGVjay4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgZnVydGhlciBzdGVwcyBpbnZvbHZlZCBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiB0aGlzIGFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgZnFfcGllX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnFfcGllLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcV9waWUuYz0yMzg9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9waWVfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jLTI4Ni1cbm5ldC9zY2hlZC9zY2hfZnFfcGllLmM6Mjg3OnN0YXRpYyBpbnQgZnFfcGllX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9mcV9waWUuYy0yODgtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBoaGZfY2hhbmdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdG8gY2hlY2sgYGhoZl9jaGFuZ2VgLiBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGl0JiMzOTtzIGRvaW5nIGFuZCBob3cgaXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gYW5kIGVuc3VyZSBpdCBpcyBmdW5jdGlvbmluZyBhcyBpbnRlbmRlZC4gVGhpcyBpbmNsdWRlcyBjb25zaWRlcmluZyBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgZGVmaW5pdGlvbiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW5wdXQgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSBvbiBvdGhlciBmdW5jdGlvbnMgb3IgdmFyaWFibGVzLiBUaGVuIEkgd2lsbCBtZW50YWxseSBydW4gdGhyb3VnaCBzb21lIHRlc3QgY2FzZXMgdG8gY2hlY2sgaXQgaXMgYmVoYXZpbmcgaG93IEkgZXhwZWN0LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdvcmtmbG93LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCBpcyB0aGUgc291cmNlIG9mIGEgcG90ZW50aWFsIGlzc3VlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBoaGZfY2hhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oaGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hoZi5jPTUyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGhmX3BvbGljeVtUQ0FfSEhGX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2hoZi5jLTUzNi1cbm5ldC9zY2hlZC9zY2hfaGhmLmM6NTM3OnN0YXRpYyBpbnQgaGhmX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9oaGYuYy01MzgtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIGFueXRoaW5nLCBpdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gaGF2ZSBhIHF1aWNrIGdsYW5jZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBvdXQgYHNmcV9jaGFuZ2VgLiBUaGF0JiMzOTtzIGxpa2VseSB0aGUga2V5LiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdGhlbiBidWlsZCB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IHNmcV9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3NmcS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfc2ZxLmM9NjA0PXN0YXRpYyB2b2lkIHNmcV9wZXJ0dXJiYXRpb24oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjktXG5uZXQvc2NoZWQvc2NoX3NmcS5jOjYzMDpzdGF0aWMgaW50IHNmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfc2ZxLmMtNjMxLVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBwaWVfZHJvcF9lYXJseWAgaW4gYHNjaF9waWUuY2AqKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGJlaGF2aW9yIG9mIGBwaWVfZHJvcF9lYXJseWAgaW4gYHNjaF9waWUuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjaGVkdWxlciBhbmQgUElFIChQcmlvcml0eSBJbmhlcml0YW5jZSBhbmQgRXhjbHVzaW9uKSwgdGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBhdGggSSBuZWVkIHRvIHJldmlldy4gSSBpbW1lZGlhdGVseSBoYXZlIHF1ZXN0aW9ucy4gSXMgdGhpcyByZWxhdGVkIHRvIGVhcmx5IGRlYWRsaW5lIG1pc3MgZGV0ZWN0aW9uPyBBbSBJIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBlZGdlIGNhc2Ugd2hlcmUgdGFza3MgYXJlIHByZW1hdHVyZWx5IGRyb3BwZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgc2VjdGlvbiBvZiBjb2RlIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCB3aGljaCBjb3VsZCBsZWFkIHRvIG1pc3NlZCBkZWFkbGluZXMgb3IgdW5leHBlY3RlZCBzeXN0ZW0gYmVoYXZpb3I/IEkmIzM5O20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgcHJpb3JpdHkgaW5oZXJpdGFuY2Ugd2l0aCBleGNsdXNpb24uIFRoaXMgY291bGQgbWVhbiBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGhvdyBQSUUgaGFuZGxlcyBwcmVlbXB0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBpbnRvIHRoZSBjb2RlIGFuZCBxdWlja2x5IGRldGVybWluZSB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/Ym9vbCBwaWVfZHJvcF9lYXJseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfcGllLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9waWUuYz0yNT1zdHJ1Y3QgcGllX3NjaGVkX2RhdGEge1xuLS1cbm5ldC9zY2hlZC9zY2hfcGllLmMtMzItXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjMzOmJvb2wgcGllX2Ryb3BfZWFybHkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBwaWVfcGFyYW1zICpwYXJhbXMsXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTM0LVx0XHQgICAgc3RydWN0IHBpZV92YXJzICp2YXJzLCB1MzIgYmFja2xvZywgdTMyIHBhY2tldF9zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHBpZV9kcm9wX2Vhcmx5YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgcGllX2Ryb3BfZWFybHlgIGlzIGEga2V5IGZ1bmN0aW9uLCBleHBvcnRlZCBhbmQgdXNlZCBieSBgc2NoX3BpZWAgYW5kIGBzY2hfZnFfcGllYC4gTXkgZmlyc3QgaW5zdGluY3Qgd2FzIHRvIGRpdmUgaW50byBgcGllX2VucXVldWVgIHdpdGhpbiBgc2NoX3BpZS5jYCwgc2VlIGlmIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4gQnV0IHdhaXQsIGZvY3VzaW5nIG9uIGBwaWVfZHJvcF9lYXJseWAgbWFrZXMgbW9yZSBzZW5zZS4gSXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIGFuZCB0aGF0IGFsb25lIG1ha2VzIGl0IGEgY2FuZGlkYXRlIGZvciBzY3J1dGlueS4gSG1tLi4uIExldCYjMzk7cyBjb25maXJtIHRoYXQgaXQgaXNuJiMzOTt0IHN0YXRpYy4gR29vZCwgaXQmIzM5O3Mgbm90LiBCdXQgaG9sZCBvbiwgdGhlIGNhbGxpbmcgcG9pbnRzIG9mIGBwaWVfZHJvcF9lYXJseWAgYXJlIGBwaWVfZW5xdWV1ZWAgYW5kIGBmcV9waWVfcWRpc2NfZW5xdWV1ZWAgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBMZXQgbWUgY2hlY2sgdGhlIGBwaWVfZW5xdWV1ZWAgZnVuY3Rpb24gaW4gYHNjaF9waWUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgcGllX2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3BpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFNjaGVkdWxlciBRdWV1ZSBJc3N1ZSoqCgpIbW0sIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gd2l0aCB0aGUgc2NoZWR1bGVyJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIFBJRSAoUHJpb3JpdHkgSW5oZXJpdGFuY2UgRW5naW5lKSBxdWV1ZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGUgYHNjaF9waWUuY2AgZmlsZSAqbWlnaHQqIGJlIG1pc3NpbmcgYSBrZXkgZnVuY3Rpb24g4oCTIHNwZWNpZmljYWxseSwgdGhlIGBwaWVfZW5xdWV1ZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBwdXNoaW5nIHRhc2tzIG9udG8gdGhlIFBJRSBxdWV1ZS4gQmVmb3JlIEkgZ28gZG93biBhIHJhYmJpdCBob2xlLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgdmVyaWZ5IGlmIGBzY2hfcGllLmNgIGV2ZW4gKmNvbnRhaW5zKiBhbiBgZW5xdWV1ZWAgZnVuY3Rpb24gYXQgYWxsLiBCZXN0IHRvIGNvbmZpcm0gdGhhdCBiYXNlIGFzc3VtcHRpb24gYmVmb3JlIGFzc3VtaW5nIGEgcHJvYmxlbS4gQSBzaW1wbGUgZ3JlcCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBzZWUgaWYgdGhlIGZpbGUgaGFuZGxlcyB0aGUgZW5xdWV1ZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3BpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfcGllLmM9ODM9RVhQT1JUX1NZTUJPTF9HUEwocGllX2Ryb3BfZWFybHkpO1xubmV0L3NjaGVkL3NjaF9waWUuYy04NC1cbm5ldC9zY2hlZC9zY2hfcGllLmM6ODU6c3RhdGljIGludCBwaWVfcWRpc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfcGllLmMtODYtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy04OS1cdHN0cnVjdCBwaWVfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfcGllLmM6OTA6XHRib29sIGVucXVldWUgPSBmYWxzZTtcbm5ldC9zY2hlZC9zY2hfcGllLmMtOTEtXG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy0xMDAtXHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4pKSB7XG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEwMTpcdFx0ZW5xdWV1ZSA9IHRydWU7XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwMi1cdH0gZWxzZSBpZiAocS1cdTAwM2VwYXJhbXMuZWNuIFx1MDAyNlx1MDAyNiAocS1cdTAwM2V2YXJzLnByb2IgXHUwMDNjPSBNQVhfUFJPQiAvIDEwKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwNy1cdFx0V1JJVEVfT05DRShxLVx1MDAzZXN0YXRzLmVjbl9tYXJrLCBxLVx1MDAzZXN0YXRzLmVjbl9tYXJrICYjNDM7IDEpO1xubmV0L3NjaGVkL3NjaF9waWUuYzoxMDg6XHRcdGVucXVldWUgPSB0cnVlO1xubmV0L3NjaGVkL3NjaF9waWUuYy0xMDktXHR9XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTExMC1cbm5ldC9zY2hlZC9zY2hfcGllLmM6MTExOlx0Lyogd2UgY2FuIGVucXVldWUgdGhlIHBhY2tldCAqL1xubmV0L3NjaGVkL3NjaF9waWUuYzoxMTI6XHRpZiAoZW5xdWV1ZSkge1xubmV0L3NjaGVkL3NjaF9waWUuYzoxMTM6XHRcdC8qIFNldCBlbnF1ZXVlIHRpbWUgb25seSB3aGVuIGRxX3JhdGVfZXN0aW1hdG9yIGlzIGRpc2FibGVkLiAqL1xubmV0L3NjaGVkL3NjaF9waWUuYy0xMTQtXHRcdGlmICghcS1cdTAwM2VwYXJhbXMuZHFfcmF0ZV9lc3RpbWF0b3IpXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjExNTpcdFx0XHRwaWVfc2V0X2VucXVldWVfdGltZShza2IpO1xubmV0L3NjaGVkL3NjaF9waWUuYy0xMTYtXG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy0xMjAtXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEyMTpcdFx0cmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEyMi1cdH1cbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jPTIxMj12b2lkIHBpZV9wcm9jZXNzX2RlcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTIyMi1cdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZXFkZWxheSxcbm5ldC9zY2hlZC9zY2hfcGllLmM6MjIzOlx0XHRcdCAgIGJhY2tsb2cgPyBub3cgLSBwaWVfZ2V0X2VucXVldWVfdGltZShza2IpIDogMCk7XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTIyNC1cbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jPTU1MT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBwaWVfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy01NTMtXHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgcGllX3NjaGVkX2RhdGEpLFxubmV0L3NjaGVkL3NjaF9waWUuYzo1NTQ6XHQuZW5xdWV1ZVx0PSBwaWVfcWRpc2NfZW5xdWV1ZSxcbm5ldC9zY2hlZC9zY2hfcGllLmMtNTU1LVx0LmRlcXVldWVcdD0gcGllX3FkaXNjX2RlcXVldWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIxCgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSUUgUWRpc2MgQmVoYXZpb3IqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHBpZV9xZGlzY19lbnF1ZXVlYCBmdW5jdGlvbi4gQnV0LCBob2xkIG9uLCBgcGllX2Ryb3BfZWFybHlgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBtb2RpZmllZCwgc28gdGhhdCYjMzk7cyB0aGUgcmVhbCBrZXkgaGVyZS4gSSBjYW4ganVzdCBsaXN0IHRoYXQgZnVuY3Rpb24gdG8gdHJhY2sgaXQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgcXVldWluZyBkaXNjaXBsaW5lcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQ6CgoqICAgYHNjaF9kcnIuY2AgcmVxdWlyZXMgYE5FVF9TQ0hfRFJSYC4gTWFrZXMgc2Vuc2UuCiogICBgc2NoX2R1YWxwaTIuY2AgbmVlZHMgYE5FVF9TQ0hfRFVBTFBJMmAuIFJpZ2h0LgoqICAgYHNjaF9ldHMuY2AgdXNlcyBgTkVUX1NDSF9FVFNgLiBTdGFuZGFyZC4KKiAgIGBzY2hfZnEuY2AgZGVwZW5kcyBvbiBgTkVUX1NDSF9GUWAuIE9mIGNvdXJzZS4KKiAgIGBzY2hfZnFfcGllLmNgIHVzZXMgYE5FVF9TQ0hfRlFfUElFYC4gVGhpcyBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLgoqICAgYHNjaF9oaGYuY2AgbmVlZHMgYE5FVF9TQ0hfSEhGYC4KKiAgIGBzY2hfcGllLmNgIG9idmlvdXNseSBuZWVkcyBgTkVUX1NDSF9QSUVgLgoqICAgQW5kIGBzY2hfc2ZxLmNgIHdhbnRzIGBORVRfU0NIX1NGUWAuCgpUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGNvbmZpZyBzeW1ib2xzIG1hdGNoIHVwIHdpdGggd2hhdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSB0aGVzZSB0aGluZ3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgbmV0d29yayBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfKERSUnxEVUFMUEkyfEVUU3xGUXxGUV9QSUV8SEhGfFBJRXxTRlEpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTAwPWNvbmZpZyBORVRfU0NIX1NGQlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTExMC1cbm5ldC9zY2hlZC9LY29uZmlnOjExMTpjb25maWcgTkVUX1NDSF9TRlFcbm5ldC9zY2hlZC9LY29uZmlnLTExMi1cdHRyaXN0YXRlIFwmIzM0O1N0b2NoYXN0aWMgRmFpcm5lc3MgUXVldWVpbmcgKFNGUSlcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0xOTU9Y29uZmlnIE5FVF9TQ0hfTkVURU1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDYtXG5uZXQvc2NoZWQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9TQ0hfRFJSXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXHR0cmlzdGF0ZSBcJiMzNDtEZWZpY2l0IFJvdW5kIFJvYmluIHNjaGVkdWxlciAoRFJSKVwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0zMTItXG5uZXQvc2NoZWQvS2NvbmZpZzozMTM6Y29uZmlnIE5FVF9TQ0hfSEhGXG5uZXQvc2NoZWQvS2NvbmZpZy0zMTQtXHR0cmlzdGF0ZSBcJiMzNDtIZWF2eS1IaXR0ZXIgRmlsdGVyIChISEYpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctMzIxLVxubmV0L3NjaGVkL0tjb25maWc6MzIyOmNvbmZpZyBORVRfU0NIX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzIzLVx0dHJpc3RhdGUgXCYjMzQ7UHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWQgKFBJRSkgc2NoZWR1bGVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXG4tLVxubmV0L3NjaGVkL0tjb25maWctNDE3LVxubmV0L3NjaGVkL0tjb25maWc6NDE4OmNvbmZpZyBORVRfU0NIX0RVQUxQSTJcbm5ldC9zY2hlZC9LY29uZmlnLTQxOS1cdHRyaXN0YXRlIFwmIzM0O0R1YWwgUXVldWUgUEkgU3F1YXJlIChEVUFMUEkyKSBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIG5ldHdvcmsgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBORVRfU0NIX0RSUmAsIGBORVRfU0NIX0RVQUxQSTJgLCBgTkVUX1NDSF9FVFNgLCBgTkVUX1NDSF9GUWAsIGBORVRfU0NIX0ZRX1BJRWAsIGBORVRfU0NIX0hIRmAsIGBORVRfU0NIX1BJRWAsIGFuZCBgTkVUX1NDSF9TRlFgLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgdGhpbmdzIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGFuZCBkZXBsb3ltZW50LCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIGBORVRfU0NIX0ZRX1BJRWAuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGBORVRfU0NIX0ZRX1BJRWAgZGVwZW5kcyBvbiBgTkVUX1NDSF9QSUVgLiBHb29kIHRvIGtub3cuIE5vdywgaG93IGFib3V0IGBORVRfU0NIX0RVQUxQSTJgPyBEb2VzIHRoYXQgb25lIGhhdmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRha2UgYSBsb29rLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0RVQUxQSTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXG4tLVxubmV0L3NjaGVkL0tjb25maWctNDE3LVxubmV0L3NjaGVkL0tjb25maWc6NDE4OmNvbmZpZyBORVRfU0NIX0RVQUxQSTJcbm5ldC9zY2hlZC9LY29uZmlnLTQxOS1cdHRyaXN0YXRlIFwmIzM0O0R1YWwgUXVldWUgUEkgU3F1YXJlIChEVUFMUEkyKSBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBORVRfU0NIX0RVQUxQSTJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgTkVUX1NDSF9EVUFMUEkyYCBibG9jay4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgY29udGV4dCBoZXJlLiBKdXN0IGtub3dpbmcgdGhlIG5hbWUgYWxvbmUgaXNuJiMzOTt0IGVub3VnaDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS4gV2hhdCYjMzk7cyB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiwgdGhlIG90aGVyIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkIGEgcmVhbCB1bmRlcnN0YW5kaW5nLiBXaGF0IG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgdmFyaWFibGVzIGFyZSBpbmZsdWVuY2luZyBpdHMgZXhlY3V0aW9uPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSB0byBkZXRlcm1pbmUgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcsIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBTaG93IG1lIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTg6XHRjb25maWcgTkVUX1NDSF9EVUFMUEkyXG4gNDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtEdWFsIFF1ZXVlIFBJIFNxdWFyZSAoRFVBTFBJMikgc2NoZWR1bGVyXCYjMzQ7XG4gNDIwOlx0XHRoZWxwXG4gNDIxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBEdWFsIFF1ZXVlIFByb3BvcnRpb25hbCBJbnRlZ3JhbFxuIDQyMjpcdFx0ICBDb250cm9sbGVyIEltcHJvdmVkIHdpdGggYSBTcXVhcmUgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gNDIzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM5MzMyXG4gNDI0Olx0XG4gNDI1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA0MjY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2R1YWxwaTIuXG4gNDI3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBORVRfU0NIX0ZRX1BJRWAsJiMzNDsgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIFNjaGVkdWxlcjogRlEtUElFKioKCkFscmlnaHQsIHRoYXQgcGhyYXNlICYjMzQ7TkVUX1NDSF9GUV9QSUUmIzM0OyDigJMgdGhhdCYjMzk7cyBhIHRyaWdnZXIuIEl0IGltbWVkaWF0ZWx5IHRocm93cyBtZSBpbnRvIHRoZSB3b3JsZCBvZiBuZXR3b3JrIHNjaGVkdWxpbmcsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBGUS1QSUUgcXVldWVpbmcgZGlzY2lwbGluZS4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IGNoZWNraW5nIHdoYXQgSSBhbHJlYWR5IGtub3cgYW5kIHdoZXJlIG15IGtub3dsZWRnZSBnYXBzIGFyZSwgcHJlcGFyaW5nIHRvIGFwcHJvYWNoIHRoaXMgaWRlYS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIHNjaGVkdWxlciB3b3Jrcy4gSSBhbSBwcm9iYWJseSBwcmVwYXJpbmcgdG8gZmlndXJlIG91dCB0aGUgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyBvZiBzdWNoIGEgcXVldWluZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNDpcdGNvbmZpZyBORVRfU0NIX0ZRX1BJRVxuIDMzNTpcdFx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuIDMzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7RmxvdyBRdWV1ZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgY29udHJvbGxlciBFbmhhbmNlZCAoRlEtUElFKVwmIzM0O1xuIDMzNzpcdFx0aGVscFxuIDMzODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRmxvdyBRdWV1ZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWxcbiAzMzk6XHRcdCAgY29udHJvbGxlciBFbmhhbmNlZCAoRlEtUElFKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMzQwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MDMzXG4gMzQxOlx0XG4gMzQyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAzNDM6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2ZxX3BpZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O0xldCYjMzk7cyBzZWUgYE5FVF9TQ0hfUElFYCYjMzQ7IGFzIGEgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUgb2YgTmV0d29yayBTY2hlZHVsaW5nOiBMZXQmIzM5O3MgRXhhbWluZSBORVRfU0NIX1BJRSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uICYjMzQ7TGV0JiMzOTtzIHNlZSBgTkVUX1NDSF9QSUVgJiMzNDsg4oCTIHRoYXQmIzM5O3MgYSBkaXJlY3QgcHJvbXB0IGZvciBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIG1lbnRhbCBzaG9ydGhhbmQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gbmV0d29yayBzY2hlZHVsaW5nLiBUaGUgaW1wbGllZCBxdWVzdGlvbiBpcywgd2hhdCBjYW4gd2UgZ2xlYW4gZnJvbSB0aGlzIGVsZW1lbnQsIHdoYXRldmVyIGl0IGlzIGluIGNvbnRleHQ/CgpgTkVUX1NDSF9QSUVgIGxpa2VseSByZXByZXNlbnRzIGEgc3BlY2lmaWMgYWxnb3JpdGhtLCBhIGRhdGEgc3RydWN0dXJlLCBhIHBlcmZvcm1hbmNlIG1ldHJpYywgb3IgYSBjb21wb25lbnQgcmVsYXRlZCB0byBuZXR3b3JrIHNjaGVkdWxpbmcgdXNpbmcgYSAmIzM5O3BpZSYjMzk7IG1ldGFwaG9yIHRvIHJlcHJlc2VudCBwcm9wb3J0aW9uYWwgYWxsb2NhdGlvbiAtIGl0IGNvdWxkIGJlIGEgY29uY2VwdCwgb3IgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIFRoZSB1c2Ugb2YgYSBjb2RlLWxpa2UgbmFtZSBzdWdnZXN0cyB3ZSBhcmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBlaXRoZXIgdGVjaG5pY2FsbHkgZGVmaW5lZCBvciBhbGdvcml0aG1pY2FsbHkgZHJpdmVuLiBJdCBjb3VsZCBiZSBhbiBhY3JvbnltIG9yIGFuIGlkZW50aWZpZXIuIEl0IHJlcXVpcmVzIHVucGFja2luZy4KCk15IGZpcnN0IHRob3VnaHQgcHJvY2VzcyB3b3VsZCBiZSBkcml2ZW4gYnkgdGhlIGZvbGxvd2luZyBwcm9tcHRzOgoKKiAgICoqQ29udGV4dDoqKiBXaGF0IHByb2JsZW0gYXJlIHdlIHRyeWluZyB0byBzb2x2ZT8gSXMgaXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgUW9TLCBmYWlybmVzcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CiogICAqKkFzc3VtcHRpb25zOioqIFdoYXQgcHJpb3Iga25vd2xlZGdlIGlzIG5lZWRlZD8gSXMgaXQgaW4gYSB3ZWxsLWRlZmluZWQgZG9tYWluLCBsaWtlIGRhdGEgY2VudGVyIG5ldHdvcmtpbmcsIG9yIGEgbW9yZSBnZW5lcmFsIGNvbmNlcHQ/CiogICAqKkltcGxpY2F0aW9uczoqKiBHaXZlbiBpdHMgcG90ZW50aWFsIG1lYW5pbmcsIHdoYXQgYXJlIHRoZSByZWxldmFudCB0cmFkZS1vZmZzPyBEb2VzIHRoZSAmIzM5O3BpZSYjMzk7IGFzcGVjdCBzdWdnZXN0IHByb3BvcnRpb25hbCBhbGxvY2F0aW9uIG9yIGhpZXJhcmNoaWNhbCBkaXZpc2lvbj8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhZHZhbnRhZ2VzPwoqICAgKipDb25uZWN0aW9uczoqKiBIb3cgZG9lcyBgTkVUX1NDSF9QSUVgIHJlbGF0ZSB0byBvdGhlciBzY2hlZHVsaW5nIHBhcmFkaWdtcyBJJiMzOTttIGZhbWlsaWFyIHdpdGg/IElzIGl0IGEgbm92ZWwgYXBwcm9hY2gsIGEgcmVmaW5lbWVudCBvZiBhbiBleGlzdGluZyB0ZWNobmlxdWUsIG9yIGEgY29tcGxldGUgZGVwYXJ0dXJlPyBXaGF0IGFyZSB0aGUgY29tbW9uYWxpdGllcyBhbmQgcG9pbnRzIG9mIGRpZmZlcmVudGlhdGlvbj8KClRoaXMgc3RhdGVtZW50IGltcGxpZXMgSSBoYXZlIGEgbWVudGFsIG1hcCBvZiBuZXR3b3JrIHNjaGVkdWxpbmcgY29uY2VwdHMgYW5kIGFtIHJlYWR5IHRvIGFwcGx5IG15IGV4cGVydGlzZSB0byBldmFsdWF0ZSBgTkVUX1NDSF9QSUVgIHJlbGF0aXZlIHRvIHRoYXQgbWFwLiBUaGUgdXNlIG9mIHRoZSBjb21tYW5kICYjMzk7TGV0JiMzOTtzIHNlZSYjMzk7IHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGEgY2FsbCB0byByZXZpZXcgdGhlIHN0YXRlIG9mIHRoZSB0ZWNobm9sb2d5IG9yIGNvbmNlcHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgaGlnaCBsZXZlbC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBwbGF5cyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMjpcdGNvbmZpZyBORVRfU0NIX1BJRVxuIDMyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWQgKFBJRSkgc2NoZWR1bGVyXCYjMzQ7XG4gMzI0Olx0XHRoZWxwXG4gMzI1Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgY29udHJvbGxlclxuIDMyNjpcdFx0ICBFbmhhbmNlZCBzY2hlZHVsZXIgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxuIDMyNzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODAzM1xuIDMyODpcdFxuIDMyOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMzMwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9waWUuXG4gMzMxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBORVRfU0NIX0hIRmAmIzM0OywgZXhwcmVzc2VkIGFzIGEgc2VyaWVzIG9mIHRob3VnaHRzIGZyb20gbXkgcGVyc3BlY3RpdmUsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBOZXQgU2NoZWR1bGUqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0LCBgTkVUX1NDSF9ISEZgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGFzIGEgbmV0d29yayBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBvbmUgZGVhbGluZyB3aXRoIGhpZ2gtZnJlcXVlbmN5IGhhbmRsaW5nLiBUaGUgYEhIRmAgc3VmZml4IGlzIGEgY2xlYXIgaW5kaWNhdG9yIOKAkyBsaWtlbHkgcmVmZXJyaW5nIHRvIGEgZmVhdHVyZSBzZXQgb3IgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIGhpZ2ggZnJlcXVlbmN5IHRyYWZmaWMuIE15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udGV4dDsgSXMgdGhpcyBhIHNwZWNpZmljIG1vZHVsZSBuYW1lPyBBIHZhcmlhYmxlPyBBIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUaGUgbm9tZW5jbGF0dXJlIHN1Z2dlc3RzIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJiMzOTtORVQmIzM5OyBzaWduaWZpZXMgaGVyZS4gSXMgaXQgYW4gaW50ZXJuYWwgbmV0d29yayBsaWJyYXJ5LCBhIG1vcmUgZ2VuZXJhbCBuZXR3b3JrIHJlc291cmNlIGxpa2UgYSBOSUMsIG9yIGEgbmV0d29ya2luZyBkZXZpY2U/IFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBmdWxsIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMzpcdGNvbmZpZyBORVRfU0NIX0hIRlxuIDMxNDpcdFx0dHJpc3RhdGUgXCYjMzQ7SGVhdnktSGl0dGVyIEZpbHRlciAoSEhGKVwmIzM0O1xuIDMxNTpcdFx0aGVscFxuIDMxNjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGVhdnktSGl0dGVyIEZpbHRlciAoSEhGKVxuIDMxNzpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMzE4Olx0XG4gMzE5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAzMjA6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2hoZi5cbiAzMjE6XHRcbiAzMjI6XHRjb25maWcgTkVUX1NDSF9QSUVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O0xldCYjMzk7cyBzZWUgYE5FVF9TQ0hfRlFgJiMzNDssIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQgKGxpa2VseSBuZXR3b3JraW5nLCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBvciBzb21ldGhpbmcgc2ltaWxhcik6CgoqKkRpZ2dpbmcgaW50byBORVRfU0NIX0ZRKioKCkFscmlnaHQsIGBORVRfU0NIX0ZRYC4uLiBobW0sIHRoYXQmIzM5O3MgYSBmYW1pbGlhciBjb25zdHJ1Y3QuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBsaWtlbHkgY29udGV4dDogbmV0d29yayBzY2hlZHVsaW5nLCBwYXJ0aWN1bGFybHkgaW4gYSBMaW51eCBlbnZpcm9ubWVudCBvciBhIHN5c3RlbSB0aGF0IGRyYXdzIGluc3BpcmF0aW9uIGZyb20gaXQuIFRoZSAmIzM0O05FVCYjMzQ7IHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyBuZXR3b3JrLXJlbGF0ZWQgb3BlcmF0aW9ucywgYW5kICYjMzQ7U0NIJiMzNDsgYWxtb3N0IGNlcnRhaW5seSBwb2ludHMgdG8gYSBzY2hlZHVsZXIgb3Igc2NoZWR1bGluZyBtZWNoYW5pc20uICYjMzQ7RlEmIzM0OyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBwcm9iYWJseSBtZWFucyBGYWlyIFF1ZXVpbmcsIG9yIHBlcmhhcHMgRnJlcXVlbmN5LVF1ZXVpbmcuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IGhvdyB0aGlzIHNjaGVkdWxlciBvcGVyYXRlcy4gSXMgaXQgYSBoaWVyYXJjaGljYWwgc2NoZWR1bGVyPyBEb2VzIGl0IHV0aWxpemUgcGFja2V0IGNsYXNzaWZpY2F0aW9uPyBXaGF0IGFsZ29yaXRobXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBmYWlybmVzcyDigJMgV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLCBEZWZpY2l0IFJvdW5kIFJvYmluIChEUlIpLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gYmVjYXVzZSBlYWNoIGhhcyBpdHMgb3duIHN0cmVuZ3RocyBhbmQgd2Vha25lc3NlcyBpbiB0ZXJtcyBvZiB0aHJvdWdocHV0LCBsYXRlbmN5LCBhbmQgZmFpcm5lc3MgdW5kZXIgZGlmZmVyZW50IGxvYWRzLgoKSSYjMzk7bSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIHR5cGVzIG9mIGFwcGxpY2F0aW9ucyB0aGlzIHdvdWxkIGJlIHVzZWQgZm9yOiBsYXRlbmN5LXNlbnNpdGl2ZSB0cmFmZmljIGxpa2UgVm9JUCBvciBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMsIG9yIHBlcmhhcHMgYnVsayBkYXRhIHRyYW5zZmVyIHdoZXJlIGZhaXJuZXNzIGlzIHBhcmFtb3VudCB0byBwcmV2ZW50IGFueSBvbmUgZmxvdyBmcm9tIGRvbWluYXRpbmcgdGhlIG5ldHdvcmsuIFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB3b3JrbG9hZCBpcyBjcnVjaWFsLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQXJlIHRoZXJlIGNvbmZpZ3VyYWJsZSB3ZWlnaHRzPyBQcmlvcml0eSBsZXZlbHM/IEJhbmR3aWR0aCBndWFyYW50ZWVzPyBXaGF0IGFib3V0IHRyYWZmaWMgc2hhcGluZz8gQXJlIHRoZXJlIHJlbGF0ZWQgY29tcG9uZW50cyBzdWNoIGFzIHRyYWZmaWMgcG9saWNpbmc/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBkZWZpbmUgaXRzIHByYWN0aWNhbCBlZmZlY3RpdmVuZXNzLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIGtub3cgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaW4gb3JkZXIgdG8gYmUgc3VyZSBvZiB0aGUgZXhhY3QgbWVhbmluZyBvZiB0aGlzIG5vbWVuY2xhdHVyZS4gV2hhdCBhcmUgdGhlIGNvbnRleHQtZGVwZW5kZW50IHZhcmlhYmxlcyB0aGF0IGltcGFjdCB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzY2hlZHVsZXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5OTpcdGNvbmZpZyBORVRfU0NIX0ZRXG4gMzAwOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlyIFF1ZXVlXCYjMzQ7XG4gMzAxOlx0XHRoZWxwXG4gMzAyOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGUSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMzAzOlx0XG4gMzA0Olx0XHQgIEZRIGRvZXMgZmxvdyBzZXBhcmF0aW9uLCBhbmQgaXMgYWJsZSB0byByZXNwZWN0IHBhY2luZyByZXF1aXJlbWVudHNcbiAzMDU6XHRcdCAgc2V0IGJ5IFRDUCBzdGFjayBpbnRvIHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlIChmb3IgbG9jYWxseSBnZW5lcmF0ZWRcbiAzMDY6XHRcdCAgdHJhZmZpYylcbiAzMDc6XHRcbiAzMDg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSBgTkVUX1NDSF9FVFNgLCYjMzQ7IHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIE5FVF9TQ0hfRVRTKioKCkFscmlnaHQsIHNvIHRoZSBwaHJhc2UgJiMzNDtMZXQmIzM5O3Mgc2VlIGBORVRfU0NIX0VUU2AmIzM0OyBwb3BzIHVwLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyBpbnRvIGFjdGlvbi4gJiMzNDtORVRfU0NIX0VUUyYjMzQ7Li4uIHRoYXQmIzM5O3MgcHJldHR5IGNsZWFybHkgcmVsYXRlZCB0byBuZXR3b3JrIHNjaGVkdWxpbmcgb3Igc29tZSBhc3BlY3Qgb2YgdGltZS1zZW5zaXRpdmUgbmV0d29ya2luZy4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIHJlZmVycyB0byBzb21lIGtpbmQgb2YgbmV0d29yayBzY2hlZHVsaW5nIGFsZ29yaXRobSBvciBtZWNoYW5pc20sIHBhcnRpY3VsYXJseSByZWxldmFudCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgZGV0ZXJtaW5pc20gYW5kIGJvdW5kZWQgbGF0ZW5jeSBhcmUgY3J1Y2lhbC4KCkkgbmVlZCBtb3JlIGNvbnRleHQsIG9idmlvdXNseSwgYnV0IHRoaXMgY291bGQgZW5jb21wYXNzIGEgcmFuZ2Ugb2YgdG9waWNzIGZyb20gRXRoZXJuZXQgVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZyAoVFNOKSBzdGFuZGFyZHMsIGxpa2UgZnJhbWUgcHJlZW1wdGlvbiBvciB0aW1lLWF3YXJlIHNoYXBlciBpbXBsZW1lbnRhdGlvbnMsIGFsbCB0aGUgd2F5IGRvd24gdG8gbW9yZSBjdXN0b20gb3Igc3BlY2lhbGl6ZWQgc2NoZWR1bGluZyBhbGdvcml0aG1zIHVzZWQgaW4gc3BlY2lmaWMgaW5kdXN0cmlhbCBjb250cm9sIHN5c3RlbXMgb3IgZW1iZWRkZWQgbmV0d29ya2luZyBhcHBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9uczogV2hhdCBraW5kIG9mIG5ldHdvcmsgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyB3aXJlZCBvciB3aXJlbGVzcz8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cz8gTGF0ZW5jeT8gSml0dGVyPyBJcyBpdCBhIHJlYWwtdGltZSBzeXN0ZW0/IEhvdyB0aWdodCBhcmUgdGhlIHRpbWluZyBjb25zdHJhaW50cz8KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGluZm9ybWF0aW9uIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgd2hldGhlciBpdCBpcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRlYnVnZ2luZywgaW1wbGVtZW50YXRpb24sIG9yIHJlc2VhcmNoLCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg5Olx0Y29uZmlnIE5FVF9TQ0hfRVRTXG4gMzkwOlx0XHR0cmlzdGF0ZSBcJiMzNDtFbmhhbmNlZCB0cmFuc21pc3Npb24gc2VsZWN0aW9uIHNjaGVkdWxlciAoRVRTKVwmIzM0O1xuIDM5MTpcdFx0aGVscFxuIDM5MjpcdCAgICAgICAgICBUaGUgRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbiBzY2hlZHVsZXIgaXMgYSBjbGFzc2Z1bFxuIDM5MzpcdCAgICAgICAgICBxdWV1aW5nIGRpc2NpcGxpbmUgdGhhdCBtZXJnZXMgZnVuY3Rpb25hbGl0eSBvZiBQUklPIGFuZCBEUlJcbiAzOTQ6XHQgICAgICAgICAgcWRpc2NzIGluIG9uZSBzY2hlZHVsZXIuIEVUUyBtYWtlcyBpdCBlYXN5IHRvIGNvbmZpZ3VyZSBhIHNldCBvZlxuIDM5NTpcdCAgICAgICAgICBzdHJpY3QgYW5kIGJhbmR3aWR0aC1zaGFyaW5nIGJhbmRzIHRvIGltcGxlbWVudCB0aGUgdHJhbnNtaXNzaW9uXG4gMzk2Olx0ICAgICAgICAgIHNlbGVjdGlvbiBkZXNjcmliZWQgaW4gODAyLjFRYXouXG4gMzk3Olx0XG4gMzk4Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBFVFMgcGFja2V0IHNjaGVkdWxpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIE5FVF9TQ0hfRFJSOiBBIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBgTkVUX1NDSF9EUlJgLiBNeSBpbml0aWFsIGZvY3VzLCBhcyBhbHdheXMsIGlzIG9uIHRoZSBjb3JlIGNoYXJhY3RlcmlzdGljcy4gSXQmIzM5O3MgYSBuZXR3b3JrIHNjaGVkdWxlciwgbWVhbmluZyBpdHMgZnVuZGFtZW50YWwgam9iIGlzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiBiYW5kd2lkdGggYW1vbmdzdCB2YXJpb3VzIG5ldHdvcmsgZmxvd3Mgb3IgcXVldWVzLiBUaGUgJiMzNDtEUlImIzM0OyBoaW50cyBhdCBEZWZpY2l0IFJvdW5kIFJvYmluLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBlbXBsb3lpbmcgYSBmYWlybmVzcyBtZWNoYW5pc20sIGFpbWluZyB0byBwcmV2ZW50IHN0YXJ2YXRpb24gYW5kIGVuc3VyZSBzb21lIGxldmVsIG9mIHNlcnZpY2UgaXNvbGF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHRyYWZmaWMgc3RyZWFtcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIGFib3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgYSBzdHJpY3QgRFJSIG9yIGEgbW9kaWZpZWQgdmVyc2lvbj8gQXJlIHRoZXJlIGFueSB3ZWlnaHRpbmcgc2NoZW1lcyBpbnZvbHZlZD8gSG93IGFyZSBkZWZpY2l0cyBkZWZpbmVkLCBhbmQgd2hhdCYjMzk7cyB0aGUgdHlwaWNhbCAmIzM0O3F1YW50dW0mIzM0OyBzaXplIGZvciB0aGVzZSBkZWZpY2l0cz8gS25vd2luZyB0aGVzZSBzcGVjaWZpY3MgaXMgY3J1Y2lhbC4gV2l0aG91dCB0aGlzLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIHRydWx5IGFzc2VzcyBpdHMgcGVyZm9ybWFuY2UuCgpJJiMzOTtkIHdhbnQgdG8gZXhhbWluZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcXVldWluZyBkaXNjaXBsaW5lcy4gRG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIHNjaGVkdWxlcnMsIG9yIGFyZSB0aGVyZSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucz8gSG93IGRvZXMgaXQgaGFuZGxlIGNvbmdlc3Rpb24gc2lnbmFscywgbGlrZSBFQ04gb3IgZXhwbGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb24/IERvZXMgaXQgb2ZmZXIgYW55IHByaW9yaXRpemF0aW9uIGJleW9uZCBmYWlybmVzcz8gV2hhdCBhcmUgaXRzIGxhdGVuY3kgY2hhcmFjdGVyaXN0aWNzLCBhbmQgaG93IGRvZXMgaXQgY29tcGFyZSB0byBvdGhlciBwb3RlbnRpYWwgc2NoZWR1bGVycyBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucz8KCkJleW9uZCB0aGUgYmFzaWNzLCBJJiMzOTtkIGludmVzdGlnYXRlIHRoZSBrZXJuZWwtbGV2ZWwgaW1wbGVtZW50YXRpb246IGlzIGl0IGhhcmR3YXJlLWFjY2VsZXJhdGVkLCBvciBwdXJlbHkgc29mdHdhcmU/IFRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgd2lsbCBzd2luZyBkcmFtYXRpY2FsbHkgZGVwZW5kaW5nIG9uIHRoYXQgYW5zd2VyLiBBbHNvLCBJJiMzOTtkIHdhbnQgdG8gbG9vayBhdCBpdHMgbWVtb3J5IGZvb3RwcmludC4KCkZpbmFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlLiBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3M/IElzIGl0IHByaW1hcmlseSBmb2N1c2VkIG9uIGJhbmR3aWR0aCB1dGlsaXphdGlvbiwgbGF0ZW5jeSBtaW5pbWl6YXRpb24sIG9yIGZhaXJuZXNzPyBIb3cgZG9lcyBpdCBoYW5kbGUgYnVyc3RzIG9mIHRyYWZmaWM/IEkgd2FudCB0byBzZWUgdGhpcyBzY2hlZHVsZXIgaW4gYWN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIG5ldHdvcmsgbG9hZCBzY2VuYXJpb3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBldmFsdWF0ZSBpdHMgZWZmaWNhY3kgZm9yIGEgc3BlY2lmaWMgc2V0IG9mIHJlcXVpcmVtZW50cy4gSSYjMzk7bSBrZWVuIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyB0aGUgcmlnaHQgY2hvaWNlIGZvciB0aGUgdGFyZ2V0IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDc6XHRjb25maWcgTkVUX1NDSF9EUlJcbiAyMDg6XHRcdHRyaXN0YXRlIFwmIzM0O0RlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXCYjMzQ7XG4gMjA5Olx0XHRoZWxwXG4gMjEwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBEZWZpY2l0IFJvdW5kIFJvYmluIChEUlIpIHBhY2tldFxuIDIxMTpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyMTI6XHRcbiAyMTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIxNDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxuIDIxNTpcdFxuIDIxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgTkVUX1NDSF9TRlEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBORVRfU0NIX1NGUWAgdGhpbmcuIEl0JiMzOTtzIGEgdHJhZmZpYyBzaGFwZXIsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCBpdCYjMzk7cyB0aGUgU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyBkaXNjaXBsaW5lLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBpdHMgcHVycG9zZTogZW5zdXJpbmcgZmFpcm5lc3MgaW4gYmFuZHdpZHRoIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYSBjb25nZXN0ZWQgbmV0d29yayBpbnRlcmZhY2UuIEkgYmV0IGl0IHVzZXMgYSBoYXNoIGZ1bmN0aW9uIHRvIGRpc3RyaWJ1dGUgZmxvd3MgaW50byBkaWZmZXJlbnQgcXVldWVzLCBhaW1pbmcgdG8gaXNvbGF0ZSB0aGVtIGZyb20gaGVhZC1vZi1saW5lIGJsb2NraW5nIGlzc3Vlcy4KCk5vdywgSSYjMzk7bSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGl0cyBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIGNvbXBhcmVkIHRvIG90aGVyIHF1ZXVpbmcgZGlzY2lwbGluZXMuIFRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGJ1cnN0eSB0cmFmZmljIOKAkyBpcyBpdCBnb29kIGF0IHNtb290aGluZyB0aG9zZSBvdXQsIG9yIGRvZXMgaXQgaW50cm9kdWNlIGxhdGVuY3k/IEFuZCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIFRDUCYjMzk7cyBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcz8gRG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgb3IgZG9lcyBpdCBjYXVzZSBhbnkgaXNzdWVzPyBJJiMzOTtkIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaGFzaCBpcyBnZW5lcmF0ZWQgYW5kIGlmIGl0IGhhcyBhbnkgcmFuZG9taXphdGlvbiBhc3BlY3RzLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBiYWxhbmNlcyB0aHJvdWdocHV0IGFuZCBsYXRlbmN5IGFuZCBpZiB0aGVyZSBhcmUgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLiBJIG1pZ2h0IHdhbnQgdG8gc3RhcnQgdGVzdGluZyBpdHMgYmVoYXZpb3IgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50IHRvIHNlZSB3aGVyZSB0aGlzIHdvdWxkIGZpdCBpbiBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSwgcGVyaGFwcyBzb21lIHNpbXVsYXRpb25zIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMTpcdGNvbmZpZyBORVRfU0NIX1NGUVxuIDExMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVwmIzM0O1xuIDExMzpcdFx0aGVscFxuIDExNDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVxuIDExNTpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMTE2Olx0XG4gMTE3Olx0XHQgIFNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9zZnEuY1x1MDAzZSBmb3IgbW9yZSBkZXRhaWxzLlxuIDExODpcdFxuIDExOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTIwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfc2ZxLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYCB3aXRoaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYE5FVF9TQ0hFRGAgaXMgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludDsgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGluZGl2aWR1YWwgc2NoZWR1bGVyIGNob2ljZXMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiBgTkVUX1NDSEVEYCB0byB0aGUgb3RoZXIgcmVsYXRlZCBmZWF0dXJlcywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIGFsbCBvZiB0aGUgcmVsYXRlZCBmZWF0dXJlcywgc3VjaCBhcyBxdWV1aW5nIGRpc2NpcGxpbmVzLCBmaWx0ZXJzIGFuZCBjbGFzc2lmaWVycyBhbmQgdHJhZmZpYyBwb2xpY2luZyBhbmQgc2hhcGluZyBjYXBhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgTkVUX1NDSEVEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYE5FVF9TQ0hfUElFYCBpcyByZXF1aXJlZCBmb3IgYE5FVF9TQ0hfRlFfUElFYCB0byBmdW5jdGlvbiBwcm9wZXJseSwgZ2l2ZW4gdGhlaXIgcmVsYXRpb25zaGlwLiBZZXMsIGl0IGxvb2tzIGxpa2UgYE5FVF9TQ0hfRlFfUElFYCBpbmRlZWQgZGVwZW5kcyBvbiBgTkVUX1NDSF9QSUVgLiBFeGNlbGxlbnQuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBjbGVhcmx5IGluIG1pbmQuIFRoZSBjb3JlIHNldCBvZiBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhcHBlYXIgdG8gYmU6CgoqICAgYE5FVF9TQ0hFRGAKKiAgIGBORVRfU0NIX0RSUmAKKiAgIGBORVRfU0NIX0RVQUxQSTJgCiogICBgTkVUX1NDSF9FVFNgCiogICBgTkVUX1NDSF9GUWAKKiAgIGBORVRfU0NIX1BJRWAKKiAgIGBORVRfU0NIX0ZRX1BJRWAKKiAgIGBORVRfU0NIX0hIRmAKKiAgIGBORVRfU0NIX1NGUWAKCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2YgdGhlc2UsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgc3ltYm9scy4KCk5vdywgbGV0JiMzOTtzIHR1cm4gdG8gdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCB0aGVzZSwgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIHNldCBpbmNsdWRlczoKCiogICBgZHJyX2NoYW5nZV9jbGFzc2AKKiAgIGBkdWFscGkyX2NoYW5nZWAKKiAgIGBkdWFscGkyX2luaXRgCiogICBgZXRzX3FkaXNjX2NoYW5nZWAKKiAgIGBmcV9jaGFuZ2VgCiogICBgZnFfcGllX2NoYW5nZWAKKiAgIGBoaGZfY2hhbmdlYAoqICAgYHBpZV9kcm9wX2Vhcmx5YAoqICAgYHNmcV9jaGFuZ2VgCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCB0cmVhdCBgcGllX2Ryb3BfZWFybHlgIGFzIGEgc3RhdGljIHN5bWJvbCBieSBtaXN0YWtlLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCBpcyBpcyBub3Qgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29sIHBpZV9kcm9wX2Vhcmx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9waWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3BpZS5jPTI1PXN0cnVjdCBwaWVfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy0zMi1cbm5ldC9zY2hlZC9zY2hfcGllLmM6MzM6Ym9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzQtXHRcdCAgICBzdHJ1Y3QgcGllX3ZhcnMgKnZhcnMsIHUzMiBiYWNrbG9nLCB1MzIgcGFja2V0X3NpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzUxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBzeXN0ZW0gaXNuJiMzOTt0IHN0YXRpYywgd2hpY2ggaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgYHNjaF9kdWFscGkyLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbmAgYW5kIGBtdXN0X2Ryb3BgLiBUaGV5IGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW4gdGVybXMgb2YgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBjb21wb25lbnRzLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gSSBjYW4gc2VlIHRoYXQgYGR1YWxwaTJfY2hhbmdlYCwgYGR1YWxwaTJfaW5pdGAsIGFuZCBgZHVhbHBpMl9lbnF1ZXVlYCBjYWxsIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuCgpTaW5jZSBgZHVhbHBpMl9jaGFuZ2VgIGFuZCBgZHVhbHBpMl9pbml0YCBhcmUgY2FsbGluZyB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGVuIHRoZXkgYXJlIGdvb2QuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgaG93IGBkdWFscGkyX2VucXVldWVgIGZpdHMgaW50byB0aGUgZHluYW1pYyBtb2RlbCwgZ2l2ZW4gdGhhdCBpdCBhbHNvIHVzZXMgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gZW5zdXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIGlzIGNvcnJlY3RseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBkdWFscGkyX2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz0zNDQ9c3RhdGljIGludCBkdWFscGkyX3NrYl9jbGFzc2lmeShzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTM4Ny1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jOjM4ODpzdGF0aWMgaW50IGR1YWxwaTJfZW5xdWV1ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy0zODktXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNDAKCQkJCQkJCW91dHB1dDogMjcyCgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGBtdXN0X2Ryb3BgIGlzIHRyaWdnZXJlZCBieSBgZHVhbHBpMl9lbnF1ZXVlX3NrYmAuIFNpbmNlIHdlIGFyZSBmb2N1c2luZyBvbiB0aGF0LCBsZXQmIzM5O3MgYWRkIGBkdWFscGkyX2VucXVldWVfc2tiYCB0byB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBmb3IgdGhlIGFuYWx5c2lzLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGVzZSBjaGFuZ2UgZnVuY3Rpb25zLiBMb29raW5nIGF0IGBmcV9yZXNpemVgIHdpdGhpbiBgc2NoX2ZxLmNgLCBpdCYjMzk7cyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBmcV9jaGFuZ2VgLCB3aGljaCBtYWtlcyBgZnFfY2hhbmdlYCByZWxldmFudC4gVGhlbiwgYGV0c19xZGlzY19jaGFuZ2VgIGluIGBzY2hfZXRzLmNgIGlzIGFsc28gc3RhdGljLCBidXQgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBzYW1lIGdvZXMgZm9yIGBmcV9waWVfY2hhbmdlYCBpbiBgc2NoX2ZxX3BpZS5jYCwgYGhoZl9jaGFuZ2VgIGluIGBzY2hfaGhmLmNgLCBgc2ZxX2NoYW5nZWAgaW4gYHNjaF9zZnEuY2AsIGFuZCBgZHJyX2NoYW5nZV9jbGFzc2AgaW4gYHNjaF9kcnIuY2Ag4oCTIHRoZXkgYXJlIGFsbCBzdGF0aWMgYnV0IHNlcnZlIGFzIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZWlyIHJlc3BlY3RpdmUgc2NoZWR1bGVycy4KCkdpdmVuIHRoYXQgYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE5ldGxpbmsgY29tbWFuZHMgKHNwZWNpZmljYWxseSBgdGMgcWRpc2MgYWRkL2NoYW5nZWApLCBhbmQgdGhlIHBvdGVudGlhbCBjaGFuZ2VzIGxvb2sgZnVuY3Rpb25hbCBzdWNoIGFzIGNsYW1waW5nIHZhbHVlcywgZml4aW5nIGJ1Z3Mgd2l0aCB6ZXJvIG9yIG92ZXJseSBsYXJnZSB2YWx1ZXMsIEkgdGhpbmsgdGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4KCkxldCBtZSBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RVQUxQSTImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0hIRiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1NGUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rycl9jaGFuZ2VfY2xhc3MmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9pbml0JiMzNDssCiAgICAmIzM0O2R1YWxwaTJfZW5xdWV1ZV9za2ImIzM0OywKICAgICYjMzQ7ZXRzX3FkaXNjX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfcGllX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtoaGZfY2hhbmdlJiMzNDssCiAgICAmIzM0O3BpZV9kcm9wX2Vhcmx5JiMzNDssCiAgICAmIzM0O3NmcV9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzIChxZGlzY3MpIHRvIGNsYW1wIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzLCBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIHplcm8gb3Igb3Zlcmx5IGxhcmdlIHZhbHVlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgcWRpc2NzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyBjbGFtcGluZyBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EVUFMUEkyJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9ISEYmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9TRlEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcnJfY2hhbmdlX2NsYXNzJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfY2hhbmdlJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfaW5pdCYjMzQ7LAogICAgJiMzNDtkdWFscGkyX2VucXVldWVfc2tiJiMzNDssCiAgICAmIzM0O2V0c19xZGlzY19jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX3BpZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7aGhmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwaWVfZHJvcF9lYXJseSYjMzQ7LAogICAgJiMzNDtzZnFfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG11bHRpcGxlIG5ldHdvcmsgc2NoZWR1bGVycyAocWRpc2NzKSB0byBjbGFtcCBgcXVhbnR1bWAgYW5kIGBtdHVgIHZhbHVlcywgcHJldmVudGluZyBpc3N1ZXMgd2l0aCB6ZXJvIG9yIG92ZXJseSBsYXJnZSB2YWx1ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIHFkaXNjcyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xhbXBpbmcgbG9naWMgYmVoYXZlcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyAobWluL21heC9jbGFtcCkgdG8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGxpa2UgYHF1YW50dW1gIGFuZCBNVFUtZGVyaXZlZCB2YWx1ZXMgYWNyb3NzIHZhcmlvdXMgbmV0d29yayBzY2hlZHVsZXJzIChEUlIsIERVQUxQSTIsIEVUUywgRlEsIEZRX1BJRSwgSEhGLCBQSUUsIFNGUSkuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsb2dpY2FsIGJ1Z3Mgc3VjaCBhcyBpbmZpbml0ZSBsb29wcyAoZS5nLiwgemVybyBxdWFudHVtKSwgZGl2aXNpb24gYnkgemVybywgb3IgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9ucy9pbnRlZ2VyIG92ZXJmbG93cyAoZS5nLiwgZXh0cmVtZWx5IGxhcmdlIHF1YW50dW0gb3IgTVRVIHZhbHVlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGhvdyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBoYW5ncykgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgaGFuZyBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggOTFiMWVmODI0YWZhZi4uMGZmZGFiMjdiYWU0MiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC04Miw4ICYjNDM7ODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsCiAJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7U3BlY2lmaWVkIERSUiBxdWFudHVtIGNhbm5vdCBiZSB6ZXJvJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KJiM0MzsJCXF1YW50dW0gPSBtYXgoMjU2VSwgcXVhbnR1bSk7CiAJfSBlbHNlCi0JCXF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKJiM0MzsJCXF1YW50dW0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7CiAKIAlpZiAoY2wgIT0gTlVMTCkgewogCQlpZiAodGNhW1RDQV9SQVRFXSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwppbmRleCA0ZjY3OGQ0ZmYxMGVjLi40OTQ3ZGVmN2M0OWVmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwpAQCAtMjA4LDkgJiM0MzsyMDgsMTEgQEAgc3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24oc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSkKIHN0YXRpYyB2b2lkIGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbihzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJCQkJICAgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSwgdTMyIHdjKQogewomIzQzOwl1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxICZsdDsmbHQ7IDIwKTsKJiM0MzsKIAlxLSZndDtjX3Byb3RlY3Rpb25fd2MgPSB3YzsKIAlxLSZndDtjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3YzsKLQlxLSZndDtjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkgKgomIzQzOwlxLSZndDtjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpbXR1ICoKIAkJKChpbnQpcS0mZ3Q7Y19wcm90ZWN0aW9uX3djIC0gKGludClxLSZndDtjX3Byb3RlY3Rpb25fd2wpOwogCWR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHEpOwogfQpAQCAtMjg1LDggJiM0MzsyODcsOSBAQCBzdGF0aWMgYm9vbCBtdXN0X2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsCiAJdTY0IGxvY2FsX2xfcHJvYjsKIAlib29sIG92ZXJsb2FkOwogCXUzMiBwcm9iOwomIzQzOwl1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxICZsdDsmbHQ7IDIwKTsKIAotCWlmIChzY2gtJmd0O3FzdGF0cy5iYWNrbG9nICZsdDsgMiAqIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKQomIzQzOwlpZiAoc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmbHQ7IDIgKiBtdHUpCiAJCXJldHVybiBmYWxzZTsKIAogCXByb2IgPSBSRUFEX09OQ0UocS0mZ3Q7cGkyX3Byb2IpOwpAQCAtNzEyLDcgJiM0Mzs3MTUsOCBAQCBzdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdCkKIAkvKiBBcHBseSBydWxlIG9mIHRodW1iLCBpLmUuLCBkb3VibGluZyB0aGUgcGFja2V0IGxlbmd0aCwKIAkgKiB0byBmdXJ0aGVyIGluY2x1ZGUgcGVyIHBhY2tldCBvdmVyaGVhZCBpbiBtZW1vcnlfbGltaXQuCiAJICovCi0JdTY0IG1lbWxpbSA9IG11bF91MzJfdTMyKGxpbWl0LCAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpOwomIzQzOwl1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksCiYjNDM7CQkJCQkJICAgICAxLCAxICZsdDsmbHQ7IDIwKSk7CiAKIAlpZiAodXBwZXJfMzJfYml0cyhtZW1saW0pKQogCQlyZXR1cm4gVTMyX01BWDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jCmluZGV4IDI1ZmNmNDA3OWZlY2UuLmYyM2M4ZGM2OGY4Y2IgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZXRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9ldHMuYwpAQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCBzdGF0aWMgaW50IGV0c19xZGlzY19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAkgKi8KIAlmb3IgKGkgPSBuc3RyaWN0OyBpICZsdDsgbmJhbmRzOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXF1YW50YVtpXSkKLQkJCXF1YW50YVtpXSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOwomIzQzOwkJCXF1YW50YVtpXSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTsKIAl9CiAKIAkvKiBCZWZvcmUgY29tbWl0LCBtYWtlIHN1cmUgd2UgY2FuIGFsbG9jYXRlIGFsbCBuZXcgcWRpc2NzICovCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmMKaW5kZXggNjE0NGI1Njg2ZjEzZi4uYWI4ZTdjNmFlMjAzOSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnEuYwpAQCAtOTgwLDcgJiM0Mzs5ODAsNyBAQCBzdGF0aWMgaW50IGZxX3Jlc2l6ZShzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxvZykKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gaXFfcmFuZ2UgPSB7Ci0JLm1heCA9IElOVF9NQVgsCiYjNDM7CS5tYXggPSAxICZsdDsmbHQ7IDIwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX3BvbGljeVtUQ0FfRlFfTUFYICYjNDM7IDFdID0gewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jCkBAIC0zNDEsNyAmIzQzOzM0MSw4IEBAIHN0YXRpYyBpbnQgZnFfcGllX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQkJICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpOwogCiAJaWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pCi0JCVdSSVRFX09OQ0UocS0mZ3Q7cXVhbnR1bSwgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9RVUFOVFVNXSkpOwomIzQzOwkJV1JJVEVfT05DRShxLSZndDtxdWFudHVtLAomIzQzOwkJCSAgIG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSkpOwogCiAJaWYgKHRiW1RDQV9GUV9QSUVfTUVNT1JZX0xJTUlUXSkKIAkJV1JJVEVfT05DRShxLSZndDttZW1vcnlfbGltaXQsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuYwppbmRleCA5NmFjYWI2YThkYTAzLi5iYjhlODk1MmY1NTUzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hoZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGhmLmMKQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJCXJldHVybiBlcnI7CiAKIAlpZiAodGJbVENBX0hIRl9RVUFOVFVNXSkKLQkJbmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTsKJiM0MzsJCW5ld19xdWFudHVtID0gbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfUVVBTlRVTV0pKTsKIAogCWlmICh0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKQogCQluZXdfaGhmX25vbl9oaF93ZWlnaHQgPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcGllLmMgYi9uZXQvc2NoZWQvc2NoX3BpZS5jCmluZGV4IGI0MWYyZGVmMmUyY2MuLjNiNzg2M2ZmZDI4NGMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcGllLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9waWUuYwpAQCAtMzUsNyAmIzQzOzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcywKIHsKIAl1NjQgcm5kOwogCXU2NCBsb2NhbF9wcm9iID0gdmFycy0mZ3Q7cHJvYjsKLQl1MzIgbXR1ID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7CiYjNDM7CXUzMiBtdHUgPSBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksIDEsIDEgJmx0OyZsdDsgMjApOwogCiAJLyogSWYgdGhlcmUgaXMgc3RpbGwgYnVyc3QgYWxsb3dhbmNlIGxlZnQgc2tpcCByYW5kb20gZWFybHkgZHJvcCAqLwogCWlmICh2YXJzLSZndDtidXJzdF90aW1lICZndDsgMCkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IDE4N2QzZWQ1NzhmMjYuLjhiYmNmYzllODVkOTQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtNjYwLDYgJiM0Mzs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAoY3RsLSZndDtxdWFudHVtICZndDsgMSAmbHQ7Jmx0OyAyMCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtxdWFudHVtIHRvbyBsYXJnZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKGN0bC0mZ3Q7cGVydHVyYl9wZXJpb2QgJmx0OyAwIHx8CiAJICAgIGN0bC0mZ3Q7cGVydHVyYl9wZXJpb2QgJmd0OyBJTlRfTUFYIC8gSFopIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtpbnZhbGlkIHBlcnR1cmIgcGVyaW9kJiMzNDspOwpAQCAtNjg4LDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgaW50IHNmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAogCS8qIHVwZGF0ZSBhbmQgdmFsaWRhdGUgY29uZmlndXJhdGlvbiAqLwogCWlmIChjdGwtJmd0O3F1YW50dW0pCi0JCXF1YW50dW0gPSBjdGwtJmd0O3F1YW50dW07CiYjNDM7CQlxdWFudHVtID0gbWF4KDI1NlUsIGN0bC0mZ3Q7cXVhbnR1bSk7CiAJaWYgKGN0bC0mZ3Q7Zmxvd3MpCiAJCW1heGZsb3dzID0gbWluX3QodTMyLCBjdGwtJmd0O2Zsb3dzLCBTRlFfTUFYX0ZMT1dTKTsKIAlpZiAoY3RsLSZndDtkaXZpc29yKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzIxCgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDg5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBLTVNBTiBpcyBVbm5lY2Vzc2FyeSBIZXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgbmV0d29yayBzY2hlZHVsZXJzIOKAkyBgc2NoX2Ryci5jYCwgYHNjaF9kdWFscGkyLmNgLCBgc2NoX2V0cy5jYCwgYHNjaF9mcS5jYCwgYHNjaF9mcV9waWUuY2AsIGBzY2hfaGhmLmNgLCBgc2NoX3BpZS5jYCwgYW5kIGBzY2hfc2ZxLmNgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWxsIGFib3V0IGFkZGluZyBib3VuZHMgY2hlY2tpbmcuIFdlJiMzOTtyZSBjbGFtcGluZyB0aGUgYHF1YW50dW1gIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIHRoZSBNVFUsIGVuc3VyaW5nIHRoZXkgc3RheSB3aXRoaW4gcmVhc29uYWJsZSBsaW1pdHMuIEl0IGxvb2tzIGxpa2UgdGhlIGxpbWl0cyBhcmUgcHJpbWFyaWx5IGEgbWluaW11bSBvZiAyNTYgYW5kIGEgbWF4aW11bSBhcm91bmQgMU1CICgxICZsdDsmbHQ7IDIwKS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHB1cmVseSBhYm91dCAqaW5wdXQgdmFsaWRhdGlvbiouIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgc2l0dWF0aW9ucyB3aGVyZSBhIHplcm8gYHF1YW50dW1gIGNvdWxkIGxlYWQgdG8gYSBkaXZpZGUtYnktemVybyBvciBpbmZpbml0ZSBsb29wLCBvciBhbiBleGNlc3NpdmVseSBsYXJnZSB2YWx1ZSBjYXVzZXMgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3Zlci1hbGxvY2F0ZXMgbWVtb3J5LiBUaGlzIGlzIGNsYXNzaWMgaGFyZGVuaW5nIGFnYWluc3QgbG9naWNhbCBlcnJvcnMgc3RlbW1pbmcgZnJvbSB1c2VyIGlucHV0IG9yIGNvbmZpZ3VyYXRpb24uCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0gdG8gbWFrZSB0aGUgS01TQU4gY2FsbC4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJhaXNlIGEgcmVkIGZsYWcuIFdlJiMzOTtyZSAqY2xhbXBpbmcqIGV4aXN0aW5nIGludGVnZXIgdmFsdWVzLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gbW9kaWZpY2F0aW9ucyB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBub3RoaW5nIHRoYXQgY2hhbmdlcyBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCB0aGVzZSBjaGFuZ2VzIG9ubHkgY2xhbXAgdGhlIHZhbHVlIHRoYXQgaXMgc3RvcmVkIC0gc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgdGhlIHZhbHVlcyBiZWluZyByZWFkLgoKVGhlIHR5cGVzIG9mIGJ1Z3MgdGhpcyBwYXRjaCBpcyBwcmV2ZW50aW5nIChoYW5ncywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgT09NIGNvbmRpdGlvbnMpIGFyZSBnZW5lcmFsbHkgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBMT0NLREVQIGFuZCBnZW5lcmFsIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uPyBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGUgdmFsdWVzIGJlaW5nIG1vZGlmaWVkIGRvbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGlmIGR1bXBlZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLiBUaGUgcGF0Y2ggb25seSBjbGFtcHMgdGhlIHZhbHVlcywgbm90IHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IG9yIHRoZSBkdW1wIGZ1bmN0aW9ucy4KClNvLCBJIHdpbGwgc3RhdGUgbXkgcmVhc29uaW5nIGNsZWFybHkuIFRoZSBwYXRjaCBlbmZvcmNlcyBib3VuZHMgY2hlY2tzIChtaW4vbWF4L2NsYW1wKSBvbiBwYXJhbWV0ZXJzIGxpa2UgJiMzOTtxdWFudHVtJiMzOTsgYW5kIE1UVS1yZWxhdGVkIHZhbHVlcyBhY3Jvc3MgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzLiBUaGlzIG1pdGlnYXRlcyBsb2dpY2FsIGZsYXdzIHRoYXQgcmVzdWx0IGluLCBpbmZpbml0ZSBsb29wcywgbWVtb3J5IGVycm9ycyBvciBvdmVyZmxvd3MuIFNpbmNlIHRoZSBwYXRjaCBkb2VzIG5vdCBhZGQgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGluaXRpYWxpemF0aW9uIG9yIGludHJvZHVjZSBuZXcgY29weWluZyBtZWNoYW5pc21zLCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrYWdlIGlzIG5vbi1leGlzdGVudC4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQgZnV6emluZyBzaG91bGQgY2F0Y2ggYW55IHJlbWFpbmluZyBpc3N1ZXMuIEkgd2lsbCBmbGFnIGBOZWVkc0tNU0FOYCBhcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyAobWluL21heC9jbGFtcCkgdG8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGxpa2UgYHF1YW50dW1gIGFuZCBNVFUtZGVyaXZlZCB2YWx1ZXMgYWNyb3NzIHZhcmlvdXMgbmV0d29yayBzY2hlZHVsZXJzIChEUlIsIERVQUxQSTIsIEVUUywgRlEsIEZRX1BJRSwgSEhGLCBQSUUsIFNGUSkuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsb2dpY2FsIGJ1Z3Mgc3VjaCBhcyBpbmZpbml0ZSBsb29wcyAoZS5nLiwgemVybyBxdWFudHVtKSwgZGl2aXNpb24gYnkgemVybywgb3IgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9ucy9pbnRlZ2VyIG92ZXJmbG93cyAoZS5nLiwgZXh0cmVtZWx5IGxhcmdlIHF1YW50dW0gb3IgTVRVIHZhbHVlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGhvdyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBoYW5ncykgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgaGFuZyBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDE6NTMuMjM1ODcwMjg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MTgzMTQ4NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRFVBTFBJMlwiLFxuICAgIFwiTkVUX1NDSF9FVFNcIixcbiAgICBcIk5FVF9TQ0hfRlFcIixcbiAgICBcIk5FVF9TQ0hfUElFXCIsXG4gICAgXCJORVRfU0NIX0ZRX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9ISEZcIixcbiAgICBcIk5FVF9TQ0hfU0ZRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHJyX2NoYW5nZV9jbGFzc1wiLFxuICAgIFwiZHVhbHBpMl9jaGFuZ2VcIixcbiAgICBcImR1YWxwaTJfaW5pdFwiLFxuICAgIFwiZHVhbHBpMl9lbnF1ZXVlX3NrYlwiLFxuICAgIFwiZXRzX3FkaXNjX2NoYW5nZVwiLFxuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJmcV9waWVfY2hhbmdlXCIsXG4gICAgXCJoaGZfY2hhbmdlXCIsXG4gICAgXCJwaWVfZHJvcF9lYXJseVwiLFxuICAgIFwic2ZxX2NoYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzIChxZGlzY3MpIHRvIGNsYW1wIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzLCBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIHplcm8gb3Igb3Zlcmx5IGxhcmdlIHZhbHVlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgcWRpc2NzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyBjbGFtcGluZyBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAxOjUzLjIzNTg3NDYzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzMzgyMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwODowMTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuY1xcbmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcXG5AQCAtODIsOCArODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlNwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1xcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbitcXHRcXHRxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pO1xcbiBcXHR9IGVsc2VcXG4tXFx0XFx0cXVhbnR1bSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpO1xcbitcXHRcXHRxdWFudHVtID0gbWF4KDI1NlUsICh1MzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpO1xcbiBcXG4gXFx0aWYgKGNsICE9IE5VTEwpIHtcXG4gXFx0XFx0aWYgKHRjYVtUQ0FfUkFURV0pIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xcbmluZGV4IDRmNjc4ZDRmZjEwZWMuLjQ5NDdkZWY3YzQ5ZWYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xcbkBAIC0yMDgsOSArMjA4LDExIEBAIHN0YXRpYyB2b2lkIGR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEpXFxuIHN0YXRpYyB2b2lkIGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbihzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSwgdTMyIHdjKVxcbiB7XFxuK1xcdHUzMiBtdHUgPSBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksIDEsIDEgXFx1MDAzY1xcdTAwM2MgMjApO1xcbitcXG4gXFx0cS1cXHUwMDNlY19wcm90ZWN0aW9uX3djID0gd2M7XFxuIFxcdHEtXFx1MDAzZWNfcHJvdGVjdGlvbl93bCA9IE1BWF9XQyAtIHdjO1xcbi1cXHRxLVxcdTAwM2VjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkgKlxcbitcXHRxLVxcdTAwM2VjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpbXR1ICpcXG4gXFx0XFx0KChpbnQpcS1cXHUwMDNlY19wcm90ZWN0aW9uX3djIC0gKGludClxLVxcdTAwM2VjX3Byb3RlY3Rpb25fd2wpO1xcbiBcXHRkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTtcXG4gfVxcbkBAIC0yODUsOCArMjg3LDkgQEAgc3RhdGljIGJvb2wgbXVzdF9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxcbiBcXHR1NjQgbG9jYWxfbF9wcm9iO1xcbiBcXHRib29sIG92ZXJsb2FkO1xcbiBcXHR1MzIgcHJvYjtcXG4rXFx0dTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSBcXHUwMDNjXFx1MDAzYyAyMCk7XFxuIFxcbi1cXHRpZiAoc2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZyBcXHUwMDNjIDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSlcXG4rXFx0aWYgKHNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2cgXFx1MDAzYyAyICogbXR1KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRwcm9iID0gUkVBRF9PTkNFKHEtXFx1MDAzZXBpMl9wcm9iKTtcXG5AQCAtNzEyLDcgKzcxNSw4IEBAIHN0YXRpYyB1MzIgZ2V0X21lbW9yeV9saW1pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxpbWl0KVxcbiBcXHQvKiBBcHBseSBydWxlIG9mIHRodW1iLCBpLmUuLCBkb3VibGluZyB0aGUgcGFja2V0IGxlbmd0aCxcXG4gXFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LlxcbiBcXHQgKi9cXG4tXFx0dTY0IG1lbWxpbSA9IG11bF91MzJfdTMyKGxpbWl0LCAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpO1xcbitcXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgMSwgMSBcXHUwMDNjXFx1MDAzYyAyMCkpO1xcbiBcXG4gXFx0aWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSlcXG4gXFx0XFx0cmV0dXJuIFUzMl9NQVg7XFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXFxuaW5kZXggMjVmY2Y0MDc5ZmVjZS4uZjIzYzhkYzY4ZjhjYiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xcbkBAIC02MzYsNyArNjM2LDcgQEAgc3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcdCAqL1xcbiBcXHRmb3IgKGkgPSBuc3RyaWN0OyBpIFxcdTAwM2MgbmJhbmRzOyBpKyspIHtcXG4gXFx0XFx0aWYgKCFxdWFudGFbaV0pXFxuLVxcdFxcdFxcdHF1YW50YVtpXSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpO1xcbitcXHRcXHRcXHRxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEJlZm9yZSBjb21taXQsIG1ha2Ugc3VyZSB3ZSBjYW4gYWxsb2NhdGUgYWxsIG5ldyBxZGlzY3MgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXFxuaW5kZXggNjE0NGI1Njg2ZjEzZi4uYWI4ZTdjNmFlMjAzOSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcXG5AQCAtOTgwLDcgKzk4MCw3IEBAIHN0YXRpYyBpbnQgZnFfcmVzaXplKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgbG9nKVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBpcV9yYW5nZSA9IHtcXG4tXFx0Lm1heCA9IElOVF9NQVgsXFxuK1xcdC5tYXggPSAxIFxcdTAwM2NcXHUwMDNjIDIwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX3BvbGljeVtUQ0FfRlFfTUFYICsgMV0gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXFxuaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xcbkBAIC0zNDEsNyArMzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcdFxcdFxcdCAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfQkVUQV0pKTtcXG4gXFxuIFxcdGlmICh0YltUQ0FfRlFfUElFX1FVQU5UVU1dKVxcbi1cXHRcXHRXUklURV9PTkNFKHEtXFx1MDAzZXF1YW50dW0sIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pKTtcXG4rXFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VxdWFudHVtLFxcbitcXHRcXHRcXHQgICBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9RVUFOVFVNXSkpKTtcXG4gXFxuIFxcdGlmICh0YltUQ0FfRlFfUElFX01FTU9SWV9MSU1JVF0pXFxuIFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlbWVtb3J5X2xpbWl0LFxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xcbmluZGV4IDk2YWNhYjZhOGRhMDMuLmJiOGU4OTUyZjU1NTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oaGYuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfaGhmLmNcXG5AQCAtNTUxLDcgKzU1MSw3IEBAIHN0YXRpYyBpbnQgaGhmX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9ISEZfUVVBTlRVTV0pXFxuLVxcdFxcdG5ld19xdWFudHVtID0gbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSk7XFxuK1xcdFxcdG5ld19xdWFudHVtID0gbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfUVVBTlRVTV0pKTtcXG4gXFxuIFxcdGlmICh0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKVxcbiBcXHRcXHRuZXdfaGhmX25vbl9oaF93ZWlnaHQgPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9waWUuYyBiL25ldC9zY2hlZC9zY2hfcGllLmNcXG5pbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfcGllLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX3BpZS5jXFxuQEAgLTM1LDcgKzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcXG4ge1xcbiBcXHR1NjQgcm5kO1xcbiBcXHR1NjQgbG9jYWxfcHJvYiA9IHZhcnMtXFx1MDAzZXByb2I7XFxuLVxcdHUzMiBtdHUgPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcXG4rXFx0dTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSBcXHUwMDNjXFx1MDAzYyAyMCk7XFxuIFxcbiBcXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXFxuIFxcdGlmICh2YXJzLVxcdTAwM2VidXJzdF90aW1lIFxcdTAwM2UgMClcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmNcXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXFxuQEAgLTY2MCw2ICs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoY3RsLVxcdTAwM2VxdWFudHVtIFxcdTAwM2UgMSBcXHUwMDNjXFx1MDAzYyAyMCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwicXVhbnR1bSB0b28gbGFyZ2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjdGwtXFx1MDAzZXBlcnR1cmJfcGVyaW9kIFxcdTAwM2MgMCB8fFxcbiBcXHQgICAgY3RsLVxcdTAwM2VwZXJ0dXJiX3BlcmlvZCBcXHUwMDNlIElOVF9NQVggLyBIWikge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiaW52YWxpZCBwZXJ0dXJiIHBlcmlvZFxcXCIpO1xcbkBAIC02ODgsNyArNjkzLDcgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcbiBcXHQvKiB1cGRhdGUgYW5kIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gKi9cXG4gXFx0aWYgKGN0bC1cXHUwMDNlcXVhbnR1bSlcXG4tXFx0XFx0cXVhbnR1bSA9IGN0bC1cXHUwMDNlcXVhbnR1bTtcXG4rXFx0XFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXFx1MDAzZXF1YW50dW0pO1xcbiBcXHRpZiAoY3RsLVxcdTAwM2VmbG93cylcXG4gXFx0XFx0bWF4Zmxvd3MgPSBtaW5fdCh1MzIsIGN0bC1cXHUwMDNlZmxvd3MsIFNGUV9NQVhfRkxPV1MpO1xcbiBcXHRpZiAoY3RsLVxcdTAwM2VkaXZpc29yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAxOjUzLjYyOTg2NDg5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzgxMDk2ODc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0RVQUxQSTJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCIsXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfU0NIX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9QSUVcIixcbiAgICBcIk5FVF9TQ0hfSEhGXCIsXG4gICAgXCJORVRfU0NIX1NGUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRycl9jaGFuZ2VfY2xhc3NcIixcbiAgICBcImR1YWxwaTJfY2hhbmdlXCIsXG4gICAgXCJkdWFscGkyX2luaXRcIixcbiAgICBcImR1YWxwaTJfZW5xdWV1ZV9za2JcIixcbiAgICBcImV0c19xZGlzY19jaGFuZ2VcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfcGllX2NoYW5nZVwiLFxuICAgIFwiaGhmX2NoYW5nZVwiLFxuICAgIFwicGllX2Ryb3BfZWFybHlcIixcbiAgICBcInNmcV9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMgKHFkaXNjcykgdG8gY2xhbXAgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMsIHByZXZlbnRpbmcgaXNzdWVzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBxZGlzY3MgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsYW1waW5nIGxvZ2ljIGJlaGF2ZXMgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5AQCAtODIsOCArODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1wiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuK1x0XHRxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pO1xuIFx0fSBlbHNlXG4tXHRcdHF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcbiBcdGlmIChjbCAhPSBOVUxMKSB7XG4gXHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuQEAgLTIwOCw5ICsyMDgsMTEgQEAgc3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24oc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSlcbiBzdGF0aWMgdm9pZCBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb24oc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsIHUzMiB3YylcbiB7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4rXG4gXHRxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyA9IHdjO1xuIFx0cS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3Yztcbi1cdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICpcbitcdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKW10dSAqXG4gXHRcdCgoaW50KXEtXHUwMDNlY19wcm90ZWN0aW9uX3djIC0gKGludClxLVx1MDAzZWNfcHJvdGVjdGlvbl93bCk7XG4gXHRkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTtcbiB9XG5AQCAtMjg1LDggKzI4Nyw5IEBAIHN0YXRpYyBib29sIG11c3RfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcbiBcdHU2NCBsb2NhbF9sX3Byb2I7XG4gXHRib29sIG92ZXJsb2FkO1xuIFx0dTMyIHByb2I7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4tXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpXG4rXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogbXR1KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcm9iID0gUkVBRF9PTkNFKHEtXHUwMDNlcGkyX3Byb2IpO1xuQEAgLTcxMiw3ICs3MTUsOCBAQCBzdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdClcbiBcdC8qIEFwcGx5IHJ1bGUgb2YgdGh1bWIsIGkuZS4sIGRvdWJsaW5nIHRoZSBwYWNrZXQgbGVuZ3RoLFxuIFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LlxuIFx0ICovXG4tXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4rXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXG4rXHRcdFx0XHRcdFx0ICAgICAxLCAxIFx1MDAzY1x1MDAzYyAyMCkpO1xuIFxuIFx0aWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSlcbiBcdFx0cmV0dXJuIFUzMl9NQVg7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ldHMuYyBiL25ldC9zY2hlZC9zY2hfZXRzLmNcbmluZGV4IDI1ZmNmNDA3OWZlY2UuLmYyM2M4ZGM2OGY4Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5AQCAtNjM2LDcgKzYzNiw3IEBAIHN0YXRpYyBpbnQgZXRzX3FkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0ICovXG4gXHRmb3IgKGkgPSBuc3RyaWN0OyBpIFx1MDAzYyBuYmFuZHM7IGkrKykge1xuIFx0XHRpZiAoIXF1YW50YVtpXSlcbi1cdFx0XHRxdWFudGFbaV0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0XHRxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4gXHR9XG4gXG4gXHQvKiBCZWZvcmUgY29tbWl0LCBtYWtlIHN1cmUgd2UgY2FuIGFsbG9jYXRlIGFsbCBuZXcgcWRpc2NzICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXG5pbmRleCA2MTQ0YjU2ODZmMTNmLi5hYjhlN2M2YWUyMDM5IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0ge1xuLVx0Lm1heCA9IElOVF9NQVgsXG4rXHQubWF4ID0gMSBcdTAwM2NcdTAwM2MgMjAsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZnFfcG9saWN5W1RDQV9GUV9NQVggKyAxXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbkBAIC0zNDEsNyArMzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdFx0ICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pXG4tXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSk7XG4rXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLFxuK1x0XHRcdCAgIG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfTUVNT1JZX0xJTUlUXSlcbiBcdFx0V1JJVEVfT05DRShxLVx1MDAzZW1lbW9yeV9saW1pdCxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xuaW5kZXggOTZhY2FiNmE4ZGEwMy4uYmI4ZTg5NTJmNTU1MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGhmLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfaGhmLmNcbkBAIC01NTEsNyArNTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX0hIRl9RVUFOVFVNXSlcbi1cdFx0bmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTtcbitcdFx0bmV3X3F1YW50dW0gPSBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pXG4gXHRcdG5ld19oaGZfbm9uX2hoX3dlaWdodCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcGllLmMgYi9uZXQvc2NoZWQvc2NoX3BpZS5jXG5pbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9waWUuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9waWUuY1xuQEAgLTM1LDcgKzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbiB7XG4gXHR1NjQgcm5kO1xuIFx0dTY0IGxvY2FsX3Byb2IgPSB2YXJzLVx1MDAzZXByb2I7XG4tXHR1MzIgbXR1ID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXG4gXHRpZiAodmFycy1cdTAwM2VidXJzdF90aW1lIFx1MDAzZSAwKVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTY2MCw2ICs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKGN0bC1cdTAwM2VxdWFudHVtIFx1MDAzZSAxIFx1MDAzY1x1MDAzYyAyMCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcInF1YW50dW0gdG9vIGxhcmdlXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNjIDAgfHxcbiBcdCAgICBjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNlIElOVF9NQVggLyBIWikge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImludmFsaWQgcGVydHVyYiBwZXJpb2RcIik7XG5AQCAtNjg4LDcgKzY5Myw3IEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFxuIFx0LyogdXBkYXRlIGFuZCB2YWxpZGF0ZSBjb25maWd1cmF0aW9uICovXG4gXHRpZiAoY3RsLVx1MDAzZXF1YW50dW0pXG4tXHRcdHF1YW50dW0gPSBjdGwtXHUwMDNlcXVhbnR1bTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXHUwMDNlcXVhbnR1bSk7XG4gXHRpZiAoY3RsLVx1MDAzZWZsb3dzKVxuIFx0XHRtYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLVx1MDAzZWZsb3dzLCBTRlFfTUFYX0ZMT1dTKTtcbiBcdGlmIChjdGwtXHUwMDNlZGl2aXNvcikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDE6NTMuNjI5ODY2MjQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3MTQ4Nzg1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBTY2hlZHVsZXIgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYSBidW5jaCBvZiBmaWxlcyBpbiB0aGUgYG5ldC9zY2hlZC9gIGRpcmVjdG9yeS4gU2VlbXMgbGlrZSBpdCdzIG1haW5seSBhYm91dCBjbGFtcGluZyB0aGUgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMgaW4gdGhlc2UgZGlmZmVyZW50IHF1ZXVpbmcgZGlzY2lwbGluZXMgKHFkaXNjcykgdG8gcHJldmVudCBwcm9ibGVtcy4gSSBzZWUgaXQgdG91Y2hlcyBgc2NoX2Ryci5jYCwgYHNjaF9kdWFscGkyLmNgLCBgc2NoX2V0cy5jYCwgYHNjaF9mcS5jYCwgYHNjaF9mcV9waWUuY2AsIGBzY2hfaGhmLmNgLCBgc2NoX3BpZS5jYCwgYW5kIGBzY2hfc2ZxLmNgLiAgVGhpbmdzIGxpa2UgZW5zdXJpbmcgYHF1YW50dW1gIGlzIGF0IGxlYXN0IDI1NiwgYW5kIG1ha2luZyBzdXJlIGBtdHVgIHN0YXlzIHdpdGhpbiByZWFzb25hYmxlIGJvdW5kcy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0aHJvdWdoIG5ldGxpbmssIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGVzZSBjaGFuZ2VzIHZpYSBgdGMgcWRpc2MgYWRkL2NoYW5nZWAuIEJpbmdvLCB0aGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuXG5cbk15IG5leHQgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGFkZCB0byB0aGUgZnV6emluZyB0YXJnZXQncyBgRm9jdXNTeW1ib2xzYC4gU28sIGxldCdzIGJyZWFrIHRoaXMgZG93biBmaWxlIGJ5IGZpbGU6XG5cbiogICBgc2NoX2Ryci5jYDogVGhlIGNoYW5nZSBpcyBoYXBwZW5pbmcgaW4gYGRycl9jaGFuZ2VfY2xhc3NgLlxuKiAgIGBzY2hfZHVhbHBpMi5jYDogIEkgc2VlIGNoYW5nZXMgaW4gYGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbmAsIGBtdXN0X2Ryb3BgLCBhbmQgYGdldF9tZW1vcnlfbGltaXRgLiAgYGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbmAgaXMgbGlrZWx5IGhpdCBmcm9tIGBkdWFscGkyX2NoYW5nZWAgb3IgYGR1YWxwaTJfaW5pdGAsIGBtdXN0X2Ryb3BgIGZyb20gYGR1YWxwaTJfZW5xdWV1ZWAsIGFuZCBgZ2V0X21lbW9yeV9saW1pdGAgZnJvbSBgZHVhbHBpMl9pbml0YCBvciBgZHVhbHBpMl9jaGFuZ2VgLiBJIHNob3VsZCBjaGVjayB0aGUgZW50cnlwb2ludHMuXG4qICAgYHNjaF9ldHMuY2A6IGBldHNfcWRpc2NfY2hhbmdlYCBpcyB3aGF0IHRvIGZvY3VzIG9uLlxuKiAgIGBzY2hfZnEuY2A6IEkgc2VlIGBmcV9yZXNpemVgICh3aGljaCBpcyBjYWxsZWQgYnkgYGZxX2NoYW5nZWApLCBhbmQgdGhlIGBmcV9wb2xpY3lgIGRhdGEgc3RydWN0dXJlLlxuKiAgIGBzY2hfZnFfcGllLmNgOiBUaGUgaW50ZXJlc3RpbmcgZnVuY3Rpb24gaGVyZSBpcyBgZnFfcGllX2NoYW5nZWAuXG4qICAgYHNjaF9oaGYuY2A6IFRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgaGhmX2NoYW5nZWAuXG4qICAgYHNjaF9waWUuY2A6IEkgbmVlZCB0byBsb29rIGF0IGVpdGhlciBgcGllX2Ryb3BfZWFybHlgIG9yIGBwaWVfZW5xdWV1ZWAuXG4qICAgYHNjaF9zZnEuY2A6IFRoZSBwbGFjZSB0byBmb2N1cyB3aWxsIGJlIGBzZnFfY2hhbmdlYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIHRoZSBvbmVzIHdlJ2xsIHRhcmdldC4gSSByZW1lbWJlciBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBnZW5lcmljLCBJIHdhbnQgdGhlIHNwZWNpZmljIG9uZXMgZm9yIGVhY2ggcWRpc2MuXG5cbiogICBgc2NoX2Ryci5jYDogYGRycl9jaGFuZ2VfY2xhc3NgIGlzIG91ciBgUWRpc2NfY2xhc3Nfb3BzLmNoYW5nZWAgZW50cnkuXG4qICAgYHNjaF9kdWFscGkyLmNgOiBgZHVhbHBpMl9jaGFuZ2VgLCBgZHVhbHBpMl9pbml0YCwgYW5kIHBvdGVudGlhbGx5IGBkdWFscGkyX2VucXVldWVgLlxuKiAgIGBzY2hfZXRzLmNgOiBgZXRzX3FkaXNjX2NoYW5nZWAuXG4qICAgYHNjaF9mcS5jYDogYGZxX2NoYW5nZWAuXG4qICAgYHNjaF9mcV9waWUuY2A6IGBmcV9waWVfY2hhbmdlYC5cbiogICBgc2NoX2hoZi5jYDogYGhoZl9jaGFuZ2VgLlxuKiAgIGBzY2hfcGllLmNgOiBPa2F5LCBgcGllX2Ryb3BfZWFybHlgICppc250KiBleHBvcnRlZCwgYnV0IGlzIGluIGBzY2hfcGllLmNgIGJ1dCBjYWxsZWQgYnkgYHNjaF9waWVgIGFuZCBgc2NoX2ZxX3BpZWAuIEknbGwgY2hlY2sgYHBpZV9kcm9wX2Vhcmx5YCBvciBgcGllX2VucXVldWVgLlxuKiAgIGBzY2hfc2ZxLmNgOiBgc2ZxX2NoYW5nZWAuXG5cbkknbSB0aGlua2luZyBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIG5leHQgdG8gdmVyaWZ5IGFsbCBvZiB0aGlzIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDI6MDguMzQ0NzQ3NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNDkzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZHJyX2NoYW5nZV9jbGFzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2Ryci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmM9NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRycl9wb2xpY3lbVENBX0RSUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNTctXFxubmV0L3NjaGVkL3NjaF9kcnIuYzo1ODpzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxubmV0L3NjaGVkL3NjaF9kcnIuYy01OS1cXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMjowOC4zODgxMDI0OTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3Nzg1NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgc2NoX2R1YWxwaTIuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGR1YWwtUEkyIHN5c3RlbSBpcyBpbml0aWFsaXppbmcgYW5kIHJlc3BvbmRpbmcgdG8gY2hhbmdlcy4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYHNjaF9kdWFscGkyLmNgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBjaGFuZ2UgaGFuZGxpbmcg4oCTIHNvIHRoYXQgbWVhbnMgSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGBkdWFscGkyX2luaXRgIGFuZCBgZHVhbHBpMl9jaGFuZ2VgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgcnVudGltZSBiZWhhdmlvci4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgYXJjaGl0ZWN0ZWQsIHdoYXQgdGhleSBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgdGhpbmdzIGNvdWxkIGdldCB0cmlja3kuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAyOjEyLjM4NTg5MTYyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjUyMjk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBkdWFscGkyX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz03Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGR1YWxwaTJfcG9saWN5W1RDQV9EVUFMUEkyX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzk0LVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jOjc5NTpzdGF0aWMgaW50IGR1YWxwaTJfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzk2LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMjoxMi40Mzg0MjcxOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg5ODQ1NzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBkdWFscGkyX2luaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgYGR1YWxwaTJfaW5pdGAuIFRoaXMgbmFtZSBzdWdnZXN0cyBpbml0aWFsaXphdGlvbiwgc28gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc2V0dXAgbG9naWMgcmVsYXRlZCB0byBhIGBkdWFscGkyYCBtb2R1bGUgb3Igc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGFyY2hpdGVjdHVyZSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqTWVtb3J5IEFsbG9jYXRpb246KiogSXMgaXQgc2V0dGluZyB1cCBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBidWZmZXJzLCBsb29rdXAgdGFibGVzLCBvciBjb250cm9sIHJlZ2lzdGVycz8gSWYgc28sIHdoYXQgYXJlIHRoZSBzaXplcyBhbmQgcHVycG9zZSBvZiBlYWNoIGFsbG9jYXRpb24/XG4qICAgKipIYXJkd2FyZSBDb25maWd1cmF0aW9uOioqIElzIGl0IHdyaXRpbmcgdG8gYW55IGhhcmR3YXJlIHJlZ2lzdGVycz8gSWYgc28sIHdoYXQgYXJlIHRob3NlIHJlZ2lzdGVycyBhbmQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIHdyaXR0ZW4/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgY2xvY2sgc3BlZWRzLCBpbnRlcnJ1cHQgZW5hYmxlcywgb3IgcGVyaXBoZXJhbCBtb2Rlcy5cbiogICAqKlJlc291cmNlIEluaXRpYWxpemF0aW9uOioqIEFyZSB0aGVyZSBhbnkgbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYmVpbmcgaW5pdGlhbGl6ZWQ/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UsIHdobyB1c2VzIHRoZW0sIGFuZCB3aGF0IGNyaXRpY2FsIHNlY3Rpb25zIHRoZXkgcHJvdGVjdC5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgY2hlY2tzIGZvciBwb3RlbnRpYWwgZmFpbHVyZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzPyBJZiBzbywgd2hhdCBhcmUgdGhlIGZhaWx1cmUgY29uZGl0aW9ucyBhbmQgdGhlIGVycm9yIHJlY292ZXJ5L3JlcG9ydGluZyBtZWNoYW5pc21zP1xuKiAgICoqRGVwZW5kZW5jeSBDaGVja2luZzoqKiBEb2VzIHRoaXMgcm91dGluZSBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBoYXJkd2FyZSBjb21wb25lbnRzIGJlaW5nIGluaXRpYWxpemVkIGZpcnN0PyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgb3JkZXIgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhleSdyZSBhZGhlcmVkIHRvLlxuKiAgICoqUGFyYW1ldGVyIENoZWNraW5nOioqIERvZXMgYGR1YWxwaTJfaW5pdGAgcGVyZm9ybSBhbnkgdmFsaWRhdGlvbiBvZiBpbnB1dCBwYXJhbWV0ZXJzPyBJZiBzbywgd2hhdCBhcmUgdGhlIGFsbG93ZWQgcmFuZ2VzIGFuZCB3aGF0IGhhcHBlbnMgaWYgaW52YWxpZCB2YWx1ZXMgYXJlIHBhc3NlZD9cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGFzcGVjdHMgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwaXRmYWxscy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uJ3MgZXhhY3Qgcm9sZSBpcyBjcml0aWNhbCBiZWZvcmUgd29ya2luZyBvbiBhbnkgc3lzdGVtLWxldmVsIGNvZGUsIEkgc2hvdWxkIGhhdmUgYW4gZXhjZWxsZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBpbml0aWFsIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV0dXJlIG9wdGltaXphdGlvbiBvciBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMjo1My4zMzY4ODYzOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzIyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZHVhbHBpMl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jPTk0OT1zdGF0aWMgdm9pZCBkdWFscGkyX3Jlc2V0X2RlZmF1bHQoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy05NzMtXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmM6OTc0OnN0YXRpYyBpbnQgZHVhbHBpMl9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtOTc1LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDI6NTMuMzgxNzIxNzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODI3MTMxODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZXRzX3FkaXNjX2NoYW5nZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNpbXBsZTogSSd2ZSBjb21lIGFjcm9zcyBgZXRzX3FkaXNjX2NoYW5nZWAgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRyYWZmaWMgc2hhcGluZyBhbmQgUXVhbGl0eSBvZiBTZXJ2aWNlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYmVoYXZpb3I/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIHF1ZXVpbmcgZGlzY2lwbGluZSBpdHNlbGY/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBvciBpcyBpdCBhIG1vcmUgZ2VuZXJpYyBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoeSBpdCdzIG9uIG15IHJhZGFyIGFuZCB3aGF0IGFzcGVjdCBvZiBpdCBJIHNob3VsZCBiZSBtb3N0IGZvY3VzZWQgb24uIExldCdzIHNlZSB3aGF0J3MgaW52b2x2ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzowMC4yMDg4NTcxMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjU0NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IGV0c19xZGlzY19jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9ldHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2V0cy5jPTU0Nj1zdGF0aWMgaW50IGV0c19xZGlzY19xdWFudGFfcGFyc2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKnF1YW50YV9hdHRyLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9ldHMuYy01ODItXFxubmV0L3NjaGVkL3NjaF9ldHMuYzo1ODM6c3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9ldHMuYy01ODQtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MDAuMjYxNTIwOTY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDUyODc2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgZnFfY2hhbmdlYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYGZxX2NoYW5nZWAuIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhhdCBjb3VsZCBtZWFuIGZyZXF1ZW5jeSBjaGFuZ2UsIGZsdXggY2hhbmdlLCBmZWF0dXJlIHF1YWxpdHkgY2hhbmdlLCBvciBldmVuIGEgZnVuY3Rpb25hbCBxdWVyeSBjaGFuZ2UgLSBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoaWNoIGludGVycHJldGF0aW9uIGlzIG1vc3QgbGlrZWx5IGdpdmVuIHRoZSBwcm9ibGVtIEknbSB0YWNrbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIElzIGl0IHN0YWJsZT8gSXMgaXQgZXhoaWJpdGluZyB1bnVzdWFsIGJlaGF2aW9yPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyB2YWx1ZSBvciBsYWNrIHRoZXJlb2Y/IFRoZSBzcGVjaWZpY3Mgb2Ygd2hhdCdzICppbXBsaWVkKiBieSBgZnFfY2hhbmdlYCBhcmUgY3J1Y2lhbCB0byB0aGUgbmV4dCBzdGVwcy4gSSdtIHRoaW5raW5nLCBcIklzIHRoZXJlIHNvbWV0aGluZyBJIHNob3VsZCBiZSBhbnRpY2lwYXRpbmc/XCIuIEl0J3MgYSBrZXkgdmFyaWFibGUsIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkYXRhIG9yIGNvZGUgd2hlcmUgdGhpcyBpcyBkZWZpbmVkIGFuZCBsb29rIGZvciB0aGUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MDMuOTA2ODEzNzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc4NzA0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBmcV9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZnEuYz0xMDUyPXN0YXRpYyBpbnQgZnFfbG9hZF9wcmlvbWFwKHN0cnVjdCBmcV9zY2hlZF9kYXRhICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEwNzMtXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEwNzQ6c3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3NS1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MDMuOTU4NjA3MzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njk3NzczNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgZnFfcGllX2NoYW5nZWAgdmFyaWFibGUgb3IgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyB3b3JrLCBgZnFfcGllX2NoYW5nZWAgaXMgbGlrZWx5IGEga2V5IGluZGljYXRvciwgYSBjcnVjaWFsIG1ldHJpYywgb3IgdGhlIG5hbWUgb2YgYSBjYWxjdWxhdGlvbiBvciB2aXN1YWxpemF0aW9uLiBHaXZlbiB0aGUgdHlwaWNhbCBzY29wZSBvZiBteSB3b3JrLCBpdCBsaWtlbHkgcmVmbGVjdHMgYSBjaGFuZ2UgaW4gZnJlcXVlbmN5LCBhIHNoaWZ0IGluIHByb3BvcnRpb25hbCByZXByZXNlbnRhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgY2hhbmdlIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluIHBpZSBjaGFydC4gTXkgYXR0ZW50aW9uIGhlcmUgc2hvd3MgSSBhbSBsaWtlbHkgaW4gdGhlIGludmVzdGlnYXRpdmUgcGhhc2UuIEknbSBjaGVja2luZyBpdHMgdmFsdWVzLCBpdHMgaW1wYWN0LCBvciB0aGUgZm9ybXVsYSB3aGljaCBkZWZpbmVzIHRoZSBwaWUgY2hhcnQsIGxpa2VseSBpbiByZXNwb25zZSB0byBhbiBhbm9tYWx5IG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkLiBUaGVyZSBpcyBhIGxvdCByaWRpbmcgb24gdGhpcyBjaGVjay4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgZnVydGhlciBzdGVwcyBpbnZvbHZlZCBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiB0aGlzIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjA3LjUyODM4ODAyNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjU4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZnFfcGllX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZnFfcGllLmM9MjM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfcGllX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jLTI4Ni1cXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jOjI4NzpzdGF0aWMgaW50IGZxX3BpZV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jLTI4OC1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzowNy41NzM4NTcyMDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0NDk4ODMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYGhoZl9jaGFuZ2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdG8gY2hlY2sgYGhoZl9jaGFuZ2VgLiBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGl0J3MgZG9pbmcgYW5kIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBhbmQgZW5zdXJlIGl0IGlzIGZ1bmN0aW9uaW5nIGFzIGludGVuZGVkLiBUaGlzIGluY2x1ZGVzIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCBib3VuZGFyeSBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaXRzIGRlZmluaXRpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGlucHV0IHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgb24gb3RoZXIgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcy4gVGhlbiBJIHdpbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggc29tZSB0ZXN0IGNhc2VzIHRvIGNoZWNrIGl0IGlzIGJlaGF2aW5nIGhvdyBJIGV4cGVjdC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdvcmtmbG93LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIGl0IGlzIHRoZSBzb3VyY2Ugb2YgYSBwb3RlbnRpYWwgaXNzdWUuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIG15IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxMi41MTg4NDg4OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjM3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IGhoZl9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9oaGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hoZi5jPTUyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGhmX3BvbGljeVtUQ0FfSEhGX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oaGYuYy01MzYtXFxubmV0L3NjaGVkL3NjaF9oaGYuYzo1Mzc6c3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9oaGYuYy01MzgtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxMi41NjIwOTAwNjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MjQwMTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIGFueXRoaW5nLCBpdCdzIGFsd2F5cyBzbWFydCB0byBoYXZlIGEgcXVpY2sgZ2xhbmNlLiBJJ20gZ29pbmcgdG8gY2hlY2sgb3V0IGBzZnFfY2hhbmdlYC4gVGhhdCdzIGxpa2VseSB0aGUga2V5LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUuIExldCdzIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlbiBidWlsZCB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxNi4xMDQ0OTQzMDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjAwNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IHNmcV9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9zZnEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3NmcS5jPTYwND1zdGF0aWMgdm9pZCBzZnFfcGVydHVyYmF0aW9uKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjktXFxubmV0L3NjaGVkL3NjaF9zZnEuYzo2MzA6c3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9zZnEuYy02MzEtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxNi4xNDg3MDAwNTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4ODY1NDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcGllX2Ryb3BfZWFybHlgIGluIGBzY2hfcGllLmNgKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYmVoYXZpb3Igb2YgYHBpZV9kcm9wX2Vhcmx5YCBpbiBgc2NoX3BpZS5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NoZWR1bGVyIGFuZCBQSUUgKFByaW9yaXR5IEluaGVyaXRhbmNlIGFuZCBFeGNsdXNpb24pLCB0aGlzIHN1Z2dlc3RzIGEgY3JpdGljYWwgcGF0aCBJIG5lZWQgdG8gcmV2aWV3LiBJIGltbWVkaWF0ZWx5IGhhdmUgcXVlc3Rpb25zLiBJcyB0aGlzIHJlbGF0ZWQgdG8gZWFybHkgZGVhZGxpbmUgbWlzcyBkZXRlY3Rpb24/IEFtIEkgbG9va2luZyBhdCBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSB0YXNrcyBhcmUgcHJlbWF0dXJlbHkgZHJvcHBlZD8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBzZWN0aW9uIG9mIGNvZGUgSSBzaG91bGQgYmUgYXdhcmUgb2YsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbWlzc2VkIGRlYWRsaW5lcyBvciB1bmV4cGVjdGVkIHN5c3RlbSBiZWhhdmlvcj8gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHByaW9yaXR5IGluaGVyaXRhbmNlIHdpdGggZXhjbHVzaW9uLiBUaGlzIGNvdWxkIG1lYW4gZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBob3cgUElFIGhhbmRsZXMgcHJlZW1wdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZ2V0dGluZyBpbnRvIHRoZSBjb2RlIGFuZCBxdWlja2x5IGRldGVybWluZSB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoyMC44MzczNTc2ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTAzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/Ym9vbCBwaWVfZHJvcF9lYXJseVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3BpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmM9MjU9c3RydWN0IHBpZV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzItXFxubmV0L3NjaGVkL3NjaF9waWUuYzozMzpib29sIHBpZV9kcm9wX2Vhcmx5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzQtXFx0XFx0ICAgIHN0cnVjdCBwaWVfdmFycyAqdmFycywgdTMyIGJhY2tsb2csIHUzMiBwYWNrZXRfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MjAuODg2ODY5Mzk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDcwOTI4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGllX2Ryb3BfZWFybHlgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHBpZV9kcm9wX2Vhcmx5YCBpcyBhIGtleSBmdW5jdGlvbiwgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgYHNjaF9waWVgIGFuZCBgc2NoX2ZxX3BpZWAuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBkaXZlIGludG8gYHBpZV9lbnF1ZXVlYCB3aXRoaW4gYHNjaF9waWUuY2AsIHNlZSBpZiB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4gQnV0IHdhaXQsIGZvY3VzaW5nIG9uIGBwaWVfZHJvcF9lYXJseWAgbWFrZXMgbW9yZSBzZW5zZS4gSXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgYW5kIHRoYXQgYWxvbmUgbWFrZXMgaXQgYSBjYW5kaWRhdGUgZm9yIHNjcnV0aW55LiBIbW0uLi4gTGV0J3MgY29uZmlybSB0aGF0IGl0IGlzbid0IHN0YXRpYy4gR29vZCwgaXQncyBub3QuIEJ1dCBob2xkIG9uLCB0aGUgY2FsbGluZyBwb2ludHMgb2YgYHBpZV9kcm9wX2Vhcmx5YCBhcmUgYHBpZV9lbnF1ZXVlYCBhbmQgYGZxX3BpZV9xZGlzY19lbnF1ZXVlYCB3aGljaCBtZWFucyBpdCdzIG5vdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gTGV0IG1lIGNoZWNrIHRoZSBgcGllX2VucXVldWVgIGZ1bmN0aW9uIGluIGBzY2hfcGllLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjI1LjQ5Mzk2NTUzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNjcxNzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IHBpZV9lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjI1LjU0MjE0MDA1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg4MTIwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFNjaGVkdWxlciBRdWV1ZSBJc3N1ZSoqXG5cbkhtbSwgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgcHJvYmxlbSB3aXRoIHRoZSBzY2hlZHVsZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQSUUgKFByaW9yaXR5IEluaGVyaXRhbmNlIEVuZ2luZSkgcXVldWUuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlIGBzY2hfcGllLmNgIGZpbGUgKm1pZ2h0KiBiZSBtaXNzaW5nIGEga2V5IGZ1bmN0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgcGllX2VucXVldWVgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcHVzaGluZyB0YXNrcyBvbnRvIHRoZSBQSUUgcXVldWUuIEJlZm9yZSBJIGdvIGRvd24gYSByYWJiaXQgaG9sZSwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBxdWlja2x5IHZlcmlmeSBpZiBgc2NoX3BpZS5jYCBldmVuICpjb250YWlucyogYW4gYGVucXVldWVgIGZ1bmN0aW9uIGF0IGFsbC4gQmVzdCB0byBjb25maXJtIHRoYXQgYmFzZSBhc3N1bXB0aW9uIGJlZm9yZSBhc3N1bWluZyBhIHByb2JsZW0uIEEgc2ltcGxlIGdyZXAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gc2VlIGlmIHRoZSBmaWxlIGhhbmRsZXMgdGhlIGVucXVldWUgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MjkuMDMwMjYzMDAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExNjc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9waWUuYz04Mz1FWFBPUlRfU1lNQk9MX0dQTChwaWVfZHJvcF9lYXJseSk7XFxubmV0L3NjaGVkL3NjaF9waWUuYy04NC1cXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjg1OnN0YXRpYyBpbnQgcGllX3FkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9waWUuYy04Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtODktXFx0c3RydWN0IHBpZV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfcGllLmM6OTA6XFx0Ym9vbCBlbnF1ZXVlID0gZmFsc2U7XFxubmV0L3NjaGVkL3NjaF9waWUuYy05MS1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMTAwLVxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWxlbikpIHtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEwMTpcXHRcXHRlbnF1ZXVlID0gdHJ1ZTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwMi1cXHR9IGVsc2UgaWYgKHEtXFx1MDAzZXBhcmFtcy5lY24gXFx1MDAyNlxcdTAwMjYgKHEtXFx1MDAzZXZhcnMucHJvYiBcXHUwMDNjPSBNQVhfUFJPQiAvIDEwKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3NjaGVkL3NjaF9waWUuYy0xMDctXFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VzdGF0cy5lY25fbWFyaywgcS1cXHUwMDNlc3RhdHMuZWNuX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEwODpcXHRcXHRlbnF1ZXVlID0gdHJ1ZTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwOS1cXHR9XFxubmV0L3NjaGVkL3NjaF9waWUuYy0xMTAtXFxubmV0L3NjaGVkL3NjaF9waWUuYzoxMTE6XFx0Lyogd2UgY2FuIGVucXVldWUgdGhlIHBhY2tldCAqL1xcbm5ldC9zY2hlZC9zY2hfcGllLmM6MTEyOlxcdGlmIChlbnF1ZXVlKSB7XFxubmV0L3NjaGVkL3NjaF9waWUuYzoxMTM6XFx0XFx0LyogU2V0IGVucXVldWUgdGltZSBvbmx5IHdoZW4gZHFfcmF0ZV9lc3RpbWF0b3IgaXMgZGlzYWJsZWQuICovXFxubmV0L3NjaGVkL3NjaF9waWUuYy0xMTQtXFx0XFx0aWYgKCFxLVxcdTAwM2VwYXJhbXMuZHFfcmF0ZV9lc3RpbWF0b3IpXFxubmV0L3NjaGVkL3NjaF9waWUuYzoxMTU6XFx0XFx0XFx0cGllX3NldF9lbnF1ZXVlX3RpbWUoc2tiKTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTExNi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMTIwLVxcbm5ldC9zY2hlZC9zY2hfcGllLmM6MTIxOlxcdFxcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xcbm5ldC9zY2hlZC9zY2hfcGllLmMtMTIyLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmM9MjEyPXZvaWQgcGllX3Byb2Nlc3NfZGVxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9waWUuYy0yMjItXFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2VxZGVsYXksXFxubmV0L3NjaGVkL3NjaF9waWUuYzoyMjM6XFx0XFx0XFx0ICAgYmFja2xvZyA/IG5vdyAtIHBpZV9nZXRfZW5xdWV1ZV90aW1lKHNrYikgOiAwKTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTIyNC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmM9NTUxPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHBpZV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtNTUzLVxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgcGllX3NjaGVkX2RhdGEpLFxcbm5ldC9zY2hlZC9zY2hfcGllLmM6NTU0OlxcdC5lbnF1ZXVlXFx0PSBwaWVfcWRpc2NfZW5xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTU1NS1cXHQuZGVxdWV1ZVxcdD0gcGllX3FkaXNjX2RlcXVldWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjI5LjA3NTM4NTQ4OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA2MDk2MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQSUUgUWRpc2MgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBwaWVfcWRpc2NfZW5xdWV1ZWAgZnVuY3Rpb24uIEJ1dCwgaG9sZCBvbiwgYHBpZV9kcm9wX2Vhcmx5YCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgbW9kaWZpZWQsIHNvIHRoYXQncyB0aGUgcmVhbCBrZXkgaGVyZS4gSSBjYW4ganVzdCBsaXN0IHRoYXQgZnVuY3Rpb24gdG8gdHJhY2sgaXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBxdWV1aW5nIGRpc2NpcGxpbmVzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQ6XG5cbiogICBgc2NoX2Ryci5jYCByZXF1aXJlcyBgTkVUX1NDSF9EUlJgLiBNYWtlcyBzZW5zZS5cbiogICBgc2NoX2R1YWxwaTIuY2AgbmVlZHMgYE5FVF9TQ0hfRFVBTFBJMmAuIFJpZ2h0LlxuKiAgIGBzY2hfZXRzLmNgIHVzZXMgYE5FVF9TQ0hfRVRTYC4gU3RhbmRhcmQuXG4qICAgYHNjaF9mcS5jYCBkZXBlbmRzIG9uIGBORVRfU0NIX0ZRYC4gT2YgY291cnNlLlxuKiAgIGBzY2hfZnFfcGllLmNgIHVzZXMgYE5FVF9TQ0hfRlFfUElFYC4gVGhpcyBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLlxuKiAgIGBzY2hfaGhmLmNgIG5lZWRzIGBORVRfU0NIX0hIRmAuXG4qICAgYHNjaF9waWUuY2Agb2J2aW91c2x5IG5lZWRzIGBORVRfU0NIX1BJRWAuXG4qICAgQW5kIGBzY2hfc2ZxLmNgIHdhbnRzIGBORVRfU0NIX1NGUWAuXG5cblRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgc3ltYm9scyBtYXRjaCB1cCB3aXRoIHdoYXQncyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gdmVyaWZ5IHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhc3BlY3RzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMSwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzozNC44ODE0ODM4NDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIXyhEUlJ8RFVBTFBJMnxFVFN8RlF8RlFfUElFfEhIRnxQSUV8U0ZRKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0xMDA9Y29uZmlnIE5FVF9TQ0hfU0ZCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xMTAtXFxubmV0L3NjaGVkL0tjb25maWc6MTExOmNvbmZpZyBORVRfU0NIX1NGUVxcbm5ldC9zY2hlZC9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZSBcXFwiU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTE5NT1jb25maWcgTkVUX1NDSF9ORVRFTVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjA2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjIwNzpjb25maWcgTkVUX1NDSF9EUlJcXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXFxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0yODg9Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjk4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI5OTpjb25maWcgTkVUX1NDSF9GUVxcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTMxMi1cXG5uZXQvc2NoZWQvS2NvbmZpZzozMTM6Y29uZmlnIE5FVF9TQ0hfSEhGXFxubmV0L3NjaGVkL0tjb25maWctMzE0LVxcdHRyaXN0YXRlIFxcXCJIZWF2eS1IaXR0ZXIgRmlsdGVyIChISEYpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzIxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjMyMjpjb25maWcgTkVUX1NDSF9QSUVcXG5uZXQvc2NoZWQvS2NvbmZpZy0zMjMtXFx0dHJpc3RhdGUgXFxcIlByb3BvcnRpb25hbCBJbnRlZ3JhbCBjb250cm9sbGVyIEVuaGFuY2VkIChQSUUpIHNjaGVkdWxlclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTMzMy1cXG5uZXQvc2NoZWQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVF9TQ0hfRlFfUElFXFxubmV0L3NjaGVkL0tjb25maWctMzM1LVxcdGRlcGVuZHMgb24gTkVUX1NDSF9QSUVcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0zODgtXFxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xcbm5ldC9zY2hlZC9LY29uZmlnLTM5MC1cXHR0cmlzdGF0ZSBcXFwiRW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00MTctXFxubmV0L3NjaGVkL0tjb25maWc6NDE4OmNvbmZpZyBORVRfU0NIX0RVQUxQSTJcXG5uZXQvc2NoZWQvS2NvbmZpZy00MTktXFx0dHJpc3RhdGUgXFxcIkR1YWwgUXVldWUgUEkgU3F1YXJlIChEVUFMUEkyKSBzY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjM0LjkyNjk5MDM5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg4NTE1OTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBTY2hlZHVsZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMgaGVyZTogYE5FVF9TQ0hfRFJSYCwgYE5FVF9TQ0hfRFVBTFBJMmAsIGBORVRfU0NIX0VUU2AsIGBORVRfU0NIX0ZRYCwgYE5FVF9TQ0hfRlFfUElFYCwgYE5FVF9TQ0hfSEhGYCwgYE5FVF9TQ0hfUElFYCwgYW5kIGBORVRfU0NIX1NGUWAuIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB0aGluZ3MgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgYW5kIGRlcGxveW1lbnQsIHNvIEknbGwgc3RhcnQgd2l0aCBgTkVUX1NDSF9GUV9QSUVgLiBSaWdodCwgaXQgbG9va3MgbGlrZSBgTkVUX1NDSF9GUV9QSUVgIGRlcGVuZHMgb24gYE5FVF9TQ0hfUElFYC4gR29vZCB0byBrbm93LiBOb3csIGhvdyBhYm91dCBgTkVUX1NDSF9EVUFMUEkyYD8gRG9lcyB0aGF0IG9uZSBoYXZlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0YWtlIGEgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzo0Ny44MTIxNTI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE4ODM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9EVUFMUEkyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQwNj1jb25maWcgTkVUX1NDSF9CUEZcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQxNy1cXG5uZXQvc2NoZWQvS2NvbmZpZzo0MTg6Y29uZmlnIE5FVF9TQ0hfRFVBTFBJMlxcbm5ldC9zY2hlZC9LY29uZmlnLTQxOS1cXHR0cmlzdGF0ZSBcXFwiRHVhbCBRdWV1ZSBQSSBTcXVhcmUgKERVQUxQSTIpIHNjaGVkdWxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6NDcuODU1MzQ0MDM3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTM1MzI1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYE5FVF9TQ0hfRFVBTFBJMmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgTkVUX1NDSF9EVUFMUEkyYCBibG9jay4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBjb250ZXh0IGhlcmUuIEp1c3Qga25vd2luZyB0aGUgbmFtZSBhbG9uZSBpc24ndCBlbm91Z2g7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiwgdGhlIG90aGVyIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkIGEgcmVhbCB1bmRlcnN0YW5kaW5nLiBXaGF0IG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgdmFyaWFibGVzIGFyZSBpbmZsdWVuY2luZyBpdHMgZXhlY3V0aW9uPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSB0byBkZXRlcm1pbmUgd2hhdCBpdCdzIHJlYWxseSBkb2luZywgYW5kIHdoYXQgcG90ZW50aWFsIGlzc3VlcyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIuIFNob3cgbWUgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQ3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6NTIuMjQ4ODc4NTM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxOCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxODpcXHRjb25maWcgTkVUX1NDSF9EVUFMUEkyXFxuIDQxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVhbCBRdWV1ZSBQSSBTcXVhcmUgKERVQUxQSTIpIHNjaGVkdWxlclxcXCJcXG4gNDIwOlxcdFxcdGhlbHBcXG4gNDIxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIER1YWwgUXVldWUgUHJvcG9ydGlvbmFsIEludGVncmFsXFxuIDQyMjpcXHRcXHQgIENvbnRyb2xsZXIgSW1wcm92ZWQgd2l0aCBhIFNxdWFyZSBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gNDIzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzkzMzJcXG4gNDI0OlxcdFxcbiA0MjU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDQyNjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9kdWFscGkyLlxcbiA0Mjc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjUyLjI0ODk3NTA1OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI0OTcwMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYE5FVF9TQ0hfRlFfUElFYCxcIiBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBTY2hlZHVsZXI6IEZRLVBJRSoqXG5cbkFscmlnaHQsIHRoYXQgcGhyYXNlIFwiTkVUX1NDSF9GUV9QSUVcIiDigJMgdGhhdCdzIGEgdHJpZ2dlci4gSXQgaW1tZWRpYXRlbHkgdGhyb3dzIG1lIGludG8gdGhlIHdvcmxkIG9mIG5ldHdvcmsgc2NoZWR1bGluZywgYW5kIHNwZWNpZmljYWxseSwgdGhlIEZRLVBJRSBxdWV1ZWluZyBkaXNjaXBsaW5lLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSdtIHRoaW5raW5nLCBcIkxldCdzIGRpc3NlY3QgdGhpcy5cIiBJJ20gbWVudGFsbHkgY2hlY2tpbmcgd2hhdCBJIGFscmVhZHkga25vdyBhbmQgd2hlcmUgbXkga25vd2xlZGdlIGdhcHMgYXJlLCBwcmVwYXJpbmcgdG8gYXBwcm9hY2ggdGhpcyBpZGVhLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2NoZWR1bGVyIHdvcmtzLiBJIGFtIHByb2JhYmx5IHByZXBhcmluZyB0byBmaWd1cmUgb3V0IHRoZSBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIHN1Y2ggYSBxdWV1aW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjU3LjE3Mzk0ODA3MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzQ6XFx0Y29uZmlnIE5FVF9TQ0hfRlFfUElFXFxuIDMzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9TQ0hfUElFXFxuIDMzNjpcXHRcXHR0cmlzdGF0ZSBcXFwiRmxvdyBRdWV1ZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgY29udHJvbGxlciBFbmhhbmNlZCAoRlEtUElFKVxcXCJcXG4gMzM3OlxcdFxcdGhlbHBcXG4gMzM4OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZsb3cgUXVldWUgUHJvcG9ydGlvbmFsIEludGVncmFsXFxuIDMzOTpcXHRcXHQgIGNvbnRyb2xsZXIgRW5oYW5jZWQgKEZRLVBJRSkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAzNDA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODAzM1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzQzOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2ZxX3BpZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6NTcuMTc0MDI5OTYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjE3ODY3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiBcIkxldCdzIHNlZSBgTkVUX1NDSF9QSUVgXCIgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIE5ldHdvcmsgU2NoZWR1bGluZzogTGV0J3MgRXhhbWluZSBORVRfU0NIX1BJRSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBcIkxldCdzIHNlZSBgTkVUX1NDSF9QSUVgXCIg4oCTIHRoYXQncyBhIGRpcmVjdCBwcm9tcHQgZm9yIGludmVzdGlnYXRpb24uIEl0J3MgYSBxdWljayBtZW50YWwgc2hvcnRoYW5kIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIG5ldHdvcmsgc2NoZWR1bGluZy4gVGhlIGltcGxpZWQgcXVlc3Rpb24gaXMsIHdoYXQgY2FuIHdlIGdsZWFuIGZyb20gdGhpcyBlbGVtZW50LCB3aGF0ZXZlciBpdCBpcyBpbiBjb250ZXh0P1xuXG5gTkVUX1NDSF9QSUVgIGxpa2VseSByZXByZXNlbnRzIGEgc3BlY2lmaWMgYWxnb3JpdGhtLCBhIGRhdGEgc3RydWN0dXJlLCBhIHBlcmZvcm1hbmNlIG1ldHJpYywgb3IgYSBjb21wb25lbnQgcmVsYXRlZCB0byBuZXR3b3JrIHNjaGVkdWxpbmcgdXNpbmcgYSAncGllJyBtZXRhcGhvciB0byByZXByZXNlbnQgcHJvcG9ydGlvbmFsIGFsbG9jYXRpb24gLSBpdCBjb3VsZCBiZSBhIGNvbmNlcHQsIG9yIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGUgdXNlIG9mIGEgY29kZS1saWtlIG5hbWUgc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgZWl0aGVyIHRlY2huaWNhbGx5IGRlZmluZWQgb3IgYWxnb3JpdGhtaWNhbGx5IGRyaXZlbi4gSXQgY291bGQgYmUgYW4gYWNyb255bSBvciBhbiBpZGVudGlmaWVyLiBJdCByZXF1aXJlcyB1bnBhY2tpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgcHJvY2VzcyB3b3VsZCBiZSBkcml2ZW4gYnkgdGhlIGZvbGxvd2luZyBwcm9tcHRzOlxuXG4qICAgKipDb250ZXh0OioqIFdoYXQgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlPyBJcyBpdCByZXNvdXJjZSBhbGxvY2F0aW9uLCBRb1MsIGZhaXJuZXNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cbiogICAqKkFzc3VtcHRpb25zOioqIFdoYXQgcHJpb3Iga25vd2xlZGdlIGlzIG5lZWRlZD8gSXMgaXQgaW4gYSB3ZWxsLWRlZmluZWQgZG9tYWluLCBsaWtlIGRhdGEgY2VudGVyIG5ldHdvcmtpbmcsIG9yIGEgbW9yZSBnZW5lcmFsIGNvbmNlcHQ/XG4qICAgKipJbXBsaWNhdGlvbnM6KiogR2l2ZW4gaXRzIHBvdGVudGlhbCBtZWFuaW5nLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgdHJhZGUtb2Zmcz8gRG9lcyB0aGUgJ3BpZScgYXNwZWN0IHN1Z2dlc3QgcHJvcG9ydGlvbmFsIGFsbG9jYXRpb24gb3IgaGllcmFyY2hpY2FsIGRpdmlzaW9uPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFkdmFudGFnZXM/XG4qICAgKipDb25uZWN0aW9uczoqKiBIb3cgZG9lcyBgTkVUX1NDSF9QSUVgIHJlbGF0ZSB0byBvdGhlciBzY2hlZHVsaW5nIHBhcmFkaWdtcyBJJ20gZmFtaWxpYXIgd2l0aD8gSXMgaXQgYSBub3ZlbCBhcHByb2FjaCwgYSByZWZpbmVtZW50IG9mIGFuIGV4aXN0aW5nIHRlY2huaXF1ZSwgb3IgYSBjb21wbGV0ZSBkZXBhcnR1cmU/IFdoYXQgYXJlIHRoZSBjb21tb25hbGl0aWVzIGFuZCBwb2ludHMgb2YgZGlmZmVyZW50aWF0aW9uP1xuXG5UaGlzIHN0YXRlbWVudCBpbXBsaWVzIEkgaGF2ZSBhIG1lbnRhbCBtYXAgb2YgbmV0d29yayBzY2hlZHVsaW5nIGNvbmNlcHRzIGFuZCBhbSByZWFkeSB0byBhcHBseSBteSBleHBlcnRpc2UgdG8gZXZhbHVhdGUgYE5FVF9TQ0hfUElFYCByZWxhdGl2ZSB0byB0aGF0IG1hcC4gVGhlIHVzZSBvZiB0aGUgY29tbWFuZCAnTGV0J3Mgc2VlJyBzdWdnZXN0cyB0aGF0IGl0J3MgbGlrZWx5IGEgY2FsbCB0byByZXZpZXcgdGhlIHN0YXRlIG9mIHRoZSB0ZWNobm9sb2d5IG9yIGNvbmNlcHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgaGlnaCBsZXZlbC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHBsYXlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjAyLjIzNTgxODkwNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjI6XFx0Y29uZmlnIE5FVF9TQ0hfUElFXFxuIDMyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWQgKFBJRSkgc2NoZWR1bGVyXFxcIlxcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgUHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXJcXG4gMzI2OlxcdFxcdCAgRW5oYW5jZWQgc2NoZWR1bGVyIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gMzI3OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgwMzNcXG4gMzI4OlxcdFxcbiAzMjk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDMzMDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9waWUuXFxuIDMzMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MDIuMjM1OTAxNzI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzk0NzA1NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYE5FVF9TQ0hfSEhGYFwiLCBleHByZXNzZWQgYXMgYSBzZXJpZXMgb2YgdGhvdWdodHMgZnJvbSBteSBwZXJzcGVjdGl2ZSwga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBOZXQgU2NoZWR1bGUqKlxuXG5BbHJpZ2h0LCB0aGF0J3Mgd2hhdCB3ZSdyZSBsb29raW5nIGF0LCBgTkVUX1NDSF9ISEZgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGFzIGEgbmV0d29yayBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBvbmUgZGVhbGluZyB3aXRoIGhpZ2gtZnJlcXVlbmN5IGhhbmRsaW5nLiBUaGUgYEhIRmAgc3VmZml4IGlzIGEgY2xlYXIgaW5kaWNhdG9yIOKAkyBsaWtlbHkgcmVmZXJyaW5nIHRvIGEgZmVhdHVyZSBzZXQgb3IgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIGhpZ2ggZnJlcXVlbmN5IHRyYWZmaWMuIE15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udGV4dDsgSXMgdGhpcyBhIHNwZWNpZmljIG1vZHVsZSBuYW1lPyBBIHZhcmlhYmxlPyBBIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUaGUgbm9tZW5jbGF0dXJlIHN1Z2dlc3RzIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJ05FVCcgc2lnbmlmaWVzIGhlcmUuIElzIGl0IGFuIGludGVybmFsIG5ldHdvcmsgbGlicmFyeSwgYSBtb3JlIGdlbmVyYWwgbmV0d29yayByZXNvdXJjZSBsaWtlIGEgTklDLCBvciBhIG5ldHdvcmtpbmcgZGV2aWNlPyBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgZnVsbCB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MTYuMDMwNjExNjU1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTM6XFx0Y29uZmlnIE5FVF9TQ0hfSEhGXFxuIDMxNDpcXHRcXHR0cmlzdGF0ZSBcXFwiSGVhdnktSGl0dGVyIEZpbHRlciAoSEhGKVxcXCJcXG4gMzE1OlxcdFxcdGhlbHBcXG4gMzE2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEhlYXZ5LUhpdHRlciBGaWx0ZXIgKEhIRilcXG4gMzE3OlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzIwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2hoZi5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0Y29uZmlnIE5FVF9TQ0hfUElFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjE2LjAzMDczMDk5NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4MTg2MTk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGBORVRfU0NIX0ZRYFwiLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQgKGxpa2VseSBuZXR3b3JraW5nLCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBvciBzb21ldGhpbmcgc2ltaWxhcik6XG5cbioqRGlnZ2luZyBpbnRvIE5FVF9TQ0hfRlEqKlxuXG5BbHJpZ2h0LCBgTkVUX1NDSF9GUWAuLi4gaG1tLCB0aGF0J3MgYSBmYW1pbGlhciBjb25zdHJ1Y3QuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBsaWtlbHkgY29udGV4dDogbmV0d29yayBzY2hlZHVsaW5nLCBwYXJ0aWN1bGFybHkgaW4gYSBMaW51eCBlbnZpcm9ubWVudCBvciBhIHN5c3RlbSB0aGF0IGRyYXdzIGluc3BpcmF0aW9uIGZyb20gaXQuIFRoZSBcIk5FVFwiIHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyBuZXR3b3JrLXJlbGF0ZWQgb3BlcmF0aW9ucywgYW5kIFwiU0NIXCIgYWxtb3N0IGNlcnRhaW5seSBwb2ludHMgdG8gYSBzY2hlZHVsZXIgb3Igc2NoZWR1bGluZyBtZWNoYW5pc20uIFwiRlFcIiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBwcm9iYWJseSBtZWFucyBGYWlyIFF1ZXVpbmcsIG9yIHBlcmhhcHMgRnJlcXVlbmN5LVF1ZXVpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgaG93IHRoaXMgc2NoZWR1bGVyIG9wZXJhdGVzLiBJcyBpdCBhIGhpZXJhcmNoaWNhbCBzY2hlZHVsZXI/IERvZXMgaXQgdXRpbGl6ZSBwYWNrZXQgY2xhc3NpZmljYXRpb24/IFdoYXQgYWxnb3JpdGhtcyBhcmUgZW1wbG95ZWQgdG8gZW5zdXJlIGZhaXJuZXNzIOKAkyBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSksIERlZmljaXQgUm91bmQgUm9iaW4gKERSUiksIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIGVhY2ggaGFzIGl0cyBvd24gc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzIGluIHRlcm1zIG9mIHRocm91Z2hwdXQsIGxhdGVuY3ksIGFuZCBmYWlybmVzcyB1bmRlciBkaWZmZXJlbnQgbG9hZHMuXG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIHR5cGVzIG9mIGFwcGxpY2F0aW9ucyB0aGlzIHdvdWxkIGJlIHVzZWQgZm9yOiBsYXRlbmN5LXNlbnNpdGl2ZSB0cmFmZmljIGxpa2UgVm9JUCBvciBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMsIG9yIHBlcmhhcHMgYnVsayBkYXRhIHRyYW5zZmVyIHdoZXJlIGZhaXJuZXNzIGlzIHBhcmFtb3VudCB0byBwcmV2ZW50IGFueSBvbmUgZmxvdyBmcm9tIGRvbWluYXRpbmcgdGhlIG5ldHdvcmsuIFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB3b3JrbG9hZCBpcyBjcnVjaWFsLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlcmUgY29uZmlndXJhYmxlIHdlaWdodHM/IFByaW9yaXR5IGxldmVscz8gQmFuZHdpZHRoIGd1YXJhbnRlZXM/IFdoYXQgYWJvdXQgdHJhZmZpYyBzaGFwaW5nPyBBcmUgdGhlcmUgcmVsYXRlZCBjb21wb25lbnRzIHN1Y2ggYXMgdHJhZmZpYyBwb2xpY2luZz8gVGhlIHNwZWNpZmljcyBvZiB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGRlZmluZSBpdHMgcHJhY3RpY2FsIGVmZmVjdGl2ZW5lc3MuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBrbm93IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGluIG9yZGVyIHRvIGJlIHN1cmUgb2YgdGhlIGV4YWN0IG1lYW5pbmcgb2YgdGhpcyBub21lbmNsYXR1cmUuIFdoYXQgYXJlIHRoZSBjb250ZXh0LWRlcGVuZGVudCB2YXJpYWJsZXMgdGhhdCBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMgc2NoZWR1bGVyP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MjcuMTEyNTk1MTM4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5OSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5OTpcXHRjb25maWcgTkVUX1NDSF9GUVxcbiAzMDA6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaXIgUXVldWVcXFwiXFxuIDMwMTpcXHRcXHRoZWxwXFxuIDMwMjpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGUSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdCAgRlEgZG9lcyBmbG93IHNlcGFyYXRpb24sIGFuZCBpcyBhYmxlIHRvIHJlc3BlY3QgcGFjaW5nIHJlcXVpcmVtZW50c1xcbiAzMDU6XFx0XFx0ICBzZXQgYnkgVENQIHN0YWNrIGludG8gc2stXFx1MDAzZXNrX3BhY2luZ19yYXRlIChmb3IgbG9jYWxseSBnZW5lcmF0ZWRcXG4gMzA2OlxcdFxcdCAgdHJhZmZpYylcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjI3LjExMjY3NDI1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE2MjYxMjE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGBORVRfU0NIX0VUU2AsXCIgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBORVRfU0NIX0VUUyoqXG5cbkFscmlnaHQsIHNvIHRoZSBwaHJhc2UgXCJMZXQncyBzZWUgYE5FVF9TQ0hfRVRTYFwiIHBvcHMgdXAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIGludG8gYWN0aW9uLiBcIk5FVF9TQ0hfRVRTXCIuLi4gdGhhdCdzIHByZXR0eSBjbGVhcmx5IHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsaW5nIG9yIHNvbWUgYXNwZWN0IG9mIHRpbWUtc2Vuc2l0aXZlIG5ldHdvcmtpbmcuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyByZWZlcnMgdG8gc29tZSBraW5kIG9mIG5ldHdvcmsgc2NoZWR1bGluZyBhbGdvcml0aG0gb3IgbWVjaGFuaXNtLCBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaW4gZW52aXJvbm1lbnRzIHdoZXJlIGRldGVybWluaXNtIGFuZCBib3VuZGVkIGxhdGVuY3kgYXJlIGNydWNpYWwuXG5cbkkgbmVlZCBtb3JlIGNvbnRleHQsIG9idmlvdXNseSwgYnV0IHRoaXMgY291bGQgZW5jb21wYXNzIGEgcmFuZ2Ugb2YgdG9waWNzIGZyb20gRXRoZXJuZXQgVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZyAoVFNOKSBzdGFuZGFyZHMsIGxpa2UgZnJhbWUgcHJlZW1wdGlvbiBvciB0aW1lLWF3YXJlIHNoYXBlciBpbXBsZW1lbnRhdGlvbnMsIGFsbCB0aGUgd2F5IGRvd24gdG8gbW9yZSBjdXN0b20gb3Igc3BlY2lhbGl6ZWQgc2NoZWR1bGluZyBhbGdvcml0aG1zIHVzZWQgaW4gc3BlY2lmaWMgaW5kdXN0cmlhbCBjb250cm9sIHN5c3RlbXMgb3IgZW1iZWRkZWQgbmV0d29ya2luZyBhcHBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zOiBXaGF0IGtpbmQgb2YgbmV0d29yayBhcmUgd2UgZGVhbGluZyB3aXRoPyBJcyB0aGlzIHdpcmVkIG9yIHdpcmVsZXNzPyBXaGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzPyBMYXRlbmN5PyBKaXR0ZXI/IElzIGl0IGEgcmVhbC10aW1lIHN5c3RlbT8gSG93IHRpZ2h0IGFyZSB0aGUgdGltaW5nIGNvbnN0cmFpbnRzP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBpbmZvcm1hdGlvbiB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIHdoZXRoZXIgaXQgaXMgZm9yIHRoZSBwdXJwb3NlcyBvZiBkZWJ1Z2dpbmcsIGltcGxlbWVudGF0aW9uLCBvciByZXNlYXJjaCwgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MzkuMjc1Mjg4NDQxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4OSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4OTpcXHRjb25maWcgTkVUX1NDSF9FVFNcXG4gMzkwOlxcdFxcdHRyaXN0YXRlIFxcXCJFbmhhbmNlZCB0cmFuc21pc3Npb24gc2VsZWN0aW9uIHNjaGVkdWxlciAoRVRTKVxcXCJcXG4gMzkxOlxcdFxcdGhlbHBcXG4gMzkyOlxcdCAgICAgICAgICBUaGUgRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbiBzY2hlZHVsZXIgaXMgYSBjbGFzc2Z1bFxcbiAzOTM6XFx0ICAgICAgICAgIHF1ZXVpbmcgZGlzY2lwbGluZSB0aGF0IG1lcmdlcyBmdW5jdGlvbmFsaXR5IG9mIFBSSU8gYW5kIERSUlxcbiAzOTQ6XFx0ICAgICAgICAgIHFkaXNjcyBpbiBvbmUgc2NoZWR1bGVyLiBFVFMgbWFrZXMgaXQgZWFzeSB0byBjb25maWd1cmUgYSBzZXQgb2ZcXG4gMzk1OlxcdCAgICAgICAgICBzdHJpY3QgYW5kIGJhbmR3aWR0aC1zaGFyaW5nIGJhbmRzIHRvIGltcGxlbWVudCB0aGUgdHJhbnNtaXNzaW9uXFxuIDM5NjpcXHQgICAgICAgICAgc2VsZWN0aW9uIGRlc2NyaWJlZCBpbiA4MDIuMVFhei5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRVRTIHBhY2tldCBzY2hlZHVsaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjM5LjI3NTM2ODM2MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg0MzIwNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIE5FVF9TQ0hfRFJSOiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgYE5FVF9TQ0hfRFJSYC4gTXkgaW5pdGlhbCBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB0aGUgY29yZSBjaGFyYWN0ZXJpc3RpY3MuIEl0J3MgYSBuZXR3b3JrIHNjaGVkdWxlciwgbWVhbmluZyBpdHMgZnVuZGFtZW50YWwgam9iIGlzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiBiYW5kd2lkdGggYW1vbmdzdCB2YXJpb3VzIG5ldHdvcmsgZmxvd3Mgb3IgcXVldWVzLiBUaGUgXCJEUlJcIiBoaW50cyBhdCBEZWZpY2l0IFJvdW5kIFJvYmluLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBlbXBsb3lpbmcgYSBmYWlybmVzcyBtZWNoYW5pc20sIGFpbWluZyB0byBwcmV2ZW50IHN0YXJ2YXRpb24gYW5kIGVuc3VyZSBzb21lIGxldmVsIG9mIHNlcnZpY2UgaXNvbGF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHRyYWZmaWMgc3RyZWFtcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmUgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIHN0cmljdCBEUlIgb3IgYSBtb2RpZmllZCB2ZXJzaW9uPyBBcmUgdGhlcmUgYW55IHdlaWdodGluZyBzY2hlbWVzIGludm9sdmVkPyBIb3cgYXJlIGRlZmljaXRzIGRlZmluZWQsIGFuZCB3aGF0J3MgdGhlIHR5cGljYWwgXCJxdWFudHVtXCIgc2l6ZSBmb3IgdGhlc2UgZGVmaWNpdHM/IEtub3dpbmcgdGhlc2Ugc3BlY2lmaWNzIGlzIGNydWNpYWwuIFdpdGhvdXQgdGhpcywgaXQncyBpbXBvc3NpYmxlIHRvIHRydWx5IGFzc2VzcyBpdHMgcGVyZm9ybWFuY2UuXG5cbkknZCB3YW50IHRvIGV4YW1pbmUgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHF1ZXVpbmcgZGlzY2lwbGluZXMuIERvZXMgaXQgcGxheSBuaWNlbHkgd2l0aCBvdGhlciBzY2hlZHVsZXJzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnM/IEhvdyBkb2VzIGl0IGhhbmRsZSBjb25nZXN0aW9uIHNpZ25hbHMsIGxpa2UgRUNOIG9yIGV4cGxpY2l0IGNvbmdlc3Rpb24gbm90aWZpY2F0aW9uPyBEb2VzIGl0IG9mZmVyIGFueSBwcmlvcml0aXphdGlvbiBiZXlvbmQgZmFpcm5lc3M/IFdoYXQgYXJlIGl0cyBsYXRlbmN5IGNoYXJhY3RlcmlzdGljcywgYW5kIGhvdyBkb2VzIGl0IGNvbXBhcmUgdG8gb3RoZXIgcG90ZW50aWFsIHNjaGVkdWxlcnMgZm9yIHJlYWwtdGltZSBhcHBsaWNhdGlvbnM/XG5cbkJleW9uZCB0aGUgYmFzaWNzLCBJJ2QgaW52ZXN0aWdhdGUgdGhlIGtlcm5lbC1sZXZlbCBpbXBsZW1lbnRhdGlvbjogaXMgaXQgaGFyZHdhcmUtYWNjZWxlcmF0ZWQsIG9yIHB1cmVseSBzb2Z0d2FyZT8gVGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyB3aWxsIHN3aW5nIGRyYW1hdGljYWxseSBkZXBlbmRpbmcgb24gdGhhdCBhbnN3ZXIuIEFsc28sIEknZCB3YW50IHRvIGxvb2sgYXQgaXRzIG1lbW9yeSBmb290cHJpbnQuXG5cbkZpbmFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlLiBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3M/IElzIGl0IHByaW1hcmlseSBmb2N1c2VkIG9uIGJhbmR3aWR0aCB1dGlsaXphdGlvbiwgbGF0ZW5jeSBtaW5pbWl6YXRpb24sIG9yIGZhaXJuZXNzPyBIb3cgZG9lcyBpdCBoYW5kbGUgYnVyc3RzIG9mIHRyYWZmaWM/IEkgd2FudCB0byBzZWUgdGhpcyBzY2hlZHVsZXIgaW4gYWN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIG5ldHdvcmsgbG9hZCBzY2VuYXJpb3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBldmFsdWF0ZSBpdHMgZWZmaWNhY3kgZm9yIGEgc3BlY2lmaWMgc2V0IG9mIHJlcXVpcmVtZW50cy4gSSdtIGtlZW4gdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIHRhcmdldCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjQ2LjE1OTY5MjMwN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA3OlxcdGNvbmZpZyBORVRfU0NIX0RSUlxcbiAyMDg6XFx0XFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcbiAyMDk6XFx0XFx0aGVscFxcbiAyMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRGVmaWNpdCBSb3VuZCBSb2JpbiAoRFJSKSBwYWNrZXRcXG4gMjExOlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyMTQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjQ2LjE1OTc5NDQzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzA0MzE4MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipJbnZlc3RpZ2F0aW5nIE5FVF9TQ0hfU0ZRKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYE5FVF9TQ0hfU0ZRYCB0aGluZy4gSXQncyBhIHRyYWZmaWMgc2hhcGVyLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJIHN1c3BlY3QgaXQncyB0aGUgU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyBkaXNjaXBsaW5lLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBpdHMgcHVycG9zZTogZW5zdXJpbmcgZmFpcm5lc3MgaW4gYmFuZHdpZHRoIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYSBjb25nZXN0ZWQgbmV0d29yayBpbnRlcmZhY2UuIEkgYmV0IGl0IHVzZXMgYSBoYXNoIGZ1bmN0aW9uIHRvIGRpc3RyaWJ1dGUgZmxvd3MgaW50byBkaWZmZXJlbnQgcXVldWVzLCBhaW1pbmcgdG8gaXNvbGF0ZSB0aGVtIGZyb20gaGVhZC1vZi1saW5lIGJsb2NraW5nIGlzc3Vlcy5cblxuTm93LCBJJ20gYWxyZWFkeSBzdGFydGluZyB0byB0aGluayBhYm91dCBpdHMgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyBjb21wYXJlZCB0byBvdGhlciBxdWV1aW5nIGRpc2NpcGxpbmVzLiBUaGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBidXJzdHkgdHJhZmZpYyDigJMgaXMgaXQgZ29vZCBhdCBzbW9vdGhpbmcgdGhvc2Ugb3V0LCBvciBkb2VzIGl0IGludHJvZHVjZSBsYXRlbmN5PyBBbmQgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBUQ1AncyBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcz8gRG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgb3IgZG9lcyBpdCBjYXVzZSBhbnkgaXNzdWVzPyBJJ2QgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZy4gSSdtIGtlZW4gdG8gc2VlIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMsIHNwZWNpZmljYWxseSBob3cgdGhlIGhhc2ggaXMgZ2VuZXJhdGVkIGFuZCBpZiBpdCBoYXMgYW55IHJhbmRvbWl6YXRpb24gYXNwZWN0cy4gSSBoYXZlIHRvIHNlZSBob3cgaXQgYmFsYW5jZXMgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeSBhbmQgaWYgdGhlcmUgYXJlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIHRoYXQgd291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZS4gSSBtaWdodCB3YW50IHRvIHN0YXJ0IHRlc3RpbmcgaXRzIGJlaGF2aW9yIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCB0byBzZWUgd2hlcmUgdGhpcyB3b3VsZCBmaXQgaW4gZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2UsIHBlcmhhcHMgc29tZSBzaW11bGF0aW9ucyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6NTIuNDY0MTE0NTI3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTE6XFx0Y29uZmlnIE5FVF9TQ0hfU0ZRXFxuIDExMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVxcXCJcXG4gMTEzOlxcdFxcdGhlbHBcXG4gMTE0OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFN0b2NoYXN0aWMgRmFpcm5lc3MgUXVldWVpbmcgKFNGUSlcXG4gMTE1OlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfc2ZxLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuIDExODpcXHRcXG4gMTE5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMjA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3NmcS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6NTIuNDY0Mjg2NzQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODAzODI2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEknbSBmb2N1c2luZyBvbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYCB3aXRoaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYE5FVF9TQ0hFRGAgaXMgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludDsgbGV0J3MgY29uZmlybSB0aGF0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbmRpdmlkdWFsIHNjaGVkdWxlciBjaG9pY2VzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgYE5FVF9TQ0hFRGAgdG8gdGhlIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMsIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byBhbGwgb2YgdGhlIHJlbGF0ZWQgZmVhdHVyZXMsIHN1Y2ggYXMgcXVldWluZyBkaXNjaXBsaW5lcywgZmlsdGVycyBhbmQgY2xhc3NpZmllcnMgYW5kIHRyYWZmaWMgcG9saWNpbmcgYW5kIHNoYXBpbmcgY2FwYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6NTcuNDQ0Njc3NDg1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY4MjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowNDo1Ny41MDczNjg2MTFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4NjE4Njg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkVUX1NDSEVEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSdtIHdvbmRlcmluZyBpZiBgTkVUX1NDSF9QSUVgIGlzIHJlcXVpcmVkIGZvciBgTkVUX1NDSF9GUV9QSUVgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LCBnaXZlbiB0aGVpciByZWxhdGlvbnNoaXAuIFllcywgaXQgbG9va3MgbGlrZSBgTkVUX1NDSF9GUV9QSUVgIGluZGVlZCBkZXBlbmRzIG9uIGBORVRfU0NIX1BJRWAuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkndmUgZ290IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBjbGVhcmx5IGluIG1pbmQuIFRoZSBjb3JlIHNldCBvZiBjb25maWd1cmF0aW9ucyBJJ20gd29ya2luZyB3aXRoIGFwcGVhciB0byBiZTpcblxuKiAgIGBORVRfU0NIRURgXG4qICAgYE5FVF9TQ0hfRFJSYFxuKiAgIGBORVRfU0NIX0RVQUxQSTJgXG4qICAgYE5FVF9TQ0hfRVRTYFxuKiAgIGBORVRfU0NIX0ZRYFxuKiAgIGBORVRfU0NIX1BJRWBcbiogICBgTkVUX1NDSF9GUV9QSUVgXG4qICAgYE5FVF9TQ0hfSEhGYFxuKiAgIGBORVRfU0NIX1NGUWBcblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZXNlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHN5bWJvbHMuXG5cbk5vdywgbGV0J3MgdHVybiB0byB0aGUgZm9jdXMgc3ltYm9scy4gSSd2ZSBnb3QgdGhlc2UsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIHNldCBpbmNsdWRlczpcblxuKiAgIGBkcnJfY2hhbmdlX2NsYXNzYFxuKiAgIGBkdWFscGkyX2NoYW5nZWBcbiogICBgZHVhbHBpMl9pbml0YFxuKiAgIGBldHNfcWRpc2NfY2hhbmdlYFxuKiAgIGBmcV9jaGFuZ2VgXG4qICAgYGZxX3BpZV9jaGFuZ2VgXG4qICAgYGhoZl9jaGFuZ2VgXG4qICAgYHBpZV9kcm9wX2Vhcmx5YFxuKiAgIGBzZnFfY2hhbmdlYFxuXG5GaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbid0IHRyZWF0IGBwaWVfZHJvcF9lYXJseWAgYXMgYSBzdGF0aWMgc3ltYm9sIGJ5IG1pc3Rha2UuIEp1c3QgY29uZmlybWluZyB0aGF0IGlzIGlzIG5vdCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjAzLjI5MzU2MDM2OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxODc0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9vbCBwaWVfZHJvcF9lYXJseVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3BpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmM9MjU9c3RydWN0IHBpZV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzItXFxubmV0L3NjaGVkL3NjaF9waWUuYzozMzpib29sIHBpZV9kcm9wX2Vhcmx5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzQtXFx0XFx0ICAgIHN0cnVjdCBwaWVfdmFycyAqdmFycywgdTMyIGJhY2tsb2csIHUzMiBwYWNrZXRfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDU6MDMuMzQ4NzUzMzk1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTI3MjY0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcy4gSXQncyBjbGVhciB0aGF0IHRoZSBzeXN0ZW0gaXNuJ3Qgc3RhdGljLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIExldCdzIGRlbHZlIGludG8gdGhlIGBzY2hfZHVhbHBpMi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgZnVuY3Rpb25zIGBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb25gIGFuZCBgbXVzdF9kcm9wYC4gVGhleSBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGluIHRlcm1zIG9mIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cy4gSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUuIEkgY2FuIHNlZSB0aGF0IGBkdWFscGkyX2NoYW5nZWAsIGBkdWFscGkyX2luaXRgLCBhbmQgYGR1YWxwaTJfZW5xdWV1ZWAgY2FsbCB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLlxuXG5TaW5jZSBgZHVhbHBpMl9jaGFuZ2VgIGFuZCBgZHVhbHBpMl9pbml0YCBhcmUgY2FsbGluZyB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGVuIHRoZXkgYXJlIGdvb2QuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgaG93IGBkdWFscGkyX2VucXVldWVgIGZpdHMgaW50byB0aGUgZHluYW1pYyBtb2RlbCwgZ2l2ZW4gdGhhdCBpdCBhbHNvIHVzZXMgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gZW5zdXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIGlzIGNvcnJlY3RseSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjA4LjI0MTQ4MzYyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQxODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBkdWFscGkyX2VucXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9kdWFscGkyLmM9MzQ0PXN0YXRpYyBpbnQgZHVhbHBpMl9za2JfY2xhc3NpZnkoc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTM4Ny1cXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzozODg6c3RhdGljIGludCBkdWFscGkyX2VucXVldWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTM4OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowNTowOC4yOTE5MTc5MDZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA3NzU2NjQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYG11c3RfZHJvcGAgaXMgdHJpZ2dlcmVkIGJ5IGBkdWFscGkyX2VucXVldWVfc2tiYC4gU2luY2Ugd2UgYXJlIGZvY3VzaW5nIG9uIHRoYXQsIGxldCdzIGFkZCBgZHVhbHBpMl9lbnF1ZXVlX3NrYmAgdG8gdGhlIHRhcmdldCBmdW5jdGlvbnMgZm9yIHRoZSBhbmFseXNpcy5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZXNlIGNoYW5nZSBmdW5jdGlvbnMuIExvb2tpbmcgYXQgYGZxX3Jlc2l6ZWAgd2l0aGluIGBzY2hfZnEuY2AsIGl0J3Mgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgZnFfY2hhbmdlYCwgd2hpY2ggbWFrZXMgYGZxX2NoYW5nZWAgcmVsZXZhbnQuIFRoZW4sIGBldHNfcWRpc2NfY2hhbmdlYCBpbiBgc2NoX2V0cy5jYCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIHNhbWUgZ29lcyBmb3IgYGZxX3BpZV9jaGFuZ2VgIGluIGBzY2hfZnFfcGllLmNgLCBgaGhmX2NoYW5nZWAgaW4gYHNjaF9oaGYuY2AsIGBzZnFfY2hhbmdlYCBpbiBgc2NoX3NmcS5jYCwgYW5kIGBkcnJfY2hhbmdlX2NsYXNzYCBpbiBgc2NoX2Ryci5jYCDigJMgdGhleSBhcmUgYWxsIHN0YXRpYyBidXQgc2VydmUgYXMgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBzY2hlZHVsZXJzLlxuXG5HaXZlbiB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBOZXRsaW5rIGNvbW1hbmRzIChzcGVjaWZpY2FsbHkgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgKSwgYW5kIHRoZSBwb3RlbnRpYWwgY2hhbmdlcyBsb29rIGZ1bmN0aW9uYWwgc3VjaCBhcyBjbGFtcGluZyB2YWx1ZXMsIGZpeGluZyBidWdzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLCBJIHRoaW5rIHRoZXNlIGFyZSBzb2xpZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGV5IHJlcHJlc2VudCBhIGdvb2QgYXR0YWNrIHN1cmZhY2UuXG5cbkxldCBtZSBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNDAsIk91dHB1dFRva2VucyI6MjcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjE3LjM2OTQ4NzA0OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzQzOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0RVQUxQSTJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCIsXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfU0NIX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9QSUVcIixcbiAgICBcIk5FVF9TQ0hfSEhGXCIsXG4gICAgXCJORVRfU0NIX1NGUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRycl9jaGFuZ2VfY2xhc3NcIixcbiAgICBcImR1YWxwaTJfY2hhbmdlXCIsXG4gICAgXCJkdWFscGkyX2luaXRcIixcbiAgICBcImR1YWxwaTJfZW5xdWV1ZV9za2JcIixcbiAgICBcImV0c19xZGlzY19jaGFuZ2VcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfcGllX2NoYW5nZVwiLFxuICAgIFwiaGhmX2NoYW5nZVwiLFxuICAgIFwicGllX2Ryb3BfZWFybHlcIixcbiAgICBcInNmcV9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMgKHFkaXNjcykgdG8gY2xhbXAgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMsIHByZXZlbnRpbmcgaXNzdWVzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBxZGlzY3MgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsYW1waW5nIGxvZ2ljIGJlaGF2ZXMgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0RVQUxQSTJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCIsXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfU0NIX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9QSUVcIixcbiAgICBcIk5FVF9TQ0hfSEhGXCIsXG4gICAgXCJORVRfU0NIX1NGUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRycl9jaGFuZ2VfY2xhc3NcIixcbiAgICBcImR1YWxwaTJfY2hhbmdlXCIsXG4gICAgXCJkdWFscGkyX2luaXRcIixcbiAgICBcImR1YWxwaTJfZW5xdWV1ZV9za2JcIixcbiAgICBcImV0c19xZGlzY19jaGFuZ2VcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfcGllX2NoYW5nZVwiLFxuICAgIFwiaGhmX2NoYW5nZVwiLFxuICAgIFwicGllX2Ryb3BfZWFybHlcIixcbiAgICBcInNmcV9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMgKHFkaXNjcykgdG8gY2xhbXAgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMsIHByZXZlbnRpbmcgaXNzdWVzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBxZGlzY3MgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsYW1waW5nIGxvZ2ljIGJlaGF2ZXMgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDU6MTcuNDQwODM2Njg0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3ODE1MDk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjE3LjQ0MTI2NTU3NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzk3NzcxNzQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5AQCAtODIsOCArODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1wiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuK1x0XHRxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pO1xuIFx0fSBlbHNlXG4tXHRcdHF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcbiBcdGlmIChjbCAhPSBOVUxMKSB7XG4gXHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuQEAgLTIwOCw5ICsyMDgsMTEgQEAgc3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24oc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSlcbiBzdGF0aWMgdm9pZCBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb24oc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsIHUzMiB3YylcbiB7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4rXG4gXHRxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyA9IHdjO1xuIFx0cS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3Yztcbi1cdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICpcbitcdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKW10dSAqXG4gXHRcdCgoaW50KXEtXHUwMDNlY19wcm90ZWN0aW9uX3djIC0gKGludClxLVx1MDAzZWNfcHJvdGVjdGlvbl93bCk7XG4gXHRkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTtcbiB9XG5AQCAtMjg1LDggKzI4Nyw5IEBAIHN0YXRpYyBib29sIG11c3RfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcbiBcdHU2NCBsb2NhbF9sX3Byb2I7XG4gXHRib29sIG92ZXJsb2FkO1xuIFx0dTMyIHByb2I7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4tXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpXG4rXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogbXR1KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcm9iID0gUkVBRF9PTkNFKHEtXHUwMDNlcGkyX3Byb2IpO1xuQEAgLTcxMiw3ICs3MTUsOCBAQCBzdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdClcbiBcdC8qIEFwcGx5IHJ1bGUgb2YgdGh1bWIsIGkuZS4sIGRvdWJsaW5nIHRoZSBwYWNrZXQgbGVuZ3RoLFxuIFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LlxuIFx0ICovXG4tXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4rXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXG4rXHRcdFx0XHRcdFx0ICAgICAxLCAxIFx1MDAzY1x1MDAzYyAyMCkpO1xuIFxuIFx0aWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSlcbiBcdFx0cmV0dXJuIFUzMl9NQVg7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ldHMuYyBiL25ldC9zY2hlZC9zY2hfZXRzLmNcbmluZGV4IDI1ZmNmNDA3OWZlY2UuLmYyM2M4ZGM2OGY4Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5AQCAtNjM2LDcgKzYzNiw3IEBAIHN0YXRpYyBpbnQgZXRzX3FkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0ICovXG4gXHRmb3IgKGkgPSBuc3RyaWN0OyBpIFx1MDAzYyBuYmFuZHM7IGkrKykge1xuIFx0XHRpZiAoIXF1YW50YVtpXSlcbi1cdFx0XHRxdWFudGFbaV0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0XHRxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4gXHR9XG4gXG4gXHQvKiBCZWZvcmUgY29tbWl0LCBtYWtlIHN1cmUgd2UgY2FuIGFsbG9jYXRlIGFsbCBuZXcgcWRpc2NzICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXG5pbmRleCA2MTQ0YjU2ODZmMTNmLi5hYjhlN2M2YWUyMDM5IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0ge1xuLVx0Lm1heCA9IElOVF9NQVgsXG4rXHQubWF4ID0gMSBcdTAwM2NcdTAwM2MgMjAsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZnFfcG9saWN5W1RDQV9GUV9NQVggKyAxXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbkBAIC0zNDEsNyArMzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdFx0ICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pXG4tXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSk7XG4rXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLFxuK1x0XHRcdCAgIG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfTUVNT1JZX0xJTUlUXSlcbiBcdFx0V1JJVEVfT05DRShxLVx1MDAzZW1lbW9yeV9saW1pdCxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xuaW5kZXggOTZhY2FiNmE4ZGEwMy4uYmI4ZTg5NTJmNTU1MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGhmLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfaGhmLmNcbkBAIC01NTEsNyArNTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX0hIRl9RVUFOVFVNXSlcbi1cdFx0bmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTtcbitcdFx0bmV3X3F1YW50dW0gPSBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pXG4gXHRcdG5ld19oaGZfbm9uX2hoX3dlaWdodCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcGllLmMgYi9uZXQvc2NoZWQvc2NoX3BpZS5jXG5pbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9waWUuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9waWUuY1xuQEAgLTM1LDcgKzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbiB7XG4gXHR1NjQgcm5kO1xuIFx0dTY0IGxvY2FsX3Byb2IgPSB2YXJzLVx1MDAzZXByb2I7XG4tXHR1MzIgbXR1ID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXG4gXHRpZiAodmFycy1cdTAwM2VidXJzdF90aW1lIFx1MDAzZSAwKVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTY2MCw2ICs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKGN0bC1cdTAwM2VxdWFudHVtIFx1MDAzZSAxIFx1MDAzY1x1MDAzYyAyMCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcInF1YW50dW0gdG9vIGxhcmdlXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNjIDAgfHxcbiBcdCAgICBjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNlIElOVF9NQVggLyBIWikge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImludmFsaWQgcGVydHVyYiBwZXJpb2RcIik7XG5AQCAtNjg4LDcgKzY5Myw3IEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFxuIFx0LyogdXBkYXRlIGFuZCB2YWxpZGF0ZSBjb25maWd1cmF0aW9uICovXG4gXHRpZiAoY3RsLVx1MDAzZXF1YW50dW0pXG4tXHRcdHF1YW50dW0gPSBjdGwtXHUwMDNlcXVhbnR1bTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXHUwMDNlcXVhbnR1bSk7XG4gXHRpZiAoY3RsLVx1MDAzZWZsb3dzKVxuIFx0XHRtYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLVx1MDAzZWZsb3dzLCBTRlFfTUFYX0ZMT1dTKTtcbiBcdGlmIChjdGwtXHUwMDNlZGl2aXNvcikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDU6MTcuNDQxMjY2MzE0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTc3NjcwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IEtNU0FOIGlzIFVubmVjZXNzYXJ5IEhlcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBuZXR3b3JrIHNjaGVkdWxlcnMg4oCTIGBzY2hfZHJyLmNgLCBgc2NoX2R1YWxwaTIuY2AsIGBzY2hfZXRzLmNgLCBgc2NoX2ZxLmNgLCBgc2NoX2ZxX3BpZS5jYCwgYHNjaF9oaGYuY2AsIGBzY2hfcGllLmNgLCBhbmQgYHNjaF9zZnEuY2AuIEVzc2VudGlhbGx5LCBpdCdzIGFsbCBhYm91dCBhZGRpbmcgYm91bmRzIGNoZWNraW5nLiBXZSdyZSBjbGFtcGluZyB0aGUgYHF1YW50dW1gIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIHRoZSBNVFUsIGVuc3VyaW5nIHRoZXkgc3RheSB3aXRoaW4gcmVhc29uYWJsZSBsaW1pdHMuIEl0IGxvb2tzIGxpa2UgdGhlIGxpbWl0cyBhcmUgcHJpbWFyaWx5IGEgbWluaW11bSBvZiAyNTYgYW5kIGEgbWF4aW11bSBhcm91bmQgMU1CICgxIFx1MDAzY1x1MDAzYyAyMCkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHB1cmVseSBhYm91dCAqaW5wdXQgdmFsaWRhdGlvbiouIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcHJldmVudGluZyBzaXR1YXRpb25zIHdoZXJlIGEgemVybyBgcXVhbnR1bWAgY291bGQgbGVhZCB0byBhIGRpdmlkZS1ieS16ZXJvIG9yIGluZmluaXRlIGxvb3AsIG9yIGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIHZhbHVlIGNhdXNlcyBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdmVyLWFsbG9jYXRlcyBtZW1vcnkuIFRoaXMgaXMgY2xhc3NpYyBoYXJkZW5pbmcgYWdhaW5zdCBsb2dpY2FsIGVycm9ycyBzdGVtbWluZyBmcm9tIHVzZXIgaW5wdXQgb3IgY29uZmlndXJhdGlvbi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0gdG8gbWFrZSB0aGUgS01TQU4gY2FsbC5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcywgSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCByYWlzZSBhIHJlZCBmbGFnLiBXZSdyZSAqY2xhbXBpbmcqIGV4aXN0aW5nIGludGVnZXIgdmFsdWVzLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gbW9kaWZpY2F0aW9ucyB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBub3RoaW5nIHRoYXQgY2hhbmdlcyBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCB0aGVzZSBjaGFuZ2VzIG9ubHkgY2xhbXAgdGhlIHZhbHVlIHRoYXQgaXMgc3RvcmVkIC0gc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgdGhlIHZhbHVlcyBiZWluZyByZWFkLlxuXG5UaGUgdHlwZXMgb2YgYnVncyB0aGlzIHBhdGNoIGlzIHByZXZlbnRpbmcgKGhhbmdzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBPT00gY29uZGl0aW9ucykgYXJlIGdlbmVyYWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4sIExPQ0tERVAgYW5kIGdlbmVyYWwgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbj8gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2guIEkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGUgdmFsdWVzIGJlaW5nIG1vZGlmaWVkIGRvbid0IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaWYgZHVtcGVkIHRvIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsuIFRoZSBwYXRjaCBvbmx5IGNsYW1wcyB0aGUgdmFsdWVzLCBub3QgdGhlIHN0cnVjdHVyZSBsYXlvdXQgb3IgdGhlIGR1bXAgZnVuY3Rpb25zLlxuXG5TbywgSSB3aWxsIHN0YXRlIG15IHJlYXNvbmluZyBjbGVhcmx5LiBUaGUgcGF0Y2ggZW5mb3JjZXMgYm91bmRzIGNoZWNrcyAobWluL21heC9jbGFtcCkgb24gcGFyYW1ldGVycyBsaWtlICdxdWFudHVtJyBhbmQgTVRVLXJlbGF0ZWQgdmFsdWVzIGFjcm9zcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMuIFRoaXMgbWl0aWdhdGVzIGxvZ2ljYWwgZmxhd3MgdGhhdCByZXN1bHQgaW4sIGluZmluaXRlIGxvb3BzLCBtZW1vcnkgZXJyb3JzIG9yIG92ZXJmbG93cy4gU2luY2UgdGhlIHBhdGNoIGRvZXMgbm90IGFkZCBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgaW5pdGlhbGl6YXRpb24gb3IgaW50cm9kdWNlIG5ldyBjb3B5aW5nIG1lY2hhbmlzbXMsIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGxlYWthZ2UgaXMgbm9uLWV4aXN0ZW50LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBmdXp6aW5nIHNob3VsZCBjYXRjaCBhbnkgcmVtYWluaW5nIGlzc3Vlcy4gSSB3aWxsIGZsYWcgYE5lZWRzS01TQU5gIGFzIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzIxLCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjMxLjQxODk0MDI5MVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 07:46:08 +0000 UTC FinishedAt: 2026-08-26 08:05:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_DUALPI2", "NET_SCH_ETS", "NET_SCH_FQ", "NET_SCH_PIE", "NET_SCH_FQ_PIE", "NET_SCH_HHF", "NET_SCH_SFQ" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_DUALPI2", "NET_SCH_ETS", "NET_SCH_FQ", "NET_SCH_PIE", "NET_SCH_FQ_PIE", "NET_SCH_HHF", "NET_SCH_SFQ" ], "series_id": "ce889dfc-dc59-4406-94d4-23b1b0fd77ed" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "drr_change_class", "dualpi2_change", "dualpi2_init", "dualpi2_enqueue_skb", "ets_qdisc_change", "fq_change", "fq_pie_change", "hhf_change", "pie_drop_early", "sfq_change" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RVQUxQSTImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0hIRiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1NGUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rycl9jaGFuZ2VfY2xhc3MmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9pbml0JiMzNDssCiAgICAmIzM0O2R1YWxwaTJfZW5xdWV1ZV9za2ImIzM0OywKICAgICYjMzQ7ZXRzX3FkaXNjX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfcGllX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtoaGZfY2hhbmdlJiMzNDssCiAgICAmIzM0O3BpZV9kcm9wX2Vhcmx5JiMzNDssCiAgICAmIzM0O3NmcV9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyAobWluL21heC9jbGFtcCkgdG8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGxpa2UgYHF1YW50dW1gIGFuZCBNVFUtZGVyaXZlZCB2YWx1ZXMgYWNyb3NzIHZhcmlvdXMgbmV0d29yayBzY2hlZHVsZXJzIChEUlIsIERVQUxQSTIsIEVUUywgRlEsIEZRX1BJRSwgSEhGLCBQSUUsIFNGUSkuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsb2dpY2FsIGJ1Z3Mgc3VjaCBhcyBpbmZpbml0ZSBsb29wcyAoZS5nLiwgemVybyBxdWFudHVtKSwgZGl2aXNpb24gYnkgemVybywgb3IgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9ucy9pbnRlZ2VyIG92ZXJmbG93cyAoZS5nLiwgZXh0cmVtZWx5IGxhcmdlIHF1YW50dW0gb3IgTVRVIHZhbHVlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGhvdyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBoYW5ncykgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgaGFuZyBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzIChxZGlzY3MpIHRvIGNsYW1wIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzLCBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIHplcm8gb3Igb3Zlcmx5IGxhcmdlIHZhbHVlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgcWRpc2NzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyBjbGFtcGluZyBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5pbmRleCA5MWIxZWY4MjRhZmFmLi4wZmZkYWIyN2JhZTQyIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kcnIuY1xuQEAgLTgyLDggJiM0Mzs4Miw5IEBAIHN0YXRpYyBpbnQgZHJyX2NoYW5nZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQsIHUzMiBwYXJlbnRpZCxcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1NwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1wmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdHF1YW50dW0gPSBtYXgoMjU2VSwgcXVhbnR1bSk7XG4gXHR9IGVsc2Vcbi1cdFx0cXVhbnR1bSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpO1xuJiM0MztcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcbiBcdGlmIChjbCAhPSBOVUxMKSB7XG4gXHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuQEAgLTIwOCw5ICYjNDM7MjA4LDExIEBAIHN0YXRpYyB2b2lkIGR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEpXG4gc3RhdGljIHZvaWQgZHVhbHBpMl9jYWxjdWxhdGVfY19wcm90ZWN0aW9uKHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLCB1MzIgd2MpXG4ge1xuJiM0MztcdHUzMiBtdHUgPSBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksIDEsIDEgXHUwMDNjXHUwMDNjIDIwKTtcbiYjNDM7XG4gXHRxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyA9IHdjO1xuIFx0cS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3Yztcbi1cdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICpcbiYjNDM7XHRxLVx1MDAzZWNfcHJvdGVjdGlvbl9pbml0ID0gKHMzMiltdHUgKlxuIFx0XHQoKGludClxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyAtIChpbnQpcS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wpO1xuIFx0ZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24ocSk7XG4gfVxuQEAgLTI4NSw4ICYjNDM7Mjg3LDkgQEAgc3RhdGljIGJvb2wgbXVzdF9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxuIFx0dTY0IGxvY2FsX2xfcHJvYjtcbiBcdGJvb2wgb3ZlcmxvYWQ7XG4gXHR1MzIgcHJvYjtcbiYjNDM7XHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4tXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpXG4mIzQzO1x0aWYgKHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyBcdTAwM2MgMiAqIG10dSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cHJvYiA9IFJFQURfT05DRShxLVx1MDAzZXBpMl9wcm9iKTtcbkBAIC03MTIsNyAmIzQzOzcxNSw4IEBAIHN0YXRpYyB1MzIgZ2V0X21lbW9yeV9saW1pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxpbWl0KVxuIFx0LyogQXBwbHkgcnVsZSBvZiB0aHVtYiwgaS5lLiwgZG91YmxpbmcgdGhlIHBhY2tldCBsZW5ndGgsXG4gXHQgKiB0byBmdXJ0aGVyIGluY2x1ZGUgcGVyIHBhY2tldCBvdmVyaGVhZCBpbiBtZW1vcnlfbGltaXQuXG4gXHQgKi9cbi1cdHU2NCBtZW1saW0gPSBtdWxfdTMyX3UzMihsaW1pdCwgMiAqIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiYjNDM7XHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgMSwgMSBcdTAwM2NcdTAwM2MgMjApKTtcbiBcbiBcdGlmICh1cHBlcl8zMl9iaXRzKG1lbWxpbSkpXG4gXHRcdHJldHVybiBVMzJfTUFYO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5pbmRleCAyNWZjZjQwNzlmZWNlLi5mMjNjOGRjNjhmOGNiIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ldHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xuQEAgLTYzNiw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHQgKi9cbiBcdGZvciAoaSA9IG5zdHJpY3Q7IGkgXHUwMDNjIG5iYW5kczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCFxdWFudGFbaV0pXG4tXHRcdFx0cXVhbnRhW2ldID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7XG4mIzQzO1x0XHRcdHF1YW50YVtpXSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcdH1cbiBcbiBcdC8qIEJlZm9yZSBjb21taXQsIG1ha2Ugc3VyZSB3ZSBjYW4gYWxsb2NhdGUgYWxsIG5ldyBxZGlzY3MgKi9cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbmluZGV4IDYxNDRiNTY4NmYxM2YuLmFiOGU3YzZhZTIwMzkgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuQEAgLTk4MCw3ICYjNDM7OTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0ge1xuLVx0Lm1heCA9IElOVF9NQVgsXG4mIzQzO1x0Lm1heCA9IDEgXHUwMDNjXHUwMDNjIDIwLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX3BvbGljeVtUQ0FfRlFfTUFYICYjNDM7IDFdID0ge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXG5pbmRleCBiMjdkOTU0MTg3MDdhLi41OTgyODQ3ZGY4Zjg1IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuQEAgLTM0MSw3ICYjNDM7MzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdFx0ICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pXG4tXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSk7XG4mIzQzO1x0XHRXUklURV9PTkNFKHEtXHUwMDNlcXVhbnR1bSxcbiYjNDM7XHRcdFx0ICAgbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pKSk7XG4gXG4gXHRpZiAodGJbVENBX0ZRX1BJRV9NRU1PUllfTElNSVRdKVxuIFx0XHRXUklURV9PTkNFKHEtXHUwMDNlbWVtb3J5X2xpbWl0LFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGhmLmMgYi9uZXQvc2NoZWQvc2NoX2hoZi5jXG5pbmRleCA5NmFjYWI2YThkYTAzLi5iYjhlODk1MmY1NTUzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oaGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xuQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX0hIRl9RVUFOVFVNXSlcbi1cdFx0bmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTtcbiYjNDM7XHRcdG5ld19xdWFudHVtID0gbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfUVVBTlRVTV0pKTtcbiBcbiBcdGlmICh0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKVxuIFx0XHRuZXdfaGhmX25vbl9oaF93ZWlnaHQgPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9waWUuY1xuaW5kZXggYjQxZjJkZWYyZTJjYy4uM2I3ODYzZmZkMjg0YyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfcGllLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfcGllLmNcbkBAIC0zNSw3ICYjNDM7MzUsNyBAQCBib29sIHBpZV9kcm9wX2Vhcmx5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxuIHtcbiBcdHU2NCBybmQ7XG4gXHR1NjQgbG9jYWxfcHJvYiA9IHZhcnMtXHUwMDNlcHJvYjtcbi1cdHUzMiBtdHUgPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbiYjNDM7XHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXG4gXHRpZiAodmFycy1cdTAwM2VidXJzdF90aW1lIFx1MDAzZSAwKVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTY2MCw2ICYjNDM7NjYwLDExIEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoY3RsLVx1MDAzZXF1YW50dW0gXHUwMDNlIDEgXHUwMDNjXHUwMDNjIDIwKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtxdWFudHVtIHRvbyBsYXJnZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGN0bC1cdTAwM2VwZXJ0dXJiX3BlcmlvZCBcdTAwM2MgMCB8fFxuIFx0ICAgIGN0bC1cdTAwM2VwZXJ0dXJiX3BlcmlvZCBcdTAwM2UgSU5UX01BWCAvIEhaKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2ludmFsaWQgcGVydHVyYiBwZXJpb2RcJiMzNDspO1xuQEAgLTY4OCw3ICYjNDM7NjkzLDcgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXG4gXHQvKiB1cGRhdGUgYW5kIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gKi9cbiBcdGlmIChjdGwtXHUwMDNlcXVhbnR1bSlcbi1cdFx0cXVhbnR1bSA9IGN0bC1cdTAwM2VxdWFudHVtO1xuJiM0MztcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXHUwMDNlcXVhbnR1bSk7XG4gXHRpZiAoY3RsLVx1MDAzZWZsb3dzKVxuIFx0XHRtYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLVx1MDAzZWZsb3dzLCBTRlFfTUFYX0ZMT1dTKTtcbiBcdGlmIChjdGwtXHUwMDNlZGl2aXNvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EVUFMUEkyJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9ISEYmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9TRlEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcnJfY2hhbmdlX2NsYXNzJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfY2hhbmdlJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfaW5pdCYjMzQ7LAogICAgJiMzNDtkdWFscGkyX2VucXVldWVfc2tiJiMzNDssCiAgICAmIzM0O2V0c19xZGlzY19jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX3BpZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7aGhmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwaWVfZHJvcF9lYXJseSYjMzQ7LAogICAgJiMzNDtzZnFfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG11bHRpcGxlIG5ldHdvcmsgc2NoZWR1bGVycyAocWRpc2NzKSB0byBjbGFtcCBgcXVhbnR1bWAgYW5kIGBtdHVgIHZhbHVlcywgcHJldmVudGluZyBpc3N1ZXMgd2l0aCB6ZXJvIG9yIG92ZXJseSBsYXJnZSB2YWx1ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIHFkaXNjcyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xhbXBpbmcgbG9naWMgYmVoYXZlcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhMzQyNWRjMDhmYmRmYTk3OWY1ZmM2ZDMzZTQ0NjBiMWQzOGQxZDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwODowMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kcnIuYwpAQCAtODIsOCAmIzQzOzgyLDkgQEAgc3RhdGljIGludCBkcnJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLAogCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1NwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVybyYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQlxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pOwogCX0gZWxzZQotCQlxdWFudHVtID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7CiYjNDM7CQlxdWFudHVtID0gbWF4KDI1NlUsICh1MzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpOwogCiAJaWYgKGNsICE9IE5VTEwpIHsKIAkJaWYgKHRjYVtUQ0FfUkFURV0pIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKQEAgLTIwOCw5ICYjNDM7MjA4LDExIEBAIHN0YXRpYyB2b2lkIGR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEpCiBzdGF0aWMgdm9pZCBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb24oc3RydWN0IFFkaXNjICpzY2gsCiAJCQkJCSAgIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsIHUzMiB3YykKIHsKJiM0MzsJdTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSAmbHQ7Jmx0OyAyMCk7CiYjNDM7CiAJcS0mZ3Q7Y19wcm90ZWN0aW9uX3djID0gd2M7CiAJcS0mZ3Q7Y19wcm90ZWN0aW9uX3dsID0gTUFYX1dDIC0gd2M7Ci0JcS0mZ3Q7Y19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICoKJiM0MzsJcS0mZ3Q7Y19wcm90ZWN0aW9uX2luaXQgPSAoczMyKW10dSAqCiAJCSgoaW50KXEtJmd0O2NfcHJvdGVjdGlvbl93YyAtIChpbnQpcS0mZ3Q7Y19wcm90ZWN0aW9uX3dsKTsKIAlkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTsKIH0KQEAgLTI4NSw4ICYjNDM7Mjg3LDkgQEAgc3RhdGljIGJvb2wgbXVzdF9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLAogCXU2NCBsb2NhbF9sX3Byb2I7CiAJYm9vbCBvdmVybG9hZDsKIAl1MzIgcHJvYjsKJiM0MzsJdTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSAmbHQ7Jmx0OyAyMCk7CiAKLQlpZiAoc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmbHQ7IDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSkKJiM0MzsJaWYgKHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJmx0OyAyICogbXR1KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlwcm9iID0gUkVBRF9PTkNFKHEtJmd0O3BpMl9wcm9iKTsKQEAgLTcxMiw3ICYjNDM7NzE1LDggQEAgc3RhdGljIHUzMiBnZXRfbWVtb3J5X2xpbWl0KHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgbGltaXQpCiAJLyogQXBwbHkgcnVsZSBvZiB0aHVtYiwgaS5lLiwgZG91YmxpbmcgdGhlIHBhY2tldCBsZW5ndGgsCiAJICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LgogCSAqLwotCXU2NCBtZW1saW0gPSBtdWxfdTMyX3UzMihsaW1pdCwgMiAqIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTsKJiM0MzsJdTY0IG1lbWxpbSA9IG11bF91MzJfdTMyKGxpbWl0LCAyICogY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLAomIzQzOwkJCQkJCSAgICAgMSwgMSAmbHQ7Jmx0OyAyMCkpOwogCiAJaWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSkKIAkJcmV0dXJuIFUzMl9NQVg7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuYwppbmRleCAyNWZjZjQwNzlmZWNlLi5mMjNjOGRjNjhmOGNiIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZXRzLmMKQEAgLTYzNiw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJICovCiAJZm9yIChpID0gbnN0cmljdDsgaSAmbHQ7IG5iYW5kczsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCFxdWFudGFbaV0pCi0JCQlxdWFudGFbaV0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKJiM0MzsJCQlxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7CiAJfQogCiAJLyogQmVmb3JlIGNvbW1pdCwgbWFrZSBzdXJlIHdlIGNhbiBhbGxvY2F0ZSBhbGwgbmV3IHFkaXNjcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jCmluZGV4IDYxNDRiNTY4NmYxM2YuLmFiOGU3YzZhZTIwMzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZnEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxLmMKQEAgLTk4MCw3ICYjNDM7OTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0gewotCS5tYXggPSBJTlRfTUFYLAomIzQzOwkubWF4ID0gMSAmbHQ7Jmx0OyAyMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmcV9wb2xpY3lbVENBX0ZRX01BWCAmIzQzOyAxXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jCmluZGV4IGIyN2Q5NTQxODcwN2EuLjU5ODI4NDdkZjhmODUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuYwpAQCAtMzQxLDcgJiM0MzszNDEsOCBAQCBzdGF0aWMgaW50IGZxX3BpZV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAkJCSAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfQkVUQV0pKTsKIAogCWlmICh0YltUQ0FfRlFfUElFX1FVQU5UVU1dKQotCQlXUklURV9PTkNFKHEtJmd0O3F1YW50dW0sIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pKTsKJiM0MzsJCVdSSVRFX09OQ0UocS0mZ3Q7cXVhbnR1bSwKJiM0MzsJCQkgICBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9RVUFOVFVNXSkpKTsKIAogCWlmICh0YltUQ0FfRlFfUElFX01FTU9SWV9MSU1JVF0pCiAJCVdSSVRFX09OQ0UocS0mZ3Q7bWVtb3J5X2xpbWl0LApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oaGYuYyBiL25ldC9zY2hlZC9zY2hfaGhmLmMKaW5kZXggOTZhY2FiNmE4ZGEwMy4uYmI4ZTg5NTJmNTU1MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oaGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2hoZi5jCkBAIC01NTEsNyAmIzQzOzU1MSw3IEBAIHN0YXRpYyBpbnQgaGhmX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHRiW1RDQV9ISEZfUVVBTlRVTV0pCi0JCW5ld19xdWFudHVtID0gbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSk7CiYjNDM7CQluZXdfcXVhbnR1bSA9IG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKSk7CiAKIAlpZiAodGJbVENBX0hIRl9OT05fSEhfV0VJR0hUXSkKIAkJbmV3X2hoZl9ub25faGhfd2VpZ2h0ID0gbmxhX2dldF91MzIodGJbVENBX0hIRl9OT05fSEhfV0VJR0hUXSk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9waWUuYwppbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3BpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfcGllLmMKQEAgLTM1LDcgJiM0MzszNSw3IEBAIGJvb2wgcGllX2Ryb3BfZWFybHkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBwaWVfcGFyYW1zICpwYXJhbXMsCiB7CiAJdTY0IHJuZDsKIAl1NjQgbG9jYWxfcHJvYiA9IHZhcnMtJmd0O3Byb2I7Ci0JdTMyIG10dSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOwomIzQzOwl1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxICZsdDsmbHQ7IDIwKTsKIAogCS8qIElmIHRoZXJlIGlzIHN0aWxsIGJ1cnN0IGFsbG93YW5jZSBsZWZ0IHNraXAgcmFuZG9tIGVhcmx5IGRyb3AgKi8KIAlpZiAodmFycy0mZ3Q7YnVyc3RfdGltZSAmZ3Q7IDApCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTY2MCw2ICYjNDM7NjYwLDExIEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKGN0bC0mZ3Q7cXVhbnR1bSAmZ3Q7IDEgJmx0OyZsdDsgMjApIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7cXVhbnR1bSB0b28gbGFyZ2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChjdGwtJmd0O3BlcnR1cmJfcGVyaW9kICZsdDsgMCB8fAogCSAgICBjdGwtJmd0O3BlcnR1cmJfcGVyaW9kICZndDsgSU5UX01BWCAvIEhaKSB7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7aW52YWxpZCBwZXJ0dXJiIHBlcmlvZCYjMzQ7KTsKQEAgLTY4OCw3ICYjNDM7NjkzLDcgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAKIAkvKiB1cGRhdGUgYW5kIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoY3RsLSZndDtxdWFudHVtKQotCQlxdWFudHVtID0gY3RsLSZndDtxdWFudHVtOwomIzQzOwkJcXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtJmd0O3F1YW50dW0pOwogCWlmIChjdGwtJmd0O2Zsb3dzKQogCQltYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLSZndDtmbG93cywgU0ZRX01BWF9GTE9XUyk7CiAJaWYgKGN0bC0mZ3Q7ZGl2aXNvcikgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogODQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgU2NoZWR1bGVyIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYSBidW5jaCBvZiBmaWxlcyBpbiB0aGUgYG5ldC9zY2hlZC9gIGRpcmVjdG9yeS4gU2VlbXMgbGlrZSBpdCYjMzk7cyBtYWlubHkgYWJvdXQgY2xhbXBpbmcgdGhlIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzIGluIHRoZXNlIGRpZmZlcmVudCBxdWV1aW5nIGRpc2NpcGxpbmVzIChxZGlzY3MpIHRvIHByZXZlbnQgcHJvYmxlbXMuIEkgc2VlIGl0IHRvdWNoZXMgYHNjaF9kcnIuY2AsIGBzY2hfZHVhbHBpMi5jYCwgYHNjaF9ldHMuY2AsIGBzY2hfZnEuY2AsIGBzY2hfZnFfcGllLmNgLCBgc2NoX2hoZi5jYCwgYHNjaF9waWUuY2AsIGFuZCBgc2NoX3NmcS5jYC4gIFRoaW5ncyBsaWtlIGVuc3VyaW5nIGBxdWFudHVtYCBpcyBhdCBsZWFzdCAyNTYsIGFuZCBtYWtpbmcgc3VyZSBgbXR1YCBzdGF5cyB3aXRoaW4gcmVhc29uYWJsZSBib3VuZHMuIFRoaXMgaXMgYWxsIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhlc2UgY2hhbmdlcyB2aWEgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgLiBCaW5nbywgdGhpcyBpcyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLgoKTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gYWRkIHRvIHRoZSBmdXp6aW5nIHRhcmdldCYjMzk7cyBgRm9jdXNTeW1ib2xzYC4gU28sIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZmlsZSBieSBmaWxlOgoKKiAgIGBzY2hfZHJyLmNgOiBUaGUgY2hhbmdlIGlzIGhhcHBlbmluZyBpbiBgZHJyX2NoYW5nZV9jbGFzc2AuCiogICBgc2NoX2R1YWxwaTIuY2A6ICBJIHNlZSBjaGFuZ2VzIGluIGBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb25gLCBgbXVzdF9kcm9wYCwgYW5kIGBnZXRfbWVtb3J5X2xpbWl0YC4gIGBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb25gIGlzIGxpa2VseSBoaXQgZnJvbSBgZHVhbHBpMl9jaGFuZ2VgIG9yIGBkdWFscGkyX2luaXRgLCBgbXVzdF9kcm9wYCBmcm9tIGBkdWFscGkyX2VucXVldWVgLCBhbmQgYGdldF9tZW1vcnlfbGltaXRgIGZyb20gYGR1YWxwaTJfaW5pdGAgb3IgYGR1YWxwaTJfY2hhbmdlYC4gSSBzaG91bGQgY2hlY2sgdGhlIGVudHJ5cG9pbnRzLgoqICAgYHNjaF9ldHMuY2A6IGBldHNfcWRpc2NfY2hhbmdlYCBpcyB3aGF0IHRvIGZvY3VzIG9uLgoqICAgYHNjaF9mcS5jYDogSSBzZWUgYGZxX3Jlc2l6ZWAgKHdoaWNoIGlzIGNhbGxlZCBieSBgZnFfY2hhbmdlYCksIGFuZCB0aGUgYGZxX3BvbGljeWAgZGF0YSBzdHJ1Y3R1cmUuCiogICBgc2NoX2ZxX3BpZS5jYDogVGhlIGludGVyZXN0aW5nIGZ1bmN0aW9uIGhlcmUgaXMgYGZxX3BpZV9jaGFuZ2VgLgoqICAgYHNjaF9oaGYuY2A6IFRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgaGhmX2NoYW5nZWAuCiogICBgc2NoX3BpZS5jYDogSSBuZWVkIHRvIGxvb2sgYXQgZWl0aGVyIGBwaWVfZHJvcF9lYXJseWAgb3IgYHBpZV9lbnF1ZXVlYC4KKiAgIGBzY2hfc2ZxLmNgOiBUaGUgcGxhY2UgdG8gZm9jdXMgd2lsbCBiZSBgc2ZxX2NoYW5nZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIHRoZSBvbmVzIHdlJiMzOTtsbCB0YXJnZXQuIEkgcmVtZW1iZXIgYHRjX21vZGlmeV9xZGlzY2AgaXMgZ2VuZXJpYywgSSB3YW50IHRoZSBzcGVjaWZpYyBvbmVzIGZvciBlYWNoIHFkaXNjLgoKKiAgIGBzY2hfZHJyLmNgOiBgZHJyX2NoYW5nZV9jbGFzc2AgaXMgb3VyIGBRZGlzY19jbGFzc19vcHMuY2hhbmdlYCBlbnRyeS4KKiAgIGBzY2hfZHVhbHBpMi5jYDogYGR1YWxwaTJfY2hhbmdlYCwgYGR1YWxwaTJfaW5pdGAsIGFuZCBwb3RlbnRpYWxseSBgZHVhbHBpMl9lbnF1ZXVlYC4KKiAgIGBzY2hfZXRzLmNgOiBgZXRzX3FkaXNjX2NoYW5nZWAuCiogICBgc2NoX2ZxLmNgOiBgZnFfY2hhbmdlYC4KKiAgIGBzY2hfZnFfcGllLmNgOiBgZnFfcGllX2NoYW5nZWAuCiogICBgc2NoX2hoZi5jYDogYGhoZl9jaGFuZ2VgLgoqICAgYHNjaF9waWUuY2A6IE9rYXksIGBwaWVfZHJvcF9lYXJseWAgKmlzbnQqIGV4cG9ydGVkLCBidXQgaXMgaW4gYHNjaF9waWUuY2AgYnV0IGNhbGxlZCBieSBgc2NoX3BpZWAgYW5kIGBzY2hfZnFfcGllYC4gSSYjMzk7bGwgY2hlY2sgYHBpZV9kcm9wX2Vhcmx5YCBvciBgcGllX2VucXVldWVgLgoqICAgYHNjaF9zZnEuY2A6IGBzZnFfY2hhbmdlYC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgbmV4dCB0byB2ZXJpZnkgYWxsIG9mIHRoaXMgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IGRycl9jaGFuZ2VfY2xhc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2Ryci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZHJyLmM9NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRycl9wb2xpY3lbVENBX0RSUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy01Ny1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6NTg6c3RhdGljIGludCBkcnJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLFxubmV0L3NjaGVkL3NjaF9kcnIuYy01OS1cdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gYHNjaF9kdWFscGkyLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgZHVhbC1QSTIgc3lzdGVtIGlzIGluaXRpYWxpemluZyBhbmQgcmVzcG9uZGluZyB0byBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYHNjaF9kdWFscGkyLmNgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBjaGFuZ2UgaGFuZGxpbmcg4oCTIHNvIHRoYXQgbWVhbnMgSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBgZHVhbHBpMl9pbml0YCBhbmQgYGR1YWxwaTJfY2hhbmdlYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgYXJjaGl0ZWN0ZWQsIHdoYXQgdGhleSBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgdGhpbmdzIGNvdWxkIGdldCB0cmlja3kuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgZHVhbHBpMl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz03Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGR1YWxwaTJfcG9saWN5W1RDQV9EVUFMUEkyX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy03OTQtXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzo3OTU6c3RhdGljIGludCBkdWFscGkyX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzk2LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZHVhbHBpMl9pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGgsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZHVhbHBpMl9pbml0YC4gVGhpcyBuYW1lIHN1Z2dlc3RzIGluaXRpYWxpemF0aW9uLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc2V0dXAgbG9naWMgcmVsYXRlZCB0byBhIGBkdWFscGkyYCBtb2R1bGUgb3Igc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipNZW1vcnkgQWxsb2NhdGlvbjoqKiBJcyBpdCBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGJ1ZmZlcnMsIGxvb2t1cCB0YWJsZXMsIG9yIGNvbnRyb2wgcmVnaXN0ZXJzPyBJZiBzbywgd2hhdCBhcmUgdGhlIHNpemVzIGFuZCBwdXJwb3NlIG9mIGVhY2ggYWxsb2NhdGlvbj8KKiAgICoqSGFyZHdhcmUgQ29uZmlndXJhdGlvbjoqKiBJcyBpdCB3cml0aW5nIHRvIGFueSBoYXJkd2FyZSByZWdpc3RlcnM/IElmIHNvLCB3aGF0IGFyZSB0aG9zZSByZWdpc3RlcnMgYW5kIHdoYXQgdmFsdWVzIGFyZSBiZWluZyB3cml0dGVuPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIGNsb2NrIHNwZWVkcywgaW50ZXJydXB0IGVuYWJsZXMsIG9yIHBlcmlwaGVyYWwgbW9kZXMuCiogICAqKlJlc291cmNlIEluaXRpYWxpemF0aW9uOioqIEFyZSB0aGVyZSBhbnkgbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYmVpbmcgaW5pdGlhbGl6ZWQ/IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBwdXJwb3NlLCB3aG8gdXNlcyB0aGVtLCBhbmQgd2hhdCBjcml0aWNhbCBzZWN0aW9ucyB0aGV5IHByb3RlY3QuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgY2hlY2tzIGZvciBwb3RlbnRpYWwgZmFpbHVyZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzPyBJZiBzbywgd2hhdCBhcmUgdGhlIGZhaWx1cmUgY29uZGl0aW9ucyBhbmQgdGhlIGVycm9yIHJlY292ZXJ5L3JlcG9ydGluZyBtZWNoYW5pc21zPwoqICAgKipEZXBlbmRlbmN5IENoZWNraW5nOioqIERvZXMgdGhpcyByb3V0aW5lIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMgYmVpbmcgaW5pdGlhbGl6ZWQgZmlyc3Q/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY2FsbCBvcmRlciBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSB0aGV5JiMzOTtyZSBhZGhlcmVkIHRvLgoqICAgKipQYXJhbWV0ZXIgQ2hlY2tpbmc6KiogRG9lcyBgZHVhbHBpMl9pbml0YCBwZXJmb3JtIGFueSB2YWxpZGF0aW9uIG9mIGlucHV0IHBhcmFtZXRlcnM/IElmIHNvLCB3aGF0IGFyZSB0aGUgYWxsb3dlZCByYW5nZXMgYW5kIHdoYXQgaGFwcGVucyBpZiBpbnZhbGlkIHZhbHVlcyBhcmUgcGFzc2VkPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBhc3BlY3RzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGFjdCByb2xlIGlzIGNyaXRpY2FsIGJlZm9yZSB3b3JraW5nIG9uIGFueSBzeXN0ZW0tbGV2ZWwgY29kZSwgSSBzaG91bGQgaGF2ZSBhbiBleGNlbGxlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGluaXRpYWwgZnVuY3Rpb24sIGVzcGVjaWFsbHkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBmdXR1cmUgb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBkdWFscGkyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz05NDk9c3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9kZWZhdWx0KHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTk3My1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jOjk3NDpzdGF0aWMgaW50IGR1YWxwaTJfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtOTc1LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjAzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBldHNfcWRpc2NfY2hhbmdlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNpbXBsZTogSSYjMzk7dmUgY29tZSBhY3Jvc3MgYGV0c19xZGlzY19jaGFuZ2VgIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0cmFmZmljIHNoYXBpbmcgYW5kIFF1YWxpdHkgb2YgU2VydmljZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGl0cyBiZWhhdmlvcj8gSXMgaXQgcmVsYXRlZCB0byB0aGUgcXVldWluZyBkaXNjaXBsaW5lIGl0c2VsZj8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIG9yIGlzIGl0IGEgbW9yZSBnZW5lcmljIGNoYW5nZT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2h5IGl0JiMzOTtzIG9uIG15IHJhZGFyIGFuZCB3aGF0IGFzcGVjdCBvZiBpdCBJIHNob3VsZCBiZSBtb3N0IGZvY3VzZWQgb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbnZvbHZlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgZXRzX3FkaXNjX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZXRzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9ldHMuYz01NDY9c3RhdGljIGludCBldHNfcWRpc2NfcXVhbnRhX3BhcnNlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpxdWFudGFfYXR0cixcbi0tXG5uZXQvc2NoZWQvc2NoX2V0cy5jLTU4Mi1cbm5ldC9zY2hlZC9zY2hfZXRzLmM6NTgzOnN0YXRpYyBpbnQgZXRzX3FkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9ldHMuYy01ODQtXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgZnFfY2hhbmdlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBgZnFfY2hhbmdlYC4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGF0IGNvdWxkIG1lYW4gZnJlcXVlbmN5IGNoYW5nZSwgZmx1eCBjaGFuZ2UsIGZlYXR1cmUgcXVhbGl0eSBjaGFuZ2UsIG9yIGV2ZW4gYSBmdW5jdGlvbmFsIHF1ZXJ5IGNoYW5nZSAtIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoaWNoIGludGVycHJldGF0aW9uIGlzIG1vc3QgbGlrZWx5IGdpdmVuIHRoZSBwcm9ibGVtIEkmIzM5O20gdGFja2xpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJcyBpdCBzdGFibGU/IElzIGl0IGV4aGliaXRpbmcgdW51c3VhbCBiZWhhdmlvcj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgdmFsdWUgb3IgbGFjayB0aGVyZW9mPyBUaGUgc3BlY2lmaWNzIG9mIHdoYXQmIzM5O3MgKmltcGxpZWQqIGJ5IGBmcV9jaGFuZ2VgIGFyZSBjcnVjaWFsIHRvIHRoZSBuZXh0IHN0ZXBzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoZXJlIHNvbWV0aGluZyBJIHNob3VsZCBiZSBhbnRpY2lwYXRpbmc/JiMzNDsuIEl0JiMzOTtzIGEga2V5IHZhcmlhYmxlLCBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGF0YSBvciBjb2RlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgbG9vayBmb3IgdGhlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IGZxX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxLmM9MTA1Mj1zdGF0aWMgaW50IGZxX2xvYWRfcHJpb21hcChzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3My1cbm5ldC9zY2hlZC9zY2hfZnEuYzoxMDc0OnN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3NS1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBmcV9waWVfY2hhbmdlYCB2YXJpYWJsZSBvciBmdW5jdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHdvcmssIGBmcV9waWVfY2hhbmdlYCBpcyBsaWtlbHkgYSBrZXkgaW5kaWNhdG9yLCBhIGNydWNpYWwgbWV0cmljLCBvciB0aGUgbmFtZSBvZiBhIGNhbGN1bGF0aW9uIG9yIHZpc3VhbGl6YXRpb24uIEdpdmVuIHRoZSB0eXBpY2FsIHNjb3BlIG9mIG15IHdvcmssIGl0IGxpa2VseSByZWZsZWN0cyBhIGNoYW5nZSBpbiBmcmVxdWVuY3ksIGEgc2hpZnQgaW4gcHJvcG9ydGlvbmFsIHJlcHJlc2VudGF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBjaGFuZ2UgaW4gdGhlIGZyZXF1ZW5jeSBkb21haW4gcGllIGNoYXJ0LiBNeSBhdHRlbnRpb24gaGVyZSBzaG93cyBJIGFtIGxpa2VseSBpbiB0aGUgaW52ZXN0aWdhdGl2ZSBwaGFzZS4gSSYjMzk7bSBjaGVja2luZyBpdHMgdmFsdWVzLCBpdHMgaW1wYWN0LCBvciB0aGUgZm9ybXVsYSB3aGljaCBkZWZpbmVzIHRoZSBwaWUgY2hhcnQsIGxpa2VseSBpbiByZXNwb25zZSB0byBhbiBhbm9tYWx5IG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkLiBUaGVyZSBpcyBhIGxvdCByaWRpbmcgb24gdGhpcyBjaGVjay4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgZnVydGhlciBzdGVwcyBpbnZvbHZlZCBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiB0aGlzIGFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgZnFfcGllX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnFfcGllLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcV9waWUuYz0yMzg9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9waWVfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jLTI4Ni1cbm5ldC9zY2hlZC9zY2hfZnFfcGllLmM6Mjg3OnN0YXRpYyBpbnQgZnFfcGllX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9mcV9waWUuYy0yODgtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBoaGZfY2hhbmdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdG8gY2hlY2sgYGhoZl9jaGFuZ2VgLiBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGl0JiMzOTtzIGRvaW5nIGFuZCBob3cgaXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gYW5kIGVuc3VyZSBpdCBpcyBmdW5jdGlvbmluZyBhcyBpbnRlbmRlZC4gVGhpcyBpbmNsdWRlcyBjb25zaWRlcmluZyBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgZGVmaW5pdGlvbiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW5wdXQgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSBvbiBvdGhlciBmdW5jdGlvbnMgb3IgdmFyaWFibGVzLiBUaGVuIEkgd2lsbCBtZW50YWxseSBydW4gdGhyb3VnaCBzb21lIHRlc3QgY2FzZXMgdG8gY2hlY2sgaXQgaXMgYmVoYXZpbmcgaG93IEkgZXhwZWN0LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdvcmtmbG93LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCBpcyB0aGUgc291cmNlIG9mIGEgcG90ZW50aWFsIGlzc3VlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBoaGZfY2hhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oaGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hoZi5jPTUyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGhmX3BvbGljeVtUQ0FfSEhGX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2hoZi5jLTUzNi1cbm5ldC9zY2hlZC9zY2hfaGhmLmM6NTM3OnN0YXRpYyBpbnQgaGhmX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9oaGYuYy01MzgtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIGFueXRoaW5nLCBpdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gaGF2ZSBhIHF1aWNrIGdsYW5jZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBvdXQgYHNmcV9jaGFuZ2VgLiBUaGF0JiMzOTtzIGxpa2VseSB0aGUga2V5LiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdGhlbiBidWlsZCB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IHNmcV9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3NmcS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfc2ZxLmM9NjA0PXN0YXRpYyB2b2lkIHNmcV9wZXJ0dXJiYXRpb24oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjktXG5uZXQvc2NoZWQvc2NoX3NmcS5jOjYzMDpzdGF0aWMgaW50IHNmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfc2ZxLmMtNjMxLVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBwaWVfZHJvcF9lYXJseWAgaW4gYHNjaF9waWUuY2AqKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGJlaGF2aW9yIG9mIGBwaWVfZHJvcF9lYXJseWAgaW4gYHNjaF9waWUuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjaGVkdWxlciBhbmQgUElFIChQcmlvcml0eSBJbmhlcml0YW5jZSBhbmQgRXhjbHVzaW9uKSwgdGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBhdGggSSBuZWVkIHRvIHJldmlldy4gSSBpbW1lZGlhdGVseSBoYXZlIHF1ZXN0aW9ucy4gSXMgdGhpcyByZWxhdGVkIHRvIGVhcmx5IGRlYWRsaW5lIG1pc3MgZGV0ZWN0aW9uPyBBbSBJIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBlZGdlIGNhc2Ugd2hlcmUgdGFza3MgYXJlIHByZW1hdHVyZWx5IGRyb3BwZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgc2VjdGlvbiBvZiBjb2RlIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCB3aGljaCBjb3VsZCBsZWFkIHRvIG1pc3NlZCBkZWFkbGluZXMgb3IgdW5leHBlY3RlZCBzeXN0ZW0gYmVoYXZpb3I/IEkmIzM5O20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgcHJpb3JpdHkgaW5oZXJpdGFuY2Ugd2l0aCBleGNsdXNpb24uIFRoaXMgY291bGQgbWVhbiBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGhvdyBQSUUgaGFuZGxlcyBwcmVlbXB0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBpbnRvIHRoZSBjb2RlIGFuZCBxdWlja2x5IGRldGVybWluZSB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/Ym9vbCBwaWVfZHJvcF9lYXJseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfcGllLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9waWUuYz0yNT1zdHJ1Y3QgcGllX3NjaGVkX2RhdGEge1xuLS1cbm5ldC9zY2hlZC9zY2hfcGllLmMtMzItXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjMzOmJvb2wgcGllX2Ryb3BfZWFybHkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBwaWVfcGFyYW1zICpwYXJhbXMsXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTM0LVx0XHQgICAgc3RydWN0IHBpZV92YXJzICp2YXJzLCB1MzIgYmFja2xvZywgdTMyIHBhY2tldF9zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHBpZV9kcm9wX2Vhcmx5YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgcGllX2Ryb3BfZWFybHlgIGlzIGEga2V5IGZ1bmN0aW9uLCBleHBvcnRlZCBhbmQgdXNlZCBieSBgc2NoX3BpZWAgYW5kIGBzY2hfZnFfcGllYC4gTXkgZmlyc3QgaW5zdGluY3Qgd2FzIHRvIGRpdmUgaW50byBgcGllX2VucXVldWVgIHdpdGhpbiBgc2NoX3BpZS5jYCwgc2VlIGlmIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4gQnV0IHdhaXQsIGZvY3VzaW5nIG9uIGBwaWVfZHJvcF9lYXJseWAgbWFrZXMgbW9yZSBzZW5zZS4gSXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIGFuZCB0aGF0IGFsb25lIG1ha2VzIGl0IGEgY2FuZGlkYXRlIGZvciBzY3J1dGlueS4gSG1tLi4uIExldCYjMzk7cyBjb25maXJtIHRoYXQgaXQgaXNuJiMzOTt0IHN0YXRpYy4gR29vZCwgaXQmIzM5O3Mgbm90LiBCdXQgaG9sZCBvbiwgdGhlIGNhbGxpbmcgcG9pbnRzIG9mIGBwaWVfZHJvcF9lYXJseWAgYXJlIGBwaWVfZW5xdWV1ZWAgYW5kIGBmcV9waWVfcWRpc2NfZW5xdWV1ZWAgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBMZXQgbWUgY2hlY2sgdGhlIGBwaWVfZW5xdWV1ZWAgZnVuY3Rpb24gaW4gYHNjaF9waWUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9pbnQgcGllX2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3BpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFNjaGVkdWxlciBRdWV1ZSBJc3N1ZSoqCgpIbW0sIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gd2l0aCB0aGUgc2NoZWR1bGVyJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIFBJRSAoUHJpb3JpdHkgSW5oZXJpdGFuY2UgRW5naW5lKSBxdWV1ZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGUgYHNjaF9waWUuY2AgZmlsZSAqbWlnaHQqIGJlIG1pc3NpbmcgYSBrZXkgZnVuY3Rpb24g4oCTIHNwZWNpZmljYWxseSwgdGhlIGBwaWVfZW5xdWV1ZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBwdXNoaW5nIHRhc2tzIG9udG8gdGhlIFBJRSBxdWV1ZS4gQmVmb3JlIEkgZ28gZG93biBhIHJhYmJpdCBob2xlLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgdmVyaWZ5IGlmIGBzY2hfcGllLmNgIGV2ZW4gKmNvbnRhaW5zKiBhbiBgZW5xdWV1ZWAgZnVuY3Rpb24gYXQgYWxsLiBCZXN0IHRvIGNvbmZpcm0gdGhhdCBiYXNlIGFzc3VtcHRpb24gYmVmb3JlIGFzc3VtaW5nIGEgcHJvYmxlbS4gQSBzaW1wbGUgZ3JlcCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBzZWUgaWYgdGhlIGZpbGUgaGFuZGxlcyB0aGUgZW5xdWV1ZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3BpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfcGllLmM9ODM9RVhQT1JUX1NZTUJPTF9HUEwocGllX2Ryb3BfZWFybHkpO1xubmV0L3NjaGVkL3NjaF9waWUuYy04NC1cbm5ldC9zY2hlZC9zY2hfcGllLmM6ODU6c3RhdGljIGludCBwaWVfcWRpc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfcGllLmMtODYtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy04OS1cdHN0cnVjdCBwaWVfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfcGllLmM6OTA6XHRib29sIGVucXVldWUgPSBmYWxzZTtcbm5ldC9zY2hlZC9zY2hfcGllLmMtOTEtXG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy0xMDAtXHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4pKSB7XG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEwMTpcdFx0ZW5xdWV1ZSA9IHRydWU7XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwMi1cdH0gZWxzZSBpZiAocS1cdTAwM2VwYXJhbXMuZWNuIFx1MDAyNlx1MDAyNiAocS1cdTAwM2V2YXJzLnByb2IgXHUwMDNjPSBNQVhfUFJPQiAvIDEwKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwNy1cdFx0V1JJVEVfT05DRShxLVx1MDAzZXN0YXRzLmVjbl9tYXJrLCBxLVx1MDAzZXN0YXRzLmVjbl9tYXJrICYjNDM7IDEpO1xubmV0L3NjaGVkL3NjaF9waWUuYzoxMDg6XHRcdGVucXVldWUgPSB0cnVlO1xubmV0L3NjaGVkL3NjaF9waWUuYy0xMDktXHR9XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTExMC1cbm5ldC9zY2hlZC9zY2hfcGllLmM6MTExOlx0Lyogd2UgY2FuIGVucXVldWUgdGhlIHBhY2tldCAqL1xubmV0L3NjaGVkL3NjaF9waWUuYzoxMTI6XHRpZiAoZW5xdWV1ZSkge1xubmV0L3NjaGVkL3NjaF9waWUuYzoxMTM6XHRcdC8qIFNldCBlbnF1ZXVlIHRpbWUgb25seSB3aGVuIGRxX3JhdGVfZXN0aW1hdG9yIGlzIGRpc2FibGVkLiAqL1xubmV0L3NjaGVkL3NjaF9waWUuYy0xMTQtXHRcdGlmICghcS1cdTAwM2VwYXJhbXMuZHFfcmF0ZV9lc3RpbWF0b3IpXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjExNTpcdFx0XHRwaWVfc2V0X2VucXVldWVfdGltZShza2IpO1xubmV0L3NjaGVkL3NjaF9waWUuYy0xMTYtXG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy0xMjAtXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEyMTpcdFx0cmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEyMi1cdH1cbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jPTIxMj12b2lkIHBpZV9wcm9jZXNzX2RlcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTIyMi1cdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZXFkZWxheSxcbm5ldC9zY2hlZC9zY2hfcGllLmM6MjIzOlx0XHRcdCAgIGJhY2tsb2cgPyBub3cgLSBwaWVfZ2V0X2VucXVldWVfdGltZShza2IpIDogMCk7XG5uZXQvc2NoZWQvc2NoX3BpZS5jLTIyNC1cbi0tXG5uZXQvc2NoZWQvc2NoX3BpZS5jPTU1MT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBwaWVfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy01NTMtXHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgcGllX3NjaGVkX2RhdGEpLFxubmV0L3NjaGVkL3NjaF9waWUuYzo1NTQ6XHQuZW5xdWV1ZVx0PSBwaWVfcWRpc2NfZW5xdWV1ZSxcbm5ldC9zY2hlZC9zY2hfcGllLmMtNTU1LVx0LmRlcXVldWVcdD0gcGllX3FkaXNjX2RlcXVldWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIxCgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSUUgUWRpc2MgQmVoYXZpb3IqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHBpZV9xZGlzY19lbnF1ZXVlYCBmdW5jdGlvbi4gQnV0LCBob2xkIG9uLCBgcGllX2Ryb3BfZWFybHlgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBtb2RpZmllZCwgc28gdGhhdCYjMzk7cyB0aGUgcmVhbCBrZXkgaGVyZS4gSSBjYW4ganVzdCBsaXN0IHRoYXQgZnVuY3Rpb24gdG8gdHJhY2sgaXQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgcXVldWluZyBkaXNjaXBsaW5lcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQ6CgoqICAgYHNjaF9kcnIuY2AgcmVxdWlyZXMgYE5FVF9TQ0hfRFJSYC4gTWFrZXMgc2Vuc2UuCiogICBgc2NoX2R1YWxwaTIuY2AgbmVlZHMgYE5FVF9TQ0hfRFVBTFBJMmAuIFJpZ2h0LgoqICAgYHNjaF9ldHMuY2AgdXNlcyBgTkVUX1NDSF9FVFNgLiBTdGFuZGFyZC4KKiAgIGBzY2hfZnEuY2AgZGVwZW5kcyBvbiBgTkVUX1NDSF9GUWAuIE9mIGNvdXJzZS4KKiAgIGBzY2hfZnFfcGllLmNgIHVzZXMgYE5FVF9TQ0hfRlFfUElFYC4gVGhpcyBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLgoqICAgYHNjaF9oaGYuY2AgbmVlZHMgYE5FVF9TQ0hfSEhGYC4KKiAgIGBzY2hfcGllLmNgIG9idmlvdXNseSBuZWVkcyBgTkVUX1NDSF9QSUVgLgoqICAgQW5kIGBzY2hfc2ZxLmNgIHdhbnRzIGBORVRfU0NIX1NGUWAuCgpUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGNvbmZpZyBzeW1ib2xzIG1hdGNoIHVwIHdpdGggd2hhdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSB0aGVzZSB0aGluZ3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgbmV0d29yayBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfKERSUnxEVUFMUEkyfEVUU3xGUXxGUV9QSUV8SEhGfFBJRXxTRlEpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTAwPWNvbmZpZyBORVRfU0NIX1NGQlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTExMC1cbm5ldC9zY2hlZC9LY29uZmlnOjExMTpjb25maWcgTkVUX1NDSF9TRlFcbm5ldC9zY2hlZC9LY29uZmlnLTExMi1cdHRyaXN0YXRlIFwmIzM0O1N0b2NoYXN0aWMgRmFpcm5lc3MgUXVldWVpbmcgKFNGUSlcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0xOTU9Y29uZmlnIE5FVF9TQ0hfTkVURU1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDYtXG5uZXQvc2NoZWQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9TQ0hfRFJSXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXHR0cmlzdGF0ZSBcJiMzNDtEZWZpY2l0IFJvdW5kIFJvYmluIHNjaGVkdWxlciAoRFJSKVwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0zMTItXG5uZXQvc2NoZWQvS2NvbmZpZzozMTM6Y29uZmlnIE5FVF9TQ0hfSEhGXG5uZXQvc2NoZWQvS2NvbmZpZy0zMTQtXHR0cmlzdGF0ZSBcJiMzNDtIZWF2eS1IaXR0ZXIgRmlsdGVyIChISEYpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctMzIxLVxubmV0L3NjaGVkL0tjb25maWc6MzIyOmNvbmZpZyBORVRfU0NIX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzIzLVx0dHJpc3RhdGUgXCYjMzQ7UHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWQgKFBJRSkgc2NoZWR1bGVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXG4tLVxubmV0L3NjaGVkL0tjb25maWctNDE3LVxubmV0L3NjaGVkL0tjb25maWc6NDE4OmNvbmZpZyBORVRfU0NIX0RVQUxQSTJcbm5ldC9zY2hlZC9LY29uZmlnLTQxOS1cdHRyaXN0YXRlIFwmIzM0O0R1YWwgUXVldWUgUEkgU3F1YXJlIChEVUFMUEkyKSBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIG5ldHdvcmsgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBORVRfU0NIX0RSUmAsIGBORVRfU0NIX0RVQUxQSTJgLCBgTkVUX1NDSF9FVFNgLCBgTkVUX1NDSF9GUWAsIGBORVRfU0NIX0ZRX1BJRWAsIGBORVRfU0NIX0hIRmAsIGBORVRfU0NIX1BJRWAsIGFuZCBgTkVUX1NDSF9TRlFgLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgdGhpbmdzIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGFuZCBkZXBsb3ltZW50LCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIGBORVRfU0NIX0ZRX1BJRWAuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGBORVRfU0NIX0ZRX1BJRWAgZGVwZW5kcyBvbiBgTkVUX1NDSF9QSUVgLiBHb29kIHRvIGtub3cuIE5vdywgaG93IGFib3V0IGBORVRfU0NIX0RVQUxQSTJgPyBEb2VzIHRoYXQgb25lIGhhdmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRha2UgYSBsb29rLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0RVQUxQSTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXG4tLVxubmV0L3NjaGVkL0tjb25maWctNDE3LVxubmV0L3NjaGVkL0tjb25maWc6NDE4OmNvbmZpZyBORVRfU0NIX0RVQUxQSTJcbm5ldC9zY2hlZC9LY29uZmlnLTQxOS1cdHRyaXN0YXRlIFwmIzM0O0R1YWwgUXVldWUgUEkgU3F1YXJlIChEVUFMUEkyKSBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBORVRfU0NIX0RVQUxQSTJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgTkVUX1NDSF9EVUFMUEkyYCBibG9jay4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgY29udGV4dCBoZXJlLiBKdXN0IGtub3dpbmcgdGhlIG5hbWUgYWxvbmUgaXNuJiMzOTt0IGVub3VnaDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS4gV2hhdCYjMzk7cyB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiwgdGhlIG90aGVyIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkIGEgcmVhbCB1bmRlcnN0YW5kaW5nLiBXaGF0IG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgdmFyaWFibGVzIGFyZSBpbmZsdWVuY2luZyBpdHMgZXhlY3V0aW9uPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSB0byBkZXRlcm1pbmUgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcsIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBTaG93IG1lIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTg6XHRjb25maWcgTkVUX1NDSF9EVUFMUEkyXG4gNDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtEdWFsIFF1ZXVlIFBJIFNxdWFyZSAoRFVBTFBJMikgc2NoZWR1bGVyXCYjMzQ7XG4gNDIwOlx0XHRoZWxwXG4gNDIxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBEdWFsIFF1ZXVlIFByb3BvcnRpb25hbCBJbnRlZ3JhbFxuIDQyMjpcdFx0ICBDb250cm9sbGVyIEltcHJvdmVkIHdpdGggYSBTcXVhcmUgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gNDIzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM5MzMyXG4gNDI0Olx0XG4gNDI1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA0MjY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2R1YWxwaTIuXG4gNDI3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBORVRfU0NIX0ZRX1BJRWAsJiMzNDsgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIFNjaGVkdWxlcjogRlEtUElFKioKCkFscmlnaHQsIHRoYXQgcGhyYXNlICYjMzQ7TkVUX1NDSF9GUV9QSUUmIzM0OyDigJMgdGhhdCYjMzk7cyBhIHRyaWdnZXIuIEl0IGltbWVkaWF0ZWx5IHRocm93cyBtZSBpbnRvIHRoZSB3b3JsZCBvZiBuZXR3b3JrIHNjaGVkdWxpbmcsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBGUS1QSUUgcXVldWVpbmcgZGlzY2lwbGluZS4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IGNoZWNraW5nIHdoYXQgSSBhbHJlYWR5IGtub3cgYW5kIHdoZXJlIG15IGtub3dsZWRnZSBnYXBzIGFyZSwgcHJlcGFyaW5nIHRvIGFwcHJvYWNoIHRoaXMgaWRlYS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIHNjaGVkdWxlciB3b3Jrcy4gSSBhbSBwcm9iYWJseSBwcmVwYXJpbmcgdG8gZmlndXJlIG91dCB0aGUgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyBvZiBzdWNoIGEgcXVldWluZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNDpcdGNvbmZpZyBORVRfU0NIX0ZRX1BJRVxuIDMzNTpcdFx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuIDMzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7RmxvdyBRdWV1ZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgY29udHJvbGxlciBFbmhhbmNlZCAoRlEtUElFKVwmIzM0O1xuIDMzNzpcdFx0aGVscFxuIDMzODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRmxvdyBRdWV1ZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWxcbiAzMzk6XHRcdCAgY29udHJvbGxlciBFbmhhbmNlZCAoRlEtUElFKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMzQwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MDMzXG4gMzQxOlx0XG4gMzQyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAzNDM6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2ZxX3BpZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O0xldCYjMzk7cyBzZWUgYE5FVF9TQ0hfUElFYCYjMzQ7IGFzIGEgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUgb2YgTmV0d29yayBTY2hlZHVsaW5nOiBMZXQmIzM5O3MgRXhhbWluZSBORVRfU0NIX1BJRSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uICYjMzQ7TGV0JiMzOTtzIHNlZSBgTkVUX1NDSF9QSUVgJiMzNDsg4oCTIHRoYXQmIzM5O3MgYSBkaXJlY3QgcHJvbXB0IGZvciBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIG1lbnRhbCBzaG9ydGhhbmQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gbmV0d29yayBzY2hlZHVsaW5nLiBUaGUgaW1wbGllZCBxdWVzdGlvbiBpcywgd2hhdCBjYW4gd2UgZ2xlYW4gZnJvbSB0aGlzIGVsZW1lbnQsIHdoYXRldmVyIGl0IGlzIGluIGNvbnRleHQ/CgpgTkVUX1NDSF9QSUVgIGxpa2VseSByZXByZXNlbnRzIGEgc3BlY2lmaWMgYWxnb3JpdGhtLCBhIGRhdGEgc3RydWN0dXJlLCBhIHBlcmZvcm1hbmNlIG1ldHJpYywgb3IgYSBjb21wb25lbnQgcmVsYXRlZCB0byBuZXR3b3JrIHNjaGVkdWxpbmcgdXNpbmcgYSAmIzM5O3BpZSYjMzk7IG1ldGFwaG9yIHRvIHJlcHJlc2VudCBwcm9wb3J0aW9uYWwgYWxsb2NhdGlvbiAtIGl0IGNvdWxkIGJlIGEgY29uY2VwdCwgb3IgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIFRoZSB1c2Ugb2YgYSBjb2RlLWxpa2UgbmFtZSBzdWdnZXN0cyB3ZSBhcmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBlaXRoZXIgdGVjaG5pY2FsbHkgZGVmaW5lZCBvciBhbGdvcml0aG1pY2FsbHkgZHJpdmVuLiBJdCBjb3VsZCBiZSBhbiBhY3JvbnltIG9yIGFuIGlkZW50aWZpZXIuIEl0IHJlcXVpcmVzIHVucGFja2luZy4KCk15IGZpcnN0IHRob3VnaHQgcHJvY2VzcyB3b3VsZCBiZSBkcml2ZW4gYnkgdGhlIGZvbGxvd2luZyBwcm9tcHRzOgoKKiAgICoqQ29udGV4dDoqKiBXaGF0IHByb2JsZW0gYXJlIHdlIHRyeWluZyB0byBzb2x2ZT8gSXMgaXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgUW9TLCBmYWlybmVzcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CiogICAqKkFzc3VtcHRpb25zOioqIFdoYXQgcHJpb3Iga25vd2xlZGdlIGlzIG5lZWRlZD8gSXMgaXQgaW4gYSB3ZWxsLWRlZmluZWQgZG9tYWluLCBsaWtlIGRhdGEgY2VudGVyIG5ldHdvcmtpbmcsIG9yIGEgbW9yZSBnZW5lcmFsIGNvbmNlcHQ/CiogICAqKkltcGxpY2F0aW9uczoqKiBHaXZlbiBpdHMgcG90ZW50aWFsIG1lYW5pbmcsIHdoYXQgYXJlIHRoZSByZWxldmFudCB0cmFkZS1vZmZzPyBEb2VzIHRoZSAmIzM5O3BpZSYjMzk7IGFzcGVjdCBzdWdnZXN0IHByb3BvcnRpb25hbCBhbGxvY2F0aW9uIG9yIGhpZXJhcmNoaWNhbCBkaXZpc2lvbj8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhZHZhbnRhZ2VzPwoqICAgKipDb25uZWN0aW9uczoqKiBIb3cgZG9lcyBgTkVUX1NDSF9QSUVgIHJlbGF0ZSB0byBvdGhlciBzY2hlZHVsaW5nIHBhcmFkaWdtcyBJJiMzOTttIGZhbWlsaWFyIHdpdGg/IElzIGl0IGEgbm92ZWwgYXBwcm9hY2gsIGEgcmVmaW5lbWVudCBvZiBhbiBleGlzdGluZyB0ZWNobmlxdWUsIG9yIGEgY29tcGxldGUgZGVwYXJ0dXJlPyBXaGF0IGFyZSB0aGUgY29tbW9uYWxpdGllcyBhbmQgcG9pbnRzIG9mIGRpZmZlcmVudGlhdGlvbj8KClRoaXMgc3RhdGVtZW50IGltcGxpZXMgSSBoYXZlIGEgbWVudGFsIG1hcCBvZiBuZXR3b3JrIHNjaGVkdWxpbmcgY29uY2VwdHMgYW5kIGFtIHJlYWR5IHRvIGFwcGx5IG15IGV4cGVydGlzZSB0byBldmFsdWF0ZSBgTkVUX1NDSF9QSUVgIHJlbGF0aXZlIHRvIHRoYXQgbWFwLiBUaGUgdXNlIG9mIHRoZSBjb21tYW5kICYjMzk7TGV0JiMzOTtzIHNlZSYjMzk7IHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGEgY2FsbCB0byByZXZpZXcgdGhlIHN0YXRlIG9mIHRoZSB0ZWNobm9sb2d5IG9yIGNvbmNlcHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgaGlnaCBsZXZlbC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBwbGF5cyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMjpcdGNvbmZpZyBORVRfU0NIX1BJRVxuIDMyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWQgKFBJRSkgc2NoZWR1bGVyXCYjMzQ7XG4gMzI0Olx0XHRoZWxwXG4gMzI1Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgY29udHJvbGxlclxuIDMyNjpcdFx0ICBFbmhhbmNlZCBzY2hlZHVsZXIgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxuIDMyNzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODAzM1xuIDMyODpcdFxuIDMyOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMzMwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9waWUuXG4gMzMxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBORVRfU0NIX0hIRmAmIzM0OywgZXhwcmVzc2VkIGFzIGEgc2VyaWVzIG9mIHRob3VnaHRzIGZyb20gbXkgcGVyc3BlY3RpdmUsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBOZXQgU2NoZWR1bGUqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0LCBgTkVUX1NDSF9ISEZgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGFzIGEgbmV0d29yayBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBvbmUgZGVhbGluZyB3aXRoIGhpZ2gtZnJlcXVlbmN5IGhhbmRsaW5nLiBUaGUgYEhIRmAgc3VmZml4IGlzIGEgY2xlYXIgaW5kaWNhdG9yIOKAkyBsaWtlbHkgcmVmZXJyaW5nIHRvIGEgZmVhdHVyZSBzZXQgb3IgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIGhpZ2ggZnJlcXVlbmN5IHRyYWZmaWMuIE15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udGV4dDsgSXMgdGhpcyBhIHNwZWNpZmljIG1vZHVsZSBuYW1lPyBBIHZhcmlhYmxlPyBBIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUaGUgbm9tZW5jbGF0dXJlIHN1Z2dlc3RzIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJiMzOTtORVQmIzM5OyBzaWduaWZpZXMgaGVyZS4gSXMgaXQgYW4gaW50ZXJuYWwgbmV0d29yayBsaWJyYXJ5LCBhIG1vcmUgZ2VuZXJhbCBuZXR3b3JrIHJlc291cmNlIGxpa2UgYSBOSUMsIG9yIGEgbmV0d29ya2luZyBkZXZpY2U/IFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBmdWxsIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMzpcdGNvbmZpZyBORVRfU0NIX0hIRlxuIDMxNDpcdFx0dHJpc3RhdGUgXCYjMzQ7SGVhdnktSGl0dGVyIEZpbHRlciAoSEhGKVwmIzM0O1xuIDMxNTpcdFx0aGVscFxuIDMxNjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGVhdnktSGl0dGVyIEZpbHRlciAoSEhGKVxuIDMxNzpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMzE4Olx0XG4gMzE5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAzMjA6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2hoZi5cbiAzMjE6XHRcbiAzMjI6XHRjb25maWcgTkVUX1NDSF9QSUVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O0xldCYjMzk7cyBzZWUgYE5FVF9TQ0hfRlFgJiMzNDssIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQgKGxpa2VseSBuZXR3b3JraW5nLCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBvciBzb21ldGhpbmcgc2ltaWxhcik6CgoqKkRpZ2dpbmcgaW50byBORVRfU0NIX0ZRKioKCkFscmlnaHQsIGBORVRfU0NIX0ZRYC4uLiBobW0sIHRoYXQmIzM5O3MgYSBmYW1pbGlhciBjb25zdHJ1Y3QuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBsaWtlbHkgY29udGV4dDogbmV0d29yayBzY2hlZHVsaW5nLCBwYXJ0aWN1bGFybHkgaW4gYSBMaW51eCBlbnZpcm9ubWVudCBvciBhIHN5c3RlbSB0aGF0IGRyYXdzIGluc3BpcmF0aW9uIGZyb20gaXQuIFRoZSAmIzM0O05FVCYjMzQ7IHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyBuZXR3b3JrLXJlbGF0ZWQgb3BlcmF0aW9ucywgYW5kICYjMzQ7U0NIJiMzNDsgYWxtb3N0IGNlcnRhaW5seSBwb2ludHMgdG8gYSBzY2hlZHVsZXIgb3Igc2NoZWR1bGluZyBtZWNoYW5pc20uICYjMzQ7RlEmIzM0OyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBwcm9iYWJseSBtZWFucyBGYWlyIFF1ZXVpbmcsIG9yIHBlcmhhcHMgRnJlcXVlbmN5LVF1ZXVpbmcuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IGhvdyB0aGlzIHNjaGVkdWxlciBvcGVyYXRlcy4gSXMgaXQgYSBoaWVyYXJjaGljYWwgc2NoZWR1bGVyPyBEb2VzIGl0IHV0aWxpemUgcGFja2V0IGNsYXNzaWZpY2F0aW9uPyBXaGF0IGFsZ29yaXRobXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBmYWlybmVzcyDigJMgV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLCBEZWZpY2l0IFJvdW5kIFJvYmluIChEUlIpLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gYmVjYXVzZSBlYWNoIGhhcyBpdHMgb3duIHN0cmVuZ3RocyBhbmQgd2Vha25lc3NlcyBpbiB0ZXJtcyBvZiB0aHJvdWdocHV0LCBsYXRlbmN5LCBhbmQgZmFpcm5lc3MgdW5kZXIgZGlmZmVyZW50IGxvYWRzLgoKSSYjMzk7bSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIHR5cGVzIG9mIGFwcGxpY2F0aW9ucyB0aGlzIHdvdWxkIGJlIHVzZWQgZm9yOiBsYXRlbmN5LXNlbnNpdGl2ZSB0cmFmZmljIGxpa2UgVm9JUCBvciBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMsIG9yIHBlcmhhcHMgYnVsayBkYXRhIHRyYW5zZmVyIHdoZXJlIGZhaXJuZXNzIGlzIHBhcmFtb3VudCB0byBwcmV2ZW50IGFueSBvbmUgZmxvdyBmcm9tIGRvbWluYXRpbmcgdGhlIG5ldHdvcmsuIFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB3b3JrbG9hZCBpcyBjcnVjaWFsLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQXJlIHRoZXJlIGNvbmZpZ3VyYWJsZSB3ZWlnaHRzPyBQcmlvcml0eSBsZXZlbHM/IEJhbmR3aWR0aCBndWFyYW50ZWVzPyBXaGF0IGFib3V0IHRyYWZmaWMgc2hhcGluZz8gQXJlIHRoZXJlIHJlbGF0ZWQgY29tcG9uZW50cyBzdWNoIGFzIHRyYWZmaWMgcG9saWNpbmc/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBkZWZpbmUgaXRzIHByYWN0aWNhbCBlZmZlY3RpdmVuZXNzLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIGtub3cgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaW4gb3JkZXIgdG8gYmUgc3VyZSBvZiB0aGUgZXhhY3QgbWVhbmluZyBvZiB0aGlzIG5vbWVuY2xhdHVyZS4gV2hhdCBhcmUgdGhlIGNvbnRleHQtZGVwZW5kZW50IHZhcmlhYmxlcyB0aGF0IGltcGFjdCB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzY2hlZHVsZXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5OTpcdGNvbmZpZyBORVRfU0NIX0ZRXG4gMzAwOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlyIFF1ZXVlXCYjMzQ7XG4gMzAxOlx0XHRoZWxwXG4gMzAyOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGUSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMzAzOlx0XG4gMzA0Olx0XHQgIEZRIGRvZXMgZmxvdyBzZXBhcmF0aW9uLCBhbmQgaXMgYWJsZSB0byByZXNwZWN0IHBhY2luZyByZXF1aXJlbWVudHNcbiAzMDU6XHRcdCAgc2V0IGJ5IFRDUCBzdGFjayBpbnRvIHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlIChmb3IgbG9jYWxseSBnZW5lcmF0ZWRcbiAzMDY6XHRcdCAgdHJhZmZpYylcbiAzMDc6XHRcbiAzMDg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSBgTkVUX1NDSF9FVFNgLCYjMzQ7IHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIE5FVF9TQ0hfRVRTKioKCkFscmlnaHQsIHNvIHRoZSBwaHJhc2UgJiMzNDtMZXQmIzM5O3Mgc2VlIGBORVRfU0NIX0VUU2AmIzM0OyBwb3BzIHVwLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyBpbnRvIGFjdGlvbi4gJiMzNDtORVRfU0NIX0VUUyYjMzQ7Li4uIHRoYXQmIzM5O3MgcHJldHR5IGNsZWFybHkgcmVsYXRlZCB0byBuZXR3b3JrIHNjaGVkdWxpbmcgb3Igc29tZSBhc3BlY3Qgb2YgdGltZS1zZW5zaXRpdmUgbmV0d29ya2luZy4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIHJlZmVycyB0byBzb21lIGtpbmQgb2YgbmV0d29yayBzY2hlZHVsaW5nIGFsZ29yaXRobSBvciBtZWNoYW5pc20sIHBhcnRpY3VsYXJseSByZWxldmFudCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgZGV0ZXJtaW5pc20gYW5kIGJvdW5kZWQgbGF0ZW5jeSBhcmUgY3J1Y2lhbC4KCkkgbmVlZCBtb3JlIGNvbnRleHQsIG9idmlvdXNseSwgYnV0IHRoaXMgY291bGQgZW5jb21wYXNzIGEgcmFuZ2Ugb2YgdG9waWNzIGZyb20gRXRoZXJuZXQgVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZyAoVFNOKSBzdGFuZGFyZHMsIGxpa2UgZnJhbWUgcHJlZW1wdGlvbiBvciB0aW1lLWF3YXJlIHNoYXBlciBpbXBsZW1lbnRhdGlvbnMsIGFsbCB0aGUgd2F5IGRvd24gdG8gbW9yZSBjdXN0b20gb3Igc3BlY2lhbGl6ZWQgc2NoZWR1bGluZyBhbGdvcml0aG1zIHVzZWQgaW4gc3BlY2lmaWMgaW5kdXN0cmlhbCBjb250cm9sIHN5c3RlbXMgb3IgZW1iZWRkZWQgbmV0d29ya2luZyBhcHBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9uczogV2hhdCBraW5kIG9mIG5ldHdvcmsgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyB3aXJlZCBvciB3aXJlbGVzcz8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cz8gTGF0ZW5jeT8gSml0dGVyPyBJcyBpdCBhIHJlYWwtdGltZSBzeXN0ZW0/IEhvdyB0aWdodCBhcmUgdGhlIHRpbWluZyBjb25zdHJhaW50cz8KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGluZm9ybWF0aW9uIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgd2hldGhlciBpdCBpcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRlYnVnZ2luZywgaW1wbGVtZW50YXRpb24sIG9yIHJlc2VhcmNoLCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg5Olx0Y29uZmlnIE5FVF9TQ0hfRVRTXG4gMzkwOlx0XHR0cmlzdGF0ZSBcJiMzNDtFbmhhbmNlZCB0cmFuc21pc3Npb24gc2VsZWN0aW9uIHNjaGVkdWxlciAoRVRTKVwmIzM0O1xuIDM5MTpcdFx0aGVscFxuIDM5MjpcdCAgICAgICAgICBUaGUgRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbiBzY2hlZHVsZXIgaXMgYSBjbGFzc2Z1bFxuIDM5MzpcdCAgICAgICAgICBxdWV1aW5nIGRpc2NpcGxpbmUgdGhhdCBtZXJnZXMgZnVuY3Rpb25hbGl0eSBvZiBQUklPIGFuZCBEUlJcbiAzOTQ6XHQgICAgICAgICAgcWRpc2NzIGluIG9uZSBzY2hlZHVsZXIuIEVUUyBtYWtlcyBpdCBlYXN5IHRvIGNvbmZpZ3VyZSBhIHNldCBvZlxuIDM5NTpcdCAgICAgICAgICBzdHJpY3QgYW5kIGJhbmR3aWR0aC1zaGFyaW5nIGJhbmRzIHRvIGltcGxlbWVudCB0aGUgdHJhbnNtaXNzaW9uXG4gMzk2Olx0ICAgICAgICAgIHNlbGVjdGlvbiBkZXNjcmliZWQgaW4gODAyLjFRYXouXG4gMzk3Olx0XG4gMzk4Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBFVFMgcGFja2V0IHNjaGVkdWxpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIE5FVF9TQ0hfRFJSOiBBIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBgTkVUX1NDSF9EUlJgLiBNeSBpbml0aWFsIGZvY3VzLCBhcyBhbHdheXMsIGlzIG9uIHRoZSBjb3JlIGNoYXJhY3RlcmlzdGljcy4gSXQmIzM5O3MgYSBuZXR3b3JrIHNjaGVkdWxlciwgbWVhbmluZyBpdHMgZnVuZGFtZW50YWwgam9iIGlzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiBiYW5kd2lkdGggYW1vbmdzdCB2YXJpb3VzIG5ldHdvcmsgZmxvd3Mgb3IgcXVldWVzLiBUaGUgJiMzNDtEUlImIzM0OyBoaW50cyBhdCBEZWZpY2l0IFJvdW5kIFJvYmluLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBlbXBsb3lpbmcgYSBmYWlybmVzcyBtZWNoYW5pc20sIGFpbWluZyB0byBwcmV2ZW50IHN0YXJ2YXRpb24gYW5kIGVuc3VyZSBzb21lIGxldmVsIG9mIHNlcnZpY2UgaXNvbGF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHRyYWZmaWMgc3RyZWFtcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIGFib3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgYSBzdHJpY3QgRFJSIG9yIGEgbW9kaWZpZWQgdmVyc2lvbj8gQXJlIHRoZXJlIGFueSB3ZWlnaHRpbmcgc2NoZW1lcyBpbnZvbHZlZD8gSG93IGFyZSBkZWZpY2l0cyBkZWZpbmVkLCBhbmQgd2hhdCYjMzk7cyB0aGUgdHlwaWNhbCAmIzM0O3F1YW50dW0mIzM0OyBzaXplIGZvciB0aGVzZSBkZWZpY2l0cz8gS25vd2luZyB0aGVzZSBzcGVjaWZpY3MgaXMgY3J1Y2lhbC4gV2l0aG91dCB0aGlzLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIHRydWx5IGFzc2VzcyBpdHMgcGVyZm9ybWFuY2UuCgpJJiMzOTtkIHdhbnQgdG8gZXhhbWluZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcXVldWluZyBkaXNjaXBsaW5lcy4gRG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIHNjaGVkdWxlcnMsIG9yIGFyZSB0aGVyZSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucz8gSG93IGRvZXMgaXQgaGFuZGxlIGNvbmdlc3Rpb24gc2lnbmFscywgbGlrZSBFQ04gb3IgZXhwbGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb24/IERvZXMgaXQgb2ZmZXIgYW55IHByaW9yaXRpemF0aW9uIGJleW9uZCBmYWlybmVzcz8gV2hhdCBhcmUgaXRzIGxhdGVuY3kgY2hhcmFjdGVyaXN0aWNzLCBhbmQgaG93IGRvZXMgaXQgY29tcGFyZSB0byBvdGhlciBwb3RlbnRpYWwgc2NoZWR1bGVycyBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucz8KCkJleW9uZCB0aGUgYmFzaWNzLCBJJiMzOTtkIGludmVzdGlnYXRlIHRoZSBrZXJuZWwtbGV2ZWwgaW1wbGVtZW50YXRpb246IGlzIGl0IGhhcmR3YXJlLWFjY2VsZXJhdGVkLCBvciBwdXJlbHkgc29mdHdhcmU/IFRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgd2lsbCBzd2luZyBkcmFtYXRpY2FsbHkgZGVwZW5kaW5nIG9uIHRoYXQgYW5zd2VyLiBBbHNvLCBJJiMzOTtkIHdhbnQgdG8gbG9vayBhdCBpdHMgbWVtb3J5IGZvb3RwcmludC4KCkZpbmFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlLiBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3M/IElzIGl0IHByaW1hcmlseSBmb2N1c2VkIG9uIGJhbmR3aWR0aCB1dGlsaXphdGlvbiwgbGF0ZW5jeSBtaW5pbWl6YXRpb24sIG9yIGZhaXJuZXNzPyBIb3cgZG9lcyBpdCBoYW5kbGUgYnVyc3RzIG9mIHRyYWZmaWM/IEkgd2FudCB0byBzZWUgdGhpcyBzY2hlZHVsZXIgaW4gYWN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIG5ldHdvcmsgbG9hZCBzY2VuYXJpb3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBldmFsdWF0ZSBpdHMgZWZmaWNhY3kgZm9yIGEgc3BlY2lmaWMgc2V0IG9mIHJlcXVpcmVtZW50cy4gSSYjMzk7bSBrZWVuIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyB0aGUgcmlnaHQgY2hvaWNlIGZvciB0aGUgdGFyZ2V0IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDc6XHRjb25maWcgTkVUX1NDSF9EUlJcbiAyMDg6XHRcdHRyaXN0YXRlIFwmIzM0O0RlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXCYjMzQ7XG4gMjA5Olx0XHRoZWxwXG4gMjEwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBEZWZpY2l0IFJvdW5kIFJvYmluIChEUlIpIHBhY2tldFxuIDIxMTpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyMTI6XHRcbiAyMTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIxNDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxuIDIxNTpcdFxuIDIxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgTkVUX1NDSF9TRlEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBORVRfU0NIX1NGUWAgdGhpbmcuIEl0JiMzOTtzIGEgdHJhZmZpYyBzaGFwZXIsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCBpdCYjMzk7cyB0aGUgU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyBkaXNjaXBsaW5lLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBpdHMgcHVycG9zZTogZW5zdXJpbmcgZmFpcm5lc3MgaW4gYmFuZHdpZHRoIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYSBjb25nZXN0ZWQgbmV0d29yayBpbnRlcmZhY2UuIEkgYmV0IGl0IHVzZXMgYSBoYXNoIGZ1bmN0aW9uIHRvIGRpc3RyaWJ1dGUgZmxvd3MgaW50byBkaWZmZXJlbnQgcXVldWVzLCBhaW1pbmcgdG8gaXNvbGF0ZSB0aGVtIGZyb20gaGVhZC1vZi1saW5lIGJsb2NraW5nIGlzc3Vlcy4KCk5vdywgSSYjMzk7bSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGl0cyBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIGNvbXBhcmVkIHRvIG90aGVyIHF1ZXVpbmcgZGlzY2lwbGluZXMuIFRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGJ1cnN0eSB0cmFmZmljIOKAkyBpcyBpdCBnb29kIGF0IHNtb290aGluZyB0aG9zZSBvdXQsIG9yIGRvZXMgaXQgaW50cm9kdWNlIGxhdGVuY3k/IEFuZCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIFRDUCYjMzk7cyBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcz8gRG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgb3IgZG9lcyBpdCBjYXVzZSBhbnkgaXNzdWVzPyBJJiMzOTtkIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaGFzaCBpcyBnZW5lcmF0ZWQgYW5kIGlmIGl0IGhhcyBhbnkgcmFuZG9taXphdGlvbiBhc3BlY3RzLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBiYWxhbmNlcyB0aHJvdWdocHV0IGFuZCBsYXRlbmN5IGFuZCBpZiB0aGVyZSBhcmUgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLiBJIG1pZ2h0IHdhbnQgdG8gc3RhcnQgdGVzdGluZyBpdHMgYmVoYXZpb3IgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50IHRvIHNlZSB3aGVyZSB0aGlzIHdvdWxkIGZpdCBpbiBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSwgcGVyaGFwcyBzb21lIHNpbXVsYXRpb25zIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMTpcdGNvbmZpZyBORVRfU0NIX1NGUVxuIDExMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVwmIzM0O1xuIDExMzpcdFx0aGVscFxuIDExNDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVxuIDExNTpcdFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMTE2Olx0XG4gMTE3Olx0XHQgIFNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9zZnEuY1x1MDAzZSBmb3IgbW9yZSBkZXRhaWxzLlxuIDExODpcdFxuIDExOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTIwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfc2ZxLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYCB3aXRoaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYE5FVF9TQ0hFRGAgaXMgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludDsgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGluZGl2aWR1YWwgc2NoZWR1bGVyIGNob2ljZXMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiBgTkVUX1NDSEVEYCB0byB0aGUgb3RoZXIgcmVsYXRlZCBmZWF0dXJlcywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIGFsbCBvZiB0aGUgcmVsYXRlZCBmZWF0dXJlcywgc3VjaCBhcyBxdWV1aW5nIGRpc2NpcGxpbmVzLCBmaWx0ZXJzIGFuZCBjbGFzc2lmaWVycyBhbmQgdHJhZmZpYyBwb2xpY2luZyBhbmQgc2hhcGluZyBjYXBhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgTkVUX1NDSEVEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYE5FVF9TQ0hfUElFYCBpcyByZXF1aXJlZCBmb3IgYE5FVF9TQ0hfRlFfUElFYCB0byBmdW5jdGlvbiBwcm9wZXJseSwgZ2l2ZW4gdGhlaXIgcmVsYXRpb25zaGlwLiBZZXMsIGl0IGxvb2tzIGxpa2UgYE5FVF9TQ0hfRlFfUElFYCBpbmRlZWQgZGVwZW5kcyBvbiBgTkVUX1NDSF9QSUVgLiBFeGNlbGxlbnQuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBjbGVhcmx5IGluIG1pbmQuIFRoZSBjb3JlIHNldCBvZiBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhcHBlYXIgdG8gYmU6CgoqICAgYE5FVF9TQ0hFRGAKKiAgIGBORVRfU0NIX0RSUmAKKiAgIGBORVRfU0NIX0RVQUxQSTJgCiogICBgTkVUX1NDSF9FVFNgCiogICBgTkVUX1NDSF9GUWAKKiAgIGBORVRfU0NIX1BJRWAKKiAgIGBORVRfU0NIX0ZRX1BJRWAKKiAgIGBORVRfU0NIX0hIRmAKKiAgIGBORVRfU0NIX1NGUWAKCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2YgdGhlc2UsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgc3ltYm9scy4KCk5vdywgbGV0JiMzOTtzIHR1cm4gdG8gdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCB0aGVzZSwgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIHNldCBpbmNsdWRlczoKCiogICBgZHJyX2NoYW5nZV9jbGFzc2AKKiAgIGBkdWFscGkyX2NoYW5nZWAKKiAgIGBkdWFscGkyX2luaXRgCiogICBgZXRzX3FkaXNjX2NoYW5nZWAKKiAgIGBmcV9jaGFuZ2VgCiogICBgZnFfcGllX2NoYW5nZWAKKiAgIGBoaGZfY2hhbmdlYAoqICAgYHBpZV9kcm9wX2Vhcmx5YAoqICAgYHNmcV9jaGFuZ2VgCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCB0cmVhdCBgcGllX2Ryb3BfZWFybHlgIGFzIGEgc3RhdGljIHN5bWJvbCBieSBtaXN0YWtlLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCBpcyBpcyBub3Qgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29sIHBpZV9kcm9wX2Vhcmx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9waWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3BpZS5jPTI1PXN0cnVjdCBwaWVfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9waWUuYy0zMi1cbm5ldC9zY2hlZC9zY2hfcGllLmM6MzM6Ym9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzQtXHRcdCAgICBzdHJ1Y3QgcGllX3ZhcnMgKnZhcnMsIHUzMiBiYWNrbG9nLCB1MzIgcGFja2V0X3NpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzUxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBzeXN0ZW0gaXNuJiMzOTt0IHN0YXRpYywgd2hpY2ggaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgYHNjaF9kdWFscGkyLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbmAgYW5kIGBtdXN0X2Ryb3BgLiBUaGV5IGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW4gdGVybXMgb2YgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBjb21wb25lbnRzLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gSSBjYW4gc2VlIHRoYXQgYGR1YWxwaTJfY2hhbmdlYCwgYGR1YWxwaTJfaW5pdGAsIGFuZCBgZHVhbHBpMl9lbnF1ZXVlYCBjYWxsIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuCgpTaW5jZSBgZHVhbHBpMl9jaGFuZ2VgIGFuZCBgZHVhbHBpMl9pbml0YCBhcmUgY2FsbGluZyB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGVuIHRoZXkgYXJlIGdvb2QuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgaG93IGBkdWFscGkyX2VucXVldWVgIGZpdHMgaW50byB0aGUgZHluYW1pYyBtb2RlbCwgZ2l2ZW4gdGhhdCBpdCBhbHNvIHVzZXMgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gZW5zdXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIGlzIGNvcnJlY3RseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBkdWFscGkyX2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz0zNDQ9c3RhdGljIGludCBkdWFscGkyX3NrYl9jbGFzc2lmeShzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTM4Ny1cbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jOjM4ODpzdGF0aWMgaW50IGR1YWxwaTJfZW5xdWV1ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy0zODktXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNDAKCQkJCQkJCW91dHB1dDogMjcyCgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGBtdXN0X2Ryb3BgIGlzIHRyaWdnZXJlZCBieSBgZHVhbHBpMl9lbnF1ZXVlX3NrYmAuIFNpbmNlIHdlIGFyZSBmb2N1c2luZyBvbiB0aGF0LCBsZXQmIzM5O3MgYWRkIGBkdWFscGkyX2VucXVldWVfc2tiYCB0byB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBmb3IgdGhlIGFuYWx5c2lzLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGVzZSBjaGFuZ2UgZnVuY3Rpb25zLiBMb29raW5nIGF0IGBmcV9yZXNpemVgIHdpdGhpbiBgc2NoX2ZxLmNgLCBpdCYjMzk7cyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBmcV9jaGFuZ2VgLCB3aGljaCBtYWtlcyBgZnFfY2hhbmdlYCByZWxldmFudC4gVGhlbiwgYGV0c19xZGlzY19jaGFuZ2VgIGluIGBzY2hfZXRzLmNgIGlzIGFsc28gc3RhdGljLCBidXQgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBzYW1lIGdvZXMgZm9yIGBmcV9waWVfY2hhbmdlYCBpbiBgc2NoX2ZxX3BpZS5jYCwgYGhoZl9jaGFuZ2VgIGluIGBzY2hfaGhmLmNgLCBgc2ZxX2NoYW5nZWAgaW4gYHNjaF9zZnEuY2AsIGFuZCBgZHJyX2NoYW5nZV9jbGFzc2AgaW4gYHNjaF9kcnIuY2Ag4oCTIHRoZXkgYXJlIGFsbCBzdGF0aWMgYnV0IHNlcnZlIGFzIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZWlyIHJlc3BlY3RpdmUgc2NoZWR1bGVycy4KCkdpdmVuIHRoYXQgYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE5ldGxpbmsgY29tbWFuZHMgKHNwZWNpZmljYWxseSBgdGMgcWRpc2MgYWRkL2NoYW5nZWApLCBhbmQgdGhlIHBvdGVudGlhbCBjaGFuZ2VzIGxvb2sgZnVuY3Rpb25hbCBzdWNoIGFzIGNsYW1waW5nIHZhbHVlcywgZml4aW5nIGJ1Z3Mgd2l0aCB6ZXJvIG9yIG92ZXJseSBsYXJnZSB2YWx1ZXMsIEkgdGhpbmsgdGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4KCkxldCBtZSBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RVQUxQSTImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX1BJRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0hIRiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1NGUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rycl9jaGFuZ2VfY2xhc3MmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZHVhbHBpMl9pbml0JiMzNDssCiAgICAmIzM0O2R1YWxwaTJfZW5xdWV1ZV9za2ImIzM0OywKICAgICYjMzQ7ZXRzX3FkaXNjX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfcGllX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtoaGZfY2hhbmdlJiMzNDssCiAgICAmIzM0O3BpZV9kcm9wX2Vhcmx5JiMzNDssCiAgICAmIzM0O3NmcV9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzIChxZGlzY3MpIHRvIGNsYW1wIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzLCBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIHplcm8gb3Igb3Zlcmx5IGxhcmdlIHZhbHVlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgcWRpc2NzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyBjbGFtcGluZyBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EVUFMUEkyJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9QSUUmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9ISEYmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9TRlEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcnJfY2hhbmdlX2NsYXNzJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfY2hhbmdlJiMzNDssCiAgICAmIzM0O2R1YWxwaTJfaW5pdCYjMzQ7LAogICAgJiMzNDtkdWFscGkyX2VucXVldWVfc2tiJiMzNDssCiAgICAmIzM0O2V0c19xZGlzY19jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX3BpZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7aGhmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwaWVfZHJvcF9lYXJseSYjMzQ7LAogICAgJiMzNDtzZnFfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG11bHRpcGxlIG5ldHdvcmsgc2NoZWR1bGVycyAocWRpc2NzKSB0byBjbGFtcCBgcXVhbnR1bWAgYW5kIGBtdHVgIHZhbHVlcywgcHJldmVudGluZyBpc3N1ZXMgd2l0aCB6ZXJvIG9yIG92ZXJseSBsYXJnZSB2YWx1ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIHFkaXNjcyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xhbXBpbmcgbG9naWMgYmVoYXZlcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyAobWluL21heC9jbGFtcCkgdG8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGxpa2UgYHF1YW50dW1gIGFuZCBNVFUtZGVyaXZlZCB2YWx1ZXMgYWNyb3NzIHZhcmlvdXMgbmV0d29yayBzY2hlZHVsZXJzIChEUlIsIERVQUxQSTIsIEVUUywgRlEsIEZRX1BJRSwgSEhGLCBQSUUsIFNGUSkuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsb2dpY2FsIGJ1Z3Mgc3VjaCBhcyBpbmZpbml0ZSBsb29wcyAoZS5nLiwgemVybyBxdWFudHVtKSwgZGl2aXNpb24gYnkgemVybywgb3IgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9ucy9pbnRlZ2VyIG92ZXJmbG93cyAoZS5nLiwgZXh0cmVtZWx5IGxhcmdlIHF1YW50dW0gb3IgTVRVIHZhbHVlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGhvdyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBoYW5ncykgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgaGFuZyBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggOTFiMWVmODI0YWZhZi4uMGZmZGFiMjdiYWU0MiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC04Miw4ICYjNDM7ODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsCiAJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7U3BlY2lmaWVkIERSUiBxdWFudHVtIGNhbm5vdCBiZSB6ZXJvJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KJiM0MzsJCXF1YW50dW0gPSBtYXgoMjU2VSwgcXVhbnR1bSk7CiAJfSBlbHNlCi0JCXF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKJiM0MzsJCXF1YW50dW0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7CiAKIAlpZiAoY2wgIT0gTlVMTCkgewogCQlpZiAodGNhW1RDQV9SQVRFXSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwppbmRleCA0ZjY3OGQ0ZmYxMGVjLi40OTQ3ZGVmN2M0OWVmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwpAQCAtMjA4LDkgJiM0MzsyMDgsMTEgQEAgc3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24oc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSkKIHN0YXRpYyB2b2lkIGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbihzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJCQkJICAgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSwgdTMyIHdjKQogewomIzQzOwl1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxICZsdDsmbHQ7IDIwKTsKJiM0MzsKIAlxLSZndDtjX3Byb3RlY3Rpb25fd2MgPSB3YzsKIAlxLSZndDtjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3YzsKLQlxLSZndDtjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkgKgomIzQzOwlxLSZndDtjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpbXR1ICoKIAkJKChpbnQpcS0mZ3Q7Y19wcm90ZWN0aW9uX3djIC0gKGludClxLSZndDtjX3Byb3RlY3Rpb25fd2wpOwogCWR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHEpOwogfQpAQCAtMjg1LDggJiM0MzsyODcsOSBAQCBzdGF0aWMgYm9vbCBtdXN0X2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsCiAJdTY0IGxvY2FsX2xfcHJvYjsKIAlib29sIG92ZXJsb2FkOwogCXUzMiBwcm9iOwomIzQzOwl1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxICZsdDsmbHQ7IDIwKTsKIAotCWlmIChzY2gtJmd0O3FzdGF0cy5iYWNrbG9nICZsdDsgMiAqIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKQomIzQzOwlpZiAoc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmbHQ7IDIgKiBtdHUpCiAJCXJldHVybiBmYWxzZTsKIAogCXByb2IgPSBSRUFEX09OQ0UocS0mZ3Q7cGkyX3Byb2IpOwpAQCAtNzEyLDcgJiM0Mzs3MTUsOCBAQCBzdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdCkKIAkvKiBBcHBseSBydWxlIG9mIHRodW1iLCBpLmUuLCBkb3VibGluZyB0aGUgcGFja2V0IGxlbmd0aCwKIAkgKiB0byBmdXJ0aGVyIGluY2x1ZGUgcGVyIHBhY2tldCBvdmVyaGVhZCBpbiBtZW1vcnlfbGltaXQuCiAJICovCi0JdTY0IG1lbWxpbSA9IG11bF91MzJfdTMyKGxpbWl0LCAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpOwomIzQzOwl1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksCiYjNDM7CQkJCQkJICAgICAxLCAxICZsdDsmbHQ7IDIwKSk7CiAKIAlpZiAodXBwZXJfMzJfYml0cyhtZW1saW0pKQogCQlyZXR1cm4gVTMyX01BWDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jCmluZGV4IDI1ZmNmNDA3OWZlY2UuLmYyM2M4ZGM2OGY4Y2IgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZXRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9ldHMuYwpAQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCBzdGF0aWMgaW50IGV0c19xZGlzY19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAkgKi8KIAlmb3IgKGkgPSBuc3RyaWN0OyBpICZsdDsgbmJhbmRzOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXF1YW50YVtpXSkKLQkJCXF1YW50YVtpXSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOwomIzQzOwkJCXF1YW50YVtpXSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTsKIAl9CiAKIAkvKiBCZWZvcmUgY29tbWl0LCBtYWtlIHN1cmUgd2UgY2FuIGFsbG9jYXRlIGFsbCBuZXcgcWRpc2NzICovCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmMKaW5kZXggNjE0NGI1Njg2ZjEzZi4uYWI4ZTdjNmFlMjAzOSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnEuYwpAQCAtOTgwLDcgJiM0Mzs5ODAsNyBAQCBzdGF0aWMgaW50IGZxX3Jlc2l6ZShzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxvZykKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gaXFfcmFuZ2UgPSB7Ci0JLm1heCA9IElOVF9NQVgsCiYjNDM7CS5tYXggPSAxICZsdDsmbHQ7IDIwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX3BvbGljeVtUQ0FfRlFfTUFYICYjNDM7IDFdID0gewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jCkBAIC0zNDEsNyAmIzQzOzM0MSw4IEBAIHN0YXRpYyBpbnQgZnFfcGllX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQkJICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpOwogCiAJaWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pCi0JCVdSSVRFX09OQ0UocS0mZ3Q7cXVhbnR1bSwgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9RVUFOVFVNXSkpOwomIzQzOwkJV1JJVEVfT05DRShxLSZndDtxdWFudHVtLAomIzQzOwkJCSAgIG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSkpOwogCiAJaWYgKHRiW1RDQV9GUV9QSUVfTUVNT1JZX0xJTUlUXSkKIAkJV1JJVEVfT05DRShxLSZndDttZW1vcnlfbGltaXQsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuYwppbmRleCA5NmFjYWI2YThkYTAzLi5iYjhlODk1MmY1NTUzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hoZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGhmLmMKQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJCXJldHVybiBlcnI7CiAKIAlpZiAodGJbVENBX0hIRl9RVUFOVFVNXSkKLQkJbmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTsKJiM0MzsJCW5ld19xdWFudHVtID0gbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfUVVBTlRVTV0pKTsKIAogCWlmICh0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKQogCQluZXdfaGhmX25vbl9oaF93ZWlnaHQgPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcGllLmMgYi9uZXQvc2NoZWQvc2NoX3BpZS5jCmluZGV4IGI0MWYyZGVmMmUyY2MuLjNiNzg2M2ZmZDI4NGMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcGllLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9waWUuYwpAQCAtMzUsNyAmIzQzOzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcywKIHsKIAl1NjQgcm5kOwogCXU2NCBsb2NhbF9wcm9iID0gdmFycy0mZ3Q7cHJvYjsKLQl1MzIgbXR1ID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7CiYjNDM7CXUzMiBtdHUgPSBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksIDEsIDEgJmx0OyZsdDsgMjApOwogCiAJLyogSWYgdGhlcmUgaXMgc3RpbGwgYnVyc3QgYWxsb3dhbmNlIGxlZnQgc2tpcCByYW5kb20gZWFybHkgZHJvcCAqLwogCWlmICh2YXJzLSZndDtidXJzdF90aW1lICZndDsgMCkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IDE4N2QzZWQ1NzhmMjYuLjhiYmNmYzllODVkOTQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtNjYwLDYgJiM0Mzs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAoY3RsLSZndDtxdWFudHVtICZndDsgMSAmbHQ7Jmx0OyAyMCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtxdWFudHVtIHRvbyBsYXJnZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKGN0bC0mZ3Q7cGVydHVyYl9wZXJpb2QgJmx0OyAwIHx8CiAJICAgIGN0bC0mZ3Q7cGVydHVyYl9wZXJpb2QgJmd0OyBJTlRfTUFYIC8gSFopIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtpbnZhbGlkIHBlcnR1cmIgcGVyaW9kJiMzNDspOwpAQCAtNjg4LDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgaW50IHNmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAogCS8qIHVwZGF0ZSBhbmQgdmFsaWRhdGUgY29uZmlndXJhdGlvbiAqLwogCWlmIChjdGwtJmd0O3F1YW50dW0pCi0JCXF1YW50dW0gPSBjdGwtJmd0O3F1YW50dW07CiYjNDM7CQlxdWFudHVtID0gbWF4KDI1NlUsIGN0bC0mZ3Q7cXVhbnR1bSk7CiAJaWYgKGN0bC0mZ3Q7Zmxvd3MpCiAJCW1heGZsb3dzID0gbWluX3QodTMyLCBjdGwtJmd0O2Zsb3dzLCBTRlFfTUFYX0ZMT1dTKTsKIAlpZiAoY3RsLSZndDtkaXZpc29yKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzIxCgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDg5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBLTVNBTiBpcyBVbm5lY2Vzc2FyeSBIZXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgbmV0d29yayBzY2hlZHVsZXJzIOKAkyBgc2NoX2Ryci5jYCwgYHNjaF9kdWFscGkyLmNgLCBgc2NoX2V0cy5jYCwgYHNjaF9mcS5jYCwgYHNjaF9mcV9waWUuY2AsIGBzY2hfaGhmLmNgLCBgc2NoX3BpZS5jYCwgYW5kIGBzY2hfc2ZxLmNgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWxsIGFib3V0IGFkZGluZyBib3VuZHMgY2hlY2tpbmcuIFdlJiMzOTtyZSBjbGFtcGluZyB0aGUgYHF1YW50dW1gIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIHRoZSBNVFUsIGVuc3VyaW5nIHRoZXkgc3RheSB3aXRoaW4gcmVhc29uYWJsZSBsaW1pdHMuIEl0IGxvb2tzIGxpa2UgdGhlIGxpbWl0cyBhcmUgcHJpbWFyaWx5IGEgbWluaW11bSBvZiAyNTYgYW5kIGEgbWF4aW11bSBhcm91bmQgMU1CICgxICZsdDsmbHQ7IDIwKS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHB1cmVseSBhYm91dCAqaW5wdXQgdmFsaWRhdGlvbiouIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgc2l0dWF0aW9ucyB3aGVyZSBhIHplcm8gYHF1YW50dW1gIGNvdWxkIGxlYWQgdG8gYSBkaXZpZGUtYnktemVybyBvciBpbmZpbml0ZSBsb29wLCBvciBhbiBleGNlc3NpdmVseSBsYXJnZSB2YWx1ZSBjYXVzZXMgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3Zlci1hbGxvY2F0ZXMgbWVtb3J5LiBUaGlzIGlzIGNsYXNzaWMgaGFyZGVuaW5nIGFnYWluc3QgbG9naWNhbCBlcnJvcnMgc3RlbW1pbmcgZnJvbSB1c2VyIGlucHV0IG9yIGNvbmZpZ3VyYXRpb24uCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0gdG8gbWFrZSB0aGUgS01TQU4gY2FsbC4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJhaXNlIGEgcmVkIGZsYWcuIFdlJiMzOTtyZSAqY2xhbXBpbmcqIGV4aXN0aW5nIGludGVnZXIgdmFsdWVzLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gbW9kaWZpY2F0aW9ucyB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBub3RoaW5nIHRoYXQgY2hhbmdlcyBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCB0aGVzZSBjaGFuZ2VzIG9ubHkgY2xhbXAgdGhlIHZhbHVlIHRoYXQgaXMgc3RvcmVkIC0gc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgdGhlIHZhbHVlcyBiZWluZyByZWFkLgoKVGhlIHR5cGVzIG9mIGJ1Z3MgdGhpcyBwYXRjaCBpcyBwcmV2ZW50aW5nIChoYW5ncywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgT09NIGNvbmRpdGlvbnMpIGFyZSBnZW5lcmFsbHkgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBMT0NLREVQIGFuZCBnZW5lcmFsIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uPyBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGUgdmFsdWVzIGJlaW5nIG1vZGlmaWVkIGRvbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGlmIGR1bXBlZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLiBUaGUgcGF0Y2ggb25seSBjbGFtcHMgdGhlIHZhbHVlcywgbm90IHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IG9yIHRoZSBkdW1wIGZ1bmN0aW9ucy4KClNvLCBJIHdpbGwgc3RhdGUgbXkgcmVhc29uaW5nIGNsZWFybHkuIFRoZSBwYXRjaCBlbmZvcmNlcyBib3VuZHMgY2hlY2tzIChtaW4vbWF4L2NsYW1wKSBvbiBwYXJhbWV0ZXJzIGxpa2UgJiMzOTtxdWFudHVtJiMzOTsgYW5kIE1UVS1yZWxhdGVkIHZhbHVlcyBhY3Jvc3MgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzLiBUaGlzIG1pdGlnYXRlcyBsb2dpY2FsIGZsYXdzIHRoYXQgcmVzdWx0IGluLCBpbmZpbml0ZSBsb29wcywgbWVtb3J5IGVycm9ycyBvciBvdmVyZmxvd3MuIFNpbmNlIHRoZSBwYXRjaCBkb2VzIG5vdCBhZGQgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGluaXRpYWxpemF0aW9uIG9yIGludHJvZHVjZSBuZXcgY29weWluZyBtZWNoYW5pc21zLCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrYWdlIGlzIG5vbi1leGlzdGVudC4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQgZnV6emluZyBzaG91bGQgY2F0Y2ggYW55IHJlbWFpbmluZyBpc3N1ZXMuIEkgd2lsbCBmbGFnIGBOZWVkc0tNU0FOYCBhcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyAobWluL21heC9jbGFtcCkgdG8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGxpa2UgYHF1YW50dW1gIGFuZCBNVFUtZGVyaXZlZCB2YWx1ZXMgYWNyb3NzIHZhcmlvdXMgbmV0d29yayBzY2hlZHVsZXJzIChEUlIsIERVQUxQSTIsIEVUUywgRlEsIEZRX1BJRSwgSEhGLCBQSUUsIFNGUSkuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsb2dpY2FsIGJ1Z3Mgc3VjaCBhcyBpbmZpbml0ZSBsb29wcyAoZS5nLiwgemVybyBxdWFudHVtKSwgZGl2aXNpb24gYnkgemVybywgb3IgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9ucy9pbnRlZ2VyIG92ZXJmbG93cyAoZS5nLiwgZXh0cmVtZWx5IGxhcmdlIHF1YW50dW0gb3IgTVRVIHZhbHVlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGhvdyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBoYW5ncykgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgaGFuZyBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDE6NTMuMjM1ODcwMjg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MTgzMTQ4NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRFVBTFBJMlwiLFxuICAgIFwiTkVUX1NDSF9FVFNcIixcbiAgICBcIk5FVF9TQ0hfRlFcIixcbiAgICBcIk5FVF9TQ0hfUElFXCIsXG4gICAgXCJORVRfU0NIX0ZRX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9ISEZcIixcbiAgICBcIk5FVF9TQ0hfU0ZRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHJyX2NoYW5nZV9jbGFzc1wiLFxuICAgIFwiZHVhbHBpMl9jaGFuZ2VcIixcbiAgICBcImR1YWxwaTJfaW5pdFwiLFxuICAgIFwiZHVhbHBpMl9lbnF1ZXVlX3NrYlwiLFxuICAgIFwiZXRzX3FkaXNjX2NoYW5nZVwiLFxuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJmcV9waWVfY2hhbmdlXCIsXG4gICAgXCJoaGZfY2hhbmdlXCIsXG4gICAgXCJwaWVfZHJvcF9lYXJseVwiLFxuICAgIFwic2ZxX2NoYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGlwbGUgbmV0d29yayBzY2hlZHVsZXJzIChxZGlzY3MpIHRvIGNsYW1wIGBxdWFudHVtYCBhbmQgYG10dWAgdmFsdWVzLCBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIHplcm8gb3Igb3Zlcmx5IGxhcmdlIHZhbHVlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgcWRpc2NzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyBjbGFtcGluZyBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAxOjUzLjIzNTg3NDYzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzMzgyMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwODowMTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuY1xcbmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcXG5AQCAtODIsOCArODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlNwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1xcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbitcXHRcXHRxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pO1xcbiBcXHR9IGVsc2VcXG4tXFx0XFx0cXVhbnR1bSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpO1xcbitcXHRcXHRxdWFudHVtID0gbWF4KDI1NlUsICh1MzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpO1xcbiBcXG4gXFx0aWYgKGNsICE9IE5VTEwpIHtcXG4gXFx0XFx0aWYgKHRjYVtUQ0FfUkFURV0pIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xcbmluZGV4IDRmNjc4ZDRmZjEwZWMuLjQ5NDdkZWY3YzQ5ZWYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xcbkBAIC0yMDgsOSArMjA4LDExIEBAIHN0YXRpYyB2b2lkIGR1YWxwaTJfcmVzZXRfY19wcm90ZWN0aW9uKHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEpXFxuIHN0YXRpYyB2b2lkIGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbihzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSwgdTMyIHdjKVxcbiB7XFxuK1xcdHUzMiBtdHUgPSBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksIDEsIDEgXFx1MDAzY1xcdTAwM2MgMjApO1xcbitcXG4gXFx0cS1cXHUwMDNlY19wcm90ZWN0aW9uX3djID0gd2M7XFxuIFxcdHEtXFx1MDAzZWNfcHJvdGVjdGlvbl93bCA9IE1BWF9XQyAtIHdjO1xcbi1cXHRxLVxcdTAwM2VjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkgKlxcbitcXHRxLVxcdTAwM2VjX3Byb3RlY3Rpb25faW5pdCA9IChzMzIpbXR1ICpcXG4gXFx0XFx0KChpbnQpcS1cXHUwMDNlY19wcm90ZWN0aW9uX3djIC0gKGludClxLVxcdTAwM2VjX3Byb3RlY3Rpb25fd2wpO1xcbiBcXHRkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTtcXG4gfVxcbkBAIC0yODUsOCArMjg3LDkgQEAgc3RhdGljIGJvb2wgbXVzdF9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxcbiBcXHR1NjQgbG9jYWxfbF9wcm9iO1xcbiBcXHRib29sIG92ZXJsb2FkO1xcbiBcXHR1MzIgcHJvYjtcXG4rXFx0dTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSBcXHUwMDNjXFx1MDAzYyAyMCk7XFxuIFxcbi1cXHRpZiAoc2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZyBcXHUwMDNjIDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSlcXG4rXFx0aWYgKHNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2cgXFx1MDAzYyAyICogbXR1KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRwcm9iID0gUkVBRF9PTkNFKHEtXFx1MDAzZXBpMl9wcm9iKTtcXG5AQCAtNzEyLDcgKzcxNSw4IEBAIHN0YXRpYyB1MzIgZ2V0X21lbW9yeV9saW1pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxpbWl0KVxcbiBcXHQvKiBBcHBseSBydWxlIG9mIHRodW1iLCBpLmUuLCBkb3VibGluZyB0aGUgcGFja2V0IGxlbmd0aCxcXG4gXFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LlxcbiBcXHQgKi9cXG4tXFx0dTY0IG1lbWxpbSA9IG11bF91MzJfdTMyKGxpbWl0LCAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpO1xcbitcXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgMSwgMSBcXHUwMDNjXFx1MDAzYyAyMCkpO1xcbiBcXG4gXFx0aWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSlcXG4gXFx0XFx0cmV0dXJuIFUzMl9NQVg7XFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXFxuaW5kZXggMjVmY2Y0MDc5ZmVjZS4uZjIzYzhkYzY4ZjhjYiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xcbkBAIC02MzYsNyArNjM2LDcgQEAgc3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcdCAqL1xcbiBcXHRmb3IgKGkgPSBuc3RyaWN0OyBpIFxcdTAwM2MgbmJhbmRzOyBpKyspIHtcXG4gXFx0XFx0aWYgKCFxdWFudGFbaV0pXFxuLVxcdFxcdFxcdHF1YW50YVtpXSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpO1xcbitcXHRcXHRcXHRxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEJlZm9yZSBjb21taXQsIG1ha2Ugc3VyZSB3ZSBjYW4gYWxsb2NhdGUgYWxsIG5ldyBxZGlzY3MgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXFxuaW5kZXggNjE0NGI1Njg2ZjEzZi4uYWI4ZTdjNmFlMjAzOSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcXG5AQCAtOTgwLDcgKzk4MCw3IEBAIHN0YXRpYyBpbnQgZnFfcmVzaXplKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgbG9nKVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBpcV9yYW5nZSA9IHtcXG4tXFx0Lm1heCA9IElOVF9NQVgsXFxuK1xcdC5tYXggPSAxIFxcdTAwM2NcXHUwMDNjIDIwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX3BvbGljeVtUQ0FfRlFfTUFYICsgMV0gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXFxuaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xcbkBAIC0zNDEsNyArMzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcdFxcdFxcdCAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfQkVUQV0pKTtcXG4gXFxuIFxcdGlmICh0YltUQ0FfRlFfUElFX1FVQU5UVU1dKVxcbi1cXHRcXHRXUklURV9PTkNFKHEtXFx1MDAzZXF1YW50dW0sIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pKTtcXG4rXFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VxdWFudHVtLFxcbitcXHRcXHRcXHQgICBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9RVUFOVFVNXSkpKTtcXG4gXFxuIFxcdGlmICh0YltUQ0FfRlFfUElFX01FTU9SWV9MSU1JVF0pXFxuIFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlbWVtb3J5X2xpbWl0LFxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xcbmluZGV4IDk2YWNhYjZhOGRhMDMuLmJiOGU4OTUyZjU1NTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oaGYuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfaGhmLmNcXG5AQCAtNTUxLDcgKzU1MSw3IEBAIHN0YXRpYyBpbnQgaGhmX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9ISEZfUVVBTlRVTV0pXFxuLVxcdFxcdG5ld19xdWFudHVtID0gbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSk7XFxuK1xcdFxcdG5ld19xdWFudHVtID0gbWF4KDI1NlUsIG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfUVVBTlRVTV0pKTtcXG4gXFxuIFxcdGlmICh0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKVxcbiBcXHRcXHRuZXdfaGhmX25vbl9oaF93ZWlnaHQgPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX05PTl9ISF9XRUlHSFRdKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9waWUuYyBiL25ldC9zY2hlZC9zY2hfcGllLmNcXG5pbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfcGllLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX3BpZS5jXFxuQEAgLTM1LDcgKzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcXG4ge1xcbiBcXHR1NjQgcm5kO1xcbiBcXHR1NjQgbG9jYWxfcHJvYiA9IHZhcnMtXFx1MDAzZXByb2I7XFxuLVxcdHUzMiBtdHUgPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcXG4rXFx0dTMyIG10dSA9IGNsYW1wX3QodTMyLCBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSwgMSwgMSBcXHUwMDNjXFx1MDAzYyAyMCk7XFxuIFxcbiBcXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXFxuIFxcdGlmICh2YXJzLVxcdTAwM2VidXJzdF90aW1lIFxcdTAwM2UgMClcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmNcXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXFxuQEAgLTY2MCw2ICs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoY3RsLVxcdTAwM2VxdWFudHVtIFxcdTAwM2UgMSBcXHUwMDNjXFx1MDAzYyAyMCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwicXVhbnR1bSB0b28gbGFyZ2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjdGwtXFx1MDAzZXBlcnR1cmJfcGVyaW9kIFxcdTAwM2MgMCB8fFxcbiBcXHQgICAgY3RsLVxcdTAwM2VwZXJ0dXJiX3BlcmlvZCBcXHUwMDNlIElOVF9NQVggLyBIWikge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiaW52YWxpZCBwZXJ0dXJiIHBlcmlvZFxcXCIpO1xcbkBAIC02ODgsNyArNjkzLDcgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIFxcbiBcXHQvKiB1cGRhdGUgYW5kIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gKi9cXG4gXFx0aWYgKGN0bC1cXHUwMDNlcXVhbnR1bSlcXG4tXFx0XFx0cXVhbnR1bSA9IGN0bC1cXHUwMDNlcXVhbnR1bTtcXG4rXFx0XFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXFx1MDAzZXF1YW50dW0pO1xcbiBcXHRpZiAoY3RsLVxcdTAwM2VmbG93cylcXG4gXFx0XFx0bWF4Zmxvd3MgPSBtaW5fdCh1MzIsIGN0bC1cXHUwMDNlZmxvd3MsIFNGUV9NQVhfRkxPV1MpO1xcbiBcXHRpZiAoY3RsLVxcdTAwM2VkaXZpc29yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAxOjUzLjYyOTg2NDg5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzgxMDk2ODc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0RVQUxQSTJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCIsXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfU0NIX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9QSUVcIixcbiAgICBcIk5FVF9TQ0hfSEhGXCIsXG4gICAgXCJORVRfU0NIX1NGUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRycl9jaGFuZ2VfY2xhc3NcIixcbiAgICBcImR1YWxwaTJfY2hhbmdlXCIsXG4gICAgXCJkdWFscGkyX2luaXRcIixcbiAgICBcImR1YWxwaTJfZW5xdWV1ZV9za2JcIixcbiAgICBcImV0c19xZGlzY19jaGFuZ2VcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfcGllX2NoYW5nZVwiLFxuICAgIFwiaGhmX2NoYW5nZVwiLFxuICAgIFwicGllX2Ryb3BfZWFybHlcIixcbiAgICBcInNmcV9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMgKHFkaXNjcykgdG8gY2xhbXAgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMsIHByZXZlbnRpbmcgaXNzdWVzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBxZGlzY3MgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsYW1waW5nIGxvZ2ljIGJlaGF2ZXMgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5AQCAtODIsOCArODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1wiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuK1x0XHRxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pO1xuIFx0fSBlbHNlXG4tXHRcdHF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcbiBcdGlmIChjbCAhPSBOVUxMKSB7XG4gXHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuQEAgLTIwOCw5ICsyMDgsMTEgQEAgc3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24oc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSlcbiBzdGF0aWMgdm9pZCBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb24oc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsIHUzMiB3YylcbiB7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4rXG4gXHRxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyA9IHdjO1xuIFx0cS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3Yztcbi1cdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICpcbitcdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKW10dSAqXG4gXHRcdCgoaW50KXEtXHUwMDNlY19wcm90ZWN0aW9uX3djIC0gKGludClxLVx1MDAzZWNfcHJvdGVjdGlvbl93bCk7XG4gXHRkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTtcbiB9XG5AQCAtMjg1LDggKzI4Nyw5IEBAIHN0YXRpYyBib29sIG11c3RfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcbiBcdHU2NCBsb2NhbF9sX3Byb2I7XG4gXHRib29sIG92ZXJsb2FkO1xuIFx0dTMyIHByb2I7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4tXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpXG4rXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogbXR1KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcm9iID0gUkVBRF9PTkNFKHEtXHUwMDNlcGkyX3Byb2IpO1xuQEAgLTcxMiw3ICs3MTUsOCBAQCBzdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdClcbiBcdC8qIEFwcGx5IHJ1bGUgb2YgdGh1bWIsIGkuZS4sIGRvdWJsaW5nIHRoZSBwYWNrZXQgbGVuZ3RoLFxuIFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LlxuIFx0ICovXG4tXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4rXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXG4rXHRcdFx0XHRcdFx0ICAgICAxLCAxIFx1MDAzY1x1MDAzYyAyMCkpO1xuIFxuIFx0aWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSlcbiBcdFx0cmV0dXJuIFUzMl9NQVg7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ldHMuYyBiL25ldC9zY2hlZC9zY2hfZXRzLmNcbmluZGV4IDI1ZmNmNDA3OWZlY2UuLmYyM2M4ZGM2OGY4Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5AQCAtNjM2LDcgKzYzNiw3IEBAIHN0YXRpYyBpbnQgZXRzX3FkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0ICovXG4gXHRmb3IgKGkgPSBuc3RyaWN0OyBpIFx1MDAzYyBuYmFuZHM7IGkrKykge1xuIFx0XHRpZiAoIXF1YW50YVtpXSlcbi1cdFx0XHRxdWFudGFbaV0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0XHRxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4gXHR9XG4gXG4gXHQvKiBCZWZvcmUgY29tbWl0LCBtYWtlIHN1cmUgd2UgY2FuIGFsbG9jYXRlIGFsbCBuZXcgcWRpc2NzICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXG5pbmRleCA2MTQ0YjU2ODZmMTNmLi5hYjhlN2M2YWUyMDM5IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0ge1xuLVx0Lm1heCA9IElOVF9NQVgsXG4rXHQubWF4ID0gMSBcdTAwM2NcdTAwM2MgMjAsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZnFfcG9saWN5W1RDQV9GUV9NQVggKyAxXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbkBAIC0zNDEsNyArMzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdFx0ICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pXG4tXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSk7XG4rXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLFxuK1x0XHRcdCAgIG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfTUVNT1JZX0xJTUlUXSlcbiBcdFx0V1JJVEVfT05DRShxLVx1MDAzZW1lbW9yeV9saW1pdCxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xuaW5kZXggOTZhY2FiNmE4ZGEwMy4uYmI4ZTg5NTJmNTU1MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGhmLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfaGhmLmNcbkBAIC01NTEsNyArNTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX0hIRl9RVUFOVFVNXSlcbi1cdFx0bmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTtcbitcdFx0bmV3X3F1YW50dW0gPSBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pXG4gXHRcdG5ld19oaGZfbm9uX2hoX3dlaWdodCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcGllLmMgYi9uZXQvc2NoZWQvc2NoX3BpZS5jXG5pbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9waWUuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9waWUuY1xuQEAgLTM1LDcgKzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbiB7XG4gXHR1NjQgcm5kO1xuIFx0dTY0IGxvY2FsX3Byb2IgPSB2YXJzLVx1MDAzZXByb2I7XG4tXHR1MzIgbXR1ID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXG4gXHRpZiAodmFycy1cdTAwM2VidXJzdF90aW1lIFx1MDAzZSAwKVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTY2MCw2ICs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKGN0bC1cdTAwM2VxdWFudHVtIFx1MDAzZSAxIFx1MDAzY1x1MDAzYyAyMCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcInF1YW50dW0gdG9vIGxhcmdlXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNjIDAgfHxcbiBcdCAgICBjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNlIElOVF9NQVggLyBIWikge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImludmFsaWQgcGVydHVyYiBwZXJpb2RcIik7XG5AQCAtNjg4LDcgKzY5Myw3IEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFxuIFx0LyogdXBkYXRlIGFuZCB2YWxpZGF0ZSBjb25maWd1cmF0aW9uICovXG4gXHRpZiAoY3RsLVx1MDAzZXF1YW50dW0pXG4tXHRcdHF1YW50dW0gPSBjdGwtXHUwMDNlcXVhbnR1bTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXHUwMDNlcXVhbnR1bSk7XG4gXHRpZiAoY3RsLVx1MDAzZWZsb3dzKVxuIFx0XHRtYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLVx1MDAzZWZsb3dzLCBTRlFfTUFYX0ZMT1dTKTtcbiBcdGlmIChjdGwtXHUwMDNlZGl2aXNvcikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDE6NTMuNjI5ODY2MjQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3MTQ4Nzg1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBTY2hlZHVsZXIgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYSBidW5jaCBvZiBmaWxlcyBpbiB0aGUgYG5ldC9zY2hlZC9gIGRpcmVjdG9yeS4gU2VlbXMgbGlrZSBpdCdzIG1haW5seSBhYm91dCBjbGFtcGluZyB0aGUgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMgaW4gdGhlc2UgZGlmZmVyZW50IHF1ZXVpbmcgZGlzY2lwbGluZXMgKHFkaXNjcykgdG8gcHJldmVudCBwcm9ibGVtcy4gSSBzZWUgaXQgdG91Y2hlcyBgc2NoX2Ryci5jYCwgYHNjaF9kdWFscGkyLmNgLCBgc2NoX2V0cy5jYCwgYHNjaF9mcS5jYCwgYHNjaF9mcV9waWUuY2AsIGBzY2hfaGhmLmNgLCBgc2NoX3BpZS5jYCwgYW5kIGBzY2hfc2ZxLmNgLiAgVGhpbmdzIGxpa2UgZW5zdXJpbmcgYHF1YW50dW1gIGlzIGF0IGxlYXN0IDI1NiwgYW5kIG1ha2luZyBzdXJlIGBtdHVgIHN0YXlzIHdpdGhpbiByZWFzb25hYmxlIGJvdW5kcy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0aHJvdWdoIG5ldGxpbmssIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGVzZSBjaGFuZ2VzIHZpYSBgdGMgcWRpc2MgYWRkL2NoYW5nZWAuIEJpbmdvLCB0aGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuXG5cbk15IG5leHQgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGFkZCB0byB0aGUgZnV6emluZyB0YXJnZXQncyBgRm9jdXNTeW1ib2xzYC4gU28sIGxldCdzIGJyZWFrIHRoaXMgZG93biBmaWxlIGJ5IGZpbGU6XG5cbiogICBgc2NoX2Ryci5jYDogVGhlIGNoYW5nZSBpcyBoYXBwZW5pbmcgaW4gYGRycl9jaGFuZ2VfY2xhc3NgLlxuKiAgIGBzY2hfZHVhbHBpMi5jYDogIEkgc2VlIGNoYW5nZXMgaW4gYGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbmAsIGBtdXN0X2Ryb3BgLCBhbmQgYGdldF9tZW1vcnlfbGltaXRgLiAgYGR1YWxwaTJfY2FsY3VsYXRlX2NfcHJvdGVjdGlvbmAgaXMgbGlrZWx5IGhpdCBmcm9tIGBkdWFscGkyX2NoYW5nZWAgb3IgYGR1YWxwaTJfaW5pdGAsIGBtdXN0X2Ryb3BgIGZyb20gYGR1YWxwaTJfZW5xdWV1ZWAsIGFuZCBgZ2V0X21lbW9yeV9saW1pdGAgZnJvbSBgZHVhbHBpMl9pbml0YCBvciBgZHVhbHBpMl9jaGFuZ2VgLiBJIHNob3VsZCBjaGVjayB0aGUgZW50cnlwb2ludHMuXG4qICAgYHNjaF9ldHMuY2A6IGBldHNfcWRpc2NfY2hhbmdlYCBpcyB3aGF0IHRvIGZvY3VzIG9uLlxuKiAgIGBzY2hfZnEuY2A6IEkgc2VlIGBmcV9yZXNpemVgICh3aGljaCBpcyBjYWxsZWQgYnkgYGZxX2NoYW5nZWApLCBhbmQgdGhlIGBmcV9wb2xpY3lgIGRhdGEgc3RydWN0dXJlLlxuKiAgIGBzY2hfZnFfcGllLmNgOiBUaGUgaW50ZXJlc3RpbmcgZnVuY3Rpb24gaGVyZSBpcyBgZnFfcGllX2NoYW5nZWAuXG4qICAgYHNjaF9oaGYuY2A6IFRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgaGhmX2NoYW5nZWAuXG4qICAgYHNjaF9waWUuY2A6IEkgbmVlZCB0byBsb29rIGF0IGVpdGhlciBgcGllX2Ryb3BfZWFybHlgIG9yIGBwaWVfZW5xdWV1ZWAuXG4qICAgYHNjaF9zZnEuY2A6IFRoZSBwbGFjZSB0byBmb2N1cyB3aWxsIGJlIGBzZnFfY2hhbmdlYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIHRoZSBvbmVzIHdlJ2xsIHRhcmdldC4gSSByZW1lbWJlciBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBnZW5lcmljLCBJIHdhbnQgdGhlIHNwZWNpZmljIG9uZXMgZm9yIGVhY2ggcWRpc2MuXG5cbiogICBgc2NoX2Ryci5jYDogYGRycl9jaGFuZ2VfY2xhc3NgIGlzIG91ciBgUWRpc2NfY2xhc3Nfb3BzLmNoYW5nZWAgZW50cnkuXG4qICAgYHNjaF9kdWFscGkyLmNgOiBgZHVhbHBpMl9jaGFuZ2VgLCBgZHVhbHBpMl9pbml0YCwgYW5kIHBvdGVudGlhbGx5IGBkdWFscGkyX2VucXVldWVgLlxuKiAgIGBzY2hfZXRzLmNgOiBgZXRzX3FkaXNjX2NoYW5nZWAuXG4qICAgYHNjaF9mcS5jYDogYGZxX2NoYW5nZWAuXG4qICAgYHNjaF9mcV9waWUuY2A6IGBmcV9waWVfY2hhbmdlYC5cbiogICBgc2NoX2hoZi5jYDogYGhoZl9jaGFuZ2VgLlxuKiAgIGBzY2hfcGllLmNgOiBPa2F5LCBgcGllX2Ryb3BfZWFybHlgICppc250KiBleHBvcnRlZCwgYnV0IGlzIGluIGBzY2hfcGllLmNgIGJ1dCBjYWxsZWQgYnkgYHNjaF9waWVgIGFuZCBgc2NoX2ZxX3BpZWAuIEknbGwgY2hlY2sgYHBpZV9kcm9wX2Vhcmx5YCBvciBgcGllX2VucXVldWVgLlxuKiAgIGBzY2hfc2ZxLmNgOiBgc2ZxX2NoYW5nZWAuXG5cbkknbSB0aGlua2luZyBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIG5leHQgdG8gdmVyaWZ5IGFsbCBvZiB0aGlzIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDI6MDguMzQ0NzQ3NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNDkzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZHJyX2NoYW5nZV9jbGFzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2Ryci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmM9NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRycl9wb2xpY3lbVENBX0RSUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNTctXFxubmV0L3NjaGVkL3NjaF9kcnIuYzo1ODpzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxubmV0L3NjaGVkL3NjaF9kcnIuYy01OS1cXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMjowOC4zODgxMDI0OTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3Nzg1NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgc2NoX2R1YWxwaTIuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGR1YWwtUEkyIHN5c3RlbSBpcyBpbml0aWFsaXppbmcgYW5kIHJlc3BvbmRpbmcgdG8gY2hhbmdlcy4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYHNjaF9kdWFscGkyLmNgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBjaGFuZ2UgaGFuZGxpbmcg4oCTIHNvIHRoYXQgbWVhbnMgSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGBkdWFscGkyX2luaXRgIGFuZCBgZHVhbHBpMl9jaGFuZ2VgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgcnVudGltZSBiZWhhdmlvci4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgYXJjaGl0ZWN0ZWQsIHdoYXQgdGhleSBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgdGhpbmdzIGNvdWxkIGdldCB0cmlja3kuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAyOjEyLjM4NTg5MTYyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjUyMjk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBkdWFscGkyX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz03Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGR1YWxwaTJfcG9saWN5W1RDQV9EVUFMUEkyX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzk0LVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jOjc5NTpzdGF0aWMgaW50IGR1YWxwaTJfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzk2LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMjoxMi40Mzg0MjcxOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg5ODQ1NzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBkdWFscGkyX2luaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgYGR1YWxwaTJfaW5pdGAuIFRoaXMgbmFtZSBzdWdnZXN0cyBpbml0aWFsaXphdGlvbiwgc28gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc2V0dXAgbG9naWMgcmVsYXRlZCB0byBhIGBkdWFscGkyYCBtb2R1bGUgb3Igc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGFyY2hpdGVjdHVyZSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqTWVtb3J5IEFsbG9jYXRpb246KiogSXMgaXQgc2V0dGluZyB1cCBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBidWZmZXJzLCBsb29rdXAgdGFibGVzLCBvciBjb250cm9sIHJlZ2lzdGVycz8gSWYgc28sIHdoYXQgYXJlIHRoZSBzaXplcyBhbmQgcHVycG9zZSBvZiBlYWNoIGFsbG9jYXRpb24/XG4qICAgKipIYXJkd2FyZSBDb25maWd1cmF0aW9uOioqIElzIGl0IHdyaXRpbmcgdG8gYW55IGhhcmR3YXJlIHJlZ2lzdGVycz8gSWYgc28sIHdoYXQgYXJlIHRob3NlIHJlZ2lzdGVycyBhbmQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIHdyaXR0ZW4/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgY2xvY2sgc3BlZWRzLCBpbnRlcnJ1cHQgZW5hYmxlcywgb3IgcGVyaXBoZXJhbCBtb2Rlcy5cbiogICAqKlJlc291cmNlIEluaXRpYWxpemF0aW9uOioqIEFyZSB0aGVyZSBhbnkgbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYmVpbmcgaW5pdGlhbGl6ZWQ/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UsIHdobyB1c2VzIHRoZW0sIGFuZCB3aGF0IGNyaXRpY2FsIHNlY3Rpb25zIHRoZXkgcHJvdGVjdC5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgY2hlY2tzIGZvciBwb3RlbnRpYWwgZmFpbHVyZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzPyBJZiBzbywgd2hhdCBhcmUgdGhlIGZhaWx1cmUgY29uZGl0aW9ucyBhbmQgdGhlIGVycm9yIHJlY292ZXJ5L3JlcG9ydGluZyBtZWNoYW5pc21zP1xuKiAgICoqRGVwZW5kZW5jeSBDaGVja2luZzoqKiBEb2VzIHRoaXMgcm91dGluZSBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBoYXJkd2FyZSBjb21wb25lbnRzIGJlaW5nIGluaXRpYWxpemVkIGZpcnN0PyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgb3JkZXIgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhleSdyZSBhZGhlcmVkIHRvLlxuKiAgICoqUGFyYW1ldGVyIENoZWNraW5nOioqIERvZXMgYGR1YWxwaTJfaW5pdGAgcGVyZm9ybSBhbnkgdmFsaWRhdGlvbiBvZiBpbnB1dCBwYXJhbWV0ZXJzPyBJZiBzbywgd2hhdCBhcmUgdGhlIGFsbG93ZWQgcmFuZ2VzIGFuZCB3aGF0IGhhcHBlbnMgaWYgaW52YWxpZCB2YWx1ZXMgYXJlIHBhc3NlZD9cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGFzcGVjdHMgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwaXRmYWxscy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uJ3MgZXhhY3Qgcm9sZSBpcyBjcml0aWNhbCBiZWZvcmUgd29ya2luZyBvbiBhbnkgc3lzdGVtLWxldmVsIGNvZGUsIEkgc2hvdWxkIGhhdmUgYW4gZXhjZWxsZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBpbml0aWFsIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV0dXJlIG9wdGltaXphdGlvbiBvciBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMjo1My4zMzY4ODYzOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzIyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZHVhbHBpMl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jPTk0OT1zdGF0aWMgdm9pZCBkdWFscGkyX3Jlc2V0X2RlZmF1bHQoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy05NzMtXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmM6OTc0OnN0YXRpYyBpbnQgZHVhbHBpMl9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtOTc1LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDI6NTMuMzgxNzIxNzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODI3MTMxODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZXRzX3FkaXNjX2NoYW5nZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNpbXBsZTogSSd2ZSBjb21lIGFjcm9zcyBgZXRzX3FkaXNjX2NoYW5nZWAgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRyYWZmaWMgc2hhcGluZyBhbmQgUXVhbGl0eSBvZiBTZXJ2aWNlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYmVoYXZpb3I/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIHF1ZXVpbmcgZGlzY2lwbGluZSBpdHNlbGY/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBvciBpcyBpdCBhIG1vcmUgZ2VuZXJpYyBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoeSBpdCdzIG9uIG15IHJhZGFyIGFuZCB3aGF0IGFzcGVjdCBvZiBpdCBJIHNob3VsZCBiZSBtb3N0IGZvY3VzZWQgb24uIExldCdzIHNlZSB3aGF0J3MgaW52b2x2ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzowMC4yMDg4NTcxMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjU0NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IGV0c19xZGlzY19jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9ldHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2V0cy5jPTU0Nj1zdGF0aWMgaW50IGV0c19xZGlzY19xdWFudGFfcGFyc2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKnF1YW50YV9hdHRyLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9ldHMuYy01ODItXFxubmV0L3NjaGVkL3NjaF9ldHMuYzo1ODM6c3RhdGljIGludCBldHNfcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9ldHMuYy01ODQtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MDAuMjYxNTIwOTY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDUyODc2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgZnFfY2hhbmdlYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYGZxX2NoYW5nZWAuIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhhdCBjb3VsZCBtZWFuIGZyZXF1ZW5jeSBjaGFuZ2UsIGZsdXggY2hhbmdlLCBmZWF0dXJlIHF1YWxpdHkgY2hhbmdlLCBvciBldmVuIGEgZnVuY3Rpb25hbCBxdWVyeSBjaGFuZ2UgLSBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoaWNoIGludGVycHJldGF0aW9uIGlzIG1vc3QgbGlrZWx5IGdpdmVuIHRoZSBwcm9ibGVtIEknbSB0YWNrbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIElzIGl0IHN0YWJsZT8gSXMgaXQgZXhoaWJpdGluZyB1bnVzdWFsIGJlaGF2aW9yPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyB2YWx1ZSBvciBsYWNrIHRoZXJlb2Y/IFRoZSBzcGVjaWZpY3Mgb2Ygd2hhdCdzICppbXBsaWVkKiBieSBgZnFfY2hhbmdlYCBhcmUgY3J1Y2lhbCB0byB0aGUgbmV4dCBzdGVwcy4gSSdtIHRoaW5raW5nLCBcIklzIHRoZXJlIHNvbWV0aGluZyBJIHNob3VsZCBiZSBhbnRpY2lwYXRpbmc/XCIuIEl0J3MgYSBrZXkgdmFyaWFibGUsIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkYXRhIG9yIGNvZGUgd2hlcmUgdGhpcyBpcyBkZWZpbmVkIGFuZCBsb29rIGZvciB0aGUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MDMuOTA2ODEzNzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc4NzA0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBmcV9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZnEuYz0xMDUyPXN0YXRpYyBpbnQgZnFfbG9hZF9wcmlvbWFwKHN0cnVjdCBmcV9zY2hlZF9kYXRhICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEwNzMtXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEwNzQ6c3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3NS1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MDMuOTU4NjA3MzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njk3NzczNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgZnFfcGllX2NoYW5nZWAgdmFyaWFibGUgb3IgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyB3b3JrLCBgZnFfcGllX2NoYW5nZWAgaXMgbGlrZWx5IGEga2V5IGluZGljYXRvciwgYSBjcnVjaWFsIG1ldHJpYywgb3IgdGhlIG5hbWUgb2YgYSBjYWxjdWxhdGlvbiBvciB2aXN1YWxpemF0aW9uLiBHaXZlbiB0aGUgdHlwaWNhbCBzY29wZSBvZiBteSB3b3JrLCBpdCBsaWtlbHkgcmVmbGVjdHMgYSBjaGFuZ2UgaW4gZnJlcXVlbmN5LCBhIHNoaWZ0IGluIHByb3BvcnRpb25hbCByZXByZXNlbnRhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgY2hhbmdlIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluIHBpZSBjaGFydC4gTXkgYXR0ZW50aW9uIGhlcmUgc2hvd3MgSSBhbSBsaWtlbHkgaW4gdGhlIGludmVzdGlnYXRpdmUgcGhhc2UuIEknbSBjaGVja2luZyBpdHMgdmFsdWVzLCBpdHMgaW1wYWN0LCBvciB0aGUgZm9ybXVsYSB3aGljaCBkZWZpbmVzIHRoZSBwaWUgY2hhcnQsIGxpa2VseSBpbiByZXNwb25zZSB0byBhbiBhbm9tYWx5IG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkLiBUaGVyZSBpcyBhIGxvdCByaWRpbmcgb24gdGhpcyBjaGVjay4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgZnVydGhlciBzdGVwcyBpbnZvbHZlZCBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiB0aGlzIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjA3LjUyODM4ODAyNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjU4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZnFfcGllX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZnFfcGllLmM9MjM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfcGllX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jLTI4Ni1cXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jOjI4NzpzdGF0aWMgaW50IGZxX3BpZV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jLTI4OC1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzowNy41NzM4NTcyMDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0NDk4ODMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYGhoZl9jaGFuZ2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdG8gY2hlY2sgYGhoZl9jaGFuZ2VgLiBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGl0J3MgZG9pbmcgYW5kIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBhbmQgZW5zdXJlIGl0IGlzIGZ1bmN0aW9uaW5nIGFzIGludGVuZGVkLiBUaGlzIGluY2x1ZGVzIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCBib3VuZGFyeSBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaXRzIGRlZmluaXRpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGlucHV0IHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgb24gb3RoZXIgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcy4gVGhlbiBJIHdpbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggc29tZSB0ZXN0IGNhc2VzIHRvIGNoZWNrIGl0IGlzIGJlaGF2aW5nIGhvdyBJIGV4cGVjdC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdvcmtmbG93LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIGl0IGlzIHRoZSBzb3VyY2Ugb2YgYSBwb3RlbnRpYWwgaXNzdWUuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIG15IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxMi41MTg4NDg4OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjM3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IGhoZl9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9oaGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hoZi5jPTUyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGhmX3BvbGljeVtUQ0FfSEhGX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oaGYuYy01MzYtXFxubmV0L3NjaGVkL3NjaF9oaGYuYzo1Mzc6c3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9oaGYuYy01MzgtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxMi41NjIwOTAwNjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MjQwMTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIGFueXRoaW5nLCBpdCdzIGFsd2F5cyBzbWFydCB0byBoYXZlIGEgcXVpY2sgZ2xhbmNlLiBJJ20gZ29pbmcgdG8gY2hlY2sgb3V0IGBzZnFfY2hhbmdlYC4gVGhhdCdzIGxpa2VseSB0aGUga2V5LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUuIExldCdzIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlbiBidWlsZCB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxNi4xMDQ0OTQzMDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjAwNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IHNmcV9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9zZnEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3NmcS5jPTYwND1zdGF0aWMgdm9pZCBzZnFfcGVydHVyYmF0aW9uKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjktXFxubmV0L3NjaGVkL3NjaF9zZnEuYzo2MzA6c3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9zZnEuYy02MzEtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoxNi4xNDg3MDAwNTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4ODY1NDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcGllX2Ryb3BfZWFybHlgIGluIGBzY2hfcGllLmNgKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYmVoYXZpb3Igb2YgYHBpZV9kcm9wX2Vhcmx5YCBpbiBgc2NoX3BpZS5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NoZWR1bGVyIGFuZCBQSUUgKFByaW9yaXR5IEluaGVyaXRhbmNlIGFuZCBFeGNsdXNpb24pLCB0aGlzIHN1Z2dlc3RzIGEgY3JpdGljYWwgcGF0aCBJIG5lZWQgdG8gcmV2aWV3LiBJIGltbWVkaWF0ZWx5IGhhdmUgcXVlc3Rpb25zLiBJcyB0aGlzIHJlbGF0ZWQgdG8gZWFybHkgZGVhZGxpbmUgbWlzcyBkZXRlY3Rpb24/IEFtIEkgbG9va2luZyBhdCBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSB0YXNrcyBhcmUgcHJlbWF0dXJlbHkgZHJvcHBlZD8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBzZWN0aW9uIG9mIGNvZGUgSSBzaG91bGQgYmUgYXdhcmUgb2YsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbWlzc2VkIGRlYWRsaW5lcyBvciB1bmV4cGVjdGVkIHN5c3RlbSBiZWhhdmlvcj8gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHByaW9yaXR5IGluaGVyaXRhbmNlIHdpdGggZXhjbHVzaW9uLiBUaGlzIGNvdWxkIG1lYW4gZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBob3cgUElFIGhhbmRsZXMgcHJlZW1wdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZ2V0dGluZyBpbnRvIHRoZSBjb2RlIGFuZCBxdWlja2x5IGRldGVybWluZSB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzoyMC44MzczNTc2ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTAzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/Ym9vbCBwaWVfZHJvcF9lYXJseVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3BpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmM9MjU9c3RydWN0IHBpZV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzItXFxubmV0L3NjaGVkL3NjaF9waWUuYzozMzpib29sIHBpZV9kcm9wX2Vhcmx5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzQtXFx0XFx0ICAgIHN0cnVjdCBwaWVfdmFycyAqdmFycywgdTMyIGJhY2tsb2csIHUzMiBwYWNrZXRfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MjAuODg2ODY5Mzk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDcwOTI4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGllX2Ryb3BfZWFybHlgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHBpZV9kcm9wX2Vhcmx5YCBpcyBhIGtleSBmdW5jdGlvbiwgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgYHNjaF9waWVgIGFuZCBgc2NoX2ZxX3BpZWAuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBkaXZlIGludG8gYHBpZV9lbnF1ZXVlYCB3aXRoaW4gYHNjaF9waWUuY2AsIHNlZSBpZiB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4gQnV0IHdhaXQsIGZvY3VzaW5nIG9uIGBwaWVfZHJvcF9lYXJseWAgbWFrZXMgbW9yZSBzZW5zZS4gSXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgYW5kIHRoYXQgYWxvbmUgbWFrZXMgaXQgYSBjYW5kaWRhdGUgZm9yIHNjcnV0aW55LiBIbW0uLi4gTGV0J3MgY29uZmlybSB0aGF0IGl0IGlzbid0IHN0YXRpYy4gR29vZCwgaXQncyBub3QuIEJ1dCBob2xkIG9uLCB0aGUgY2FsbGluZyBwb2ludHMgb2YgYHBpZV9kcm9wX2Vhcmx5YCBhcmUgYHBpZV9lbnF1ZXVlYCBhbmQgYGZxX3BpZV9xZGlzY19lbnF1ZXVlYCB3aGljaCBtZWFucyBpdCdzIG5vdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gTGV0IG1lIGNoZWNrIHRoZSBgcGllX2VucXVldWVgIGZ1bmN0aW9uIGluIGBzY2hfcGllLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjI1LjQ5Mzk2NTUzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNjcxNzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/aW50IHBpZV9lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjI1LjU0MjE0MDA1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg4MTIwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFNjaGVkdWxlciBRdWV1ZSBJc3N1ZSoqXG5cbkhtbSwgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgcHJvYmxlbSB3aXRoIHRoZSBzY2hlZHVsZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQSUUgKFByaW9yaXR5IEluaGVyaXRhbmNlIEVuZ2luZSkgcXVldWUuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlIGBzY2hfcGllLmNgIGZpbGUgKm1pZ2h0KiBiZSBtaXNzaW5nIGEga2V5IGZ1bmN0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgcGllX2VucXVldWVgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcHVzaGluZyB0YXNrcyBvbnRvIHRoZSBQSUUgcXVldWUuIEJlZm9yZSBJIGdvIGRvd24gYSByYWJiaXQgaG9sZSwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBxdWlja2x5IHZlcmlmeSBpZiBgc2NoX3BpZS5jYCBldmVuICpjb250YWlucyogYW4gYGVucXVldWVgIGZ1bmN0aW9uIGF0IGFsbC4gQmVzdCB0byBjb25maXJtIHRoYXQgYmFzZSBhc3N1bXB0aW9uIGJlZm9yZSBhc3N1bWluZyBhIHByb2JsZW0uIEEgc2ltcGxlIGdyZXAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gc2VlIGlmIHRoZSBmaWxlIGhhbmRsZXMgdGhlIGVucXVldWUgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6MjkuMDMwMjYzMDAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExNjc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9waWUuYz04Mz1FWFBPUlRfU1lNQk9MX0dQTChwaWVfZHJvcF9lYXJseSk7XFxubmV0L3NjaGVkL3NjaF9waWUuYy04NC1cXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjg1OnN0YXRpYyBpbnQgcGllX3FkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9waWUuYy04Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtODktXFx0c3RydWN0IHBpZV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfcGllLmM6OTA6XFx0Ym9vbCBlbnF1ZXVlID0gZmFsc2U7XFxubmV0L3NjaGVkL3NjaF9waWUuYy05MS1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMTAwLVxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWxlbikpIHtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEwMTpcXHRcXHRlbnF1ZXVlID0gdHJ1ZTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwMi1cXHR9IGVsc2UgaWYgKHEtXFx1MDAzZXBhcmFtcy5lY24gXFx1MDAyNlxcdTAwMjYgKHEtXFx1MDAzZXZhcnMucHJvYiBcXHUwMDNjPSBNQVhfUFJPQiAvIDEwKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3NjaGVkL3NjaF9waWUuYy0xMDctXFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VzdGF0cy5lY25fbWFyaywgcS1cXHUwMDNlc3RhdHMuZWNuX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jOjEwODpcXHRcXHRlbnF1ZXVlID0gdHJ1ZTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTEwOS1cXHR9XFxubmV0L3NjaGVkL3NjaF9waWUuYy0xMTAtXFxubmV0L3NjaGVkL3NjaF9waWUuYzoxMTE6XFx0Lyogd2UgY2FuIGVucXVldWUgdGhlIHBhY2tldCAqL1xcbm5ldC9zY2hlZC9zY2hfcGllLmM6MTEyOlxcdGlmIChlbnF1ZXVlKSB7XFxubmV0L3NjaGVkL3NjaF9waWUuYzoxMTM6XFx0XFx0LyogU2V0IGVucXVldWUgdGltZSBvbmx5IHdoZW4gZHFfcmF0ZV9lc3RpbWF0b3IgaXMgZGlzYWJsZWQuICovXFxubmV0L3NjaGVkL3NjaF9waWUuYy0xMTQtXFx0XFx0aWYgKCFxLVxcdTAwM2VwYXJhbXMuZHFfcmF0ZV9lc3RpbWF0b3IpXFxubmV0L3NjaGVkL3NjaF9waWUuYzoxMTU6XFx0XFx0XFx0cGllX3NldF9lbnF1ZXVlX3RpbWUoc2tiKTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTExNi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMTIwLVxcbm5ldC9zY2hlZC9zY2hfcGllLmM6MTIxOlxcdFxcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xcbm5ldC9zY2hlZC9zY2hfcGllLmMtMTIyLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmM9MjEyPXZvaWQgcGllX3Byb2Nlc3NfZGVxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9waWUuYy0yMjItXFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2VxZGVsYXksXFxubmV0L3NjaGVkL3NjaF9waWUuYzoyMjM6XFx0XFx0XFx0ICAgYmFja2xvZyA/IG5vdyAtIHBpZV9nZXRfZW5xdWV1ZV90aW1lKHNrYikgOiAwKTtcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTIyNC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmM9NTUxPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHBpZV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtNTUzLVxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgcGllX3NjaGVkX2RhdGEpLFxcbm5ldC9zY2hlZC9zY2hfcGllLmM6NTU0OlxcdC5lbnF1ZXVlXFx0PSBwaWVfcWRpc2NfZW5xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX3BpZS5jLTU1NS1cXHQuZGVxdWV1ZVxcdD0gcGllX3FkaXNjX2RlcXVldWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjI5LjA3NTM4NTQ4OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA2MDk2MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQSUUgUWRpc2MgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBwaWVfcWRpc2NfZW5xdWV1ZWAgZnVuY3Rpb24uIEJ1dCwgaG9sZCBvbiwgYHBpZV9kcm9wX2Vhcmx5YCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgbW9kaWZpZWQsIHNvIHRoYXQncyB0aGUgcmVhbCBrZXkgaGVyZS4gSSBjYW4ganVzdCBsaXN0IHRoYXQgZnVuY3Rpb24gdG8gdHJhY2sgaXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBxdWV1aW5nIGRpc2NpcGxpbmVzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQ6XG5cbiogICBgc2NoX2Ryci5jYCByZXF1aXJlcyBgTkVUX1NDSF9EUlJgLiBNYWtlcyBzZW5zZS5cbiogICBgc2NoX2R1YWxwaTIuY2AgbmVlZHMgYE5FVF9TQ0hfRFVBTFBJMmAuIFJpZ2h0LlxuKiAgIGBzY2hfZXRzLmNgIHVzZXMgYE5FVF9TQ0hfRVRTYC4gU3RhbmRhcmQuXG4qICAgYHNjaF9mcS5jYCBkZXBlbmRzIG9uIGBORVRfU0NIX0ZRYC4gT2YgY291cnNlLlxuKiAgIGBzY2hfZnFfcGllLmNgIHVzZXMgYE5FVF9TQ0hfRlFfUElFYC4gVGhpcyBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLlxuKiAgIGBzY2hfaGhmLmNgIG5lZWRzIGBORVRfU0NIX0hIRmAuXG4qICAgYHNjaF9waWUuY2Agb2J2aW91c2x5IG5lZWRzIGBORVRfU0NIX1BJRWAuXG4qICAgQW5kIGBzY2hfc2ZxLmNgIHdhbnRzIGBORVRfU0NIX1NGUWAuXG5cblRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgc3ltYm9scyBtYXRjaCB1cCB3aXRoIHdoYXQncyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gdmVyaWZ5IHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhc3BlY3RzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMSwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzozNC44ODE0ODM4NDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIXyhEUlJ8RFVBTFBJMnxFVFN8RlF8RlFfUElFfEhIRnxQSUV8U0ZRKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0xMDA9Y29uZmlnIE5FVF9TQ0hfU0ZCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xMTAtXFxubmV0L3NjaGVkL0tjb25maWc6MTExOmNvbmZpZyBORVRfU0NIX1NGUVxcbm5ldC9zY2hlZC9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZSBcXFwiU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTE5NT1jb25maWcgTkVUX1NDSF9ORVRFTVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjA2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjIwNzpjb25maWcgTkVUX1NDSF9EUlJcXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXFxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0yODg9Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjk4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI5OTpjb25maWcgTkVUX1NDSF9GUVxcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTMxMi1cXG5uZXQvc2NoZWQvS2NvbmZpZzozMTM6Y29uZmlnIE5FVF9TQ0hfSEhGXFxubmV0L3NjaGVkL0tjb25maWctMzE0LVxcdHRyaXN0YXRlIFxcXCJIZWF2eS1IaXR0ZXIgRmlsdGVyIChISEYpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzIxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjMyMjpjb25maWcgTkVUX1NDSF9QSUVcXG5uZXQvc2NoZWQvS2NvbmZpZy0zMjMtXFx0dHJpc3RhdGUgXFxcIlByb3BvcnRpb25hbCBJbnRlZ3JhbCBjb250cm9sbGVyIEVuaGFuY2VkIChQSUUpIHNjaGVkdWxlclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTMzMy1cXG5uZXQvc2NoZWQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVF9TQ0hfRlFfUElFXFxubmV0L3NjaGVkL0tjb25maWctMzM1LVxcdGRlcGVuZHMgb24gTkVUX1NDSF9QSUVcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0zODgtXFxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xcbm5ldC9zY2hlZC9LY29uZmlnLTM5MC1cXHR0cmlzdGF0ZSBcXFwiRW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00MTctXFxubmV0L3NjaGVkL0tjb25maWc6NDE4OmNvbmZpZyBORVRfU0NIX0RVQUxQSTJcXG5uZXQvc2NoZWQvS2NvbmZpZy00MTktXFx0dHJpc3RhdGUgXFxcIkR1YWwgUXVldWUgUEkgU3F1YXJlIChEVUFMUEkyKSBzY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjM0LjkyNjk5MDM5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg4NTE1OTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBTY2hlZHVsZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMgaGVyZTogYE5FVF9TQ0hfRFJSYCwgYE5FVF9TQ0hfRFVBTFBJMmAsIGBORVRfU0NIX0VUU2AsIGBORVRfU0NIX0ZRYCwgYE5FVF9TQ0hfRlFfUElFYCwgYE5FVF9TQ0hfSEhGYCwgYE5FVF9TQ0hfUElFYCwgYW5kIGBORVRfU0NIX1NGUWAuIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB0aGluZ3MgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgYW5kIGRlcGxveW1lbnQsIHNvIEknbGwgc3RhcnQgd2l0aCBgTkVUX1NDSF9GUV9QSUVgLiBSaWdodCwgaXQgbG9va3MgbGlrZSBgTkVUX1NDSF9GUV9QSUVgIGRlcGVuZHMgb24gYE5FVF9TQ0hfUElFYC4gR29vZCB0byBrbm93LiBOb3csIGhvdyBhYm91dCBgTkVUX1NDSF9EVUFMUEkyYD8gRG9lcyB0aGF0IG9uZSBoYXZlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0YWtlIGEgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowMzo0Ny44MTIxNTI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE4ODM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9EVUFMUEkyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQwNj1jb25maWcgTkVUX1NDSF9CUEZcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQxNy1cXG5uZXQvc2NoZWQvS2NvbmZpZzo0MTg6Y29uZmlnIE5FVF9TQ0hfRFVBTFBJMlxcbm5ldC9zY2hlZC9LY29uZmlnLTQxOS1cXHR0cmlzdGF0ZSBcXFwiRHVhbCBRdWV1ZSBQSSBTcXVhcmUgKERVQUxQSTIpIHNjaGVkdWxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6NDcuODU1MzQ0MDM3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTM1MzI1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYE5FVF9TQ0hfRFVBTFBJMmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgTkVUX1NDSF9EVUFMUEkyYCBibG9jay4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBjb250ZXh0IGhlcmUuIEp1c3Qga25vd2luZyB0aGUgbmFtZSBhbG9uZSBpc24ndCBlbm91Z2g7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiwgdGhlIG90aGVyIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkIGEgcmVhbCB1bmRlcnN0YW5kaW5nLiBXaGF0IG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgdmFyaWFibGVzIGFyZSBpbmZsdWVuY2luZyBpdHMgZXhlY3V0aW9uPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSB0byBkZXRlcm1pbmUgd2hhdCBpdCdzIHJlYWxseSBkb2luZywgYW5kIHdoYXQgcG90ZW50aWFsIGlzc3VlcyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIuIFNob3cgbWUgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQ3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6NTIuMjQ4ODc4NTM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxOCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxODpcXHRjb25maWcgTkVUX1NDSF9EVUFMUEkyXFxuIDQxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVhbCBRdWV1ZSBQSSBTcXVhcmUgKERVQUxQSTIpIHNjaGVkdWxlclxcXCJcXG4gNDIwOlxcdFxcdGhlbHBcXG4gNDIxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIER1YWwgUXVldWUgUHJvcG9ydGlvbmFsIEludGVncmFsXFxuIDQyMjpcXHRcXHQgIENvbnRyb2xsZXIgSW1wcm92ZWQgd2l0aCBhIFNxdWFyZSBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gNDIzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzkzMzJcXG4gNDI0OlxcdFxcbiA0MjU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDQyNjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9kdWFscGkyLlxcbiA0Mjc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjUyLjI0ODk3NTA1OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI0OTcwMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYE5FVF9TQ0hfRlFfUElFYCxcIiBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBTY2hlZHVsZXI6IEZRLVBJRSoqXG5cbkFscmlnaHQsIHRoYXQgcGhyYXNlIFwiTkVUX1NDSF9GUV9QSUVcIiDigJMgdGhhdCdzIGEgdHJpZ2dlci4gSXQgaW1tZWRpYXRlbHkgdGhyb3dzIG1lIGludG8gdGhlIHdvcmxkIG9mIG5ldHdvcmsgc2NoZWR1bGluZywgYW5kIHNwZWNpZmljYWxseSwgdGhlIEZRLVBJRSBxdWV1ZWluZyBkaXNjaXBsaW5lLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSdtIHRoaW5raW5nLCBcIkxldCdzIGRpc3NlY3QgdGhpcy5cIiBJJ20gbWVudGFsbHkgY2hlY2tpbmcgd2hhdCBJIGFscmVhZHkga25vdyBhbmQgd2hlcmUgbXkga25vd2xlZGdlIGdhcHMgYXJlLCBwcmVwYXJpbmcgdG8gYXBwcm9hY2ggdGhpcyBpZGVhLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2NoZWR1bGVyIHdvcmtzLiBJIGFtIHByb2JhYmx5IHByZXBhcmluZyB0byBmaWd1cmUgb3V0IHRoZSBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIHN1Y2ggYSBxdWV1aW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjAzOjU3LjE3Mzk0ODA3MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzQ6XFx0Y29uZmlnIE5FVF9TQ0hfRlFfUElFXFxuIDMzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9TQ0hfUElFXFxuIDMzNjpcXHRcXHR0cmlzdGF0ZSBcXFwiRmxvdyBRdWV1ZSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgY29udHJvbGxlciBFbmhhbmNlZCAoRlEtUElFKVxcXCJcXG4gMzM3OlxcdFxcdGhlbHBcXG4gMzM4OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZsb3cgUXVldWUgUHJvcG9ydGlvbmFsIEludGVncmFsXFxuIDMzOTpcXHRcXHQgIGNvbnRyb2xsZXIgRW5oYW5jZWQgKEZRLVBJRSkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAzNDA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODAzM1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzQzOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2ZxX3BpZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDM6NTcuMTc0MDI5OTYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjE3ODY3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiBcIkxldCdzIHNlZSBgTkVUX1NDSF9QSUVgXCIgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIE5ldHdvcmsgU2NoZWR1bGluZzogTGV0J3MgRXhhbWluZSBORVRfU0NIX1BJRSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBcIkxldCdzIHNlZSBgTkVUX1NDSF9QSUVgXCIg4oCTIHRoYXQncyBhIGRpcmVjdCBwcm9tcHQgZm9yIGludmVzdGlnYXRpb24uIEl0J3MgYSBxdWljayBtZW50YWwgc2hvcnRoYW5kIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIG5ldHdvcmsgc2NoZWR1bGluZy4gVGhlIGltcGxpZWQgcXVlc3Rpb24gaXMsIHdoYXQgY2FuIHdlIGdsZWFuIGZyb20gdGhpcyBlbGVtZW50LCB3aGF0ZXZlciBpdCBpcyBpbiBjb250ZXh0P1xuXG5gTkVUX1NDSF9QSUVgIGxpa2VseSByZXByZXNlbnRzIGEgc3BlY2lmaWMgYWxnb3JpdGhtLCBhIGRhdGEgc3RydWN0dXJlLCBhIHBlcmZvcm1hbmNlIG1ldHJpYywgb3IgYSBjb21wb25lbnQgcmVsYXRlZCB0byBuZXR3b3JrIHNjaGVkdWxpbmcgdXNpbmcgYSAncGllJyBtZXRhcGhvciB0byByZXByZXNlbnQgcHJvcG9ydGlvbmFsIGFsbG9jYXRpb24gLSBpdCBjb3VsZCBiZSBhIGNvbmNlcHQsIG9yIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGUgdXNlIG9mIGEgY29kZS1saWtlIG5hbWUgc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgZWl0aGVyIHRlY2huaWNhbGx5IGRlZmluZWQgb3IgYWxnb3JpdGhtaWNhbGx5IGRyaXZlbi4gSXQgY291bGQgYmUgYW4gYWNyb255bSBvciBhbiBpZGVudGlmaWVyLiBJdCByZXF1aXJlcyB1bnBhY2tpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgcHJvY2VzcyB3b3VsZCBiZSBkcml2ZW4gYnkgdGhlIGZvbGxvd2luZyBwcm9tcHRzOlxuXG4qICAgKipDb250ZXh0OioqIFdoYXQgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlPyBJcyBpdCByZXNvdXJjZSBhbGxvY2F0aW9uLCBRb1MsIGZhaXJuZXNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cbiogICAqKkFzc3VtcHRpb25zOioqIFdoYXQgcHJpb3Iga25vd2xlZGdlIGlzIG5lZWRlZD8gSXMgaXQgaW4gYSB3ZWxsLWRlZmluZWQgZG9tYWluLCBsaWtlIGRhdGEgY2VudGVyIG5ldHdvcmtpbmcsIG9yIGEgbW9yZSBnZW5lcmFsIGNvbmNlcHQ/XG4qICAgKipJbXBsaWNhdGlvbnM6KiogR2l2ZW4gaXRzIHBvdGVudGlhbCBtZWFuaW5nLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgdHJhZGUtb2Zmcz8gRG9lcyB0aGUgJ3BpZScgYXNwZWN0IHN1Z2dlc3QgcHJvcG9ydGlvbmFsIGFsbG9jYXRpb24gb3IgaGllcmFyY2hpY2FsIGRpdmlzaW9uPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFkdmFudGFnZXM/XG4qICAgKipDb25uZWN0aW9uczoqKiBIb3cgZG9lcyBgTkVUX1NDSF9QSUVgIHJlbGF0ZSB0byBvdGhlciBzY2hlZHVsaW5nIHBhcmFkaWdtcyBJJ20gZmFtaWxpYXIgd2l0aD8gSXMgaXQgYSBub3ZlbCBhcHByb2FjaCwgYSByZWZpbmVtZW50IG9mIGFuIGV4aXN0aW5nIHRlY2huaXF1ZSwgb3IgYSBjb21wbGV0ZSBkZXBhcnR1cmU/IFdoYXQgYXJlIHRoZSBjb21tb25hbGl0aWVzIGFuZCBwb2ludHMgb2YgZGlmZmVyZW50aWF0aW9uP1xuXG5UaGlzIHN0YXRlbWVudCBpbXBsaWVzIEkgaGF2ZSBhIG1lbnRhbCBtYXAgb2YgbmV0d29yayBzY2hlZHVsaW5nIGNvbmNlcHRzIGFuZCBhbSByZWFkeSB0byBhcHBseSBteSBleHBlcnRpc2UgdG8gZXZhbHVhdGUgYE5FVF9TQ0hfUElFYCByZWxhdGl2ZSB0byB0aGF0IG1hcC4gVGhlIHVzZSBvZiB0aGUgY29tbWFuZCAnTGV0J3Mgc2VlJyBzdWdnZXN0cyB0aGF0IGl0J3MgbGlrZWx5IGEgY2FsbCB0byByZXZpZXcgdGhlIHN0YXRlIG9mIHRoZSB0ZWNobm9sb2d5IG9yIGNvbmNlcHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgaGlnaCBsZXZlbC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHBsYXlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjAyLjIzNTgxODkwNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjI6XFx0Y29uZmlnIE5FVF9TQ0hfUElFXFxuIDMyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWQgKFBJRSkgc2NoZWR1bGVyXFxcIlxcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgUHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXJcXG4gMzI2OlxcdFxcdCAgRW5oYW5jZWQgc2NoZWR1bGVyIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gMzI3OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgwMzNcXG4gMzI4OlxcdFxcbiAzMjk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDMzMDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9waWUuXFxuIDMzMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MDIuMjM1OTAxNzI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzk0NzA1NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYE5FVF9TQ0hfSEhGYFwiLCBleHByZXNzZWQgYXMgYSBzZXJpZXMgb2YgdGhvdWdodHMgZnJvbSBteSBwZXJzcGVjdGl2ZSwga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBOZXQgU2NoZWR1bGUqKlxuXG5BbHJpZ2h0LCB0aGF0J3Mgd2hhdCB3ZSdyZSBsb29raW5nIGF0LCBgTkVUX1NDSF9ISEZgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGFzIGEgbmV0d29yayBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBvbmUgZGVhbGluZyB3aXRoIGhpZ2gtZnJlcXVlbmN5IGhhbmRsaW5nLiBUaGUgYEhIRmAgc3VmZml4IGlzIGEgY2xlYXIgaW5kaWNhdG9yIOKAkyBsaWtlbHkgcmVmZXJyaW5nIHRvIGEgZmVhdHVyZSBzZXQgb3IgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIGhpZ2ggZnJlcXVlbmN5IHRyYWZmaWMuIE15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udGV4dDsgSXMgdGhpcyBhIHNwZWNpZmljIG1vZHVsZSBuYW1lPyBBIHZhcmlhYmxlPyBBIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUaGUgbm9tZW5jbGF0dXJlIHN1Z2dlc3RzIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJ05FVCcgc2lnbmlmaWVzIGhlcmUuIElzIGl0IGFuIGludGVybmFsIG5ldHdvcmsgbGlicmFyeSwgYSBtb3JlIGdlbmVyYWwgbmV0d29yayByZXNvdXJjZSBsaWtlIGEgTklDLCBvciBhIG5ldHdvcmtpbmcgZGV2aWNlPyBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgZnVsbCB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MTYuMDMwNjExNjU1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTM6XFx0Y29uZmlnIE5FVF9TQ0hfSEhGXFxuIDMxNDpcXHRcXHR0cmlzdGF0ZSBcXFwiSGVhdnktSGl0dGVyIEZpbHRlciAoSEhGKVxcXCJcXG4gMzE1OlxcdFxcdGhlbHBcXG4gMzE2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEhlYXZ5LUhpdHRlciBGaWx0ZXIgKEhIRilcXG4gMzE3OlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzIwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2hoZi5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0Y29uZmlnIE5FVF9TQ0hfUElFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjE2LjAzMDczMDk5NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4MTg2MTk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGBORVRfU0NIX0ZRYFwiLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQgKGxpa2VseSBuZXR3b3JraW5nLCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBvciBzb21ldGhpbmcgc2ltaWxhcik6XG5cbioqRGlnZ2luZyBpbnRvIE5FVF9TQ0hfRlEqKlxuXG5BbHJpZ2h0LCBgTkVUX1NDSF9GUWAuLi4gaG1tLCB0aGF0J3MgYSBmYW1pbGlhciBjb25zdHJ1Y3QuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBsaWtlbHkgY29udGV4dDogbmV0d29yayBzY2hlZHVsaW5nLCBwYXJ0aWN1bGFybHkgaW4gYSBMaW51eCBlbnZpcm9ubWVudCBvciBhIHN5c3RlbSB0aGF0IGRyYXdzIGluc3BpcmF0aW9uIGZyb20gaXQuIFRoZSBcIk5FVFwiIHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyBuZXR3b3JrLXJlbGF0ZWQgb3BlcmF0aW9ucywgYW5kIFwiU0NIXCIgYWxtb3N0IGNlcnRhaW5seSBwb2ludHMgdG8gYSBzY2hlZHVsZXIgb3Igc2NoZWR1bGluZyBtZWNoYW5pc20uIFwiRlFcIiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBwcm9iYWJseSBtZWFucyBGYWlyIFF1ZXVpbmcsIG9yIHBlcmhhcHMgRnJlcXVlbmN5LVF1ZXVpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgaG93IHRoaXMgc2NoZWR1bGVyIG9wZXJhdGVzLiBJcyBpdCBhIGhpZXJhcmNoaWNhbCBzY2hlZHVsZXI/IERvZXMgaXQgdXRpbGl6ZSBwYWNrZXQgY2xhc3NpZmljYXRpb24/IFdoYXQgYWxnb3JpdGhtcyBhcmUgZW1wbG95ZWQgdG8gZW5zdXJlIGZhaXJuZXNzIOKAkyBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSksIERlZmljaXQgUm91bmQgUm9iaW4gKERSUiksIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIGVhY2ggaGFzIGl0cyBvd24gc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzIGluIHRlcm1zIG9mIHRocm91Z2hwdXQsIGxhdGVuY3ksIGFuZCBmYWlybmVzcyB1bmRlciBkaWZmZXJlbnQgbG9hZHMuXG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIHR5cGVzIG9mIGFwcGxpY2F0aW9ucyB0aGlzIHdvdWxkIGJlIHVzZWQgZm9yOiBsYXRlbmN5LXNlbnNpdGl2ZSB0cmFmZmljIGxpa2UgVm9JUCBvciBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMsIG9yIHBlcmhhcHMgYnVsayBkYXRhIHRyYW5zZmVyIHdoZXJlIGZhaXJuZXNzIGlzIHBhcmFtb3VudCB0byBwcmV2ZW50IGFueSBvbmUgZmxvdyBmcm9tIGRvbWluYXRpbmcgdGhlIG5ldHdvcmsuIFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB3b3JrbG9hZCBpcyBjcnVjaWFsLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlcmUgY29uZmlndXJhYmxlIHdlaWdodHM/IFByaW9yaXR5IGxldmVscz8gQmFuZHdpZHRoIGd1YXJhbnRlZXM/IFdoYXQgYWJvdXQgdHJhZmZpYyBzaGFwaW5nPyBBcmUgdGhlcmUgcmVsYXRlZCBjb21wb25lbnRzIHN1Y2ggYXMgdHJhZmZpYyBwb2xpY2luZz8gVGhlIHNwZWNpZmljcyBvZiB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGRlZmluZSBpdHMgcHJhY3RpY2FsIGVmZmVjdGl2ZW5lc3MuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBrbm93IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGluIG9yZGVyIHRvIGJlIHN1cmUgb2YgdGhlIGV4YWN0IG1lYW5pbmcgb2YgdGhpcyBub21lbmNsYXR1cmUuIFdoYXQgYXJlIHRoZSBjb250ZXh0LWRlcGVuZGVudCB2YXJpYWJsZXMgdGhhdCBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMgc2NoZWR1bGVyP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MjcuMTEyNTk1MTM4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5OSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5OTpcXHRjb25maWcgTkVUX1NDSF9GUVxcbiAzMDA6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaXIgUXVldWVcXFwiXFxuIDMwMTpcXHRcXHRoZWxwXFxuIDMwMjpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGUSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdCAgRlEgZG9lcyBmbG93IHNlcGFyYXRpb24sIGFuZCBpcyBhYmxlIHRvIHJlc3BlY3QgcGFjaW5nIHJlcXVpcmVtZW50c1xcbiAzMDU6XFx0XFx0ICBzZXQgYnkgVENQIHN0YWNrIGludG8gc2stXFx1MDAzZXNrX3BhY2luZ19yYXRlIChmb3IgbG9jYWxseSBnZW5lcmF0ZWRcXG4gMzA2OlxcdFxcdCAgdHJhZmZpYylcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjI3LjExMjY3NDI1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE2MjYxMjE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGBORVRfU0NIX0VUU2AsXCIgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBORVRfU0NIX0VUUyoqXG5cbkFscmlnaHQsIHNvIHRoZSBwaHJhc2UgXCJMZXQncyBzZWUgYE5FVF9TQ0hfRVRTYFwiIHBvcHMgdXAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIGludG8gYWN0aW9uLiBcIk5FVF9TQ0hfRVRTXCIuLi4gdGhhdCdzIHByZXR0eSBjbGVhcmx5IHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsaW5nIG9yIHNvbWUgYXNwZWN0IG9mIHRpbWUtc2Vuc2l0aXZlIG5ldHdvcmtpbmcuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyByZWZlcnMgdG8gc29tZSBraW5kIG9mIG5ldHdvcmsgc2NoZWR1bGluZyBhbGdvcml0aG0gb3IgbWVjaGFuaXNtLCBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaW4gZW52aXJvbm1lbnRzIHdoZXJlIGRldGVybWluaXNtIGFuZCBib3VuZGVkIGxhdGVuY3kgYXJlIGNydWNpYWwuXG5cbkkgbmVlZCBtb3JlIGNvbnRleHQsIG9idmlvdXNseSwgYnV0IHRoaXMgY291bGQgZW5jb21wYXNzIGEgcmFuZ2Ugb2YgdG9waWNzIGZyb20gRXRoZXJuZXQgVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZyAoVFNOKSBzdGFuZGFyZHMsIGxpa2UgZnJhbWUgcHJlZW1wdGlvbiBvciB0aW1lLWF3YXJlIHNoYXBlciBpbXBsZW1lbnRhdGlvbnMsIGFsbCB0aGUgd2F5IGRvd24gdG8gbW9yZSBjdXN0b20gb3Igc3BlY2lhbGl6ZWQgc2NoZWR1bGluZyBhbGdvcml0aG1zIHVzZWQgaW4gc3BlY2lmaWMgaW5kdXN0cmlhbCBjb250cm9sIHN5c3RlbXMgb3IgZW1iZWRkZWQgbmV0d29ya2luZyBhcHBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zOiBXaGF0IGtpbmQgb2YgbmV0d29yayBhcmUgd2UgZGVhbGluZyB3aXRoPyBJcyB0aGlzIHdpcmVkIG9yIHdpcmVsZXNzPyBXaGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzPyBMYXRlbmN5PyBKaXR0ZXI/IElzIGl0IGEgcmVhbC10aW1lIHN5c3RlbT8gSG93IHRpZ2h0IGFyZSB0aGUgdGltaW5nIGNvbnN0cmFpbnRzP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBpbmZvcm1hdGlvbiB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIHdoZXRoZXIgaXQgaXMgZm9yIHRoZSBwdXJwb3NlcyBvZiBkZWJ1Z2dpbmcsIGltcGxlbWVudGF0aW9uLCBvciByZXNlYXJjaCwgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6MzkuMjc1Mjg4NDQxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4OSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4OTpcXHRjb25maWcgTkVUX1NDSF9FVFNcXG4gMzkwOlxcdFxcdHRyaXN0YXRlIFxcXCJFbmhhbmNlZCB0cmFuc21pc3Npb24gc2VsZWN0aW9uIHNjaGVkdWxlciAoRVRTKVxcXCJcXG4gMzkxOlxcdFxcdGhlbHBcXG4gMzkyOlxcdCAgICAgICAgICBUaGUgRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbiBzY2hlZHVsZXIgaXMgYSBjbGFzc2Z1bFxcbiAzOTM6XFx0ICAgICAgICAgIHF1ZXVpbmcgZGlzY2lwbGluZSB0aGF0IG1lcmdlcyBmdW5jdGlvbmFsaXR5IG9mIFBSSU8gYW5kIERSUlxcbiAzOTQ6XFx0ICAgICAgICAgIHFkaXNjcyBpbiBvbmUgc2NoZWR1bGVyLiBFVFMgbWFrZXMgaXQgZWFzeSB0byBjb25maWd1cmUgYSBzZXQgb2ZcXG4gMzk1OlxcdCAgICAgICAgICBzdHJpY3QgYW5kIGJhbmR3aWR0aC1zaGFyaW5nIGJhbmRzIHRvIGltcGxlbWVudCB0aGUgdHJhbnNtaXNzaW9uXFxuIDM5NjpcXHQgICAgICAgICAgc2VsZWN0aW9uIGRlc2NyaWJlZCBpbiA4MDIuMVFhei5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRVRTIHBhY2tldCBzY2hlZHVsaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjM5LjI3NTM2ODM2MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg0MzIwNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIE5FVF9TQ0hfRFJSOiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgYE5FVF9TQ0hfRFJSYC4gTXkgaW5pdGlhbCBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB0aGUgY29yZSBjaGFyYWN0ZXJpc3RpY3MuIEl0J3MgYSBuZXR3b3JrIHNjaGVkdWxlciwgbWVhbmluZyBpdHMgZnVuZGFtZW50YWwgam9iIGlzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiBiYW5kd2lkdGggYW1vbmdzdCB2YXJpb3VzIG5ldHdvcmsgZmxvd3Mgb3IgcXVldWVzLiBUaGUgXCJEUlJcIiBoaW50cyBhdCBEZWZpY2l0IFJvdW5kIFJvYmluLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBlbXBsb3lpbmcgYSBmYWlybmVzcyBtZWNoYW5pc20sIGFpbWluZyB0byBwcmV2ZW50IHN0YXJ2YXRpb24gYW5kIGVuc3VyZSBzb21lIGxldmVsIG9mIHNlcnZpY2UgaXNvbGF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHRyYWZmaWMgc3RyZWFtcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmUgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIHN0cmljdCBEUlIgb3IgYSBtb2RpZmllZCB2ZXJzaW9uPyBBcmUgdGhlcmUgYW55IHdlaWdodGluZyBzY2hlbWVzIGludm9sdmVkPyBIb3cgYXJlIGRlZmljaXRzIGRlZmluZWQsIGFuZCB3aGF0J3MgdGhlIHR5cGljYWwgXCJxdWFudHVtXCIgc2l6ZSBmb3IgdGhlc2UgZGVmaWNpdHM/IEtub3dpbmcgdGhlc2Ugc3BlY2lmaWNzIGlzIGNydWNpYWwuIFdpdGhvdXQgdGhpcywgaXQncyBpbXBvc3NpYmxlIHRvIHRydWx5IGFzc2VzcyBpdHMgcGVyZm9ybWFuY2UuXG5cbkknZCB3YW50IHRvIGV4YW1pbmUgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHF1ZXVpbmcgZGlzY2lwbGluZXMuIERvZXMgaXQgcGxheSBuaWNlbHkgd2l0aCBvdGhlciBzY2hlZHVsZXJzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnM/IEhvdyBkb2VzIGl0IGhhbmRsZSBjb25nZXN0aW9uIHNpZ25hbHMsIGxpa2UgRUNOIG9yIGV4cGxpY2l0IGNvbmdlc3Rpb24gbm90aWZpY2F0aW9uPyBEb2VzIGl0IG9mZmVyIGFueSBwcmlvcml0aXphdGlvbiBiZXlvbmQgZmFpcm5lc3M/IFdoYXQgYXJlIGl0cyBsYXRlbmN5IGNoYXJhY3RlcmlzdGljcywgYW5kIGhvdyBkb2VzIGl0IGNvbXBhcmUgdG8gb3RoZXIgcG90ZW50aWFsIHNjaGVkdWxlcnMgZm9yIHJlYWwtdGltZSBhcHBsaWNhdGlvbnM/XG5cbkJleW9uZCB0aGUgYmFzaWNzLCBJJ2QgaW52ZXN0aWdhdGUgdGhlIGtlcm5lbC1sZXZlbCBpbXBsZW1lbnRhdGlvbjogaXMgaXQgaGFyZHdhcmUtYWNjZWxlcmF0ZWQsIG9yIHB1cmVseSBzb2Z0d2FyZT8gVGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyB3aWxsIHN3aW5nIGRyYW1hdGljYWxseSBkZXBlbmRpbmcgb24gdGhhdCBhbnN3ZXIuIEFsc28sIEknZCB3YW50IHRvIGxvb2sgYXQgaXRzIG1lbW9yeSBmb290cHJpbnQuXG5cbkZpbmFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlLiBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3M/IElzIGl0IHByaW1hcmlseSBmb2N1c2VkIG9uIGJhbmR3aWR0aCB1dGlsaXphdGlvbiwgbGF0ZW5jeSBtaW5pbWl6YXRpb24sIG9yIGZhaXJuZXNzPyBIb3cgZG9lcyBpdCBoYW5kbGUgYnVyc3RzIG9mIHRyYWZmaWM/IEkgd2FudCB0byBzZWUgdGhpcyBzY2hlZHVsZXIgaW4gYWN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIG5ldHdvcmsgbG9hZCBzY2VuYXJpb3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBldmFsdWF0ZSBpdHMgZWZmaWNhY3kgZm9yIGEgc3BlY2lmaWMgc2V0IG9mIHJlcXVpcmVtZW50cy4gSSdtIGtlZW4gdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIHRhcmdldCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjQ2LjE1OTY5MjMwN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA3OlxcdGNvbmZpZyBORVRfU0NIX0RSUlxcbiAyMDg6XFx0XFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcbiAyMDk6XFx0XFx0aGVscFxcbiAyMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRGVmaWNpdCBSb3VuZCBSb2JpbiAoRFJSKSBwYWNrZXRcXG4gMjExOlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyMTQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA0OjQ2LjE1OTc5NDQzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzA0MzE4MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipJbnZlc3RpZ2F0aW5nIE5FVF9TQ0hfU0ZRKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYE5FVF9TQ0hfU0ZRYCB0aGluZy4gSXQncyBhIHRyYWZmaWMgc2hhcGVyLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJIHN1c3BlY3QgaXQncyB0aGUgU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyBkaXNjaXBsaW5lLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBpdHMgcHVycG9zZTogZW5zdXJpbmcgZmFpcm5lc3MgaW4gYmFuZHdpZHRoIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYSBjb25nZXN0ZWQgbmV0d29yayBpbnRlcmZhY2UuIEkgYmV0IGl0IHVzZXMgYSBoYXNoIGZ1bmN0aW9uIHRvIGRpc3RyaWJ1dGUgZmxvd3MgaW50byBkaWZmZXJlbnQgcXVldWVzLCBhaW1pbmcgdG8gaXNvbGF0ZSB0aGVtIGZyb20gaGVhZC1vZi1saW5lIGJsb2NraW5nIGlzc3Vlcy5cblxuTm93LCBJJ20gYWxyZWFkeSBzdGFydGluZyB0byB0aGluayBhYm91dCBpdHMgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyBjb21wYXJlZCB0byBvdGhlciBxdWV1aW5nIGRpc2NpcGxpbmVzLiBUaGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBidXJzdHkgdHJhZmZpYyDigJMgaXMgaXQgZ29vZCBhdCBzbW9vdGhpbmcgdGhvc2Ugb3V0LCBvciBkb2VzIGl0IGludHJvZHVjZSBsYXRlbmN5PyBBbmQgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBUQ1AncyBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcz8gRG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgb3IgZG9lcyBpdCBjYXVzZSBhbnkgaXNzdWVzPyBJJ2QgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZy4gSSdtIGtlZW4gdG8gc2VlIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMsIHNwZWNpZmljYWxseSBob3cgdGhlIGhhc2ggaXMgZ2VuZXJhdGVkIGFuZCBpZiBpdCBoYXMgYW55IHJhbmRvbWl6YXRpb24gYXNwZWN0cy4gSSBoYXZlIHRvIHNlZSBob3cgaXQgYmFsYW5jZXMgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeSBhbmQgaWYgdGhlcmUgYXJlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIHRoYXQgd291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZS4gSSBtaWdodCB3YW50IHRvIHN0YXJ0IHRlc3RpbmcgaXRzIGJlaGF2aW9yIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCB0byBzZWUgd2hlcmUgdGhpcyB3b3VsZCBmaXQgaW4gZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2UsIHBlcmhhcHMgc29tZSBzaW11bGF0aW9ucyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6NTIuNDY0MTE0NTI3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTE6XFx0Y29uZmlnIE5FVF9TQ0hfU0ZRXFxuIDExMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU3RvY2hhc3RpYyBGYWlybmVzcyBRdWV1ZWluZyAoU0ZRKVxcXCJcXG4gMTEzOlxcdFxcdGhlbHBcXG4gMTE0OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFN0b2NoYXN0aWMgRmFpcm5lc3MgUXVldWVpbmcgKFNGUSlcXG4gMTE1OlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfc2ZxLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuIDExODpcXHRcXG4gMTE5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMjA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3NmcS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6NTIuNDY0Mjg2NzQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODAzODI2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEknbSBmb2N1c2luZyBvbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYCB3aXRoaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYE5FVF9TQ0hFRGAgaXMgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludDsgbGV0J3MgY29uZmlybSB0aGF0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbmRpdmlkdWFsIHNjaGVkdWxlciBjaG9pY2VzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgYE5FVF9TQ0hFRGAgdG8gdGhlIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMsIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byBhbGwgb2YgdGhlIHJlbGF0ZWQgZmVhdHVyZXMsIHN1Y2ggYXMgcXVldWluZyBkaXNjaXBsaW5lcywgZmlsdGVycyBhbmQgY2xhc3NpZmllcnMgYW5kIHRyYWZmaWMgcG9saWNpbmcgYW5kIHNoYXBpbmcgY2FwYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDQ6NTcuNDQ0Njc3NDg1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY4MjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowNDo1Ny41MDczNjg2MTFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4NjE4Njg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkVUX1NDSEVEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSdtIHdvbmRlcmluZyBpZiBgTkVUX1NDSF9QSUVgIGlzIHJlcXVpcmVkIGZvciBgTkVUX1NDSF9GUV9QSUVgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LCBnaXZlbiB0aGVpciByZWxhdGlvbnNoaXAuIFllcywgaXQgbG9va3MgbGlrZSBgTkVUX1NDSF9GUV9QSUVgIGluZGVlZCBkZXBlbmRzIG9uIGBORVRfU0NIX1BJRWAuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkndmUgZ290IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBjbGVhcmx5IGluIG1pbmQuIFRoZSBjb3JlIHNldCBvZiBjb25maWd1cmF0aW9ucyBJJ20gd29ya2luZyB3aXRoIGFwcGVhciB0byBiZTpcblxuKiAgIGBORVRfU0NIRURgXG4qICAgYE5FVF9TQ0hfRFJSYFxuKiAgIGBORVRfU0NIX0RVQUxQSTJgXG4qICAgYE5FVF9TQ0hfRVRTYFxuKiAgIGBORVRfU0NIX0ZRYFxuKiAgIGBORVRfU0NIX1BJRWBcbiogICBgTkVUX1NDSF9GUV9QSUVgXG4qICAgYE5FVF9TQ0hfSEhGYFxuKiAgIGBORVRfU0NIX1NGUWBcblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZXNlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHN5bWJvbHMuXG5cbk5vdywgbGV0J3MgdHVybiB0byB0aGUgZm9jdXMgc3ltYm9scy4gSSd2ZSBnb3QgdGhlc2UsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIHNldCBpbmNsdWRlczpcblxuKiAgIGBkcnJfY2hhbmdlX2NsYXNzYFxuKiAgIGBkdWFscGkyX2NoYW5nZWBcbiogICBgZHVhbHBpMl9pbml0YFxuKiAgIGBldHNfcWRpc2NfY2hhbmdlYFxuKiAgIGBmcV9jaGFuZ2VgXG4qICAgYGZxX3BpZV9jaGFuZ2VgXG4qICAgYGhoZl9jaGFuZ2VgXG4qICAgYHBpZV9kcm9wX2Vhcmx5YFxuKiAgIGBzZnFfY2hhbmdlYFxuXG5GaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbid0IHRyZWF0IGBwaWVfZHJvcF9lYXJseWAgYXMgYSBzdGF0aWMgc3ltYm9sIGJ5IG1pc3Rha2UuIEp1c3QgY29uZmlybWluZyB0aGF0IGlzIGlzIG5vdCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjAzLjI5MzU2MDM2OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxODc0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9vbCBwaWVfZHJvcF9lYXJseVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3BpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfcGllLmM9MjU9c3RydWN0IHBpZV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzItXFxubmV0L3NjaGVkL3NjaF9waWUuYzozMzpib29sIHBpZV9kcm9wX2Vhcmx5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcGllX3BhcmFtcyAqcGFyYW1zLFxcbm5ldC9zY2hlZC9zY2hfcGllLmMtMzQtXFx0XFx0ICAgIHN0cnVjdCBwaWVfdmFycyAqdmFycywgdTMyIGJhY2tsb2csIHUzMiBwYWNrZXRfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDU6MDMuMzQ4NzUzMzk1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTI3MjY0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcy4gSXQncyBjbGVhciB0aGF0IHRoZSBzeXN0ZW0gaXNuJ3Qgc3RhdGljLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIExldCdzIGRlbHZlIGludG8gdGhlIGBzY2hfZHVhbHBpMi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgZnVuY3Rpb25zIGBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb25gIGFuZCBgbXVzdF9kcm9wYC4gVGhleSBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGluIHRlcm1zIG9mIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cy4gSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUuIEkgY2FuIHNlZSB0aGF0IGBkdWFscGkyX2NoYW5nZWAsIGBkdWFscGkyX2luaXRgLCBhbmQgYGR1YWxwaTJfZW5xdWV1ZWAgY2FsbCB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLlxuXG5TaW5jZSBgZHVhbHBpMl9jaGFuZ2VgIGFuZCBgZHVhbHBpMl9pbml0YCBhcmUgY2FsbGluZyB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGVuIHRoZXkgYXJlIGdvb2QuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgaG93IGBkdWFscGkyX2VucXVldWVgIGZpdHMgaW50byB0aGUgZHluYW1pYyBtb2RlbCwgZ2l2ZW4gdGhhdCBpdCBhbHNvIHVzZXMgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gZW5zdXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIGlzIGNvcnJlY3RseSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjA4LjI0MTQ4MzYyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQxODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBkdWFscGkyX2VucXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9kdWFscGkyLmM9MzQ0PXN0YXRpYyBpbnQgZHVhbHBpMl9za2JfY2xhc3NpZnkoc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTM4Ny1cXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzozODg6c3RhdGljIGludCBkdWFscGkyX2VucXVldWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTM4OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODowNTowOC4yOTE5MTc5MDZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA3NzU2NjQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYG11c3RfZHJvcGAgaXMgdHJpZ2dlcmVkIGJ5IGBkdWFscGkyX2VucXVldWVfc2tiYC4gU2luY2Ugd2UgYXJlIGZvY3VzaW5nIG9uIHRoYXQsIGxldCdzIGFkZCBgZHVhbHBpMl9lbnF1ZXVlX3NrYmAgdG8gdGhlIHRhcmdldCBmdW5jdGlvbnMgZm9yIHRoZSBhbmFseXNpcy5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZXNlIGNoYW5nZSBmdW5jdGlvbnMuIExvb2tpbmcgYXQgYGZxX3Jlc2l6ZWAgd2l0aGluIGBzY2hfZnEuY2AsIGl0J3Mgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgZnFfY2hhbmdlYCwgd2hpY2ggbWFrZXMgYGZxX2NoYW5nZWAgcmVsZXZhbnQuIFRoZW4sIGBldHNfcWRpc2NfY2hhbmdlYCBpbiBgc2NoX2V0cy5jYCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIHNhbWUgZ29lcyBmb3IgYGZxX3BpZV9jaGFuZ2VgIGluIGBzY2hfZnFfcGllLmNgLCBgaGhmX2NoYW5nZWAgaW4gYHNjaF9oaGYuY2AsIGBzZnFfY2hhbmdlYCBpbiBgc2NoX3NmcS5jYCwgYW5kIGBkcnJfY2hhbmdlX2NsYXNzYCBpbiBgc2NoX2Ryci5jYCDigJMgdGhleSBhcmUgYWxsIHN0YXRpYyBidXQgc2VydmUgYXMgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBzY2hlZHVsZXJzLlxuXG5HaXZlbiB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBOZXRsaW5rIGNvbW1hbmRzIChzcGVjaWZpY2FsbHkgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgKSwgYW5kIHRoZSBwb3RlbnRpYWwgY2hhbmdlcyBsb29rIGZ1bmN0aW9uYWwgc3VjaCBhcyBjbGFtcGluZyB2YWx1ZXMsIGZpeGluZyBidWdzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLCBJIHRoaW5rIHRoZXNlIGFyZSBzb2xpZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGV5IHJlcHJlc2VudCBhIGdvb2QgYXR0YWNrIHN1cmZhY2UuXG5cbkxldCBtZSBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNDAsIk91dHB1dFRva2VucyI6MjcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjE3LjM2OTQ4NzA0OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzQzOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0RVQUxQSTJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCIsXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfU0NIX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9QSUVcIixcbiAgICBcIk5FVF9TQ0hfSEhGXCIsXG4gICAgXCJORVRfU0NIX1NGUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRycl9jaGFuZ2VfY2xhc3NcIixcbiAgICBcImR1YWxwaTJfY2hhbmdlXCIsXG4gICAgXCJkdWFscGkyX2luaXRcIixcbiAgICBcImR1YWxwaTJfZW5xdWV1ZV9za2JcIixcbiAgICBcImV0c19xZGlzY19jaGFuZ2VcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfcGllX2NoYW5nZVwiLFxuICAgIFwiaGhmX2NoYW5nZVwiLFxuICAgIFwicGllX2Ryb3BfZWFybHlcIixcbiAgICBcInNmcV9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMgKHFkaXNjcykgdG8gY2xhbXAgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMsIHByZXZlbnRpbmcgaXNzdWVzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBxZGlzY3MgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsYW1waW5nIGxvZ2ljIGJlaGF2ZXMgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0RVQUxQSTJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCIsXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfU0NIX1BJRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9QSUVcIixcbiAgICBcIk5FVF9TQ0hfSEhGXCIsXG4gICAgXCJORVRfU0NIX1NGUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRycl9jaGFuZ2VfY2xhc3NcIixcbiAgICBcImR1YWxwaTJfY2hhbmdlXCIsXG4gICAgXCJkdWFscGkyX2luaXRcIixcbiAgICBcImR1YWxwaTJfZW5xdWV1ZV9za2JcIixcbiAgICBcImV0c19xZGlzY19jaGFuZ2VcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfcGllX2NoYW5nZVwiLFxuICAgIFwiaGhmX2NoYW5nZVwiLFxuICAgIFwicGllX2Ryb3BfZWFybHlcIixcbiAgICBcInNmcV9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMgKHFkaXNjcykgdG8gY2xhbXAgYHF1YW50dW1gIGFuZCBgbXR1YCB2YWx1ZXMsIHByZXZlbnRpbmcgaXNzdWVzIHdpdGggemVybyBvciBvdmVybHkgbGFyZ2UgdmFsdWVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBxZGlzY3MgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsYW1waW5nIGxvZ2ljIGJlaGF2ZXMgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDU6MTcuNDQwODM2Njg0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3ODE1MDk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjE3LjQ0MTI2NTU3NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzk3NzcxNzQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmEzNDI1ZGMwOGZiZGZhOTc5ZjVmYzZkMzNlNDQ2MGIxZDM4ZDFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjAxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbmluZGV4IDkxYjFlZjgyNGFmYWYuLjBmZmRhYjI3YmFlNDIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5AQCAtODIsOCArODIsOSBAQCBzdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNwZWNpZmllZCBEUlIgcXVhbnR1bSBjYW5ub3QgYmUgemVyb1wiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuK1x0XHRxdWFudHVtID0gbWF4KDI1NlUsIHF1YW50dW0pO1xuIFx0fSBlbHNlXG4tXHRcdHF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCAodTMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpKTtcbiBcbiBcdGlmIChjbCAhPSBOVUxMKSB7XG4gXHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuaW5kZXggNGY2NzhkNGZmMTBlYy4uNDk0N2RlZjdjNDllZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuQEAgLTIwOCw5ICsyMDgsMTEgQEAgc3RhdGljIHZvaWQgZHVhbHBpMl9yZXNldF9jX3Byb3RlY3Rpb24oc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSlcbiBzdGF0aWMgdm9pZCBkdWFscGkyX2NhbGN1bGF0ZV9jX3Byb3RlY3Rpb24oc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsIHUzMiB3YylcbiB7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4rXG4gXHRxLVx1MDAzZWNfcHJvdGVjdGlvbl93YyA9IHdjO1xuIFx0cS1cdTAwM2VjX3Byb3RlY3Rpb25fd2wgPSBNQVhfV0MgLSB3Yztcbi1cdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKXBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpICpcbitcdHEtXHUwMDNlY19wcm90ZWN0aW9uX2luaXQgPSAoczMyKW10dSAqXG4gXHRcdCgoaW50KXEtXHUwMDNlY19wcm90ZWN0aW9uX3djIC0gKGludClxLVx1MDAzZWNfcHJvdGVjdGlvbl93bCk7XG4gXHRkdWFscGkyX3Jlc2V0X2NfcHJvdGVjdGlvbihxKTtcbiB9XG5AQCAtMjg1LDggKzI4Nyw5IEBAIHN0YXRpYyBib29sIG11c3RfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcbiBcdHU2NCBsb2NhbF9sX3Byb2I7XG4gXHRib29sIG92ZXJsb2FkO1xuIFx0dTMyIHByb2I7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4tXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSkpXG4rXHRpZiAoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nIFx1MDAzYyAyICogbXR1KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcm9iID0gUkVBRF9PTkNFKHEtXHUwMDNlcGkyX3Byb2IpO1xuQEAgLTcxMiw3ICs3MTUsOCBAQCBzdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdClcbiBcdC8qIEFwcGx5IHJ1bGUgb2YgdGh1bWIsIGkuZS4sIGRvdWJsaW5nIHRoZSBwYWNrZXQgbGVuZ3RoLFxuIFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0LlxuIFx0ICovXG4tXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4rXHR1NjQgbWVtbGltID0gbXVsX3UzMl91MzIobGltaXQsIDIgKiBjbGFtcF90KHUzMiwgcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSksXG4rXHRcdFx0XHRcdFx0ICAgICAxLCAxIFx1MDAzY1x1MDAzYyAyMCkpO1xuIFxuIFx0aWYgKHVwcGVyXzMyX2JpdHMobWVtbGltKSlcbiBcdFx0cmV0dXJuIFUzMl9NQVg7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ldHMuYyBiL25ldC9zY2hlZC9zY2hfZXRzLmNcbmluZGV4IDI1ZmNmNDA3OWZlY2UuLmYyM2M4ZGM2OGY4Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5AQCAtNjM2LDcgKzYzNiw3IEBAIHN0YXRpYyBpbnQgZXRzX3FkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0ICovXG4gXHRmb3IgKGkgPSBuc3RyaWN0OyBpIFx1MDAzYyBuYmFuZHM7IGkrKykge1xuIFx0XHRpZiAoIXF1YW50YVtpXSlcbi1cdFx0XHRxdWFudGFbaV0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTtcbitcdFx0XHRxdWFudGFbaV0gPSBtYXgoMjU2VSwgKHUzMilwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKSk7XG4gXHR9XG4gXG4gXHQvKiBCZWZvcmUgY29tbWl0LCBtYWtlIHN1cmUgd2UgY2FuIGFsbG9jYXRlIGFsbCBuZXcgcWRpc2NzICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXG5pbmRleCA2MTQ0YjU2ODZmMTNmLi5hYjhlN2M2YWUyMDM5IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCBmcV9yZXNpemUoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsb2cpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIGlxX3JhbmdlID0ge1xuLVx0Lm1heCA9IElOVF9NQVgsXG4rXHQubWF4ID0gMSBcdTAwM2NcdTAwM2MgMjAsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZnFfcG9saWN5W1RDQV9GUV9NQVggKyAxXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuaW5kZXggYjI3ZDk1NDE4NzA3YS4uNTk4Mjg0N2RmOGY4NSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbkBAIC0zNDEsNyArMzQxLDggQEAgc3RhdGljIGludCBmcV9waWVfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdFx0ICAgbmxhX2dldF91MzIodGJbVENBX0ZRX1BJRV9CRVRBXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfUVVBTlRVTV0pXG4tXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSk7XG4rXHRcdFdSSVRFX09OQ0UocS1cdTAwM2VxdWFudHVtLFxuK1x0XHRcdCAgIG1heCgyNTZVLCBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUElFX1FVQU5UVU1dKSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9GUV9QSUVfTUVNT1JZX0xJTUlUXSlcbiBcdFx0V1JJVEVfT05DRShxLVx1MDAzZW1lbW9yeV9saW1pdCxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hoZi5jIGIvbmV0L3NjaGVkL3NjaF9oaGYuY1xuaW5kZXggOTZhY2FiNmE4ZGEwMy4uYmI4ZTg5NTJmNTU1MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGhmLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfaGhmLmNcbkBAIC01NTEsNyArNTUxLDcgQEAgc3RhdGljIGludCBoaGZfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX0hIRl9RVUFOVFVNXSlcbi1cdFx0bmV3X3F1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfSEhGX1FVQU5UVU1dKTtcbitcdFx0bmV3X3F1YW50dW0gPSBtYXgoMjU2VSwgbmxhX2dldF91MzIodGJbVENBX0hIRl9RVUFOVFVNXSkpO1xuIFxuIFx0aWYgKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pXG4gXHRcdG5ld19oaGZfbm9uX2hoX3dlaWdodCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ISEZfTk9OX0hIX1dFSUdIVF0pO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcGllLmMgYi9uZXQvc2NoZWQvc2NoX3BpZS5jXG5pbmRleCBiNDFmMmRlZjJlMmNjLi4zYjc4NjNmZmQyODRjIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9waWUuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9waWUuY1xuQEAgLTM1LDcgKzM1LDcgQEAgYm9vbCBwaWVfZHJvcF9lYXJseShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHBpZV9wYXJhbXMgKnBhcmFtcyxcbiB7XG4gXHR1NjQgcm5kO1xuIFx0dTY0IGxvY2FsX3Byb2IgPSB2YXJzLVx1MDAzZXByb2I7XG4tXHR1MzIgbXR1ID0gcHNjaGVkX210dShxZGlzY19kZXYoc2NoKSk7XG4rXHR1MzIgbXR1ID0gY2xhbXBfdCh1MzIsIHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpLCAxLCAxIFx1MDAzY1x1MDAzYyAyMCk7XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBzdGlsbCBidXJzdCBhbGxvd2FuY2UgbGVmdCBza2lwIHJhbmRvbSBlYXJseSBkcm9wICovXG4gXHRpZiAodmFycy1cdTAwM2VidXJzdF90aW1lIFx1MDAzZSAwKVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCAxODdkM2VkNTc4ZjI2Li44YmJjZmM5ZTg1ZDk0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTY2MCw2ICs2NjAsMTEgQEAgc3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKGN0bC1cdTAwM2VxdWFudHVtIFx1MDAzZSAxIFx1MDAzY1x1MDAzYyAyMCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcInF1YW50dW0gdG9vIGxhcmdlXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNjIDAgfHxcbiBcdCAgICBjdGwtXHUwMDNlcGVydHVyYl9wZXJpb2QgXHUwMDNlIElOVF9NQVggLyBIWikge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImludmFsaWQgcGVydHVyYiBwZXJpb2RcIik7XG5AQCAtNjg4LDcgKzY5Myw3IEBAIHN0YXRpYyBpbnQgc2ZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFxuIFx0LyogdXBkYXRlIGFuZCB2YWxpZGF0ZSBjb25maWd1cmF0aW9uICovXG4gXHRpZiAoY3RsLVx1MDAzZXF1YW50dW0pXG4tXHRcdHF1YW50dW0gPSBjdGwtXHUwMDNlcXVhbnR1bTtcbitcdFx0cXVhbnR1bSA9IG1heCgyNTZVLCBjdGwtXHUwMDNlcXVhbnR1bSk7XG4gXHRpZiAoY3RsLVx1MDAzZWZsb3dzKVxuIFx0XHRtYXhmbG93cyA9IG1pbl90KHUzMiwgY3RsLVx1MDAzZWZsb3dzLCBTRlFfTUFYX0ZMT1dTKTtcbiBcdGlmIChjdGwtXHUwMDNlZGl2aXNvcikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MDU6MTcuNDQxMjY2MzE0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTc3NjcwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IEtNU0FOIGlzIFVubmVjZXNzYXJ5IEhlcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBuZXR3b3JrIHNjaGVkdWxlcnMg4oCTIGBzY2hfZHJyLmNgLCBgc2NoX2R1YWxwaTIuY2AsIGBzY2hfZXRzLmNgLCBgc2NoX2ZxLmNgLCBgc2NoX2ZxX3BpZS5jYCwgYHNjaF9oaGYuY2AsIGBzY2hfcGllLmNgLCBhbmQgYHNjaF9zZnEuY2AuIEVzc2VudGlhbGx5LCBpdCdzIGFsbCBhYm91dCBhZGRpbmcgYm91bmRzIGNoZWNraW5nLiBXZSdyZSBjbGFtcGluZyB0aGUgYHF1YW50dW1gIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIHRoZSBNVFUsIGVuc3VyaW5nIHRoZXkgc3RheSB3aXRoaW4gcmVhc29uYWJsZSBsaW1pdHMuIEl0IGxvb2tzIGxpa2UgdGhlIGxpbWl0cyBhcmUgcHJpbWFyaWx5IGEgbWluaW11bSBvZiAyNTYgYW5kIGEgbWF4aW11bSBhcm91bmQgMU1CICgxIFx1MDAzY1x1MDAzYyAyMCkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHB1cmVseSBhYm91dCAqaW5wdXQgdmFsaWRhdGlvbiouIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcHJldmVudGluZyBzaXR1YXRpb25zIHdoZXJlIGEgemVybyBgcXVhbnR1bWAgY291bGQgbGVhZCB0byBhIGRpdmlkZS1ieS16ZXJvIG9yIGluZmluaXRlIGxvb3AsIG9yIGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIHZhbHVlIGNhdXNlcyBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdmVyLWFsbG9jYXRlcyBtZW1vcnkuIFRoaXMgaXMgY2xhc3NpYyBoYXJkZW5pbmcgYWdhaW5zdCBsb2dpY2FsIGVycm9ycyBzdGVtbWluZyBmcm9tIHVzZXIgaW5wdXQgb3IgY29uZmlndXJhdGlvbi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0gdG8gbWFrZSB0aGUgS01TQU4gY2FsbC5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcywgSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCByYWlzZSBhIHJlZCBmbGFnLiBXZSdyZSAqY2xhbXBpbmcqIGV4aXN0aW5nIGludGVnZXIgdmFsdWVzLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gbW9kaWZpY2F0aW9ucyB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBub3RoaW5nIHRoYXQgY2hhbmdlcyBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCB0aGVzZSBjaGFuZ2VzIG9ubHkgY2xhbXAgdGhlIHZhbHVlIHRoYXQgaXMgc3RvcmVkIC0gc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgdGhlIHZhbHVlcyBiZWluZyByZWFkLlxuXG5UaGUgdHlwZXMgb2YgYnVncyB0aGlzIHBhdGNoIGlzIHByZXZlbnRpbmcgKGhhbmdzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBPT00gY29uZGl0aW9ucykgYXJlIGdlbmVyYWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4sIExPQ0tERVAgYW5kIGdlbmVyYWwgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbj8gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2guIEkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGUgdmFsdWVzIGJlaW5nIG1vZGlmaWVkIGRvbid0IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaWYgZHVtcGVkIHRvIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsuIFRoZSBwYXRjaCBvbmx5IGNsYW1wcyB0aGUgdmFsdWVzLCBub3QgdGhlIHN0cnVjdHVyZSBsYXlvdXQgb3IgdGhlIGR1bXAgZnVuY3Rpb25zLlxuXG5TbywgSSB3aWxsIHN0YXRlIG15IHJlYXNvbmluZyBjbGVhcmx5LiBUaGUgcGF0Y2ggZW5mb3JjZXMgYm91bmRzIGNoZWNrcyAobWluL21heC9jbGFtcCkgb24gcGFyYW1ldGVycyBsaWtlICdxdWFudHVtJyBhbmQgTVRVLXJlbGF0ZWQgdmFsdWVzIGFjcm9zcyBtdWx0aXBsZSBuZXR3b3JrIHNjaGVkdWxlcnMuIFRoaXMgbWl0aWdhdGVzIGxvZ2ljYWwgZmxhd3MgdGhhdCByZXN1bHQgaW4sIGluZmluaXRlIGxvb3BzLCBtZW1vcnkgZXJyb3JzIG9yIG92ZXJmbG93cy4gU2luY2UgdGhlIHBhdGNoIGRvZXMgbm90IGFkZCBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgaW5pdGlhbGl6YXRpb24gb3IgaW50cm9kdWNlIG5ldyBjb3B5aW5nIG1lY2hhbmlzbXMsIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGxlYWthZ2UgaXMgbm9uLWV4aXN0ZW50LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBmdXp6aW5nIHNob3VsZCBjYXRjaCBhbnkgcmVtYWluaW5nIGlzc3Vlcy4gSSB3aWxsIGZsYWcgYE5lZWRzS01TQU5gIGFzIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzIxLCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjA1OjMxLjQxODk0MDI5MVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgKG1pbi9tYXgvY2xhbXApIHRvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsaWtlIGBxdWFudHVtYCBhbmQgTVRVLWRlcml2ZWQgdmFsdWVzIGFjcm9zcyB2YXJpb3VzIG5ldHdvcmsgc2NoZWR1bGVycyAoRFJSLCBEVUFMUEkyLCBFVFMsIEZRLCBGUV9QSUUsIEhIRiwgUElFLCBTRlEpLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbG9naWNhbCBidWdzIHN1Y2ggYXMgaW5maW5pdGUgbG9vcHMgKGUuZy4sIHplcm8gcXVhbnR1bSksIGRpdmlzaW9uIGJ5IHplcm8sIG9yIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbnMvaW50ZWdlciBvdmVyZmxvd3MgKGUuZy4sIGV4dHJlbWVseSBsYXJnZSBxdWFudHVtIG9yIE1UVSB2YWx1ZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBwYXJhbWV0ZXJzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaGFuZ3MpIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGhhbmcgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[1] Phase: Succeeded StartedAt: 2026-08-26 08:05:40 +0000 UTC FinishedAt: 2026-08-26 08:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 08:05:40 +0000 UTC FinishedAt: 2026-08-26 08:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2] Phase: Succeeded StartedAt: 2026-08-26 08:05:40 +0000 UTC FinishedAt: 2026-08-26 11:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 08:05:40 +0000 UTC FinishedAt: 2026-08-26 11:45:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 08:05:40 +0000 UTC FinishedAt: 2026-08-26 08:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 08:05:40 +0000 UTC FinishedAt: 2026-08-26 08:05:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-convert-artifact-698087611/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 08:05:50 +0000 UTC FinishedAt: 2026-08-26 08:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 08:05:50 +0000 UTC FinishedAt: 2026-08-26 08:22:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee2d860c-3735-4fde-abca-4d1a7385a8c3,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-workflowd7hvd/series-workflowd7hvd-convert-artifact-698087611/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": "f0891340-68d4-4647-b502-2ec8f585f0a2", "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-workflowd7hvd/series-workflowd7hvd-build-action-4184934137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 08:05:50 +0000 UTC FinishedAt: 2026-08-26 08:21:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee2d860c-3735-4fde-abca-4d1a7385a8c3,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-workflowd7hvd/series-workflowd7hvd-convert-artifact-698087611/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": "f0891340-68d4-4647-b502-2ec8f585f0a2", "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-workflowd7hvd/series-workflowd7hvd-build-action-4184934137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 08:22:03 +0000 UTC FinishedAt: 2026-08-26 08:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 08:22:03 +0000 UTC FinishedAt: 2026-08-26 08:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 08:22:03 +0000 UTC FinishedAt: 2026-08-26 08:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 08:22:03 +0000 UTC FinishedAt: 2026-08-26 08:22:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-convert-artifact-514636306/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 08:22:13 +0000 UTC FinishedAt: 2026-08-26 08:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 08:22:13 +0000 UTC FinishedAt: 2026-08-26 08:24:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f0891340-68d4-4647-b502-2ec8f585f0a2,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-workflowd7hvd/series-workflowd7hvd-build-action-4184934137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 08:24:16 +0000 UTC FinishedAt: 2026-08-26 08:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 08:24:16 +0000 UTC FinishedAt: 2026-08-26 08:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 08:24:16 +0000 UTC FinishedAt: 2026-08-26 08:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 08:24:16 +0000 UTC FinishedAt: 2026-08-26 08:40:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee2d860c-3735-4fde-abca-4d1a7385a8c3,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-workflowd7hvd/series-workflowd7hvd-convert-artifact-514636306/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": "54655409-366a-4dda-b907-4db70f35b620", "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-workflowd7hvd/series-workflowd7hvd-build-action-2986686118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 08:24:16 +0000 UTC FinishedAt: 2026-08-26 08:40:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee2d860c-3735-4fde-abca-4d1a7385a8c3,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-workflowd7hvd/series-workflowd7hvd-convert-artifact-514636306/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": "54655409-366a-4dda-b907-4db70f35b620", "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-workflowd7hvd/series-workflowd7hvd-build-action-2986686118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 08:40:32 +0000 UTC FinishedAt: 2026-08-26 08:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 08:40:32 +0000 UTC FinishedAt: 2026-08-26 08:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 08:40:32 +0000 UTC FinishedAt: 2026-08-26 08:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 08:40:32 +0000 UTC FinishedAt: 2026-08-26 08:42:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*54655409-366a-4dda-b907-4db70f35b620,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-build-action-2986686118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 08:42:36 +0000 UTC FinishedAt: 2026-08-26 11:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 08:42:36 +0000 UTC FinishedAt: 2026-08-26 11:45:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f0891340-68d4-4647-b502-2ec8f585f0a2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*54655409-366a-4dda-b907-4db70f35b620,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-build-action-4184934137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-build-action-2986686118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 08:42:36 +0000 UTC FinishedAt: 2026-08-26 08:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 08:42:36 +0000 UTC FinishedAt: 2026-08-26 08:42:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-convert-artifact-888554343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 08:42:36 +0000 UTC FinishedAt: 2026-08-26 08:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 08:42:36 +0000 UTC FinishedAt: 2026-08-26 08:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 08:42:36 +0000 UTC FinishedAt: 2026-08-26 08:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 08:42:47 +0000 UTC FinishedAt: 2026-08-26 11:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7hvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drr_change_class","dualpi2_change","dualpi2_init","dualpi2_enqueue_skb","ets_qdisc_change","fq_change","fq_pie_change","hhf_change","pie_drop_early","sfq_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_DUALPI2","NET_SCH_ETS","NET_SCH_FQ","NET_SCH_PIE","NET_SCH_FQ_PIE","NET_SCH_HHF","NET_SCH_SFQ"],"series_id":"ce889dfc-dc59-4406-94d4-23b1b0fd77ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 08:42:47 +0000 UTC FinishedAt: 2026-08-26 11:45:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f0891340-68d4-4647-b502-2ec8f585f0a2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*54655409-366a-4dda-b907-4db70f35b620,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-build-action-4184934137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-build-action-2986686118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7hvd/series-workflowd7hvd-convert-artifact-888554343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}