Name: series-workflowwcrs8 Phase: Succeeded StartedAt: 2026-09-09 04:20:47 +0000 UTC FinishedAt: 2026-09-09 08:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[0] Phase: Succeeded StartedAt: 2026-09-09 04:20:47 +0000 UTC FinishedAt: 2026-09-09 04:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 04:20:47 +0000 UTC FinishedAt: 2026-09-09 04:53:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF" ], "series_id": "2f0f891b-40ac-4fd2-a047-59eb84850431" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "lwt_seg6local_func_proto", "input_action_end_bpf", "parse_nla_bpf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDssCiAgICAmIzM0O3BhcnNlX25sYV9icGYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGhlbHBlciBmdW5jdGlvbiByZXNvbHV0aW9uIGZvciBzZWc2bG9jYWwgcHJvZ3JhbXMgKGx3dF9zZWc2bG9jYWxfZnVuY19wcm90bykgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gZGlzYWxsb3cgYnBmX3NrYl9wdWxsX2RhdGEuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGFuZCBJUHY2IFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWQyMTk0MzQzNzY4MzJmNDgyZTcyNmI2OTJlNzcwNjQxMGE2OWI5NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTA6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uMmE4NGY5ZDAxMTMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTkwNDQsNiAmIzQzOzkwNDQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbiBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4ge1xuIFx0c3dpdGNoIChmdW5jX2lkKSB7XG4mIzQzO1x0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG4gXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuIFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDssCiAgICAmIzM0O3BhcnNlX25sYV9icGYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkMjE5NDM0Mzc2ODMyZjQ4MmU3MjZiNjkyZTc3MDY0MTBhNjliOTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA0OjUwOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA4NTEzMTY3YTg1OGE4Li4yYTg0ZjlkMDExMzE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtOTA0NCw2ICYjNDM7OTA0NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKgogbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogewogCXN3aXRjaCAoZnVuY19pZCkgewomIzQzOwljYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6CiYjNDM7CQlyZXR1cm4gTlVMTDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKQogCWNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6CiAJCXJldHVybiAmYW1wO2JwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90bzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTeXprYWxsZXIgRnV6emluZyBUcmlhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSByZWxhdGVkIHRvIGZ1enppbmcgdHJpYWdlIHdpdGggc3l6a2FsbGVyLiBUaGUgcmVxdWVzdCBpdHNlbGYgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrLCBub3RoaW5nIGFsYXJtaW5nIHNvIGZhci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGNoYW5naW5nLiBJdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgZGlmZiBzaG93cyBhbiBhZGRpdGlvbiB3aXRoaW4gdGhlIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIG5ldyBjYXNlIHN0YXRlbWVudCBmb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHRoYXQgcmV0dXJucyBgTlVMTGAuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHJldHVybmluZyBgTlVMTGAgaGVyZS4gTXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBpbnZlc3RpZ2F0ZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCBsaW5lIDkwNDQgdG8gZ2V0IHNvbWUgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIGEgYHJlYWQtZmlsZWAgY29tbWFuZCBvciBtYXliZSBgZ3JlcHBlcmAgdG8gc2VlIHdoYXQgZWxzZSBpcyBoYXBwZW5pbmcgYXJvdW5kIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGRvZXMsIGhvdyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgaXMgdXNlZCBpbiB0aGlzIGNvbnRleHQsIGFuZCB3aHkgcmV0dXJuaW5nIGBOVUxMYCBmb3IgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBtaWdodCBiZSBuZWNlc3NhcnkuIFRoZXJlJiMzOTtzIGEgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKWAgYmxvY2sgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCBpbiByZWxhdGlvbiB0byB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGEgYmVuaWduIHNlY3VyaXR5IG1lYXN1cmUsIGEgYnVnIGZpeCwgb3Igc29tZXRoaW5nIHRoYXQgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5emthbGxlciBjb250ZXh0IGFzIHdlbGwgLSBhcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3l6a2FsbGVyIHJlcG9ydHMgb3IgY3Jhc2hlcyB0aGF0IGxlZCB0byB0aGlzIGNoYW5nZT8gSSYjMzk7bGwgcHJvYmFibHkgY2hlY2sgdGhlIHN5emthbGxlciBpc3N1ZSB0cmFja2VyIGFzIHdlbGwsIGZvciBhbnkgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTAzNTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NldF9oYXNoX2ludmFsaWRfcHJvdG87XG45MDM2Olx0XHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxuOTAzNzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG87XG45MDM4Olx0XHRkZWZhdWx0OlxuOTAzOTpcdFx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuOTA0MDpcdFx0fVxuOTA0MTpcdH1cbjkwNDI6XHRcbjkwNDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjkwNDQ6XHRsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG45MDQ1Olx0e1xuOTA0NjpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG45MDQ3Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XG45MDQ4Olx0XHRcdHJldHVybiBOVUxMO1xuOTA0OTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxuOTA1MDpcdFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcbjkwNTE6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90bztcbjkwNTI6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uOlxuOTA1MzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90bztcbjkwNTQ6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcbjkwNTU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvO1xuOTA1NjpcdCNlbmRpZlxuOTA1NzpcdFx0ZGVmYXVsdDpcbjkwNTg6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjkwNTk6XHRcdH1cbjkwNjA6XHR9XG45MDYxOlx0XG45MDYyOlx0c3RhdGljIGJvb2wgYnBmX3NrYl9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG45MDYzOlx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuOTA2NDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxuOTA2NTpcdHtcbjkwNjY6XHRcdGNvbnN0IGludCBzaXplX2RlZmF1bHQgPSBzaXplb2YoX191MzIpO1xuOTA2NzpcdFxuOTA2ODpcdFx0aWYgKG9mZiBcdTAwM2MgMCB8fCBvZmYgXHUwMDNlPSBzaXplb2Yoc3RydWN0IF9fc2tfYnVmZikpXG45MDY5Olx0XHRcdHJldHVybiBmYWxzZTtcbjkwNzA6XHRcbjkwNzE6XHRcdC8qIFRoZSB2ZXJpZmllciBndWFyYW50ZWVzIHRoYXQgc2l6ZSBcdTAwM2UgMC4gKi9cbjkwNzI6XHRcdGlmIChvZmYgJSBzaXplICE9IDApXG45MDczOlx0XHRcdHJldHVybiBmYWxzZTtcbjkwNzQ6XHRcbjkwNzU6XHRcdHN3aXRjaCAob2ZmKSB7XG45MDc2Olx0XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgX19za19idWZmLCBjYlswXSwgY2JbNF0pOlxuOTA3NzpcdFx0XHRpZiAob2ZmICYjNDM7IHNpemUgXHUwMDNlIG9mZnNldG9mZW5kKHN0cnVjdCBfX3NrX2J1ZmYsIGNiWzRdKSlcbjkwNzg6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG45MDc5Olx0XHRcdGJyZWFrO1xuOTA4MDpcdFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBfX3NrX2J1ZmYsIGRhdGEpOlxuOTA4MTpcdFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBfX3NrX2J1ZmYsIGRhdGFfbWV0YSk6XG45MDgyOlx0XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IF9fc2tfYnVmZiwgZGF0YV9lbmQpOlxuOTA4MzpcdFx0XHRpZiAoaW5mby1cdTAwM2Vpc19sZHN4IHx8IHNpemUgIT0gc2l6ZV9kZWZhdWx0KVxuOTA4NDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDYxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgbGluZXMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVtOgoKKipOYXZpZ2F0aW5nIHRoZSBMV1QgJmFtcDsgQlBGIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AsIHdoZXJlIGFyZSB3ZSBjYWxsaW5nICp0aGF0KiBmcm9tPyBHb3R0YSB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4mIzM0OyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGl0JiMzOTtzIGJlaW5nICppbnZva2VkKiwgYmVjYXVzZSB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBrbm93IHRoZSAmIzM5O3dobyYjMzk7LCAmIzM5O3doYXQmIzM5OyBhbmQgJiMzOTt3aHkmIzM5Oy4KCk5leHQgdXAsIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gLiBBbmQgaW4gdGhlcmU/IEFoLCBsb29rcyBsaWtlIHdlJiMzOTtyZSB1c2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCBCUEYgaGVscGVyIGlzIGRvaW5nLCBleGFjdGx5LCBhcyB0aGlzIGNvZGUgaXMgcmVsZXZhbnQgdG8gbWFuaXB1bGF0aW5nIFNLQiBkYXRhIHdpdGhpbiBhbiBlQlBGIGNvbnRleHQuIERlcGVuZGluZyBvbiB3aGF0IGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGRvZXMgKndpdGgqIHRoYXQgaGVscGVyIGlzIGdvaW5nIHRvIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbnZvbHZlZC4gSXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgdXNhZ2U6IGhvdyBhcmUgd2UgcHVsbGluZyBkYXRhIGZyb20gdGhlIFNLQj8gQXJlIHdlIGRvaW5nIGl0IGVmZmljaWVudGx5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gSSYjMzk7bGwgcHJvYmFibHkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHVzYWdlIGlzIHNhZmUgYW5kIHRoYXQgdGhlIHB1bGxlZCBkYXRhIGlzIGhhbmRsZWQgY29ycmVjdGx5IGVsc2V3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDQ6bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0NS17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzE9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MjpcdC5nZXRfZnVuY19wcm90b1x0XHQ9IGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTczLVx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGFuZCBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYGx3dF9vdXRfZnVuY19wcm90b2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRleHQuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHdhcyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGluc3BlY3Rpb24sIGJ1dCBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGFib3V0IHRoZSBwYXJ0aWN1bGFyIHVzZSBjYXNlIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoeSogdGhhdCBzcGVjaWZpYyBCUEYgaGVscGVyIHdhcyBjaG9zZW4g4oCTIHdoYXQgZGF0YSB3YXMgaXQgcHVsbGluZywgZnJvbSB3aGVyZSwgYW5kIGZvciB3aGF0IHB1cnBvc2Ugd2l0aGluIHRoZSBgbHd0X291dF9mdW5jX3Byb3RvYCB3b3JrZmxvdz8gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBzb21lIGtpbmQgb2Ygb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGRlYWxpbmcgd2l0aCBwYWNrZXQgaGVhZGVycyBvciBwYXlsb2FkcywgYnV0IHRoZSBzcGVjaWZpYyBsb2dpYyBuZWVkcyB1bnBhY2tpbmcuIEdvdHRhIHRyYWNlIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0X291dF9mdW5jX3Byb3RvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTg5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzo4OTY3Omx3dF9vdXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTg5Njgte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg5OTQ9bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODk5OS1cdGRlZmF1bHQ6XG5uZXQvY29yZS9maWx0ZXIuYzo5MDAwOlx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xubmV0L2NvcmUvZmlsdGVyLmMtOTAwMS1cdH1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTAzOC1cdGRlZmF1bHQ6XG5uZXQvY29yZS9maWx0ZXIuYzo5MDM5Olx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xubmV0L2NvcmUvZmlsdGVyLmMtOTA0MC1cdH1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDQ0PWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05MDU3LVx0ZGVmYXVsdDpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTg6XHRcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG5uZXQvY29yZS9maWx0ZXIuYy05MDU5LVx0fVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNTUwPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9vdXRfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE1NTE6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfb3V0X2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU1Mi1cdC5pc192YWxpZF9hY2Nlc3NcdD0gbHd0X2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgbHd0X291dF9mdW5jX3Byb3RvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGx3dF9vdXRfZnVuY19wcm90b2AuIEhtbSwganVzdCB0aGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBwcm90b3R5cGUgZnVuY3Rpb24gcmVsYXRlZCB0byBMd3Qgb3V0cHV0LiBLbm93aW5nIEx3dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9ucywgcHJvYmFibHkgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIGFuZCBtYW5hZ2luZyBwcm9taXNlcyBvciBmdXR1cmVzIHRoYXQgcmVwcmVzZW50IHBlbmRpbmcgb3V0cHV0IHRhc2tzLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBzaWduYXR1cmUuIFdoYXQgYXJndW1lbnRzIGRvZXMgaXQgdGFrZT8gQXJlIHRoZXkgaGFuZGxlcywgYnVmZmVycywgbGVuZ3RocywgY2FsbGJhY2tzLCBvciBzb21lIGNvbWJpbmF0aW9uIHRoZXJlb2Y/IFRoZSBzcGVjaWZpYyB0eXBlcyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UuIEZvciBleGFtcGxlLCBkb2VzIGl0IGhhbmRsZSByYXcgYnl0ZXMsIG9yIGRvZXMgaXQgYWJzdHJhY3QgZnVydGhlciB1cCBpbnRvIHN0cmVhbXMsIGZpbGVzLCBvciBuZXR3b3JrIHNvY2tldHM/IEFuZCBhcmUgdGhlcmUgYW55IGluZGljYXRpb25zIG9mIGNvbmN1cnJlbmN5IG9yIHRocmVhZGluZyBidWlsdCBpbiBoZXJlPwoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIGVmZmljaWVuY3kgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBibG9ja2luZyBwb2ludHMsIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZC4gSWYgdGhpcyBpcyBtZWFudCB0byBiZSB0cnVseSBub24tYmxvY2tpbmcsIHRoZW4gSSBleHBlY3QgaGVhdnkgdXNlIG9mIGV2ZW50IGxvb3BzIG9yIHNvbWUgZm9ybSBvZiBjb250aW51YXRpb24gcGFzc2luZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG91dHB1dCBvcGVyYXRpb24gaXMgc2NoZWR1bGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSByZXNvdXJjZXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kuIFdoYXQga2luZHMgb2YgZXhjZXB0aW9ucyBvciByZXR1cm4gdmFsdWVzIGRvZXMgaXQgcHJvZHVjZT8gSG93IGRvZXMgaXQgc2lnbmFsIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCBwcm92aWRlIGFueSBtZWNoYW5pc21zIGZvciBjYW5jZWxsYXRpb24gb3IgdGltZW91dD8gTW9yZSBnZW5lcmFsbHksIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBkZXNpZ24gb2YgTHd0JiMzOTtzIG92ZXJhbGwgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3k/CgpGdXJ0aGVybW9yZSwgSSBzaG91bGQgdHJ5IHRvIHBsYWNlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgTHd0IGZyYW1ld29yay4gSSB3YW50IHRvIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgbW9kdWxlcy4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gRG9lcyBpdCByZWx5IG9uIGxvd2VyLWxldmVsIHN5c3RlbSBjYWxscyBkaXJlY3RseSBvciBpcyBpdCBidWlsZGluZyB1cG9uIG1vcmUgYWJzdHJhY3QgTHd0IHByaW1pdGl2ZXM/CgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljaXQgYXNzdW1wdGlvbnM/IElzIHRoZXJlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBhYm91dCBhIHNpdHVhdGlvbiB3aGVyZSBJIHdvdWxkIHVzZSB0aGlzPyBLbm93aW5nIHRoZSBpbnRlbnQsIEkgY2FuIGFzc2VzcyB0aGUgY29kZSBmb3IgbWFpbnRhaW5hYmlsaXR5LCBjbGFyaXR5LCBhbmQgYWRoZXJlbmNlIHRvIHRoZSBwcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg5NjU6XHRcbjg5NjY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjg5Njc6XHRsd3Rfb3V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG44OTY4Olx0e1xuODk2OTpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG44OTcwOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxuODk3MTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9sb2FkX2J5dGVzX3Byb3RvO1xuODk3MjpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuODk3MzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG87XG44OTc0Olx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fZGlmZjpcbjg5NzU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XG44OTc2Olx0XHRjYXNlIEJQRl9GVU5DX2dldF9jZ3JvdXBfY2xhc3NpZDpcbjg5Nzc6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfcHJvdG87XG44OTc4Olx0XHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcbjg5Nzk6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfcm91dGVfcmVhbG1fcHJvdG87XG44OTgwOlx0XHRjYXNlIEJQRl9GVU5DX2dldF9oYXNoX3JlY2FsYzpcbjg5ODE6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfaGFzaF9yZWNhbGNfcHJvdG87XG44OTgyOlx0XHRjYXNlIEJQRl9GVU5DX3BlcmZfZXZlbnRfb3V0cHV0OlxuODk4MzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XG44OTg0Olx0XHRjYXNlIEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkOlxuODk4NTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkX3Byb3RvO1xuODk4NjpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfdW5kZXJfY2dyb3VwOlxuODk4NzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG87XG44OTg4Olx0XHRkZWZhdWx0OlxuODk4OTpcdFx0XHRyZXR1cm4gYnBmX3NrX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjg5OTA6XHRcdH1cbjg5OTE6XHR9XG44OTkyOlx0XG44OTkzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG44OTk0Olx0bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG44OTk1Olx0e1xuODk5NjpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG44OTk3Olx0XHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxuODk5ODpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9pbl9wdXNoX2VuY2FwX3Byb3RvO1xuODk5OTpcdFx0ZGVmYXVsdDpcbjkwMDA6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjkwMDE6XHRcdH1cbjkwMDI6XHR9XG45MDAzOlx0XG45MDA0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBsd3Rfc2VnNmxvY2FsYCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIGxpa2UgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AgdXNlZCB0byBoYXZlIGEgZmFsbGJhY2sgbWVjaGFuaXNtLiBJdCB3b3VsZCBkZWZlciB0byBgbHd0X291dF9mdW5jX3Byb3RvYCwgYW5kIHRoYXQsIGluIHR1cm4sIHdvdWxkIHByb3ZpZGUgYCZhbXA7YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG9gIGZvciBoYW5kbGluZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIEJ1dCBub3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBGb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgLCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpcyBleHBsaWNpdGx5IHJldHVybmluZyBgTlVMTGAuIFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHVzZSBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgIHdpdGhpbiBgc2VnNmxvY2FsYCBCUEYgcHJvZ3JhbXMuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGlzIGBsd3Rfc2VnNmxvY2FsYCBCUEYgcHJvZ3JhbSB0eXBlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyByZWdpc3RlcmVkLCBob3cgaXQmIzM5O3MgdXNlZCwgYW5kIHdoYXQgb3RoZXIgcHJvZyB0eXBlcyBhcmUgaW4gcGxheSBoZXJlLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2hpZXZlLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IG1lYXN1cmU/IEEgYnVnIGZpeD8gSSBoYXZlIHRvIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzUtJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q6MTM2OnwgYGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgYCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgbHd0X3NlZzZsb2NhbGBgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzctJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0yNT1CUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyNzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNzk9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxMTQtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjkxMTU6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvYnRmLmMtOTExNi1cdFx0cmV0dXJuIEJURl9LRlVOQ19IT09LX0xXVDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODQzPXN0YXRpYyBib29sIGlzX25ldF9hZG1pbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg1MjpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1My1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4MTk9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19kaXJlY3RfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgyOC1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfT1VUOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4Mjk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODMwLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg3Nj1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg3LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg5LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzYtXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTM3Olx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXHRpZiAoSVNfRVJSKHApKSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0yMDI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcm9nX3R5cGVfbmFtZVtdID0ge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVx0W0JQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUl1cdD0gXCYjMzQ7Y2dyb3VwX3NvY2tfYWRkclwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjIyOlx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cdFx0PSBcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjMtXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVx0XHQ9IFwmIzM0O2xpcmNfbW9kZTJcJiMzNDssXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3MC1cdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XHR7IEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcyLVx0eyBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAgICAgICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xNzgtXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzoxNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjIyNzpcdHNjYWxlX3Rlc3QoXCYjMzQ7dGVzdF9zZWc2X2xvb3AuYnBmLm9cJiMzNDssIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVx0e1wmIzM0O2x3dF94bWl0XCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlx0e1wmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IEJQRiBWZXJpZmljYXRpb24gaW4gTmV0L0NvcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgcHJvZ3JhbSB2ZXJpZmllciBsb2dpYy4gSXQgc2VlbXMgdGhhdCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpcyByZXR1cm5pbmcgYE5VTExgIHVuZGVyIGEgc3BlY2lmaWMgY29uZGl0aW9uOiB3aGVuIHRoZSBgZnVuY19pZGAgaXMgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgLiBUaGlzIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZSBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGZvciBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRlbXB0aW5nIHRvIHV0aWxpemUgYGJwZl9za2JfcHVsbF9kYXRhKClgLiBUaGF0JiMzOTtzIGEgY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgaXNzdWUuCgpUaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBDYW4gd2UgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbj8gQWJzb2x1dGVseS4gVGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIHRoZSBgQlBGX1BST0dfTE9BRGAgY29tbWFuZCBhbmQgYSBwcm9ncmFtIHR5cGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgaXMgdGhlIHBhdGguIFNvLCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gbG9hZCB0aGlzIGFuZCB0cmlnZ2VyIHRoZSB2ZXJpZmllci4gVGhhdCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4KCk5vdywgZG9lcyB0aGlzIG1lZXQgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDs/IExldCYjMzk7cyBzZWUuLi4gQ29yZSBzdWJzeXN0ZW1zPyBDaGVjay4gQlBGIGFuZCBjb3JlIG5ldHdvcmtpbmc/IERlZmluaXRlbHkuIExvZ2ljIG1vZGlmaWNhdGlvbnM/IFllcywgdGhhdCBgTlVMTGAgcmV0dXJuIGlzIGEgZGVmaW5pdGUgbG9naWMgY2hhbmdlLiBSZWFjaGFibGU/IFllcywgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIGEgc3BlY2lmaWMgQlBGIHByb2dyYW0gdHlwZS4gT2theSwgdGhlIGZ1enppbmcgY3JpdGVyaWEgYXJlIG1ldC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZXhwbG9yZSB0aGlzIHByb3Blcmx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBlbmFibGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAsIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLCBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX05FVGAsIGBDT05GSUdfTFdUVU5ORUxgLCBgQ09ORklHX0lQVjZfU0VHNl9CUEZgLCBhbmQgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgLiBJJiMzOTtsbCBncmVwIGZvciBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGFuZCB3aGVyZSBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIGlzIGNvbXBpbGVkLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgSSBuZWVkIHRvIGhhdmUgZW5hYmxlZCBmb3IgUUVNVSB0byBiZSBhYmxlIHRvIGhpdCB0aGlzIGNvZGUgcGF0aCBhbmQgdGh1cyB0byBiZSBmdXp6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x3dF9zZWc2bG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDQ6bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0NS17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1Njc9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNTcxOmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE1NzI6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cdC5pc192YWxpZF9hY2Nlc3NcdD0gbHd0X2lzX3ZhbGlkX2FjY2Vzcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc3OmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3NlZzZsb2NhbF9wcm9nX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCB0aGF0IGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AgdGhpbmc6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGaWx0ZXJpbmcgYW5kIExXVCBTdXBwb3J0KioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgZmlndXJlIG91dCB3aGVyZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgbGFyZ2VyIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIG9yIGV4YW1pbmUgdGhlIE1ha2VmaWxlcyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBpbmNvcnBvcmF0ZWQuCgpUaGVuLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQ6IGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIEkga25vdyBhIGJpdCBhYm91dCBMV1QgKExpZ2h0d2VpZ2h0IFR1bm5lbHMpIGFuZCBTZWdtZW50IFJvdXRpbmcgdjYgKFNSdjYpLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSB2ZXJpZmllciBmaXRzIGluLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgdmVyaWZpY2F0aW9uIG9wZXJhdGlvbiB3aXRoaW4gdGhlIFNSdjYgY29udGV4dCwgcG9zc2libHkgcmVsYXRlZCB0byBsb2NhbCBzZWdtZW50IHByb2Nlc3Npbmcgb3Igc29tZSBraW5kIG9mIGVuY2Fwc3VsYXRpb24gdmVyaWZpY2F0aW9uLgoKSSYjMzk7bGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRob3NlIHByZXByb2Nlc3NvciBpZmRlZnMgYXJvdW5kIGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwganVpY2UgaXMuIFRob3NlIGlmZGVmcyBhcmUgdGhlIGJyZWFkY3J1bWJzIHRoYXQmIzM5O2xsIHNob3cgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBmZWF0dXJlIGZsYWdzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgKmVuYWJsZWQqIGF0IGNvbXBpbGUgdGltZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtb2R1bGUsIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24sIG9yIGEgc3BlY2lmaWMgZmVhdHVyZSBlbmFibGVkIGF0IGJvb3Q/IFVuZGVyc3RhbmRpbmcgdGhlIGlmZGVmcyB3aWxsIHF1aWNrbHkgY2xhcmlmeSBpZiBpdCYjMzk7cyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBzcGVjaWZpYyBtb2R1bGUgYmVpbmcgbG9hZGVkLCBvciBwZXJoYXBzIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBuZWVkcyB0byBiZSB0b2dnbGVkIHRvIGFjdGl2YXRlIGl0LiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIHN0cnVjdCBpcywgYW5kIGhvdyBpdHMgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGJlaW5nIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1NjU6XHR9O1xuMTE1NjY6XHRcbjExNTY3Olx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcbjExNTY4Olx0XHQudGVzdF9ydW5cdFx0PSBicGZfcHJvZ190ZXN0X3J1bl9za2IsXG4xMTU2OTpcdH07XG4xMTU3MDpcdFxuMTE1NzE6XHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcbjExNTcyOlx0XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8sXG4xMTU3MzpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxuMTE1NzQ6XHRcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcdD0gYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyxcbjExNTc1Olx0fTtcbjExNTc2Olx0XG4xMTU3NzpcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3NlZzZsb2NhbF9wcm9nX29wcyA9IHtcbjExNTc4Olx0fTtcbjExNTc5Olx0XG4xMTU4MDpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tfdmVyaWZpZXJfb3BzID0ge1xuMTE1ODE6XHRcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfZmlsdGVyX2Z1bmNfcHJvdG8sXG4xMTU4MjpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBzb2NrX2ZpbHRlcl9pc192YWxpZF9hY2Nlc3MsXG4xMTU4MzpcdFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBicGZfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3MsXG4xMTU4NDpcdH07XG4xMTU4NTpcdFxuMTE1ODY6XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGNnX3NvY2tfcHJvZ19vcHMgPSB7XG4xMTU4NzpcdH07XG4xMTU4ODpcdFxuMTE1ODk6XHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2NrX2FkZHJfdmVyaWZpZXJfb3BzID0ge1xuMTE1OTA6XHRcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfYWRkcl9mdW5jX3Byb3RvLFxuMTE1OTE6XHRcdC5pc192YWxpZF9hY2Nlc3NcdD0gc29ja19hZGRyX2lzX3ZhbGlkX2FjY2VzcyxcbjExNTkyOlx0XHQuY29udmVydF9jdHhfYWNjZXNzXHQ9IHNvY2tfYWRkcl9jb252ZXJ0X2N0eF9hY2Nlc3MsXG4xMTU5MzpcdH07XG4xMTU5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIE5ldHdvcmsgRmlsdGVyIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHBhdGggZm9yIGBuZXQvY29yZS9maWx0ZXIub2Agd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHNwZWNpZmljIG9iamVjdCBmaWxlIGlzIGNvbnN0cnVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IEtjb25maWcgb3B0aW9ucyBwbGF5IGEgcm9sZSBpbiBpdHMgY29tcGlsYXRpb24sIGFuZCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gZmVhdHVyZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBsaWtlIEJQRiwgSVB2NiwgTFdULCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy04Ny0gKlxubmV0L2NvcmUvcGt0Z2VuLmM6ODg6ICogUmVtb3ZlIGlmIGZpeCBmcm9tIGFkZGVkIEhhcmFsZCBXZWx0ZSBcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcdTAwM2UgMDQwNDE5XG5uZXQvY29yZS9wa3RnZW4uYy04OS0gKiBpYTY0IGNvbXBpbGF0aW9uIGZpeCBmcm9tICBBcm9uIEdyaWZmaXMgXHUwMDNjYXJvbkBocC5jb21cdTAwM2UgMDQwNjA0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTc0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgaGVyZT8gQXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlPyBEb2VzIG9uZSByZXF1aXJlIHRoZSBvdGhlcj8gSXMgdGhlcmUgc29tZSBjb25kaXRpb25hbCBlbmFibGluZyBnb2luZyBvbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZsYWdzIGludGVyYWN0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgYSBwcmV0dHkgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIGFueSBCUEYgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSBndWVzc2luZyBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIHByb2JhYmx5ICpuZWVkcyogaXQsIGJ1dCBJIHdhbnQgdG8gdmVyaWZ5IHRoZSBleGFjdCBLY29uZmlnIGxvZ2ljIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIEJQRiBjYXBhYmlsaXRpZXMgbGluZXMgdXAgd2l0aCBob3cgdGhlIGtlcm5lbCBpcyBhY3R1YWxseSBzdHJ1Y3R1cmVkLiBUaGVuLCBJIHdpbGwgc3RhcnQgYnkgc2VlaW5nIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBsb2NhdGVkLCBpbiB3aGF0IGZpbGVzLiBUaGlzIHdpbGwgc3RhcnQgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSB2YXJpb3VzIHBvc3NpYmxlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBWNl9TRUc2X0JQRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02ODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9jaGVja19tdHVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjg3Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjY4Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTAtfVxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMTojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTItXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Njk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzEtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE2My19O1xubmV0L2NvcmUvZmlsdGVyLmM6NzE2NDojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0OC1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA1MC1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0zMDA9Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM4OC1cdFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzg5Olx0XHR7IFwmIzM0O0NPTkZJR19JUFY2X1NFRzZfQlBGXCYjMzQ7LCB9LFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cdFx0LyogQlBGX1BST0dfVFlQRV9MSVJDX01PREUyIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTQ4PUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NDk6Q09ORklHX0lQVjZfU0VHNl9CUEY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4ODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIEJQRioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVBWNl9TRUc2X0JQRmAuIEkgcmVtZW1iZXIgdGhhdCBraW5kIG9mIHN0dWZmIGlzIHVzdWFsbHkgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGF0IGBuZXQvaXB2NmAgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIElQdjYgY29uZmlndXJhdGlvbiByZXNpZGVzLiBTbywgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYG5ldC9pcHY2L0tjb25maWdgLiBBbmQsIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGZpbmQgYElQVjZfU0VHNl9CUEZgLCBJJiMzOTtsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDMxMiDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbGF0ZWQgZmVhdHVyZXMgaW4gdGhvc2UgZmlsZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCwgb3IgYW55IGhhcmR3YXJlIG9yIHNvZnR3YXJlIHJlcXVpcmVtZW50cywgYmVmb3JlIGBJUFY2X1NFRzZfQlBGYCBjYW4gYmUgc2VsZWN0ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBJUHY2IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGJhc2UgSVB2NiBzdGFjaywgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYmV0dGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4gMzEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzExOlx0XG4gMzEyOlx0Y29uZmlnIElQVjZfU0VHNl9CUEZcbiAzMTM6XHRcdGRlZl9ib29sIHlcbiAzMTQ6XHRcdGRlcGVuZHMgb24gSVBWNl9TRUc2X0xXVFVOTkVMXG4gMzE1Olx0XHRkZXBlbmRzIG9uIElQVjYgPSB5XG4gMzE2Olx0XG4gMzE3Olx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG4gMzE4Olx0XHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuIDMxOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzIwOlx0XHRzZWxlY3QgTFdUVU5ORUxcbiAzMjE6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAzMjI6XHRcdGhlbHBcbiAzMjM6XHRcdCAgU3VwcG9ydCBmb3IgUkZDNjU1NCBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDMyNDpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cbiAzMjU6XHRcbiAzMjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAzMjc6XHRcbiAzMjg6XHRjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxuIDMyOTpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYElQVjZfU0VHNl9MV1RVTk5FTGAgaW4gYG5ldC9pcHY2L0tjb25maWdgOgoKKipDaGVja2luZyBJUHY2IFNlZ21lbnQgUm91dGluZyBTdXBwb3J0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucywgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCwgYXMgSSBzZWUgaXQsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IElQdjYgc2VnbWVudCByb3V0aW5nIHN1cHBvcnQgbG9va3MgbGlrZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIFRoZSAmIzM0O0tjb25maWcmIzM0OyBmaWxlIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LCBJIGltbWVkaWF0ZWx5IGtub3cgd2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgYW5kIGxpa2VseSwgaG93IHRoYXQgaXMgZXhwb3NlZCB0byB1cywgdGhlIHVzZXIuIEEgcHJvcGVyIGltcGxlbWVudGF0aW9uIG9mIHNlZ21lbnQgcm91dGluZyBpcyBpbmNyZWRpYmx5IGltcG9ydGFudCBmb3IgbWFueSBvZiBteSBwcm9mZXNzaW9uYWwgcHJvamVjdHMuIEkgc2hvdWxkIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoaXMgZmVhdHVyZS4KCk5vdywgbGV0IG1lIGRpZyBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGBJUFY2X1NFRzZfTFdUVU5ORUxgIG9wdGlvbiBpcyBhdmFpbGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlLiBJdOKAmXMgcG9zc2libGUgaXQgY29udHJvbHMgYSBzcGVjaWZpYyBtb2R1bGUsIGFuIGVudGlyZSBmZWF0dXJlIHNldCwgb3IgZXZlbiBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBTUnY2IHN0YWNrLiBJ4oCZbGwgYmUgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBwcmVzZW50LCBhbmQgZXhhY3RseSB3aGF0IGl0IGNvbnRyb2xzIHdpdGhpbiB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkgbWlnaHQgYWxyZWFkeSBrbm93IHdoYXQgaXQgZG9lcywgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBub3QgYXNzdW1lLiBEZXBlbmRpbmcgb24gd2hhdCBpdCBjb250cm9scywgSSBtYXkgbmVlZCB0byBtYWtlIHNldmVyYWwgY29uZmlnIGNoYW5nZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSBmb3IgYW55IGFyY2hpdGVjdHVyZS9rZXJuZWwgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gcnVuLiBJdCBjb3VsZCBkaWN0YXRlIGhvdyBJIGRlcGxveSBjZXJ0YWluIHByb2plY3RzLiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIGl0IGlzIGluY2x1ZGVkIGluIGFueSBidWlsZCBJIG1pZ2h0IG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gSVB2NiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIElQdjYgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjg2LiBJIGtub3cgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGFuYWx5c2lzLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIHdpbGwgYmUgcGxlbnR5IG9mIGludGVyZXN0aW5nIHRoaW5ncyB0byB1bnJhdmVsIGluIHRoYXQgc2VjdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg1Olx0XG4gMjg2Olx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxuIDI4NzpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDI4ODpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMjg5Olx0XHRzZWxlY3QgTFdUVU5ORUxcbiAyOTA6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAyOTE6XHRcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xuIDI5MjpcdFx0aGVscFxuIDI5MzpcdFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcbiAyOTQ6XHRcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XG4gMjk1Olx0XHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxuIDI5NjpcdFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cbiAyOTc6XHRcbiAyOTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyOTk6XHRcbiAzMDA6XHRjb25maWcgSVBWNl9TRUc2X0hNQUNcbiAzMDE6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuIDMwMjpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzAzOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gMzA0Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNlZzYgTG9jYWwgVmVyaWZpZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19ORVRgLCBgQ09ORklHX0lQVjZgLCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGFuZCBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGV2ZW4gaWYgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGZ1bmN0aW9uIGlzICpzdGlsbCogY29tcGlsZWQgaWYgd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0IGZlZWxzIG9kZCwgYW5kIEkgdGhpbmsgaXQmIzM5O3MgYmVjYXVzZSBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIGlzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgYXMgbG9uZyBhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AgbW9yZSBjbG9zZWx5IGFuZCBzZWUgaWYgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCBhY3R1YWxseSBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBMZXQgbWUgc2VhcmNoIHRoYXQgZmlsZSBmb3IgdGhlIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmUgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIEJQRiBQcm9ncmFtIFR5cGVzIGFuZCBTdHJ1Y3R1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgaXQmIzM5O3MgaW4gYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0Li4uIFllcCwgdGhlcmUgaXQgaXM6IGBCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCwgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpYC4gR29vZC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGJwZl90eXBlcy5oYCBpcyBzdHJ1Y3R1cmVkIGFuZCB3aGF0IHRoZSBtYWNybyBgQlBGX1BST0dfVFlQRWAgZG9lcyBiZWhpbmQgdGhlIHNjZW5lcy4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0eXBlcyBhcmUgYnVpbHQgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBwYXJ0aWN1bGFybHkgYF9fc2tfYnVmZmAgYW5kIGBza19idWZmYCBpbiB0aGlzIExXVCBjb250ZXh0LiBJJiMzOTtsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHlwZXNcXC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MjY5MT1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfdG9rZW5fZm9wcztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI2OTgtI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI2OTk6I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcdTAwM2VcbmluY2x1ZGUvbGludXgvYnBmLmgtMjcwMC0jdW5kZWYgQlBGX1BST0dfVFlQRVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDk5PWVudW0gYnBmX2F0dGFjaF90eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTE2Ni1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTY3Oi8qIEFkZCBCUEZfTElOS19UWVBFKHR5cGUsIG5hbWUpIGluIGJwZl90eXBlcy5oIHRvIGtlZXAgYnBmX2xpbmtfdHlwZV9zdHJzW11cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTY4LSAqIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYmVsb3cuXG4tLVxua2VybmVsL2JwZi9idGYuYz02MDc3PXN0YXRpYyB1bmlvbiB7XG4tLVxua2VybmVsL2JwZi9idGYuYy02MDgxLVx0a2Vybl9jdHhfdHlwZSBfaWQjI19rZXJuO1xua2VybmVsL2JwZi9idGYuYzo2MDgyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL2J0Zi5jLTYwODMtI3VuZGVmIEJQRl9QUk9HX1RZUEVcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTYwODg9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy02MDkwLVx0X19jdHhfY29udmVydCMjX2lkLFxua2VybmVsL2JwZi9idGYuYzo2MDkxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTItI3VuZGVmIEJQRl9QUk9HX1RZUEVcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTYwOTU9c3RhdGljIHU4IGJwZl9jdHhfY29udmVydF9tYXBbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTctXHRbX2lkXSA9IF9fY3R4X2NvbnZlcnQjI19pZCxcbmtlcm5lbC9icGYvYnRmLmM6NjA5ODojaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHlwZXMuaFx1MDAzZVxua2VybmVsL2JwZi9idGYuYy02MDk5LSN1bmRlZiBCUEZfUFJPR19UWVBFXG4tLVxua2VybmVsL2JwZi9idGYuYz02MTQ2PWJvb2wgYnRmX2lzX3Byb2dfY3R4X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjE5NC1cdFx0Lyogc2hvdWxkIG5vdCBoYXBwZW4gKi9cbmtlcm5lbC9icGYvYnRmLmM6NjE5NTpcdFx0YnBmX2xvZyhsb2csIFwmIzM0O1BsZWFzZSBmaXgga2VybmVsIGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcXG5cJiMzNDspO1xua2VybmVsL2JwZi9idGYuYy02MTk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03NS0jZGVmaW5lIEJQRl9MSU5LX1RZUEUoX2lkLCBfbmFtZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjc2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03Ny0jdW5kZWYgQlBGX1BST0dfVFlQRVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIzNDM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgKiBjb25zdCBicGZfcHJvZ190eXBlc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIzNDctI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMzQ4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMzQ5LSN1bmRlZiBCUEZfUFJPR19UWVBFXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzM5OT1zdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDAwLVx0W0JQRl9MSU5LX1RZUEVfVU5TUEVDXSA9IFwmIzM0O1x1MDAzY2ludmFsaWRcdTAwM2VcJiMzNDssXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDAxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDAyLX07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQtI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDU6I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcdTAwM2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Ni0jdW5kZWYgQlBGX1BST0dfVFlQRVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDk5PWVudW0gYnBmX2F0dGFjaF90eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTE2Ni1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTY3Oi8qIEFkZCBCUEZfTElOS19UWVBFKHR5cGUsIG5hbWUpIGluIGJwZl90eXBlcy5oIHRvIGtlZXAgYnBmX2xpbmtfdHlwZV9zdHJzW11cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTY4LSAqIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYmVsb3cuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIExXVCBTRUc2TE9DQUwgQlBGIFByb2dyYW0gTG9hZGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSB2ZXJpZmllciBvcGVyYXRpb25zIGZvciB0aGF0IHByb2dyYW0gdHlwZSwgYXMgZGVmaW5lZCBpbiBgYnBmX3ZlcmlmaWVyX29wc2AsIGFyZSBzZXQgdG8gdXNlIGAmYW1wO2x3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYC4gR29vZC4gTWFrZXMgc2Vuc2UuIFdoZW4gdGhlIGBCUEZfUFJPR19MT0FEYCBzeXNjYWxsIGNvbWVzIGluIHdpdGggdGhhdCBwcm9ncmFtIHR5cGUsIGBicGZfY2hlY2tgIGdldHMgY2FsbGVkLCBhbmQgYXMgcGFydCBvZiBpdHMgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGl0JiMzOTtzIGdvaW5nIHRvIGhpdCBgb3BzLSZndDtnZXRfZnVuY19wcm90b2AsIHdoaWNoIGluIHRoaXMgY2FzZSByZXNvbHZlcyB0byBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgdGhlIHByb2dyYW0gY29uZm9ybXMgdG8gdGhlIGV4cGVjdGVkIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcmVzb3VyY2VzIHdpdGhpbiB0aGUga2VybmVsIGNvbnRleHQuCgpUaGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyBob3cgdGhpcyB2ZXJpZmllZCBwcm9ncmFtICphY3R1YWxseSogZ2V0cyBleGVjdXRlZCwgb3IgYXR0YWNoZWQuIEFoLCByaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmZhY2UgY29tZXMgaW4sIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBSVE1fTkVXUk9VVEVgIHdpdGggYW4gYFNFRzZMT0NBTGAgZW5jYXBzdWxhdGlvbiBhbmQgYSBgU0VHNl9MT0NBTF9BQ1RJT05fQlBGYCBhY3Rpb24uIEFuZCwgdG8gdGllIHRoYXQgYWxsIHRvZ2V0aGVyLCB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgdGhlIGZpbmFsIGNyaXRpY2FsIHBpZWNlIHRvIGVuYWJsaW5nIHRoaXMgQlBGIHByb2dyYW0gZm9yIGRhdGEgcGxhbmUgcHJvY2Vzc2luZy4KCk5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIHNlZSBob3cgdGhvc2UgcGFydHMgYXJlIGltcGxlbWVudGVkLCB0aGUgZGV0YWlscyBhcm91bmQgYXR0YWNoaW5nIHRoZSBwcm9ncmFtIHRvIHRoZSBkYXRhIHBhdGgsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRoYXQgY29tZSB3aXRoIHVzaW5nIGEgQlBGIHByb2dyYW0gaW4gdGhhdCBsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTRUc2X0xPQ0FMX0FDVElPTl9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBmb3IgQWN0aW9ucyBpbiBgc2VnNl9sb2NhbC5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYWN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgc2VnNl9sb2NhbC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgbG9jYWwgZnVuY3Rpb24gbWFuaXB1bGF0aW9uIHNob3VsZCByZXNpZGUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGhhbmRsZXJzIGZvciB0aGUgdmFyaW91cyBTUnY2IGJlaGF2aW9ycy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucywgbGlrZWx5IHVzaW5nIGNvbW1vbiBuYW1pbmcgY29udmVudGlvbnMgd2l0aGluIHRoZSBTUnY2IGNvZGViYXNlIOKAkyBtYXliZSBzb21ldGhpbmcgcHJlZml4ZWQgd2l0aCAmIzM0O3NyaF9hY3Rpb25fJiMzNDsgb3Igc2ltaWxhciwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBvZnRlbiBsZXNzIHRoYW4gaW50dWl0aXZlLiBJdCBjb3VsZCBiZSBhIHN3aXRjaCBzdGF0ZW1lbnQsIGEgc2VyaWVzIG9mIGlmL2Vsc2UgYmxvY2tzLCBvciBldmVuIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXksIGlmIHRoZXkgYXJlIG9wdGltaXppbmcgcGVyZm9ybWFuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlc2UgYWN0aW9ucyBhcmUgaW52b2tlZCB3aXRoaW4gdGhlIGRhdGFwYXRoLCBsaWtlbHkgdHJpZ2dlcmVkIGJ5IGluY29taW5nIElQdjYgcGFja2V0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGVhY2ggb2YgdGhlc2UgYWN0aW9ucywgYW5kIGhvdyB0aGUgc3RhdGUgaXMgbWFuaXB1bGF0ZWQgYXMgdGhlIHBhY2tldHMgdHJhdmVyc2UgdGhlIFNSdjYgZG9tYWluLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNi0gKiAgRGF2aWQgTGVicnVuIFx1MDAzY2RhdmlkLmxlYnJ1bkB1Y2xvdXZhaW4uYmVcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3OiAqICBlQlBGIHN1cHBvcnQ6IE1hdGhpZXUgWGhvbm5ldXggXHUwMDNjbS54aG9ubmV1eEBnbWFpbC5jb21cdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04LSAqL1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2MS1cdHN3aXRjaCAocmV0KSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ2MjpcdGNhc2UgQlBGX09LOlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NjM6XHRjYXNlIEJQRl9SRURJUkVDVDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY0LVx0XHRicmVhaztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY1Olx0Y2FzZSBCUEZfRFJPUDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY2LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ3NjpcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzctXHRcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ4Nz1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3OC1cdHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTc5Olx0XHQuYWN0aW9uXHRcdD0gU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0JQRixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTgwOlx0XHQuYXR0cnNcdFx0PSBTRUc2X0ZfQVRUUihTRUc2X0xPQ0FMX0JQRiksXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4MS1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9wb2xpY3lbU0VHNl9MT0NBTF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NzAtXHRbU0VHNl9MT0NBTF9PSUZdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY3MTpcdFtTRUc2X0xPQ0FMX0JQRl1cdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjcyLVx0W1NFRzZfTE9DQUxfQ09VTlRFUlNdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MDA9c3RhdGljIGludCBjbXBfbmxhX29pZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkwOC0jZGVmaW5lIE1BWF9QUk9HX05BTUUgMjU2XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkwOTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnBmX3Byb2dfcG9saWN5W1NFRzZfTE9DQUxfQlBGX1BST0dfTUFYICYjNDM7IDFdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTA6XHRbU0VHNl9MT0NBTF9CUEZfUFJPR11cdCAgID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkxMTpcdFtTRUc2X0xPQ0FMX0JQRl9QUk9HX05BTUVdID0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MTItXHRcdFx0XHQgICAgICAgLmxlbiA9IE1BWF9QUk9HX05BTUUgfSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MTcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTg6XHRzdHJ1Y3QgbmxhdHRyICp0YltTRUc2X0xPQ0FMX0JQRl9QUk9HX01BWCAmIzQzOyAxXTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTE5LVx0c3RydWN0IGJwZl9wcm9nICpwO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTIyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MjM6XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFNFRzZfTE9DQUxfQlBGX1BST0dfTUFYLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MjQ6XHRcdFx0XHRcdCAgYXR0cnNbU0VHNl9MT0NBTF9CUEZdLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MjUtXHRcdFx0XHRcdCAgYnBmX3Byb2dfcG9saWN5LCBOVUxMKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkyOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTI5Olx0aWYgKCF0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSB8fCAhdGJbU0VHNl9MT0NBTF9CUEZfUFJPR19OQU1FXSlcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MzI6XHRzbHd0LVx1MDAzZWJwZi5uYW1lID0gbmxhX21lbWR1cCh0YltTRUc2X0xPQ0FMX0JQRl9QUk9HX05BTUVdLCBHRlBfS0VSTkVMKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMzLVx0aWYgKCFzbHd0LVx1MDAzZWJwZi5uYW1lKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM1LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MzY6XHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTM3Olx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXHRpZiAoSVNfRVJSKHApKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5NDc9c3RhdGljIGludCBwdXRfbmxhX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NTMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk1NDpcdG5lc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBTRUc2X0xPQ0FMX0JQRik7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1NS1cdGlmICghbmVzdClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTU4Olx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgU0VHNl9MT0NBTF9CUEZfUFJPRywgc2x3dC1cdTAwM2VicGYucHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQpKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NTktXHRcdHJldHVybiAtRU1TR1NJWkU7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjEtXHRpZiAoc2x3dC1cdTAwM2VicGYubmFtZSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTYyOlx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgU0VHNl9MT0NBTF9CUEZfUFJPR19OQU1FLCBzbHd0LVx1MDAzZWJwZi5uYW1lKSlcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTYzLVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMjk0PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fcGFyYW0gc2VnNl9hY3Rpb25fcGFyYW1zW1NFRzZfTE9DQUxfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzE5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzMjA6XHRbU0VHNl9MT0NBTF9CUEZdXHQ9IHsgLnBhcnNlID0gcGFyc2VfbmxhX2JwZixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzIxLVx0XHRcdFx0ICAgIC5wdXQgPSBwdXRfbmxhX2JwZixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjYwNT1zdGF0aWMgaW50IHNlZzZfbG9jYWxfZ2V0X2VuY2FwX3NpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2MzItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjYzMzpcdGlmIChhdHRycyBcdTAwMjYgU0VHNl9GX0FUVFIoU0VHNl9MT0NBTF9CUEYpKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2MzQtXHRcdG5sc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSAmIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxNQoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggVGFyZ2V0aW5nIEJQRiBWZXJpZmljYXRpb24gTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhcmdldCBhY3Rpb24gaXMgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CUEZgLCBhbmQgSSYjMzk7bSBob21pbmcgaW4gb24gcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgcmVsYXRlZCB0byBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHByZWNpc2Ugd2l0aCBteSBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AsIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAsIGFuZCBwb3RlbnRpYWxseSBgcGFyc2VfbmxhX2JwZmAgYXMgY2FuZGlkYXRlcy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHRhcmdldCBhcyBsb25nIGFzIGl0JiMzOTtzIG5vdCBhbiBpbmxpbmUgc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBoZWFkZXIuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyB2aXNpYmxlIGluIHRoZSB2bWxpbnV4IHN5bWJvbCB0YWJsZS4gVGhpcyBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gc3RydWN0dXJlIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGEgY29ycmVjdGx5LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBnaXZlbiB0aGlzIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIHRoaXMgcGF0Y2ggYWx0ZXJzIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIHRvIHByZXZlbnQgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHVzYWdlIGZvciBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtcy4gVGhpcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gYW5kIGxpZ2h0d2VpZ2h0IHR1bm5lbCBoYW5kbGluZy4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYW5kIGBwYXJzZV9ubGFfYnBmYC4gQW5kIGZpbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOiBgQlBGX1NZU0NBTExgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgSVBWNmAsIGFuZCBgTkVUYC4gSSYjMzk7dmUgbWFkZSBzdXJlIHRvIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4LgoKQWxyaWdodCwgSSYjMzk7dmUgY29uZmlybWVkIGFsbCB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgaW52b2NhdGlvbi4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9icGYmIzM0OywKICAgICYjMzQ7cGFyc2VfbmxhX2JwZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGhlbHBlciBmdW5jdGlvbiByZXNvbHV0aW9uIGZvciBzZWc2bG9jYWwgcHJvZ3JhbXMgKGx3dF9zZWc2bG9jYWxfZnVuY19wcm90bykgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gZGlzYWxsb3cgYnBmX3NrYl9wdWxsX2RhdGEuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGFuZCBJUHY2IFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2x3dF9zZWc2bG9jYWxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtwYXJzZV9ubGFfYnBmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaGVscGVyIGZ1bmN0aW9uIHJlc29sdXRpb24gZm9yIHNlZzZsb2NhbCBwcm9ncmFtcyAobHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBkaXNhbGxvdyBicGZfc2tiX3B1bGxfZGF0YS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIEJQRiB2ZXJpZmljYXRpb24gYW5kIElQdjYgU1J2NiBsaWdodHdlaWdodCB0dW5uZWwgZXhlY3V0aW9uIHBhdGhzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQyMTk0MzQzNzY4MzJmNDgyZTcyNmI2OTJlNzcwNjQxMGE2OWI5NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTA6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDg1MTMxNjdhODU4YTguLjJhODRmOWQwMTEzMTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC05MDQ0LDYgJiM0Mzs5MDQ0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqCiBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiB7CiAJc3dpdGNoIChmdW5jX2lkKSB7CiYjNDM7CWNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YToKJiM0MzsJCXJldHVybiBOVUxMOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpCiAJY2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczoKIAkJcmV0dXJuICZhbXA7YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLCBhbmQgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgY2hhbmdlcyB3aXRoaW4gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGEgYGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpgIHRoYXQgcmV0dXJucyBgTlVMTGAuIE5vdywgd2h5IHdvdWxkIHRoZXkgZG8gdGhhdD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLgoKVGhlIGZ1bmN0aW9uIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGl0c2VsZiBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgY2xlYXJseSBhIGRpc3BhdGNoZXIgZm9yIEJQRiBmdW5jdGlvbiBwcm90b3R5cGVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBhbmQgbG9jYWwgZnVuY3Rpb25zLiBUaGUgcHJlc2VuY2Ugb2YgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIGFuIGludGVyYWN0aW9uLCBvciBpbnRlbmRlZCBpbnRlcmFjdGlvbiwgd2l0aCBwYWNrZXQgZGF0YSBtYW5pcHVsYXRpb24sIHBvc3NpYmx5IGZvciBMV1QgKExpbnV4IFdpcmUgVHJhbnNwb3J0KSBvciBTUnY2IHByb2Nlc3NpbmcuCgpUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGJlaW5nICpkaXNhYmxlZCogaGVyZSBieSByZXR1cm5pbmcgYE5VTExgIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgY29uc2Npb3VzIGRlY2lzaW9uIHdhcyBtYWRlIHRvICpub3QqIGFsbG93IGBza2JfcHVsbF9kYXRhYCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGlzIGEgc2VjdXJpdHkgbWVhc3VyZT8gSXMgaXQgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIGlzIGl0IGEgY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIGhvdyBTUnY2IG9yIExXVCBpbnRlcmFjdHMgd2l0aCB0aGUgc2tiIGRhdGEgc3RydWN0dXJlPyBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhcm91bmQgbGluZSA5MDQ0IGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBhbmQgd2hhdCB0aGlzIEJQRiBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBkbyB3aXRoaW4gdGhpcyBzZWdtZW50IG9mIHRoZSBjb2RlLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgaXMgdmFsaWQgYW5kIGFwcHJvcHJpYXRlLCBvciBpZiBpdCBoYXMgc29tZSB1bmRlc2lyYWJsZSBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkwMzA6XHRcdGNhc2UgQlBGX0ZVTkNfbDNfY3N1bV9yZXBsYWNlOlxuOTAzMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2wzX2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzI6XHRcdGNhc2UgQlBGX0ZVTkNfbDRfY3N1bV9yZXBsYWNlOlxuOTAzMzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2w0X2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2V0X2hhc2hfaW52YWxpZDpcbjkwMzU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9zZXRfaGFzaF9pbnZhbGlkX3Byb3RvO1xuOTAzNjpcdFx0Y2FzZSBCUEZfRlVOQ19sd3RfcHVzaF9lbmNhcDpcbjkwMzc6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvO1xuOTAzODpcdFx0ZGVmYXVsdDpcbjkwMzk6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjkwNDA6XHRcdH1cbjkwNDE6XHR9XG45MDQyOlx0XG45MDQzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG45MDQ0Olx0bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuOTA0NTpcdHtcbjkwNDY6XHRcdHN3aXRjaCAoZnVuY19pZCkge1xuOTA0NzpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuOTA0ODpcdFx0XHRyZXR1cm4gTlVMTDtcbjkwNDk6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbjkwNTA6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XG45MDUxOlx0XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNfcHJvdG87XG45MDUyOlx0XHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcbjkwNTM6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG87XG45MDU0Olx0XHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FkanVzdF9zcmg6XG45MDU1Olx0XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90bztcbjkwNTY6XHQjZW5kaWZcbjkwNTc6XHRcdGRlZmF1bHQ6XG45MDU4Olx0XHRcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG45MDU5Olx0XHR9XG45MDYwOlx0fVxuOTA2MTpcdFxuOTA2MjpcdHN0YXRpYyBib29sIGJwZl9za2JfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuOTA2MzpcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbjkwNjQ6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbjkwNjU6XHR7XG45MDY2Olx0XHRjb25zdCBpbnQgc2l6ZV9kZWZhdWx0ID0gc2l6ZW9mKF9fdTMyKTtcbjkwNjc6XHRcbjkwNjg6XHRcdGlmIChvZmYgXHUwMDNjIDAgfHwgb2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBfX3NrX2J1ZmYpKVxuOTA2OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG45MDcwOlx0XG45MDcxOlx0XHQvKiBUaGUgdmVyaWZpZXIgZ3VhcmFudGVlcyB0aGF0IHNpemUgXHUwMDNlIDAuICovXG45MDcyOlx0XHRpZiAob2ZmICUgc2l6ZSAhPSAwKVxuOTA3MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG45MDc0Olx0XG45MDc1Olx0XHRzd2l0Y2ggKG9mZikge1xuOTA3NjpcdFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IF9fc2tfYnVmZiwgY2JbMF0sIGNiWzRdKTpcbjkwNzc6XHRcdFx0aWYgKG9mZiAmIzQzOyBzaXplIFx1MDAzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgX19za19idWZmLCBjYls0XSkpXG45MDc4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuOTA3OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGx3dF9vdXRfZnVuY19wcm90b2AgdGhpbmcuIFRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIG91dHB1dCBmdW5jdGlvbiBwcm90b3R5cGUsIGFuZCBnaXZlbiB0aGUgJiMzNDtsd3QmIzM0OyBwcmVmaXgsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggbGlnaHR3ZWlnaHQgdGhyZWFkcyBvciBjb25jdXJyZW5jeS4gT2theSwgd2hhdCYjMzk7cyBpbnNpZGUgdGhpcyB0aGluZz8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNvbnRlbnRzIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSXMgaXQgYSB0eXBlIGRlZmluaXRpb24sIGEgc3RydWN0LCBhbiBhYnN0cmFjdCBjbGFzcz8gSXMgaXQgYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uPyBLbm93aW5nICpleGFjdGx5KiB3aGF0IHRoaXMgaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgZm91bmRhdGlvbiBmb3Igd2hhdGV2ZXIgZm9sbG93cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHRoaW5nIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5MDAwOlx0XHRcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG45MDAxOlx0XHR9XG45MDAyOlx0fVxuOTAwMzpcdFxuOTAwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuOTAwNTpcdGx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG45MDA2Olx0e1xuOTAwNzpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG45MDA4Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX2tleTpcbjkwMDk6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZ2V0X3R1bm5lbF9rZXlfcHJvdG87XG45MDEwOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHVubmVsX2tleTpcbjkwMTE6XHRcdFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XG45MDEyOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX29wdDpcbjkwMTM6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZ2V0X3R1bm5lbF9vcHRfcHJvdG87XG45MDE0Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHVubmVsX29wdDpcbjkwMTU6XHRcdFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XG45MDE2Olx0XHRjYXNlIEJQRl9GVU5DX3JlZGlyZWN0OlxuOTAxNzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xuOTAxODpcdFx0Y2FzZSBCUEZfRlVOQ19jbG9uZV9yZWRpcmVjdDpcbjkwMTk6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9jbG9uZV9yZWRpcmVjdF9wcm90bztcbjkwMjA6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxuOTAyMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcbjkwMjI6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuOTAyMzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9jaGFuZ2VfaGVhZF9wcm90bztcbjkwMjQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX3N0b3JlX2J5dGVzOlxuOTAyNTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9zdG9yZV9ieXRlc19wcm90bztcbjkwMjY6XHRcdGNhc2UgQlBGX0ZVTkNfY3N1bV91cGRhdGU6XG45MDI3Olx0XHRcdHJldHVybiBcdTAwMjZicGZfY3N1bV91cGRhdGVfcHJvdG87XG45MDI4Olx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fbGV2ZWw6XG45MDI5Olx0XHRcdHJldHVybiBcdTAwMjZicGZfY3N1bV9sZXZlbF9wcm90bztcbjkwMzA6XHRcdGNhc2UgQlBGX0ZVTkNfbDNfY3N1bV9yZXBsYWNlOlxuOTAzMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2wzX2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzI6XHRcdGNhc2UgQlBGX0ZVTkNfbDRfY3N1bV9yZXBsYWNlOlxuOTAzMzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2w0X2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2V0X2hhc2hfaW52YWxpZDpcbjkwMzU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9zZXRfaGFzaF9pbnZhbGlkX3Byb3RvO1xuOTAzNjpcdFx0Y2FzZSBCUEZfRlVOQ19sd3RfcHVzaF9lbmNhcDpcbjkwMzc6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvO1xuOTAzODpcdFx0ZGVmYXVsdDpcbjkwMzk6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipOYXZpZ2F0aW5nIHRoZSBMV1QgTGFuZHNjYXBlKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLi4uIGxldCYjMzk7cyBwaW5wb2ludCB0aGF0IGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGRlY2xhcmF0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBpdCBhcm91bmQgbGluZSA4OTgwIGluIHRoZSBwYXN0LCBvciBhdCBsZWFzdCBpbiB0aGF0IHZpY2luaXR5LiBJdCYjMzk7cyBjcnVjaWFsIGJlY2F1c2UgaXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gaG93IHRoZSBMV1QgKGxpZ2h0d2VpZ2h0IHRocmVhZCkgb3V0cHV0IGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsuIEdldHRpbmcgYSB2aXN1YWwgb24gaXQgd2lsbCBoZWxwIG1lIGtlZXAgbXkgbWVudGFsIG1vZGVsIHN0cmFpZ2h0LiBUaGUgcHJvdG90eXBlIGl0c2VsZiBpcyBwcm9iYWJseSBub3QgdGhhdCBjb21wbGV4LCBidXQgaXQmIzM5O3Mgd2hhdCBkZXBlbmRzIG9uIHRoZSBwcm90b3R5cGUgdGhhdCBob2xkcyB0aGUgaW50ZXJlc3RpbmcgcGFydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg5NzA6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2xvYWRfYnl0ZXM6XG44OTcxOlx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XG44OTcyOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XG44OTczOlx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX3B1bGxfZGF0YV9wcm90bztcbjg5NzQ6XHRcdGNhc2UgQlBGX0ZVTkNfY3N1bV9kaWZmOlxuODk3NTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2NzdW1fZGlmZl9wcm90bztcbjg5NzY6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X2Nncm91cF9jbGFzc2lkOlxuODk3NzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9jZ3JvdXBfY2xhc3NpZF9wcm90bztcbjg5Nzg6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxuODk3OTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9yb3V0ZV9yZWFsbV9wcm90bztcbjg5ODA6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X2hhc2hfcmVjYWxjOlxuODk4MTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9oYXNoX3JlY2FsY19wcm90bztcbjg5ODI6XHRcdGNhc2UgQlBGX0ZVTkNfcGVyZl9ldmVudF9vdXRwdXQ6XG44OTgzOlx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbjg5ODQ6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X3NtcF9wcm9jZXNzb3JfaWQ6XG44OTg1Olx0XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XG44OTg2Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl91bmRlcl9jZ3JvdXA6XG44OTg3Olx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX3VuZGVyX2Nncm91cF9wcm90bztcbjg5ODg6XHRcdGRlZmF1bHQ6XG44OTg5Olx0XHRcdHJldHVybiBicGZfc2tfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuODk5MDpcdFx0fVxuODk5MTpcdH1cbjg5OTI6XHRcbjg5OTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjg5OTQ6XHRsd3RfaW5fZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjg5OTU6XHR7XG44OTk2Olx0XHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbjg5OTc6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3B1c2hfZW5jYXA6XG44OTk4Olx0XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X2luX3B1c2hfZW5jYXBfcHJvdG87XG44OTk5Olx0XHRkZWZhdWx0OlxuOTAwMDpcdFx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuOTAwMTpcdFx0fVxuOTAwMjpcdH1cbjkwMDM6XHRcbjkwMDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byBDaGFuZ2UqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBub3RpY2luZyBhIGNoYW5nZSBpbiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gSXQgKnVzZWQqIHRvIGdyYWNlZnVsbHkgaGFuZGxlIHRoaW5ncywgZmFsbGluZyBiYWNrIHRvIGBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZylgLCB3aGljaCwgaW1wb3J0YW50bHksIG1lYW50IGl0IHdvdWxkIHN1cHBvcnQgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHRocm91Z2ggdGhlIGBicGZfc2tiX3B1bGxfZGF0YV9wcm90b2AgZnVuY3Rpb24gcG9pbnRlci4gQnV0IG5vdywgaXQmIzM5O3MgZXhwbGljaXRseSByZXR1cm5pbmcgYE5VTExgIHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYC4gVGhhdCYjMzk7cyBhIGRpcmVjdCwgaW50ZW50aW9uYWwgZGlmZmVyZW5jZS4KClRoZSBxdWVzdGlvbiwgbmF0dXJhbGx5LCBpcyAqd2h5Kj8gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBtb2RpZmljYXRpb247IHRoZXJlJiMzOTtzIGdvdCB0byBiZSBhIHNwZWNpZmljIHJlYXNvbiBmb3IgdGhpcyBleHBsaWNpdCBgTlVMTGAgcmV0dXJuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgYXJlIHRvIGRpdmUgaW50byB0aGUgY29tbWl0IGhpc3RvcnkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgY29tbWl0cyB0aGF0IHRvdWNoIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGl0c2VsZiwgb3IgbW9yZSBicm9hZGx5LCBjb21taXRzIHRoYXQgbWlnaHQgYmUgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBzZWc2bG9jYWwgQlBGIGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWxzbyBsb29rIGZvciBhbnkgcmVmZXJlbmNlcyBvciBkaXNjdXNzaW9ucyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCBpbnRlcmFjdHMgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW92ZSBpcyBrZXkuIFdhcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlPyBJIG5lZWQgdGhlIGRlZXBlciBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTkwNDM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ0Omx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDUte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNTcxPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE1NzI6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cdC5pc192YWxpZF9hY2Nlc3NcdD0gbHd0X2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipFeGFtaW5pbmcgdGhlIFJlc3RyaWN0aW9uIG9uIGBicGZfc2tiX3B1bGxfZGF0YWAgd2l0aGluIGBzZWc2bG9jYWxgKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHdoeSBgYnBmX3NrYl9wdWxsX2RhdGFgIGlzbiYjMzk7dCBhbGxvd2VkLCBvciBwZXJoYXBzIHdoYXQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGlzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYHNlZzZsb2NhbGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgcmVzdHJpY3Rpb24uIElzIGl0IGEgc2VjdXJpdHkgY29uY2Vybj8gQSBwZXJmb3JtYW5jZSBpc3N1ZT8gT3IgcGVyaGFwcyBhIGZ1bmRhbWVudGFsIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBvcGVyYXRpb25zIHdpdGhpbiBgc2VnNmxvY2FsYCBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgPyBNeSBleHBlcnRpc2UgbWFrZXMgbWUgcXVlc3Rpb24gaWYgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgc2tiIHN0cnVjdCBvciBvdGhlciBzdHJ1Y3R1cmVzIGluIHRoZSBkYXRhIHBhdGguCgpJJiMzOTttIHRoaW5raW5nIG15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhlIGRpc2FsbG93YW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIG1lbnRpb25lZC4gSSBhbSBiZXR0aW5nIHRoYXQgaXQgaXMgbm90IHVzZWQgaW4gdGhlIGtlcm5lbCBzcGFjZS4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBmb2N1cyBhbmQgZ28gZGlyZWN0bHkgdG8gbG9va2luZyBhdCB0aGUgY29yZSBgc2VnNl9sb2NhbC5jYCBzb3VyY2UgY29kZSwgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgcmVsYXRlZCB0byBgYnBmX2x3dF9zZWc2YC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgYHNlZzZsb2NhbGAgaW50ZXJhY3RzIHdpdGggQlBGIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSB3aGVyZSBvciB3aHkgYGJwZl9za2JfcHVsbF9kYXRhYCBpcyBiZWluZyBkZWVtZWQgaW5hcHByb3ByaWF0ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIHdpdGhpbiB0aGUgY29kZSBjb21tZW50cywgYW55IGNoZWNrcyBvciBjb25kaXRpb25zLCBvciBhbnkgZGVzaWduIGRlY2lzaW9ucyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gdGhpcyByZXN0cmljdGlvbi4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHdheSBgc2VnNmxvY2FsYCBoYW5kbGVzIHBhY2tldCBwcm9jZXNzaW5nIG1pZ2h0IGhhdmUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZSBhIGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbiBsaWtlIGBicGZfc2tiX3B1bGxfZGF0YWAgdW5zdWl0YWJsZSBmb3IgdGhlIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q9MTg9ZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBmb290bm90ZXMuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MztcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxMzY6fCBgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGBgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBsd3Rfc2VnNmxvY2FsYGAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0Mztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI2LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTA3OT1zdGF0aWMgaW50IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTExNC1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcbmtlcm5lbC9icGYvYnRmLmM6OTExNTpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi9idGYuYy05MTE2LVx0XHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfTFdUO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI4NDM9c3RhdGljIGJvb2wgaXNfbmV0X2FkbWluX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTEtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODUyOlx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUzLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDgxOT1zdGF0aWMgYm9vbCBtYXlfYWNjZXNzX2RpcmVjdF9wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODI4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDgyOTpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MzAtXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODc2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI4ODctXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4ODpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4ODktXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xOTE1PXN0YXRpYyBpbnQgcGFyc2VfbmxhX2JwZihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzNi1cdGZkID0gbmxhX2dldF91MzIodGJbU0VHNl9MT0NBTF9CUEZfUFJPR10pO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5Mzc6XHRwID0gYnBmX3Byb2dfZ2V0X3R5cGUoZmQsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzOC1cdGlmIChJU19FUlIocCkpIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTIwMj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb2dfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjEtXHRbQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSXVx0PSBcJiMzNDtjZ3JvdXBfc29ja19hZGRyXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XHRbQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMXVx0XHQ9IFwmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cdFtCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTJdXHRcdD0gXCYjMzQ7bGlyY19tb2RlMlwmIzM0Oyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTcxNTc9c3RhdGljIHN0cnVjdCB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcwLVx0eyBCUEZfUFJPR19UWVBFX0xXVF9PVVQsICAgICAgICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzE3MTpcdHsgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzItXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsICAgICAgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTEwMz1zdGF0aWMgaW50IHByb2JlX3Byb2dfbG9hZChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE3OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjE3OTpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTgwLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYz0yMjU9dm9pZCB0ZXN0X3ZlcmlmX3NjYWxlX3NlZzZfbG9vcCgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjYte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6MjI3Olx0c2NhbGVfdGVzdChcJiMzNDt0ZXN0X3NlZzZfbG9vcC5icGYub1wmIzM0OywgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBmYWxzZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjgtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYz0yMD1zdGF0aWMgc3RydWN0IHNlY19uYW1lX3Rlc3QgdGVzdHNbXSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDItXHR7XCYjMzQ7bHd0X3htaXRcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAwfSwgey1FSU5WQUwsIDB9IH0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6NDM6XHR7XCYjMzQ7bHd0X3NlZzZsb2NhbFwmIzM0OywgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQ0LVx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAzCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDUxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNhZmV0eSBJbXBsaWNhdGlvbnMgb2YgYSBCUEYgVmVyaWZpZXIgUmVzdHJpY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGJwZl9za2JfcHVsbF9kYXRhYCB1c2VzIGBza2JfcHVsbF9kYXRhKHNrYiwgbGVuKWAsIGFuZCBpdCYjMzk7cyBkaXNhYmxlZCBmb3IgYGx3dF9zZWc2bG9jYWxgLiBUaGUgcXVlc3Rpb24gaXMgKndoeSouIE15IGh1bmNoLCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0aGF0IGl0JiMzOTtzIGJlY2F1c2UgZWl0aGVyIHRoZSBwb2ludGVyIGludmFsaWRhdGlvbiBpcyBhbiBpc3N1ZSBpbiBgbHd0X3NlZzZsb2NhbGAsIHRoYXQgY29udGV4dCBkb2VzbiYjMzk7dCBzdXBwb3J0IGl0LCBvciB0aGF0IHRoZXJlJiMzOTtzIHNwZWNpZmljIFNSSCBoYW5kbGluZyB0aGF0IHNob3VsZG4mIzM5O3QgcmVhbGxvY2F0ZSB0aGUgU0tCIGhlYWQuIFRoZSAqd2h5KiBpc24mIzM5O3QgdGhlIGtleSBmb2N1cyBoZXJlLCB0aG91Z2guCgpXaGF0JiMzOTtzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvaW5nKj8gSXQmIzM5O3MgZWZmZWN0aXZlbHkgaGFyZGVuaW5nIHRoZSB2ZXJpZmllci4gSW5zdGVhZCBvZiBhbGxvd2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgdG8gJiMzNDtmYWxsIHRocm91Z2gmIzM0OyB0byB0aGUgZ2VuZXJpYyBgbHd0X291dF9mdW5jX3Byb3RvYCwgaXQgKmV4cGxpY2l0bHkqIHJlamVjdHMgaXQgaW4gYGx3dF9zZWc2bG9jYWxgIHByb2dyYW1zLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogcmV0dXJuIGBOVUxMYCBmcm9tIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIHdoZW4gdGhpcyBmdW5jdGlvbiBJRCBpcyBlbmNvdW50ZXJlZC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgb3IgY3JlYXRlZCBmb3IgdXNlcnNwYWNlLiBUaGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyByZWxpYW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgbm90IGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IHplcm9pbmcuIEFuZCwgY3JpdGljYWxseSwgdGhpcyBpc24mIzM5O3QgYWx0ZXJpbmcgYm91bmRzIGNoZWNrcyBvciBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBtaWdodCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgcmVhZC4gSXQmIzM5O3Mgc3RyaWN0bHkgYSAqcmVzdHJpY3Rpb24qIGVuZm9yY2VkIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBwcmV2ZW50aW5nIHRoZSBoZWxwZXIgZnJvbSBiZWluZyAqbG9hZGVkKiBmb3IgdGhhdCBwcm9ncmFtIHR5cGUuIFJlYWxseSwgaXQmIzM5O3MganVzdCBhZGRpbmcgdHdvIGxpbmVzIG9mIGNvZGUgd2l0aGluIHRoZSB2ZXJpZmllciB0byBkZW55IGEgY2VydGFpbiBvcGVyYXRpb24uCgpUaGlzIGlzIGEgdmVyaWZpZXIgKmhlbHBlciByZXN0cmljdGlvbiogdGhhdCBwcmV2ZW50cyBCUEYgcHJvZ3JhbXMgb2YgdHlwZSBMV1RfU0VHNkxPQ0FMIGZyb20gaW5hcHByb3ByaWF0ZWx5IGNhbGxpbmcgYGJwZl9za2JfcHVsbF9kYXRhYC4gSXQmIzM5O3MgYSBzYWZldHkgbWVhc3VyZSwgZXNzZW50aWFsbHkuIFRoZXJlIGlzICp6ZXJvKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byB0aGlzIGNoYW5nZS4gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZW1haW5pbmcgcG90ZW50aWFsIGlzc3VlcywgYnV0IHJlYWxseSwgdGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbiAqYmVmb3JlKiB0aGV5IGNhbiBvY2N1ci4gVGh1cywgaXQmIzM5O3Mgc2FmZSB0byBzYXkgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIGRpZmYgYW5kIG90aGVyIGFzcGVjdHMuIE5vIG90aGVyIGFyZWEgaXMgdG91Y2hlZC4gSXQmIzM5O3MganVzdCB0aG9zZSB0d28gbGluZXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZSBqdXN0aWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZGlzYWxsb3dzIHRoZSBCUEYgaGVscGVyIGBicGZfc2tiX3B1bGxfZGF0YWAgZm9yIEJQRiBwcm9ncmFtcyBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIGJ5IHJldHVybmluZyBOVUxMIGZyb20gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFRoaXMgaXMgYSB2ZXJpZmllci1sZXZlbCBoZWxwZXIgcmVzdHJpY3Rpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTA6NDYuMDgzNzA5NTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjQ3NTE3ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dF9zZWc2bG9jYWxfZnVuY19wcm90b1wiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInBhcnNlX25sYV9icGZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGRpc2FsbG93cyB0aGUgQlBGIGhlbHBlciBgYnBmX3NrYl9wdWxsX2RhdGFgIGZvciBCUEYgcHJvZ3JhbXMgb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBieSByZXR1cm5pbmcgTlVMTCBmcm9tIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLiBUaGlzIGlzIGEgdmVyaWZpZXItbGV2ZWwgaGVscGVyIHJlc3RyaWN0aW9uIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTA6NDYuMDgzNzE1MjUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg5MzcyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDIxOTQzNDM3NjgzMmY0ODJlNzI2YjY5MmU3NzA2NDEwYTY5Yjk0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTA6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDg1MTMxNjdhODU4YTguLjJhODRmOWQwMTEzMTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC05MDQ0LDYgKzkwNDQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG4gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiB7XFxuIFxcdHN3aXRjaCAoZnVuY19pZCkge1xcbitcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG4gXFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNfcHJvdG87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUwOjQ2LjYzMzMyODcyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI2NzQ1MjY3NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dF9zZWc2bG9jYWxfZnVuY19wcm90b1wiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInBhcnNlX25sYV9icGZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGhlbHBlciBmdW5jdGlvbiByZXNvbHV0aW9uIGZvciBzZWc2bG9jYWwgcHJvZ3JhbXMgKGx3dF9zZWc2bG9jYWxfZnVuY19wcm90bykgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gZGlzYWxsb3cgYnBmX3NrYl9wdWxsX2RhdGEuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGFuZCBJUHY2IFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkMjE5NDM0Mzc2ODMyZjQ4MmU3MjZiNjkyZTc3MDY0MTBhNjliOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjUwOjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uMmE4NGY5ZDAxMTMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTkwNDQsNiArOTA0NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuIGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbitcdGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpcbitcdFx0cmV0dXJuIE5VTEw7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG4gXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuIFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTA6NDYuNjMzMzMwOTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc3OTk1MDg3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3l6a2FsbGVyIEZ1enppbmcgVHJpYWdlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHJlbGF0ZWQgdG8gZnV6emluZyB0cmlhZ2Ugd2l0aCBzeXprYWxsZXIuIFRoZSByZXF1ZXN0IGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGEgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2ssIG5vdGhpbmcgYWxhcm1pbmcgc28gZmFyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZy4gSXQgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIGRpZmYgc2hvd3MgYW4gYWRkaXRpb24gd2l0aGluIHRoZSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIG5ldyBjYXNlIHN0YXRlbWVudCBmb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHRoYXQgcmV0dXJucyBgTlVMTGAuXG5cbkdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgcmV0dXJuaW5nIGBOVUxMYCBoZXJlLiBNeSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGludmVzdGlnYXRlIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIGxpbmUgOTA0NCB0byBnZXQgc29tZSBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBhIGByZWFkLWZpbGVgIGNvbW1hbmQgb3IgbWF5YmUgYGdyZXBwZXJgIHRvIHNlZSB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IHNlY3Rpb24gb2YgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBkb2VzLCBob3cgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIGlzIHVzZWQgaW4gdGhpcyBjb250ZXh0LCBhbmQgd2h5IHJldHVybmluZyBgTlVMTGAgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gbWlnaHQgYmUgbmVjZXNzYXJ5LiBUaGVyZSdzIGEgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKWAgYmxvY2sgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBiZW5pZ24gc2VjdXJpdHkgbWVhc3VyZSwgYSBidWcgZml4LCBvciBzb21ldGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgbmV0d29yayBwZXJmb3JtYW5jZSBvciBzZWN1cml0eS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzeXprYWxsZXIgY29udGV4dCBhcyB3ZWxsIC0gYXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIHN5emthbGxlciByZXBvcnRzIG9yIGNyYXNoZXMgdGhhdCBsZWQgdG8gdGhpcyBjaGFuZ2U/IEknbGwgcHJvYmFibHkgY2hlY2sgdGhlIHN5emthbGxlciBpc3N1ZSB0cmFja2VyIGFzIHdlbGwsIGZvciBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTowNC40MzI4NDI5MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTAzNTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zZXRfaGFzaF9pbnZhbGlkX3Byb3RvO1xcbjkwMzY6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sd3RfcHVzaF9lbmNhcDpcXG45MDM3OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG87XFxuOTAzODpcXHRcXHRkZWZhdWx0OlxcbjkwMzk6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDQwOlxcdFxcdH1cXG45MDQxOlxcdH1cXG45MDQyOlxcdFxcbjkwNDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuOTA0NDpcXHRsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuOTA0NTpcXHR7XFxuOTA0NjpcXHRcXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcXG45MDQ3OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpcXG45MDQ4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjkwNDk6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxuOTA1MDpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxcbjkwNTE6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNfcHJvdG87XFxuOTA1MjpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcXG45MDUzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90bztcXG45MDU0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcXG45MDU1OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG87XFxuOTA1NjpcXHQjZW5kaWZcXG45MDU3OlxcdFxcdGRlZmF1bHQ6XFxuOTA1ODpcXHRcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjkwNTk6XFx0XFx0fVxcbjkwNjA6XFx0fVxcbjkwNjE6XFx0XFxuOTA2MjpcXHRzdGF0aWMgYm9vbCBicGZfc2tiX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG45MDYzOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuOTA2NDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9pbnNuX2FjY2Vzc19hdXggKmluZm8pXFxuOTA2NTpcXHR7XFxuOTA2NjpcXHRcXHRjb25zdCBpbnQgc2l6ZV9kZWZhdWx0ID0gc2l6ZW9mKF9fdTMyKTtcXG45MDY3OlxcdFxcbjkwNjg6XFx0XFx0aWYgKG9mZiBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgX19za19idWZmKSlcXG45MDY5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG45MDcwOlxcdFxcbjkwNzE6XFx0XFx0LyogVGhlIHZlcmlmaWVyIGd1YXJhbnRlZXMgdGhhdCBzaXplIFxcdTAwM2UgMC4gKi9cXG45MDcyOlxcdFxcdGlmIChvZmYgJSBzaXplICE9IDApXFxuOTA3MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuOTA3NDpcXHRcXG45MDc1OlxcdFxcdHN3aXRjaCAob2ZmKSB7XFxuOTA3NjpcXHRcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgX19za19idWZmLCBjYlswXSwgY2JbNF0pOlxcbjkwNzc6XFx0XFx0XFx0aWYgKG9mZiArIHNpemUgXFx1MDAzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgX19za19idWZmLCBjYls0XSkpXFxuOTA3ODpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuOTA3OTpcXHRcXHRcXHRicmVhaztcXG45MDgwOlxcdFxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgX19za19idWZmLCBkYXRhKTpcXG45MDgxOlxcdFxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgX19za19idWZmLCBkYXRhX21ldGEpOlxcbjkwODI6XFx0XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBfX3NrX2J1ZmYsIGRhdGFfZW5kKTpcXG45MDgzOlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2Vpc19sZHN4IHx8IHNpemUgIT0gc2l6ZV9kZWZhdWx0KVxcbjkwODQ6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTowNC40MzMyMjI3ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTU4MzI5MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgbGluZXMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVtOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExXVCBcdTAwMjYgQlBGIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLCB3aGVyZSBhcmUgd2UgY2FsbGluZyAqdGhhdCogZnJvbT8gR290dGEgdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXCIgSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGl0J3MgYmVpbmcgKmludm9rZWQqLCBiZWNhdXNlIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGtub3cgdGhlICd3aG8nLCAnd2hhdCcgYW5kICd3aHknLlxuXG5OZXh0IHVwLCBgbHd0X291dF9mdW5jX3Byb3RvYC4gQW5kIGluIHRoZXJlPyBBaCwgbG9va3MgbGlrZSB3ZSdyZSB1c2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZSBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgQlBGIGhlbHBlciBpcyBkb2luZywgZXhhY3RseSwgYXMgdGhpcyBjb2RlIGlzIHJlbGV2YW50IHRvIG1hbmlwdWxhdGluZyBTS0IgZGF0YSB3aXRoaW4gYW4gZUJQRiBjb250ZXh0LiBEZXBlbmRpbmcgb24gd2hhdCBgbHd0X291dF9mdW5jX3Byb3RvYCBkb2VzICp3aXRoKiB0aGF0IGhlbHBlciBpcyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBkYXRhIHByb2Nlc3NpbmcgaW52b2x2ZWQuIEl0IG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGUgaW1wbGljYXRpb24gb2YgdGhlIHVzYWdlOiBob3cgYXJlIHdlIHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBTS0I/IEFyZSB3ZSBkb2luZyBpdCBlZmZpY2llbnRseT8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEknbGwgcHJvYmFibHkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHVzYWdlIGlzIHNhZmUgYW5kIHRoYXQgdGhlIHB1bGxlZCBkYXRhIGlzIGhhbmRsZWQgY29ycmVjdGx5IGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTE6MDYuOTkxNTU0NjYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY4OTYzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTkwNDM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxubmV0L2NvcmUvZmlsdGVyLmM6OTA0NDpsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA0NS17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTU3MT1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MjpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTowOC43Mzg0NTYzMzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxMTQ0NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGFuZCBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGx3dF9vdXRfZnVuY19wcm90b2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRleHQuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHdhcyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgaW5zcGVjdGlvbiwgYnV0IEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIHBhcnRpY3VsYXIgdXNlIGNhc2UgaGVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqd2h5KiB0aGF0IHNwZWNpZmljIEJQRiBoZWxwZXIgd2FzIGNob3NlbiDigJMgd2hhdCBkYXRhIHdhcyBpdCBwdWxsaW5nLCBmcm9tIHdoZXJlLCBhbmQgZm9yIHdoYXQgcHVycG9zZSB3aXRoaW4gdGhlIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIHdvcmtmbG93PyBJJ20gZ3Vlc3NpbmcgaXQncyBzb21lIGtpbmQgb2Ygb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGRlYWxpbmcgd2l0aCBwYWNrZXQgaGVhZGVycyBvciBwYXlsb2FkcywgYnV0IHRoZSBzcGVjaWZpYyBsb2dpYyBuZWVkcyB1bnBhY2tpbmcuIEdvdHRhIHRyYWNlIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MToxMC45ODk2MDQwNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0ODQ5MzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsd3Rfb3V0X2Z1bmNfcHJvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9ODk2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5uZXQvY29yZS9maWx0ZXIuYzo4OTY3Omx3dF9vdXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9maWx0ZXIuYy04OTY4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg5OTQ9bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04OTk5LVxcdGRlZmF1bHQ6XFxubmV0L2NvcmUvZmlsdGVyLmM6OTAwMDpcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMDEtXFx0fVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTAwNT1sd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTAzOC1cXHRkZWZhdWx0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwMzk6XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQwLVxcdH1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDQ9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA1Ny1cXHRkZWZhdWx0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTg6XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG5uZXQvY29yZS9maWx0ZXIuYy05MDU5LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTUwPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9vdXRfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTUxOlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X291dF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTUyLVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjEyLjgzODEwMjY0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM4NTg0NzE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgbHd0X291dF9mdW5jX3Byb3RvYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gLiBIbW0sIGp1c3QgdGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgcHJvdG90eXBlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gTHd0IG91dHB1dC4gS25vd2luZyBMd3QsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9ucywgcHJvYmFibHkgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIGFuZCBtYW5hZ2luZyBwcm9taXNlcyBvciBmdXR1cmVzIHRoYXQgcmVwcmVzZW50IHBlbmRpbmcgb3V0cHV0IHRhc2tzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHNpZ25hdHVyZS4gV2hhdCBhcmd1bWVudHMgZG9lcyBpdCB0YWtlPyBBcmUgdGhleSBoYW5kbGVzLCBidWZmZXJzLCBsZW5ndGhzLCBjYWxsYmFja3MsIG9yIHNvbWUgY29tYmluYXRpb24gdGhlcmVvZj8gVGhlIHNwZWNpZmljIHR5cGVzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZS4gRm9yIGV4YW1wbGUsIGRvZXMgaXQgaGFuZGxlIHJhdyBieXRlcywgb3IgZG9lcyBpdCBhYnN0cmFjdCBmdXJ0aGVyIHVwIGludG8gc3RyZWFtcywgZmlsZXMsIG9yIG5ldHdvcmsgc29ja2V0cz8gQW5kIGFyZSB0aGVyZSBhbnkgaW5kaWNhdGlvbnMgb2YgY29uY3VycmVuY3kgb3IgdGhyZWFkaW5nIGJ1aWx0IGluIGhlcmU/XG5cbk15IHByaW1hcnkgY29uY2VybiBpcyBlZmZpY2llbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBibG9ja2luZyBwb2ludHMsIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZC4gSWYgdGhpcyBpcyBtZWFudCB0byBiZSB0cnVseSBub24tYmxvY2tpbmcsIHRoZW4gSSBleHBlY3QgaGVhdnkgdXNlIG9mIGV2ZW50IGxvb3BzIG9yIHNvbWUgZm9ybSBvZiBjb250aW51YXRpb24gcGFzc2luZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG91dHB1dCBvcGVyYXRpb24gaXMgc2NoZWR1bGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSByZXNvdXJjZXMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4gV2hhdCBraW5kcyBvZiBleGNlcHRpb25zIG9yIHJldHVybiB2YWx1ZXMgZG9lcyBpdCBwcm9kdWNlPyBIb3cgZG9lcyBpdCBzaWduYWwgc3VjY2VzcyBvciBmYWlsdXJlPyBEb2VzIGl0IHByb3ZpZGUgYW55IG1lY2hhbmlzbXMgZm9yIGNhbmNlbGxhdGlvbiBvciB0aW1lb3V0PyBNb3JlIGdlbmVyYWxseSwgaG93IGRvZXMgaXQgZml0IGludG8gdGhlIGRlc2lnbiBvZiBMd3QncyBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5P1xuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgdHJ5IHRvIHBsYWNlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgTHd0IGZyYW1ld29yay4gSSB3YW50IHRvIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgbW9kdWxlcy4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gRG9lcyBpdCByZWx5IG9uIGxvd2VyLWxldmVsIHN5c3RlbSBjYWxscyBkaXJlY3RseSBvciBpcyBpdCBidWlsZGluZyB1cG9uIG1vcmUgYWJzdHJhY3QgTHd0IHByaW1pdGl2ZXM/XG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSBpbXBsaWNpdCBhc3N1bXB0aW9ucz8gSXMgdGhlcmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGFib3V0IGEgc2l0dWF0aW9uIHdoZXJlIEkgd291bGQgdXNlIHRoaXM/IEtub3dpbmcgdGhlIGludGVudCwgSSBjYW4gYXNzZXNzIHRoZSBjb2RlIGZvciBtYWludGFpbmFiaWxpdHksIGNsYXJpdHksIGFuZCBhZGhlcmVuY2UgdG8gdGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjE4LjIyMzk1MjczNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjg5NjU6XFx0XFxuODk2NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG44OTY3OlxcdGx3dF9vdXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG44OTY4OlxcdHtcXG44OTY5OlxcdFxcdHN3aXRjaCAoZnVuY19pZCkge1xcbjg5NzA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2JfbG9hZF9ieXRlczpcXG44OTcxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9sb2FkX2J5dGVzX3Byb3RvO1xcbjg5NzI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxcbjg5NzM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX3B1bGxfZGF0YV9wcm90bztcXG44OTc0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfY3N1bV9kaWZmOlxcbjg5NzU6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfY3N1bV9kaWZmX3Byb3RvO1xcbjg5NzY6XFx0XFx0Y2FzZSBCUEZfRlVOQ19nZXRfY2dyb3VwX2NsYXNzaWQ6XFxuODk3NzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfcHJvdG87XFxuODk3ODpcXHRcXHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcXG44OTc5OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9yb3V0ZV9yZWFsbV9wcm90bztcXG44OTgwOlxcdFxcdGNhc2UgQlBGX0ZVTkNfZ2V0X2hhc2hfcmVjYWxjOlxcbjg5ODE6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X2hhc2hfcmVjYWxjX3Byb3RvO1xcbjg5ODI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19wZXJmX2V2ZW50X291dHB1dDpcXG44OTgzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XFxuODk4NDpcXHRcXHRjYXNlIEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkOlxcbjg5ODU6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XFxuODk4NjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl91bmRlcl9jZ3JvdXA6XFxuODk4NzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfdW5kZXJfY2dyb3VwX3Byb3RvO1xcbjg5ODg6XFx0XFx0ZGVmYXVsdDpcXG44OTg5OlxcdFxcdFxcdHJldHVybiBicGZfc2tfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjg5OTA6XFx0XFx0fVxcbjg5OTE6XFx0fVxcbjg5OTI6XFx0XFxuODk5MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG44OTk0OlxcdGx3dF9pbl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjg5OTU6XFx0e1xcbjg5OTY6XFx0XFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuODk5NzpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxcbjg5OTg6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X2luX3B1c2hfZW5jYXBfcHJvdG87XFxuODk5OTpcXHRcXHRkZWZhdWx0OlxcbjkwMDA6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDAxOlxcdFxcdH1cXG45MDAyOlxcdH1cXG45MDAzOlxcdFxcbjkwMDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjE4LjIyNTA0Mzg4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk1MDE0NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbHd0X3NlZzZsb2NhbGAgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlLCBhbmQgaXQgc2VlbXMgbGlrZSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCB1c2VkIHRvIGhhdmUgYSBmYWxsYmFjayBtZWNoYW5pc20uIEl0IHdvdWxkIGRlZmVyIHRvIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gLCBhbmQgdGhhdCwgaW4gdHVybiwgd291bGQgcHJvdmlkZSBgXHUwMDI2YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG9gIGZvciBoYW5kbGluZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIEJ1dCBub3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBGb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgLCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpcyBleHBsaWNpdGx5IHJldHVybmluZyBgTlVMTGAuIFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHVzZSBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgIHdpdGhpbiBgc2VnNmxvY2FsYCBCUEYgcHJvZ3JhbXMuIFRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhpcyBgbHd0X3NlZzZsb2NhbGAgQlBGIHByb2dyYW0gdHlwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQncyByZWdpc3RlcmVkLCBob3cgaXQncyB1c2VkLCBhbmQgd2hhdCBvdGhlciBwcm9nIHR5cGVzIGFyZSBpbiBwbGF5IGhlcmUuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgYW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gYWNoaWV2ZS4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBzZWN1cml0eSBtZWFzdXJlPyBBIGJ1ZyBmaXg/IEkgaGF2ZSB0byBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjIwLjgyMDA2MTczNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjk1NjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXFx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlxcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNzk9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTExNC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XFxua2VybmVsL2JwZi9idGYuYzo5MTE1OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvYnRmLmMtOTExNi1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfTFdUO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg0Mz1zdGF0aWMgYm9vbCBpc19uZXRfYWRtaW5fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODUyOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE5PXN0YXRpYyBib29sIG1heV9hY2Nlc3NfZGlyZWN0X3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgyOC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX09VVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDgyOTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgzMC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzY9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg3LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg5LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MTU9c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzYtXFx0ZmQgPSBubGFfZ2V0X3UzMih0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5Mzc6XFx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM4LVxcdGlmIChJU19FUlIocCkpIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XFx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVxcdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVxcdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXFx0PSBcXFwiY2dyb3VwX3NvY2tfYWRkclxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XFx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cXHRcXHQ9IFxcXCJsd3Rfc2VnNmxvY2FsXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVxcdFxcdD0gXFxcImxpcmNfbW9kZTJcXFwiLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcwLVxcdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XFx0eyBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3Mi1cXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsICAgICAgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MTc5OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyNi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6MjI3OlxcdHNjYWxlX3Rlc3QoXFxcInRlc3Rfc2VnNl9sb29wLmJwZi5vXFxcIiwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYz0yMD1zdGF0aWMgc3RydWN0IHNlY19uYW1lX3Rlc3QgdGVzdHNbXSA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00Mi1cXHR7XFxcImx3dF94bWl0XFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6NDM6XFx0e1xcXCJsd3Rfc2VnNmxvY2FsXFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgMH0sIHstRUlOVkFMLCAwfSB9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjIyLjQzNzA2OTA2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTMxNDkxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogQlBGIFZlcmlmaWNhdGlvbiBpbiBOZXQvQ29yZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtIHZlcmlmaWVyIGxvZ2ljLiBJdCBzZWVtcyB0aGF0IGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGlzIHJldHVybmluZyBgTlVMTGAgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb246IHdoZW4gdGhlIGBmdW5jX2lkYCBpcyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIFRoaXMgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zIHRoYXQgYXJlIGF0dGVtcHRpbmcgdG8gdXRpbGl6ZSBgYnBmX3NrYl9wdWxsX2RhdGEoKWAuIFRoYXQncyBhIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGlzc3VlLlxuXG5UaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBDYW4gd2UgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbj8gQWJzb2x1dGVseS4gVGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIHRoZSBgQlBGX1BST0dfTE9BRGAgY29tbWFuZCBhbmQgYSBwcm9ncmFtIHR5cGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgaXMgdGhlIHBhdGguIFNvLCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gbG9hZCB0aGlzIGFuZCB0cmlnZ2VyIHRoZSB2ZXJpZmllci4gVGhhdCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cblxuTm93LCBkb2VzIHRoaXMgbWVldCB0aGUgY3JpdGVyaWEgZm9yIFwiV29ydGhGdXp6aW5nPXRydWVcIj8gTGV0J3Mgc2VlLi4uIENvcmUgc3Vic3lzdGVtcz8gQ2hlY2suIEJQRiBhbmQgY29yZSBuZXR3b3JraW5nPyBEZWZpbml0ZWx5LiBMb2dpYyBtb2RpZmljYXRpb25zPyBZZXMsIHRoYXQgYE5VTExgIHJldHVybiBpcyBhIGRlZmluaXRlIGxvZ2ljIGNoYW5nZS4gUmVhY2hhYmxlPyBZZXMsIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBhIHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGUuIE9rYXksIHRoZSBmdXp6aW5nIGNyaXRlcmlhIGFyZSBtZXQuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZXhwbG9yZSB0aGlzIHByb3Blcmx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGVuYWJsZSBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCwgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AsIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUYCwgYENPTkZJR19MV1RVTk5FTGAsIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAsIGFuZCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAuIEknbGwgZ3JlcCBmb3IgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBhbmQgd2hlcmUgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCBpcyBjb21waWxlZC4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBoYXZlIGVuYWJsZWQgZm9yIFFFTVUgdG8gYmUgYWJsZSB0byBoaXQgdGhpcyBjb2RlIHBhdGggYW5kIHRodXMgdG8gYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjI4Ljk2ODU2NTQyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1OTMyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0X3NlZzZsb2NhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ0Omx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ1LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTY3PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3htaXRfcHJvZ19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MjpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzYtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1Nzc6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3Rfc2VnNmxvY2FsX3Byb2dfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjI5LjAyMDE2NDIzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzU4NzAzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHRoYXQgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCB0aGluZzpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRmlsdGVyaW5nIGFuZCBMV1QgU3VwcG9ydCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgZmlndXJlIG91dCB3aGVyZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgbGFyZ2VyIHNjaGVtZSBvZiB0aGluZ3MuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBvciBleGFtaW5lIHRoZSBNYWtlZmlsZXMgdG8gZmlndXJlIG91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaXMgaW5jb3Jwb3JhdGVkLlxuXG5UaGVuLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQ6IGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIEkga25vdyBhIGJpdCBhYm91dCBMV1QgKExpZ2h0d2VpZ2h0IFR1bm5lbHMpIGFuZCBTZWdtZW50IFJvdXRpbmcgdjYgKFNSdjYpLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSB2ZXJpZmllciBmaXRzIGluLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB2ZXJpZmljYXRpb24gb3BlcmF0aW9uIHdpdGhpbiB0aGUgU1J2NiBjb250ZXh0LCBwb3NzaWJseSByZWxhdGVkIHRvIGxvY2FsIHNlZ21lbnQgcHJvY2Vzc2luZyBvciBzb21lIGtpbmQgb2YgZW5jYXBzdWxhdGlvbiB2ZXJpZmljYXRpb24uXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRob3NlIHByZXByb2Nlc3NvciBpZmRlZnMgYXJvdW5kIGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBqdWljZSBpcy4gVGhvc2UgaWZkZWZzIGFyZSB0aGUgYnJlYWRjcnVtYnMgdGhhdCdsbCBzaG93IG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZmVhdHVyZSBmbGFncyB0aGF0IGNvbnRyb2wgd2hldGhlciBvciBub3QgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICplbmFibGVkKiBhdCBjb21waWxlIHRpbWUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgbW9kdWxlLCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLCBvciBhIHNwZWNpZmljIGZlYXR1cmUgZW5hYmxlZCBhdCBib290PyBVbmRlcnN0YW5kaW5nIHRoZSBpZmRlZnMgd2lsbCBxdWlja2x5IGNsYXJpZnkgaWYgaXQncyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBzcGVjaWZpYyBtb2R1bGUgYmVpbmcgbG9hZGVkLCBvciBwZXJoYXBzIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBuZWVkcyB0byBiZSB0b2dnbGVkIHRvIGFjdGl2YXRlIGl0LiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIHN0cnVjdCBpcywgYW5kIGhvdyBpdHMgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGJlaW5nIHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjMyLjc3ODg3MDc0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTY1OlxcdH07XFxuMTE1NjY6XFx0XFxuMTE1Njc6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcXG4xMTU2ODpcXHRcXHQudGVzdF9ydW5cXHRcXHQ9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYixcXG4xMTU2OTpcXHR9O1xcbjExNTcwOlxcdFxcbjExNTcxOlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xcbjExNTcyOlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxcbjExNTczOlxcdFxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuMTE1NzQ6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG4xMTU3NTpcXHR9O1xcbjExNTc2OlxcdFxcbjExNTc3OlxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3NlZzZsb2NhbF9wcm9nX29wcyA9IHtcXG4xMTU3ODpcXHR9O1xcbjExNTc5OlxcdFxcbjExNTgwOlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tfdmVyaWZpZXJfb3BzID0ge1xcbjExNTgxOlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc29ja19maWx0ZXJfZnVuY19wcm90byxcXG4xMTU4MjpcXHRcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBzb2NrX2ZpbHRlcl9pc192YWxpZF9hY2Nlc3MsXFxuMTE1ODM6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzLFxcbjExNTg0OlxcdH07XFxuMTE1ODU6XFx0XFxuMTE1ODY6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19zb2NrX3Byb2dfb3BzID0ge1xcbjExNTg3OlxcdH07XFxuMTE1ODg6XFx0XFxuMTE1ODk6XFx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja19hZGRyX3ZlcmlmaWVyX29wcyA9IHtcXG4xMTU5MDpcXHRcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNvY2tfYWRkcl9mdW5jX3Byb3RvLFxcbjExNTkxOlxcdFxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNvY2tfYWRkcl9pc192YWxpZF9hY2Nlc3MsXFxuMTE1OTI6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG4xMTU5MzpcXHR9O1xcbjExNTk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozMi43Nzk0MzkzOTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNTMxNzA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTmV0d29yayBGaWx0ZXIgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBwYXRoIGZvciBgbmV0L2NvcmUvZmlsdGVyLm9gIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgc3BlY2lmaWMgb2JqZWN0IGZpbGUgaXMgY29uc3RydWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zIHBsYXkgYSByb2xlIGluIGl0cyBjb21waWxhdGlvbiwgYW5kIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIGZlYXR1cmVzIEknbSBmYW1pbGlhciB3aXRoLCBsaWtlIEJQRiwgSVB2NiwgTFdULCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjM0LjY4NDc2MDcwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNzc0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozNC43MzI4NDM0MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwNjczNTY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSByZWxhdGlvbnNoaXAgaGVyZT8gQXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlPyBEb2VzIG9uZSByZXF1aXJlIHRoZSBvdGhlcj8gSXMgdGhlcmUgc29tZSBjb25kaXRpb25hbCBlbmFibGluZyBnb2luZyBvbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZsYWdzIGludGVyYWN0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCBgQ09ORklHX0JQRl9TWVNDQUxMYCB0byBiZSBhIHByZXR0eSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgYW55IEJQRiBmdW5jdGlvbmFsaXR5LCBzbyBJJ20gZ3Vlc3NpbmcgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBwcm9iYWJseSAqbmVlZHMqIGl0LCBidXQgSSB3YW50IHRvIHZlcmlmeSB0aGUgZXhhY3QgS2NvbmZpZyBsb2dpYyB0byBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIEJQRiBjYXBhYmlsaXRpZXMgbGluZXMgdXAgd2l0aCBob3cgdGhlIGtlcm5lbCBpcyBhY3R1YWxseSBzdHJ1Y3R1cmVkLiBUaGVuLCBJIHdpbGwgc3RhcnQgYnkgc2VlaW5nIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBsb2NhdGVkLCBpbiB3aGF0IGZpbGVzLiBUaGlzIHdpbGwgc3RhcnQgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSB2YXJpb3VzIHBvc3NpYmxlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozNi45Mzk1ODI2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTU5NjEzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9TRUc2X0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz02ODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9jaGVja19tdHVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02ODc3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY4Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjg3OS1zdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTAtfVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTE6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjE9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXFx0c3dpdGNoICh0eXBlKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9Njk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2OTcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzMtQlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTYzLX07XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE2NDojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy03MTY1LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ4LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA1MC1cXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0zMDA9Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYz0zMjg9c3RhdGljIHZvaWQgcHJvYmVfa2VybmVsX2ltYWdlX2NvbmZpZyhjb25zdCBjaGFyICpkZWZpbmVfcHJlZml4KVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM4OC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xXVF9TRUc2X0xPQ0FMIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzg5OlxcdFxcdHsgXFxcIkNPTkZJR19JUFY2X1NFRzZfQlBGXFxcIiwgfSxcXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzkwLVxcdFxcdC8qIEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMiBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTQ4PUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnOjQ5OkNPTkZJR19JUFY2X1NFRzZfQlBGPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTUwLUNPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUw9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozOC42MzU1NjAwNDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NTYyMDMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBCUEYqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVBWNl9TRUc2X0JQRmAuIEkgcmVtZW1iZXIgdGhhdCBraW5kIG9mIHN0dWZmIGlzIHVzdWFsbHkgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGF0IGBuZXQvaXB2NmAgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIElQdjYgY29uZmlndXJhdGlvbiByZXNpZGVzLiBTbywgSSdsbCBnbyBkaXJlY3RseSB0byBgbmV0L2lwdjYvS2NvbmZpZ2AuIEFuZCwgc2luY2UgSSdtIHRyeWluZyB0byBmaW5kIGBJUFY2X1NFRzZfQlBGYCwgSSdsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDMxMiDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcmVsYXRlZCBmZWF0dXJlcyBpbiB0aG9zZSBmaWxlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQsIG9yIGFueSBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMsIGJlZm9yZSBgSVBWNl9TRUc2X0JQRmAgY2FuIGJlIHNlbGVjdGVkLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBJUHY2IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGJhc2UgSVB2NiBzdGFjaywgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYmV0dGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQxLjAwMTE4NDA4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMjA6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDMyMTpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDMyMjpcXHRcXHRoZWxwXFxuIDMyMzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMzI0OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uXFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzI3OlxcdFxcbiAzMjg6XFx0Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG4gMzI5OlxcdFxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTE6NDEuMDAxMjY0Nzk3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjMwMjM1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYElQVjZfU0VHNl9MV1RVTk5FTGAgaW4gYG5ldC9pcHY2L0tjb25maWdgOlxuXG4qKkNoZWNraW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucywgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCwgYXMgSSBzZWUgaXQsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IElQdjYgc2VnbWVudCByb3V0aW5nIHN1cHBvcnQgbG9va3MgbGlrZSB3aXRoaW4gdGhlIHN5c3RlbSdzIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gVGhlIFwiS2NvbmZpZ1wiIGZpbGUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLCBJIGltbWVkaWF0ZWx5IGtub3cgd2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwncyBpbXBsZW1lbnRhdGlvbiBvZiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBhbmQgbGlrZWx5LCBob3cgdGhhdCBpcyBleHBvc2VkIHRvIHVzLCB0aGUgdXNlci4gQSBwcm9wZXIgaW1wbGVtZW50YXRpb24gb2Ygc2VnbWVudCByb3V0aW5nIGlzIGluY3JlZGlibHkgaW1wb3J0YW50IGZvciBtYW55IG9mIG15IHByb2Zlc3Npb25hbCBwcm9qZWN0cy4gSSBzaG91bGQgZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhpcyBmZWF0dXJlLlxuXG5Ob3csIGxldCBtZSBkaWcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBvcHRpb24gaXMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZS4gSXTigJlzIHBvc3NpYmxlIGl0IGNvbnRyb2xzIGEgc3BlY2lmaWMgbW9kdWxlLCBhbiBlbnRpcmUgZmVhdHVyZSBzZXQsIG9yIGV2ZW4gZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgU1J2NiBzdGFjay4gSeKAmWxsIGJlIGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgcHJlc2VudCwgYW5kIGV4YWN0bHkgd2hhdCBpdCBjb250cm9scyB3aXRoaW4gdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24uIEkgbWlnaHQgYWxyZWFkeSBrbm93IHdoYXQgaXQgZG9lcywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG5vdCBhc3N1bWUuIERlcGVuZGluZyBvbiB3aGF0IGl0IGNvbnRyb2xzLCBJIG1heSBuZWVkIHRvIG1ha2Ugc2V2ZXJhbCBjb25maWcgY2hhbmdlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGZvciBhbnkgYXJjaGl0ZWN0dXJlL2tlcm5lbCBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBydW4uIEl0IGNvdWxkIGRpY3RhdGUgaG93IEkgZGVwbG95IGNlcnRhaW4gcHJvamVjdHMuIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gaXQgaXMgaW5jbHVkZWQgaW4gYW55IGJ1aWxkIEkgbWlnaHQgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQ0LjE2NDI5MjIwN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDQwOTExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQ1Ljc3ODcwNjc5MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg0OTY2NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgSVB2NiBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIHdpdGhpbiB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyODYuIEkga25vdyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGFuYWx5c2lzLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIHdpbGwgYmUgcGxlbnR5IG9mIGludGVyZXN0aW5nIHRoaW5ncyB0byB1bnJhdmVsIGluIHRoYXQgc2VjdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTE6NDguMTYzNjc3MzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg1OlxcdFxcbiAyODY6XFx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAyODc6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDI4ODpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjg5OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAyOTA6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyOTE6XFx0XFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXFxuIDI5MjpcXHRcXHRoZWxwXFxuIDI5MzpcXHRcXHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxcbiAyOTQ6XFx0XFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMjk1OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXFxuIDI5NjpcXHRcXHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbiAzMDE6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMDM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAzMDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQ4LjE2Mzc1NTYxNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQzNzM3NDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTZWc2IExvY2FsIFZlcmlmaWVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB3ZSBoYXZlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX05FVGAsIGBDT05GSUdfSVBWNmAsIGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZXZlbiBpZiBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGlzbid0IGVuYWJsZWQsIHRoZSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBmdW5jdGlvbiBpcyAqc3RpbGwqIGNvbXBpbGVkIGlmIHdlIGhhdmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gVGhhdCBmZWVscyBvZGQsIGFuZCBJIHRoaW5rIGl0J3MgYmVjYXVzZSBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIGlzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgYXMgbG9uZyBhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AgbW9yZSBjbG9zZWx5IGFuZCBzZWUgaWYgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCBhY3R1YWxseSBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBMZXQgbWUgc2VhcmNoIHRoYXQgZmlsZSBmb3IgdGhlIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MjoxNS42MDExMzM5NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDAwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00NTMzPUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTM1OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MzYtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjE1LjY0NzE0MzQ0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEwMjkwMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIEJQRiBQcm9ncmFtIFR5cGVzIGFuZCBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBhbmQgd2hlcmUgaXQncyBkZWZpbmVkLiBSaWdodCwgaXQncyBpbiBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAuIExldCdzIGNvbmZpcm0gdGhhdC4uLiBZZXAsIHRoZXJlIGl0IGlzOiBgQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGx3dF9zZWc2bG9jYWwsIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKWAuIEdvb2QuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBicGZfdHlwZXMuaGAgaXMgc3RydWN0dXJlZCBhbmQgd2hhdCB0aGUgbWFjcm8gYEJQRl9QUk9HX1RZUEVgIGRvZXMgYmVoaW5kIHRoZSBzY2VuZXMuIE5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHlwZXMgYXJlIGJ1aWx0IGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgcGFydGljdWxhcmx5IGBfX3NrX2J1ZmZgIGFuZCBgc2tfYnVmZmAgaW4gdGhpcyBMV1QgY29udGV4dC4gSSdsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE4NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjE4LjE1NzQzNTczM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODMwNTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHlwZXNcXFxcLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yNjkxPWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl90b2tlbl9mb3BzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNjk4LSNkZWZpbmUgQlBGX0xJTktfVFlQRShfaWQsIF9uYW1lKVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MjY5OTojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzAwLSN1bmRlZiBCUEZfUFJPR19UWVBFXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTE2Ni1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTE2NzovKiBBZGQgQlBGX0xJTktfVFlQRSh0eXBlLCBuYW1lKSBpbiBicGZfdHlwZXMuaCB0byBrZWVwIGJwZl9saW5rX3R5cGVfc3Ryc1tdXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExNjgtICogaW4gc3luYyB3aXRoIHRoZSBkZWZpbml0aW9ucyBiZWxvdy5cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjA3Nz1zdGF0aWMgdW5pb24ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MDgxLVxcdGtlcm5fY3R4X3R5cGUgX2lkIyNfa2VybjtcXG5rZXJuZWwvYnBmL2J0Zi5jOjYwODI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvYnRmLmMtNjA4My0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02MDg4PWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MDkwLVxcdF9fY3R4X2NvbnZlcnQjI19pZCxcXG5rZXJuZWwvYnBmL2J0Zi5jOjYwOTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvYnRmLmMtNjA5Mi0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02MDk1PXN0YXRpYyB1OCBicGZfY3R4X2NvbnZlcnRfbWFwW10gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTctXFx0W19pZF0gPSBfX2N0eF9jb252ZXJ0IyNfaWQsXFxua2VybmVsL2JwZi9idGYuYzo2MDk4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdHlwZXMuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTktI3VuZGVmIEJQRl9QUk9HX1RZUEVcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjE0Nj1ib29sIGJ0Zl9pc19wcm9nX2N0eF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjE5NC1cXHRcXHQvKiBzaG91bGQgbm90IGhhcHBlbiAqL1xcbmtlcm5lbC9icGYvYnRmLmM6NjE5NTpcXHRcXHRicGZfbG9nKGxvZywgXFxcIlBsZWFzZSBmaXgga2VybmVsIGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvYnRmLmMtNjE5Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzUtI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NzY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTc3LSN1bmRlZiBCUEZfUFJPR19UWVBFXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMzQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzICogY29uc3QgYnBmX3Byb2dfdHlwZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIzNDctI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjM0ODojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcXHUwMDNlXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjM0OS0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzM5OT1zdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQwMC1cXHRbQlBGX0xJTktfVFlQRV9VTlNQRUNdID0gXFxcIlxcdTAwM2NpbnZhbGlkXFx1MDAzZVxcXCIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQwMTojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcXHUwMDNlXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQwMi19O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NC0jZGVmaW5lIEJQRl9MSU5LX1RZUEUoX2lkLCBfbmFtZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Ni0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwOTk9ZW51bSBicGZfYXR0YWNoX3R5cGUge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExNjYtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjExNjc6LyogQWRkIEJQRl9MSU5LX1RZUEUodHlwZSwgbmFtZSkgaW4gYnBmX3R5cGVzLmggdG8ga2VlcCBicGZfbGlua190eXBlX3N0cnNbXVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTY4LSAqIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYmVsb3cuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjIwLjA2NTc0NTYyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzI1NDMzNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIExXVCBTRUc2TE9DQUwgQlBGIFByb2dyYW0gTG9hZGluZyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBoZXJlIGZvciBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtcy4gSSdtIHNlZWluZyB0aGF0IHRoZSB2ZXJpZmllciBvcGVyYXRpb25zIGZvciB0aGF0IHByb2dyYW0gdHlwZSwgYXMgZGVmaW5lZCBpbiBgYnBmX3ZlcmlmaWVyX29wc2AsIGFyZSBzZXQgdG8gdXNlIGBcdTAwMjZsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIEdvb2QuIE1ha2VzIHNlbnNlLiBXaGVuIHRoZSBgQlBGX1BST0dfTE9BRGAgc3lzY2FsbCBjb21lcyBpbiB3aXRoIHRoYXQgcHJvZ3JhbSB0eXBlLCBgYnBmX2NoZWNrYCBnZXRzIGNhbGxlZCwgYW5kIGFzIHBhcnQgb2YgaXRzIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBpdCdzIGdvaW5nIHRvIGhpdCBgb3BzLVx1MDAzZWdldF9mdW5jX3Byb3RvYCwgd2hpY2ggaW4gdGhpcyBjYXNlIHJlc29sdmVzIHRvIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgcHJvZ3JhbSBjb25mb3JtcyB0byB0aGUgZXhwZWN0ZWQgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCByZXNvdXJjZXMgd2l0aGluIHRoZSBrZXJuZWwgY29udGV4dC5cblxuVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgaG93IHRoaXMgdmVyaWZpZWQgcHJvZ3JhbSAqYWN0dWFsbHkqIGdldHMgZXhlY3V0ZWQsIG9yIGF0dGFjaGVkLiBBaCwgcmlnaHQsIHRoYXQncyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmZhY2UgY29tZXMgaW4sIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBSVE1fTkVXUk9VVEVgIHdpdGggYW4gYFNFRzZMT0NBTGAgZW5jYXBzdWxhdGlvbiBhbmQgYSBgU0VHNl9MT0NBTF9BQ1RJT05fQlBGYCBhY3Rpb24uIEFuZCwgdG8gdGllIHRoYXQgYWxsIHRvZ2V0aGVyLCB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgdGhlIGZpbmFsIGNyaXRpY2FsIHBpZWNlIHRvIGVuYWJsaW5nIHRoaXMgQlBGIHByb2dyYW0gZm9yIGRhdGEgcGxhbmUgcHJvY2Vzc2luZy5cblxuTm93LCBJIHNob3VsZCBkaXZlIGludG8gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gc2VlIGhvdyB0aG9zZSBwYXJ0cyBhcmUgaW1wbGVtZW50ZWQsIHRoZSBkZXRhaWxzIGFyb3VuZCBhdHRhY2hpbmcgdGhlIHByb2dyYW0gdG8gdGhlIGRhdGEgcGF0aCwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBjb21lIHdpdGggdXNpbmcgYSBCUEYgcHJvZ3JhbSBpbiB0aGF0IGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc2NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MjoyMy43OTExODE3MTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ5NjU4OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNFRzZfTE9DQUxfQUNUSU9OX0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6MjUuMzQ2MTU2OTY5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTU3NDMyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgZm9yIEFjdGlvbnMgaW4gYHNlZzZfbG9jYWwuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYWN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgc2VnNl9sb2NhbC5jYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBsb2NhbCBmdW5jdGlvbiBtYW5pcHVsYXRpb24gc2hvdWxkIHJlc2lkZS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGhhbmRsZXJzIGZvciB0aGUgdmFyaW91cyBTUnY2IGJlaGF2aW9ycy4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGxpa2VseSB1c2luZyBjb21tb24gbmFtaW5nIGNvbnZlbnRpb25zIHdpdGhpbiB0aGUgU1J2NiBjb2RlYmFzZSDigJMgbWF5YmUgc29tZXRoaW5nIHByZWZpeGVkIHdpdGggXCJzcmhfYWN0aW9uX1wiIG9yIHNpbWlsYXIsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgb2Z0ZW4gbGVzcyB0aGFuIGludHVpdGl2ZS4gSXQgY291bGQgYmUgYSBzd2l0Y2ggc3RhdGVtZW50LCBhIHNlcmllcyBvZiBpZi9lbHNlIGJsb2Nrcywgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBmdW5jdGlvbiBwb2ludGVyIGFycmF5LCBpZiB0aGV5IGFyZSBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlc2UgYWN0aW9ucyBhcmUgaW52b2tlZCB3aXRoaW4gdGhlIGRhdGFwYXRoLCBsaWtlbHkgdHJpZ2dlcmVkIGJ5IGluY29taW5nIElQdjYgcGFja2V0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGVhY2ggb2YgdGhlc2UgYWN0aW9ucywgYW5kIGhvdyB0aGUgc3RhdGUgaXMgbWFuaXB1bGF0ZWQgYXMgdGhlIHBhY2tldHMgdHJhdmVyc2UgdGhlIFNSdjYgZG9tYWluLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6NDYuNTAzNTkyODY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIzMzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02LSAqICBEYXZpZCBMZWJydW4gXFx1MDAzY2RhdmlkLmxlYnJ1bkB1Y2xvdXZhaW4uYmVcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc6ICogIGVCUEYgc3VwcG9ydDogTWF0aGlldSBYaG9ubmV1eCBcXHUwMDNjbS54aG9ubmV1eEBnbWFpbC5jb21cXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTgtICovXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQzMD1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2MS1cXHRzd2l0Y2ggKHJldCkge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDYyOlxcdGNhc2UgQlBGX09LOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDYzOlxcdGNhc2UgQlBGX1JFRElSRUNUOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY0LVxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY1OlxcdGNhc2UgQlBGX0RST1A6XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjYtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NzY6XFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzctXFx0XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0ODc9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3OC1cXHR7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1Nzk6XFx0XFx0LmFjdGlvblxcdFxcdD0gU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0JQRixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU4MDpcXHRcXHQuYXR0cnNcXHRcXHQ9IFNFRzZfRl9BVFRSKFNFRzZfTE9DQUxfQlBGKSxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4MS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2xvY2FsX3BvbGljeVtTRUc2X0xPQ0FMX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NzAtXFx0W1NFRzZfTE9DQUxfT0lGXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY3MTpcXHRbU0VHNl9MT0NBTF9CUEZdXFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjcyLVxcdFtTRUc2X0xPQ0FMX0NPVU5URVJTXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xOTAwPXN0YXRpYyBpbnQgY21wX25sYV9vaWYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkwOC0jZGVmaW5lIE1BWF9QUk9HX05BTUUgMjU2XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MDk6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJwZl9wcm9nX3BvbGljeVtTRUc2X0xPQ0FMX0JQRl9QUk9HX01BWCArIDFdID0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTEwOlxcdFtTRUc2X0xPQ0FMX0JQRl9QUk9HXVxcdCAgID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTE6XFx0W1NFRzZfTE9DQUxfQlBGX1BST0dfTkFNRV0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MTItXFx0XFx0XFx0XFx0ICAgICAgIC5sZW4gPSBNQVhfUFJPR19OQU1FIH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkxNy17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTg6XFx0c3RydWN0IG5sYXR0ciAqdGJbU0VHNl9MT0NBTF9CUEZfUFJPR19NQVggKyAxXTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkxOS1cXHRzdHJ1Y3QgYnBmX3Byb2cgKnA7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkyMi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkyMzpcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFNFRzZfTE9DQUxfQlBGX1BST0dfTUFYLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTI0OlxcdFxcdFxcdFxcdFxcdCAgYXR0cnNbU0VHNl9MT0NBTF9CUEZdLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTI1LVxcdFxcdFxcdFxcdFxcdCAgYnBmX3Byb2dfcG9saWN5LCBOVUxMKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTI4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTI5OlxcdGlmICghdGJbU0VHNl9MT0NBTF9CUEZfUFJPR10gfHwgIXRiW1NFRzZfTE9DQUxfQlBGX1BST0dfTkFNRV0pXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MzI6XFx0c2x3dC1cXHUwMDNlYnBmLm5hbWUgPSBubGFfbWVtZHVwKHRiW1NFRzZfTE9DQUxfQlBGX1BST0dfTkFNRV0sIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMzLVxcdGlmICghc2x3dC1cXHUwMDNlYnBmLm5hbWUpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzNS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNjpcXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNzpcXHRwID0gYnBmX3Byb2dfZ2V0X3R5cGUoZmQsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXFx0aWYgKElTX0VSUihwKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5NDc9c3RhdGljIGludCBwdXRfbmxhX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1My1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk1NDpcXHRuZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgU0VHNl9MT0NBTF9CUEYpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTU1LVxcdGlmICghbmVzdClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTU3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTU4OlxcdGlmIChubGFfcHV0X3UzMihza2IsIFNFRzZfTE9DQUxfQlBGX1BST0csIHNsd3QtXFx1MDAzZWJwZi5wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWlkKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1OS1cXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjEtXFx0aWYgKHNsd3QtXFx1MDAzZWJwZi5uYW1lIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5NjI6XFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgU0VHNl9MT0NBTF9CUEZfUFJPR19OQU1FLCBzbHd0LVxcdTAwM2VicGYubmFtZSkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjMtXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMjk0PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fcGFyYW0gc2VnNl9hY3Rpb25fcGFyYW1zW1NFRzZfTE9DQUxfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMxOS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjMyMDpcXHRbU0VHNl9MT0NBTF9CUEZdXFx0PSB7IC5wYXJzZSA9IHBhcnNlX25sYV9icGYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIzMjEtXFx0XFx0XFx0XFx0ICAgIC5wdXQgPSBwdXRfbmxhX2JwZixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjA1PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9nZXRfZW5jYXBfc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjMyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjMzOlxcdGlmIChhdHRycyBcXHUwMDI2IFNFRzZfRl9BVFRSKFNFRzZfTE9DQUxfQlBGKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjYzNC1cXHRcXHRubHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSArXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjQ2LjU1MDgzNDk1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzUyMjYzNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBhdGNoIFRhcmdldGluZyBCUEYgVmVyaWZpY2F0aW9uIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFyZ2V0IGFjdGlvbiBpcyBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0JQRmAsIGFuZCBJJ20gaG9taW5nIGluIG9uIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHByZWNpc2Ugd2l0aCBteSBzeW1ib2xzLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgLCBhbmQgcG90ZW50aWFsbHkgYHBhcnNlX25sYV9icGZgIGFzIGNhbmRpZGF0ZXMuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCB0YXJnZXQgYXMgbG9uZyBhcyBpdCdzIG5vdCBhbiBpbmxpbmUgc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBoZWFkZXIuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgdmlzaWJsZSBpbiB0aGUgdm1saW51eCBzeW1ib2wgdGFibGUuIFRoaXMgZ2l2ZXMgdXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHN0cnVjdHVyZSB0aGUgYHNldC1yZXN1bHRzYCBkYXRhIGNvcnJlY3RseS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAgZ2l2ZW4gdGhpcyBwYXRjaCB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGFsdGVycyBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCB0byBwcmV2ZW50IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCB1c2FnZSBmb3IgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgcHJvZ3JhbXMuIFRoaXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIGFuZCBsaWdodHdlaWdodCB0dW5uZWwgaGFuZGxpbmcuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYW5kIGBwYXJzZV9ubGFfYnBmYC4gQW5kIGZpbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOiBgQlBGX1NZU0NBTExgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgSVBWNmAsIGFuZCBgTkVUYC4gSSd2ZSBtYWRlIHN1cmUgdG8gc3RyaXAgdGhlIGBDT05GSUdfYCBwcmVmaXguXG5cbkFscmlnaHQsIEkndmUgY29uZmlybWVkIGFsbCB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgaW52b2NhdGlvbi4gSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODE1LCJPdXRwdXRUb2tlbnMiOjE4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1Mjo1My4zMDMxMDE4OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDkxMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJwYXJzZV9ubGFfYnBmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJwYXJzZV9ubGFfYnBmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6NTMuMzc4NjAwNTg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM1MjYxNzE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjUzLjM3OTE4MzA2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMzUyMDI5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkMjE5NDM0Mzc2ODMyZjQ4MmU3MjZiNjkyZTc3MDY0MTBhNjliOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjUwOjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uMmE4NGY5ZDAxMTMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTkwNDQsNiArOTA0NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuIGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbitcdGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpcbitcdFx0cmV0dXJuIE5VTEw7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG4gXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuIFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6NTMuMzc5MTg0MjA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNDY0Mjg0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2gsIGFuZCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBuZXQvY29yZS9maWx0ZXIuY2AuIEknbSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgY2hhbmdlcyB3aXRoaW4gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGEgYGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpgIHRoYXQgcmV0dXJucyBgTlVMTGAuIE5vdywgd2h5IHdvdWxkIHRoZXkgZG8gdGhhdD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cblRoZSBmdW5jdGlvbiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpdHNlbGYgaXMgaW50ZXJlc3RpbmcuIEl0J3MgY2xlYXJseSBhIGRpc3BhdGNoZXIgZm9yIEJQRiBmdW5jdGlvbiBwcm90b3R5cGVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBhbmQgbG9jYWwgZnVuY3Rpb25zLiBUaGUgcHJlc2VuY2Ugb2YgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHN1Z2dlc3RzIHRoZXJlJ3MgYW4gaW50ZXJhY3Rpb24sIG9yIGludGVuZGVkIGludGVyYWN0aW9uLCB3aXRoIHBhY2tldCBkYXRhIG1hbmlwdWxhdGlvbiwgcG9zc2libHkgZm9yIExXVCAoTGludXggV2lyZSBUcmFuc3BvcnQpIG9yIFNSdjYgcHJvY2Vzc2luZy5cblxuVGhlIGZhY3QgdGhhdCBpdCdzIGJlaW5nICpkaXNhYmxlZCogaGVyZSBieSByZXR1cm5pbmcgYE5VTExgIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgY29uc2Npb3VzIGRlY2lzaW9uIHdhcyBtYWRlIHRvICpub3QqIGFsbG93IGBza2JfcHVsbF9kYXRhYCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGlzIGEgc2VjdXJpdHkgbWVhc3VyZT8gSXMgaXQgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIGlzIGl0IGEgY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIGhvdyBTUnY2IG9yIExXVCBpbnRlcmFjdHMgd2l0aCB0aGUgc2tiIGRhdGEgc3RydWN0dXJlPyBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aHkuIEknbGwgbmVlZCB0byBsb29rIGFyb3VuZCBsaW5lIDkwNDQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGFuZCB3aGF0IHRoaXMgQlBGIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGRvIHdpdGhpbiB0aGlzIHNlZ21lbnQgb2YgdGhlIGNvZGUuIE9ubHkgdGhlbiBjYW4gSSBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB2YWxpZCBhbmQgYXBwcm9wcmlhdGUsIG9yIGlmIGl0IGhhcyBzb21lIHVuZGVzaXJhYmxlIGNvbnNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjU3LjUyNTYxNTI4M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTAzMDpcXHRcXHRjYXNlIEJQRl9GVU5DX2wzX2NzdW1fcmVwbGFjZTpcXG45MDMxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2wzX2NzdW1fcmVwbGFjZV9wcm90bztcXG45MDMyOlxcdFxcdGNhc2UgQlBGX0ZVTkNfbDRfY3N1bV9yZXBsYWNlOlxcbjkwMzM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbDRfY3N1bV9yZXBsYWNlX3Byb3RvO1xcbjkwMzQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19zZXRfaGFzaF9pbnZhbGlkOlxcbjkwMzU6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2V0X2hhc2hfaW52YWxpZF9wcm90bztcXG45MDM2OlxcdFxcdGNhc2UgQlBGX0ZVTkNfbHd0X3B1c2hfZW5jYXA6XFxuOTAzNzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvO1xcbjkwMzg6XFx0XFx0ZGVmYXVsdDpcXG45MDM5OlxcdFxcdFxcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XFxuOTA0MDpcXHRcXHR9XFxuOTA0MTpcXHR9XFxuOTA0MjpcXHRcXG45MDQzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbjkwNDQ6XFx0bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjkwNDU6XFx0e1xcbjkwNDY6XFx0XFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuOTA0NzpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuOTA0ODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG45MDQ5OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbjkwNTA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcXG45MDUxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xcbjkwNTI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9hY3Rpb246XFxuOTA1MzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG87XFxuOTA1NDpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FkanVzdF9zcmg6XFxuOTA1NTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvO1xcbjkwNTY6XFx0I2VuZGlmXFxuOTA1NzpcXHRcXHRkZWZhdWx0OlxcbjkwNTg6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDU5OlxcdFxcdH1cXG45MDYwOlxcdH1cXG45MDYxOlxcdFxcbjkwNjI6XFx0c3RhdGljIGJvb2wgYnBmX3NrYl9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuOTA2MzpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjkwNjQ6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxcbjkwNjU6XFx0e1xcbjkwNjY6XFx0XFx0Y29uc3QgaW50IHNpemVfZGVmYXVsdCA9IHNpemVvZihfX3UzMik7XFxuOTA2NzpcXHRcXG45MDY4OlxcdFxcdGlmIChvZmYgXFx1MDAzYyAwIHx8IG9mZiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IF9fc2tfYnVmZikpXFxuOTA2OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuOTA3MDpcXHRcXG45MDcxOlxcdFxcdC8qIFRoZSB2ZXJpZmllciBndWFyYW50ZWVzIHRoYXQgc2l6ZSBcXHUwMDNlIDAuICovXFxuOTA3MjpcXHRcXHRpZiAob2ZmICUgc2l6ZSAhPSAwKVxcbjkwNzM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjkwNzQ6XFx0XFxuOTA3NTpcXHRcXHRzd2l0Y2ggKG9mZikge1xcbjkwNzY6XFx0XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IF9fc2tfYnVmZiwgY2JbMF0sIGNiWzRdKTpcXG45MDc3OlxcdFxcdFxcdGlmIChvZmYgKyBzaXplIFxcdTAwM2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IF9fc2tfYnVmZiwgY2JbNF0pKVxcbjkwNzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjkwNzk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjU3LjUyNjIyNDY4M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTY5MDY1NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIHRoaW5nLiBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIG91dHB1dCBmdW5jdGlvbiBwcm90b3R5cGUsIGFuZCBnaXZlbiB0aGUgXCJsd3RcIiBwcmVmaXgsIEknbSBndWVzc2luZyB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBsaWdodHdlaWdodCB0aHJlYWRzIG9yIGNvbmN1cnJlbmN5LiBPa2F5LCB3aGF0J3MgaW5zaWRlIHRoaXMgdGhpbmc/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjb250ZW50cyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSXMgaXQgYSB0eXBlIGRlZmluaXRpb24sIGEgc3RydWN0LCBhbiBhYnN0cmFjdCBjbGFzcz8gSXMgaXQgYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uPyBLbm93aW5nICpleGFjdGx5KiB3aGF0IHRoaXMgaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgZm91bmRhdGlvbiBmb3Igd2hhdGV2ZXIgZm9sbG93cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHRoaW5nIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1Mjo1OS40OTUyOTM5NDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkwMDA6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDAxOlxcdFxcdH1cXG45MDAyOlxcdH1cXG45MDAzOlxcdFxcbjkwMDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuOTAwNTpcXHRsd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjkwMDY6XFx0e1xcbjkwMDc6XFx0XFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuOTAwODpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX2tleTpcXG45MDA5OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9nZXRfdHVubmVsX2tleV9wcm90bztcXG45MDEwOlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90dW5uZWxfa2V5OlxcbjkwMTE6XFx0XFx0XFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XFxuOTAxMjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX29wdDpcXG45MDEzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9nZXRfdHVubmVsX29wdF9wcm90bztcXG45MDE0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90dW5uZWxfb3B0OlxcbjkwMTU6XFx0XFx0XFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XFxuOTAxNjpcXHRcXHRjYXNlIEJQRl9GVU5DX3JlZGlyZWN0OlxcbjkwMTc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcHJvdG87XFxuOTAxODpcXHRcXHRjYXNlIEJQRl9GVU5DX2Nsb25lX3JlZGlyZWN0OlxcbjkwMTk6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfY2xvbmVfcmVkaXJlY3RfcHJvdG87XFxuOTAyMDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcXG45MDIxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcXG45MDIyOlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxcbjkwMjM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV9oZWFkX3Byb3RvO1xcbjkwMjQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2Jfc3RvcmVfYnl0ZXM6XFxuOTAyNTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2Jfc3RvcmVfYnl0ZXNfcHJvdG87XFxuOTAyNjpcXHRcXHRjYXNlIEJQRl9GVU5DX2NzdW1fdXBkYXRlOlxcbjkwMjc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfY3N1bV91cGRhdGVfcHJvdG87XFxuOTAyODpcXHRcXHRjYXNlIEJQRl9GVU5DX2NzdW1fbGV2ZWw6XFxuOTAyOTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9jc3VtX2xldmVsX3Byb3RvO1xcbjkwMzA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sM19jc3VtX3JlcGxhY2U6XFxuOTAzMTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sM19jc3VtX3JlcGxhY2VfcHJvdG87XFxuOTAzMjpcXHRcXHRjYXNlIEJQRl9GVU5DX2w0X2NzdW1fcmVwbGFjZTpcXG45MDMzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2w0X2NzdW1fcmVwbGFjZV9wcm90bztcXG45MDM0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2V0X2hhc2hfaW52YWxpZDpcXG45MDM1OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NldF9oYXNoX2ludmFsaWRfcHJvdG87XFxuOTAzNjpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxcbjkwMzc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90bztcXG45MDM4OlxcdFxcdGRlZmF1bHQ6XFxuOTAzOTpcXHRcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1Mjo1OS40OTU4Nzc4NzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwMDE4MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExXVCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLi4uIGxldCdzIHBpbnBvaW50IHRoYXQgYGx3dF9vdXRfZnVuY19wcm90b2AgZGVjbGFyYXRpb24uIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGFyb3VuZCBsaW5lIDg5ODAgaW4gdGhlIHBhc3QsIG9yIGF0IGxlYXN0IGluIHRoYXQgdmljaW5pdHkuIEl0J3MgY3J1Y2lhbCBiZWNhdXNlIGl0J3MgYSBrZXkgcGllY2UgaW4gaG93IHRoZSBMV1QgKGxpZ2h0d2VpZ2h0IHRocmVhZCkgb3V0cHV0IGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgZnJhbWV3b3JrLiBHZXR0aW5nIGEgdmlzdWFsIG9uIGl0IHdpbGwgaGVscCBtZSBrZWVwIG15IG1lbnRhbCBtb2RlbCBzdHJhaWdodC4gVGhlIHByb3RvdHlwZSBpdHNlbGYgaXMgcHJvYmFibHkgbm90IHRoYXQgY29tcGxleCwgYnV0IGl0J3Mgd2hhdCBkZXBlbmRzIG9uIHRoZSBwcm90b3R5cGUgdGhhdCBob2xkcyB0aGUgaW50ZXJlc3RpbmcgcGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjAyLjA5NjA2MDI1MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODk3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODk3MDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxcbjg5NzE6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XFxuODk3MjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuODk3MzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfcHVsbF9kYXRhX3Byb3RvO1xcbjg5NzQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19jc3VtX2RpZmY6XFxuODk3NTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XFxuODk3NjpcXHRcXHRjYXNlIEJQRl9GVU5DX2dldF9jZ3JvdXBfY2xhc3NpZDpcXG44OTc3OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9jZ3JvdXBfY2xhc3NpZF9wcm90bztcXG44OTc4OlxcdFxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxcbjg5Nzk6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3JvdXRlX3JlYWxtX3Byb3RvO1xcbjg5ODA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19nZXRfaGFzaF9yZWNhbGM6XFxuODk4MTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfaGFzaF9yZWNhbGNfcHJvdG87XFxuODk4MjpcXHRcXHRjYXNlIEJQRl9GVU5DX3BlcmZfZXZlbnRfb3V0cHV0Olxcbjg5ODM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcXG44OTg0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3NtcF9wcm9jZXNzb3JfaWQ6XFxuODk4NTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcXG44OTg2OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3VuZGVyX2Nncm91cDpcXG44OTg3OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG87XFxuODk4ODpcXHRcXHRkZWZhdWx0Olxcbjg5ODk6XFx0XFx0XFx0cmV0dXJuIGJwZl9za19iYXNlX2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XFxuODk5MDpcXHRcXHR9XFxuODk5MTpcXHR9XFxuODk5MjpcXHRcXG44OTkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbjg5OTQ6XFx0bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuODk5NTpcXHR7XFxuODk5NjpcXHRcXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcXG44OTk3OlxcdFxcdGNhc2UgQlBGX0ZVTkNfbHd0X3B1c2hfZW5jYXA6XFxuODk5ODpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3RfaW5fcHVzaF9lbmNhcF9wcm90bztcXG44OTk5OlxcdFxcdGRlZmF1bHQ6XFxuOTAwMDpcXHRcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjkwMDE6XFx0XFx0fVxcbjkwMDI6XFx0fVxcbjkwMDM6XFx0XFxuOTAwNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTM6MDIuMDk2NjkxNzcxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODcwNTEyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8gQ2hhbmdlKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbm90aWNpbmcgYSBjaGFuZ2UgaW4gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIEl0ICp1c2VkKiB0byBncmFjZWZ1bGx5IGhhbmRsZSB0aGluZ3MsIGZhbGxpbmcgYmFjayB0byBgbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpYCwgd2hpY2gsIGltcG9ydGFudGx5LCBtZWFudCBpdCB3b3VsZCBzdXBwb3J0IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCB0aHJvdWdoIHRoZSBgYnBmX3NrYl9wdWxsX2RhdGFfcHJvdG9gIGZ1bmN0aW9uIHBvaW50ZXIuIEJ1dCBub3csIGl0J3MgZXhwbGljaXRseSByZXR1cm5pbmcgYE5VTExgIHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYC4gVGhhdCdzIGEgZGlyZWN0LCBpbnRlbnRpb25hbCBkaWZmZXJlbmNlLlxuXG5UaGUgcXVlc3Rpb24sIG5hdHVyYWxseSwgaXMgKndoeSo/IFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBtb2RpZmljYXRpb247IHRoZXJlJ3MgZ290IHRvIGJlIGEgc3BlY2lmaWMgcmVhc29uIGZvciB0aGlzIGV4cGxpY2l0IGBOVUxMYCByZXR1cm4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwcyBhcmUgdG8gZGl2ZSBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSdsbCBzZWFyY2ggZm9yIGNvbW1pdHMgdGhhdCB0b3VjaCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpdHNlbGYsIG9yIG1vcmUgYnJvYWRseSwgY29tbWl0cyB0aGF0IG1pZ2h0IGJlIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2Ygc2VnNmxvY2FsIEJQRiBmdW5jdGlvbnMuIEknbGwgYWxzbyBsb29rIGZvciBhbnkgcmVmZXJlbmNlcyBvciBkaXNjdXNzaW9ucyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCBpbnRlcmFjdHMgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW92ZSBpcyBrZXkuIFdhcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlPyBJIG5lZWQgdGhlIGRlZXBlciBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjA0Ljc4Mzc0NTM1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTUwNDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ0Omx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ1LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTcxPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTcyOlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTczLVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjA2LjMzMzI2MDMxNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA2NTE3NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOlxuXG4qKkV4YW1pbmluZyB0aGUgUmVzdHJpY3Rpb24gb24gYGJwZl9za2JfcHVsbF9kYXRhYCB3aXRoaW4gYHNlZzZsb2NhbGAqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aHkgYGJwZl9za2JfcHVsbF9kYXRhYCBpc24ndCBhbGxvd2VkLCBvciBwZXJoYXBzIHdoYXQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGlzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYHNlZzZsb2NhbGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgcmVzdHJpY3Rpb24uIElzIGl0IGEgc2VjdXJpdHkgY29uY2Vybj8gQSBwZXJmb3JtYW5jZSBpc3N1ZT8gT3IgcGVyaGFwcyBhIGZ1bmRhbWVudGFsIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBvcGVyYXRpb25zIHdpdGhpbiBgc2VnNmxvY2FsYCBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgPyBNeSBleHBlcnRpc2UgbWFrZXMgbWUgcXVlc3Rpb24gaWYgaXQncyByZWxhdGVkIHRvIHRoZSBza2Igc3RydWN0IG9yIG90aGVyIHN0cnVjdHVyZXMgaW4gdGhlIGRhdGEgcGF0aC5cblxuSSdtIHRoaW5raW5nIG15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhlIGRpc2FsbG93YW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIG1lbnRpb25lZC4gSSBhbSBiZXR0aW5nIHRoYXQgaXQgaXMgbm90IHVzZWQgaW4gdGhlIGtlcm5lbCBzcGFjZS5cblxuTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgYW5kIGdvIGRpcmVjdGx5IHRvIGxvb2tpbmcgYXQgdGhlIGNvcmUgYHNlZzZfbG9jYWwuY2Agc291cmNlIGNvZGUsIGVzcGVjaWFsbHkgZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYGJwZl9sd3Rfc2VnNmAuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgYHNlZzZsb2NhbGAgaW50ZXJhY3RzIHdpdGggQlBGIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSB3aGVyZSBvciB3aHkgYGJwZl9za2JfcHVsbF9kYXRhYCBpcyBiZWluZyBkZWVtZWQgaW5hcHByb3ByaWF0ZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgd2l0aGluIHRoZSBjb2RlIGNvbW1lbnRzLCBhbnkgY2hlY2tzIG9yIGNvbmRpdGlvbnMsIG9yIGFueSBkZXNpZ24gZGVjaXNpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIHJlc3RyaWN0aW9uLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgd2F5IGBzZWc2bG9jYWxgIGhhbmRsZXMgcGFja2V0IHByb2Nlc3NpbmcgbWlnaHQgaGF2ZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgdGhhdCBtYWtlIGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uIGxpa2UgYGJwZl9za2JfcHVsbF9kYXRhYCB1bnN1aXRhYmxlIGZvciB0aGUgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjA5LjEzOTc4MTAzMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTY4MzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXFx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlxcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNzk9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTExNC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XFxua2VybmVsL2JwZi9idGYuYzo5MTE1OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvYnRmLmMtOTExNi1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfTFdUO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg0Mz1zdGF0aWMgYm9vbCBpc19uZXRfYWRtaW5fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODUyOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE5PXN0YXRpYyBib29sIG1heV9hY2Nlc3NfZGlyZWN0X3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgyOC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX09VVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDgyOTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgzMC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzY9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg3LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg5LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MTU9c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzYtXFx0ZmQgPSBubGFfZ2V0X3UzMih0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5Mzc6XFx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM4LVxcdGlmIChJU19FUlIocCkpIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XFx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVxcdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVxcdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXFx0PSBcXFwiY2dyb3VwX3NvY2tfYWRkclxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XFx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cXHRcXHQ9IFxcXCJsd3Rfc2VnNmxvY2FsXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVxcdFxcdD0gXFxcImxpcmNfbW9kZTJcXFwiLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcwLVxcdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XFx0eyBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3Mi1cXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsICAgICAgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MTc5OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyNi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6MjI3OlxcdHNjYWxlX3Rlc3QoXFxcInRlc3Rfc2VnNl9sb29wLmJwZi5vXFxcIiwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYz0yMD1zdGF0aWMgc3RydWN0IHNlY19uYW1lX3Rlc3QgdGVzdHNbXSA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00Mi1cXHR7XFxcImx3dF94bWl0XFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6NDM6XFx0e1xcXCJsd3Rfc2VnNmxvY2FsXFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgMH0sIHstRUlOVkFMLCAwfSB9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjEwLjY3OTQ3MDMwNloiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDUxNzIyNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2FmZXR5IEltcGxpY2F0aW9ucyBvZiBhIEJQRiBWZXJpZmllciBSZXN0cmljdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGJwZl9za2JfcHVsbF9kYXRhYCB1c2VzIGBza2JfcHVsbF9kYXRhKHNrYiwgbGVuKWAsIGFuZCBpdCdzIGRpc2FibGVkIGZvciBgbHd0X3NlZzZsb2NhbGAuIFRoZSBxdWVzdGlvbiBpcyAqd2h5Ki4gTXkgaHVuY2gsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIGlzIHRoYXQgaXQncyBiZWNhdXNlIGVpdGhlciB0aGUgcG9pbnRlciBpbnZhbGlkYXRpb24gaXMgYW4gaXNzdWUgaW4gYGx3dF9zZWc2bG9jYWxgLCB0aGF0IGNvbnRleHQgZG9lc24ndCBzdXBwb3J0IGl0LCBvciB0aGF0IHRoZXJlJ3Mgc3BlY2lmaWMgU1JIIGhhbmRsaW5nIHRoYXQgc2hvdWxkbid0IHJlYWxsb2NhdGUgdGhlIFNLQiBoZWFkLiBUaGUgKndoeSogaXNuJ3QgdGhlIGtleSBmb2N1cyBoZXJlLCB0aG91Z2guXG5cbldoYXQncyB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2luZyo/IEl0J3MgZWZmZWN0aXZlbHkgaGFyZGVuaW5nIHRoZSB2ZXJpZmllci4gSW5zdGVhZCBvZiBhbGxvd2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgdG8gXCJmYWxsIHRocm91Z2hcIiB0byB0aGUgZ2VuZXJpYyBgbHd0X291dF9mdW5jX3Byb3RvYCwgaXQgKmV4cGxpY2l0bHkqIHJlamVjdHMgaXQgaW4gYGx3dF9zZWc2bG9jYWxgIHByb2dyYW1zLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogcmV0dXJuIGBOVUxMYCBmcm9tIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIHdoZW4gdGhpcyBmdW5jdGlvbiBJRCBpcyBlbmNvdW50ZXJlZC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIG9yIGNyZWF0ZWQgZm9yIHVzZXJzcGFjZS4gVGhlcmUncyBubyBjb25kaXRpb25hbCBsb2dpYyByZWxpYW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSdyZSBub3QgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGhvdXQgemVyb2luZy4gQW5kLCBjcml0aWNhbGx5LCB0aGlzIGlzbid0IGFsdGVyaW5nIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgbWlnaHQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIHJlYWQuIEl0J3Mgc3RyaWN0bHkgYSAqcmVzdHJpY3Rpb24qIGVuZm9yY2VkIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBwcmV2ZW50aW5nIHRoZSBoZWxwZXIgZnJvbSBiZWluZyAqbG9hZGVkKiBmb3IgdGhhdCBwcm9ncmFtIHR5cGUuIFJlYWxseSwgaXQncyBqdXN0IGFkZGluZyB0d28gbGluZXMgb2YgY29kZSB3aXRoaW4gdGhlIHZlcmlmaWVyIHRvIGRlbnkgYSBjZXJ0YWluIG9wZXJhdGlvbi5cblxuVGhpcyBpcyBhIHZlcmlmaWVyICpoZWxwZXIgcmVzdHJpY3Rpb24qIHRoYXQgcHJldmVudHMgQlBGIHByb2dyYW1zIG9mIHR5cGUgTFdUX1NFRzZMT0NBTCBmcm9tIGluYXBwcm9wcmlhdGVseSBjYWxsaW5nIGBicGZfc2tiX3B1bGxfZGF0YWAuIEl0J3MgYSBzYWZldHkgbWVhc3VyZSwgZXNzZW50aWFsbHkuIFRoZXJlIGlzICp6ZXJvKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byB0aGlzIGNoYW5nZS4gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZW1haW5pbmcgcG90ZW50aWFsIGlzc3VlcywgYnV0IHJlYWxseSwgdGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbiAqYmVmb3JlKiB0aGV5IGNhbiBvY2N1ci4gVGh1cywgaXQncyBzYWZlIHRvIHNheSBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ3ZlIGNoZWNrZWQgdGhlIGRpZmYgYW5kIG90aGVyIGFzcGVjdHMuIE5vIG90aGVyIGFyZWEgaXMgdG91Y2hlZC4gSXQncyBqdXN0IHRob3NlIHR3byBsaW5lcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgdGhlIGp1c3RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MDMsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjE1LjczMTE5NTY0N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZGlzYWxsb3dzIHRoZSBCUEYgaGVscGVyIGBicGZfc2tiX3B1bGxfZGF0YWAgZm9yIEJQRiBwcm9ncmFtcyBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIGJ5IHJldHVybmluZyBOVUxMIGZyb20gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFRoaXMgaXMgYSB2ZXJpZmllci1sZXZlbCBoZWxwZXIgcmVzdHJpY3Rpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 04:20:47 +0000 UTC FinishedAt: 2026-09-09 04:53:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF" ], "series_id": "2f0f891b-40ac-4fd2-a047-59eb84850431" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "lwt_seg6local_func_proto", "input_action_end_bpf", "parse_nla_bpf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDssCiAgICAmIzM0O3BhcnNlX25sYV9icGYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGhlbHBlciBmdW5jdGlvbiByZXNvbHV0aW9uIGZvciBzZWc2bG9jYWwgcHJvZ3JhbXMgKGx3dF9zZWc2bG9jYWxfZnVuY19wcm90bykgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gZGlzYWxsb3cgYnBmX3NrYl9wdWxsX2RhdGEuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGFuZCBJUHY2IFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWQyMTk0MzQzNzY4MzJmNDgyZTcyNmI2OTJlNzcwNjQxMGE2OWI5NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTA6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uMmE4NGY5ZDAxMTMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTkwNDQsNiAmIzQzOzkwNDQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbiBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4ge1xuIFx0c3dpdGNoIChmdW5jX2lkKSB7XG4mIzQzO1x0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG4gXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuIFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDssCiAgICAmIzM0O3BhcnNlX25sYV9icGYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkMjE5NDM0Mzc2ODMyZjQ4MmU3MjZiNjkyZTc3MDY0MTBhNjliOTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA0OjUwOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA4NTEzMTY3YTg1OGE4Li4yYTg0ZjlkMDExMzE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtOTA0NCw2ICYjNDM7OTA0NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKgogbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogewogCXN3aXRjaCAoZnVuY19pZCkgewomIzQzOwljYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6CiYjNDM7CQlyZXR1cm4gTlVMTDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKQogCWNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6CiAJCXJldHVybiAmYW1wO2JwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90bzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTeXprYWxsZXIgRnV6emluZyBUcmlhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSByZWxhdGVkIHRvIGZ1enppbmcgdHJpYWdlIHdpdGggc3l6a2FsbGVyLiBUaGUgcmVxdWVzdCBpdHNlbGYgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrLCBub3RoaW5nIGFsYXJtaW5nIHNvIGZhci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGNoYW5naW5nLiBJdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgZGlmZiBzaG93cyBhbiBhZGRpdGlvbiB3aXRoaW4gdGhlIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIG5ldyBjYXNlIHN0YXRlbWVudCBmb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHRoYXQgcmV0dXJucyBgTlVMTGAuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHJldHVybmluZyBgTlVMTGAgaGVyZS4gTXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBpbnZlc3RpZ2F0ZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCBsaW5lIDkwNDQgdG8gZ2V0IHNvbWUgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIGEgYHJlYWQtZmlsZWAgY29tbWFuZCBvciBtYXliZSBgZ3JlcHBlcmAgdG8gc2VlIHdoYXQgZWxzZSBpcyBoYXBwZW5pbmcgYXJvdW5kIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGRvZXMsIGhvdyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgaXMgdXNlZCBpbiB0aGlzIGNvbnRleHQsIGFuZCB3aHkgcmV0dXJuaW5nIGBOVUxMYCBmb3IgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBtaWdodCBiZSBuZWNlc3NhcnkuIFRoZXJlJiMzOTtzIGEgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKWAgYmxvY2sgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCBpbiByZWxhdGlvbiB0byB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGEgYmVuaWduIHNlY3VyaXR5IG1lYXN1cmUsIGEgYnVnIGZpeCwgb3Igc29tZXRoaW5nIHRoYXQgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5emthbGxlciBjb250ZXh0IGFzIHdlbGwgLSBhcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3l6a2FsbGVyIHJlcG9ydHMgb3IgY3Jhc2hlcyB0aGF0IGxlZCB0byB0aGlzIGNoYW5nZT8gSSYjMzk7bGwgcHJvYmFibHkgY2hlY2sgdGhlIHN5emthbGxlciBpc3N1ZSB0cmFja2VyIGFzIHdlbGwsIGZvciBhbnkgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTAzNTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NldF9oYXNoX2ludmFsaWRfcHJvdG87XG45MDM2Olx0XHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxuOTAzNzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG87XG45MDM4Olx0XHRkZWZhdWx0OlxuOTAzOTpcdFx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuOTA0MDpcdFx0fVxuOTA0MTpcdH1cbjkwNDI6XHRcbjkwNDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjkwNDQ6XHRsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG45MDQ1Olx0e1xuOTA0NjpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG45MDQ3Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XG45MDQ4Olx0XHRcdHJldHVybiBOVUxMO1xuOTA0OTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxuOTA1MDpcdFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcbjkwNTE6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90bztcbjkwNTI6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uOlxuOTA1MzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90bztcbjkwNTQ6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcbjkwNTU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvO1xuOTA1NjpcdCNlbmRpZlxuOTA1NzpcdFx0ZGVmYXVsdDpcbjkwNTg6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjkwNTk6XHRcdH1cbjkwNjA6XHR9XG45MDYxOlx0XG45MDYyOlx0c3RhdGljIGJvb2wgYnBmX3NrYl9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG45MDYzOlx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuOTA2NDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxuOTA2NTpcdHtcbjkwNjY6XHRcdGNvbnN0IGludCBzaXplX2RlZmF1bHQgPSBzaXplb2YoX191MzIpO1xuOTA2NzpcdFxuOTA2ODpcdFx0aWYgKG9mZiBcdTAwM2MgMCB8fCBvZmYgXHUwMDNlPSBzaXplb2Yoc3RydWN0IF9fc2tfYnVmZikpXG45MDY5Olx0XHRcdHJldHVybiBmYWxzZTtcbjkwNzA6XHRcbjkwNzE6XHRcdC8qIFRoZSB2ZXJpZmllciBndWFyYW50ZWVzIHRoYXQgc2l6ZSBcdTAwM2UgMC4gKi9cbjkwNzI6XHRcdGlmIChvZmYgJSBzaXplICE9IDApXG45MDczOlx0XHRcdHJldHVybiBmYWxzZTtcbjkwNzQ6XHRcbjkwNzU6XHRcdHN3aXRjaCAob2ZmKSB7XG45MDc2Olx0XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgX19za19idWZmLCBjYlswXSwgY2JbNF0pOlxuOTA3NzpcdFx0XHRpZiAob2ZmICYjNDM7IHNpemUgXHUwMDNlIG9mZnNldG9mZW5kKHN0cnVjdCBfX3NrX2J1ZmYsIGNiWzRdKSlcbjkwNzg6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG45MDc5Olx0XHRcdGJyZWFrO1xuOTA4MDpcdFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBfX3NrX2J1ZmYsIGRhdGEpOlxuOTA4MTpcdFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBfX3NrX2J1ZmYsIGRhdGFfbWV0YSk6XG45MDgyOlx0XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IF9fc2tfYnVmZiwgZGF0YV9lbmQpOlxuOTA4MzpcdFx0XHRpZiAoaW5mby1cdTAwM2Vpc19sZHN4IHx8IHNpemUgIT0gc2l6ZV9kZWZhdWx0KVxuOTA4NDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDYxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgbGluZXMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVtOgoKKipOYXZpZ2F0aW5nIHRoZSBMV1QgJmFtcDsgQlBGIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AsIHdoZXJlIGFyZSB3ZSBjYWxsaW5nICp0aGF0KiBmcm9tPyBHb3R0YSB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4mIzM0OyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGl0JiMzOTtzIGJlaW5nICppbnZva2VkKiwgYmVjYXVzZSB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBrbm93IHRoZSAmIzM5O3dobyYjMzk7LCAmIzM5O3doYXQmIzM5OyBhbmQgJiMzOTt3aHkmIzM5Oy4KCk5leHQgdXAsIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gLiBBbmQgaW4gdGhlcmU/IEFoLCBsb29rcyBsaWtlIHdlJiMzOTtyZSB1c2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCBCUEYgaGVscGVyIGlzIGRvaW5nLCBleGFjdGx5LCBhcyB0aGlzIGNvZGUgaXMgcmVsZXZhbnQgdG8gbWFuaXB1bGF0aW5nIFNLQiBkYXRhIHdpdGhpbiBhbiBlQlBGIGNvbnRleHQuIERlcGVuZGluZyBvbiB3aGF0IGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGRvZXMgKndpdGgqIHRoYXQgaGVscGVyIGlzIGdvaW5nIHRvIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbnZvbHZlZC4gSXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgdXNhZ2U6IGhvdyBhcmUgd2UgcHVsbGluZyBkYXRhIGZyb20gdGhlIFNLQj8gQXJlIHdlIGRvaW5nIGl0IGVmZmljaWVudGx5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gSSYjMzk7bGwgcHJvYmFibHkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHVzYWdlIGlzIHNhZmUgYW5kIHRoYXQgdGhlIHB1bGxlZCBkYXRhIGlzIGhhbmRsZWQgY29ycmVjdGx5IGVsc2V3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDQ6bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0NS17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzE9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MjpcdC5nZXRfZnVuY19wcm90b1x0XHQ9IGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTczLVx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGFuZCBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYGx3dF9vdXRfZnVuY19wcm90b2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRleHQuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHdhcyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGluc3BlY3Rpb24sIGJ1dCBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGFib3V0IHRoZSBwYXJ0aWN1bGFyIHVzZSBjYXNlIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoeSogdGhhdCBzcGVjaWZpYyBCUEYgaGVscGVyIHdhcyBjaG9zZW4g4oCTIHdoYXQgZGF0YSB3YXMgaXQgcHVsbGluZywgZnJvbSB3aGVyZSwgYW5kIGZvciB3aGF0IHB1cnBvc2Ugd2l0aGluIHRoZSBgbHd0X291dF9mdW5jX3Byb3RvYCB3b3JrZmxvdz8gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBzb21lIGtpbmQgb2Ygb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGRlYWxpbmcgd2l0aCBwYWNrZXQgaGVhZGVycyBvciBwYXlsb2FkcywgYnV0IHRoZSBzcGVjaWZpYyBsb2dpYyBuZWVkcyB1bnBhY2tpbmcuIEdvdHRhIHRyYWNlIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0X291dF9mdW5jX3Byb3RvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTg5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzo4OTY3Omx3dF9vdXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTg5Njgte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg5OTQ9bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODk5OS1cdGRlZmF1bHQ6XG5uZXQvY29yZS9maWx0ZXIuYzo5MDAwOlx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xubmV0L2NvcmUvZmlsdGVyLmMtOTAwMS1cdH1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTAzOC1cdGRlZmF1bHQ6XG5uZXQvY29yZS9maWx0ZXIuYzo5MDM5Olx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xubmV0L2NvcmUvZmlsdGVyLmMtOTA0MC1cdH1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDQ0PWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05MDU3LVx0ZGVmYXVsdDpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTg6XHRcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG5uZXQvY29yZS9maWx0ZXIuYy05MDU5LVx0fVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNTUwPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9vdXRfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE1NTE6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfb3V0X2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU1Mi1cdC5pc192YWxpZF9hY2Nlc3NcdD0gbHd0X2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgbHd0X291dF9mdW5jX3Byb3RvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGx3dF9vdXRfZnVuY19wcm90b2AuIEhtbSwganVzdCB0aGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBwcm90b3R5cGUgZnVuY3Rpb24gcmVsYXRlZCB0byBMd3Qgb3V0cHV0LiBLbm93aW5nIEx3dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9ucywgcHJvYmFibHkgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIGFuZCBtYW5hZ2luZyBwcm9taXNlcyBvciBmdXR1cmVzIHRoYXQgcmVwcmVzZW50IHBlbmRpbmcgb3V0cHV0IHRhc2tzLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBzaWduYXR1cmUuIFdoYXQgYXJndW1lbnRzIGRvZXMgaXQgdGFrZT8gQXJlIHRoZXkgaGFuZGxlcywgYnVmZmVycywgbGVuZ3RocywgY2FsbGJhY2tzLCBvciBzb21lIGNvbWJpbmF0aW9uIHRoZXJlb2Y/IFRoZSBzcGVjaWZpYyB0eXBlcyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UuIEZvciBleGFtcGxlLCBkb2VzIGl0IGhhbmRsZSByYXcgYnl0ZXMsIG9yIGRvZXMgaXQgYWJzdHJhY3QgZnVydGhlciB1cCBpbnRvIHN0cmVhbXMsIGZpbGVzLCBvciBuZXR3b3JrIHNvY2tldHM/IEFuZCBhcmUgdGhlcmUgYW55IGluZGljYXRpb25zIG9mIGNvbmN1cnJlbmN5IG9yIHRocmVhZGluZyBidWlsdCBpbiBoZXJlPwoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIGVmZmljaWVuY3kgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBibG9ja2luZyBwb2ludHMsIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZC4gSWYgdGhpcyBpcyBtZWFudCB0byBiZSB0cnVseSBub24tYmxvY2tpbmcsIHRoZW4gSSBleHBlY3QgaGVhdnkgdXNlIG9mIGV2ZW50IGxvb3BzIG9yIHNvbWUgZm9ybSBvZiBjb250aW51YXRpb24gcGFzc2luZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG91dHB1dCBvcGVyYXRpb24gaXMgc2NoZWR1bGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSByZXNvdXJjZXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kuIFdoYXQga2luZHMgb2YgZXhjZXB0aW9ucyBvciByZXR1cm4gdmFsdWVzIGRvZXMgaXQgcHJvZHVjZT8gSG93IGRvZXMgaXQgc2lnbmFsIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCBwcm92aWRlIGFueSBtZWNoYW5pc21zIGZvciBjYW5jZWxsYXRpb24gb3IgdGltZW91dD8gTW9yZSBnZW5lcmFsbHksIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBkZXNpZ24gb2YgTHd0JiMzOTtzIG92ZXJhbGwgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3k/CgpGdXJ0aGVybW9yZSwgSSBzaG91bGQgdHJ5IHRvIHBsYWNlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgTHd0IGZyYW1ld29yay4gSSB3YW50IHRvIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgbW9kdWxlcy4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gRG9lcyBpdCByZWx5IG9uIGxvd2VyLWxldmVsIHN5c3RlbSBjYWxscyBkaXJlY3RseSBvciBpcyBpdCBidWlsZGluZyB1cG9uIG1vcmUgYWJzdHJhY3QgTHd0IHByaW1pdGl2ZXM/CgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljaXQgYXNzdW1wdGlvbnM/IElzIHRoZXJlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBhYm91dCBhIHNpdHVhdGlvbiB3aGVyZSBJIHdvdWxkIHVzZSB0aGlzPyBLbm93aW5nIHRoZSBpbnRlbnQsIEkgY2FuIGFzc2VzcyB0aGUgY29kZSBmb3IgbWFpbnRhaW5hYmlsaXR5LCBjbGFyaXR5LCBhbmQgYWRoZXJlbmNlIHRvIHRoZSBwcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg5NjU6XHRcbjg5NjY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjg5Njc6XHRsd3Rfb3V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG44OTY4Olx0e1xuODk2OTpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG44OTcwOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxuODk3MTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9sb2FkX2J5dGVzX3Byb3RvO1xuODk3MjpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuODk3MzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG87XG44OTc0Olx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fZGlmZjpcbjg5NzU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XG44OTc2Olx0XHRjYXNlIEJQRl9GVU5DX2dldF9jZ3JvdXBfY2xhc3NpZDpcbjg5Nzc6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfcHJvdG87XG44OTc4Olx0XHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcbjg5Nzk6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfcm91dGVfcmVhbG1fcHJvdG87XG44OTgwOlx0XHRjYXNlIEJQRl9GVU5DX2dldF9oYXNoX3JlY2FsYzpcbjg5ODE6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfaGFzaF9yZWNhbGNfcHJvdG87XG44OTgyOlx0XHRjYXNlIEJQRl9GVU5DX3BlcmZfZXZlbnRfb3V0cHV0OlxuODk4MzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XG44OTg0Olx0XHRjYXNlIEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkOlxuODk4NTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkX3Byb3RvO1xuODk4NjpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfdW5kZXJfY2dyb3VwOlxuODk4NzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG87XG44OTg4Olx0XHRkZWZhdWx0OlxuODk4OTpcdFx0XHRyZXR1cm4gYnBmX3NrX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjg5OTA6XHRcdH1cbjg5OTE6XHR9XG44OTkyOlx0XG44OTkzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG44OTk0Olx0bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG44OTk1Olx0e1xuODk5NjpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG44OTk3Olx0XHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxuODk5ODpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9pbl9wdXNoX2VuY2FwX3Byb3RvO1xuODk5OTpcdFx0ZGVmYXVsdDpcbjkwMDA6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjkwMDE6XHRcdH1cbjkwMDI6XHR9XG45MDAzOlx0XG45MDA0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBsd3Rfc2VnNmxvY2FsYCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIGxpa2UgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AgdXNlZCB0byBoYXZlIGEgZmFsbGJhY2sgbWVjaGFuaXNtLiBJdCB3b3VsZCBkZWZlciB0byBgbHd0X291dF9mdW5jX3Byb3RvYCwgYW5kIHRoYXQsIGluIHR1cm4sIHdvdWxkIHByb3ZpZGUgYCZhbXA7YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG9gIGZvciBoYW5kbGluZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIEJ1dCBub3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBGb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgLCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpcyBleHBsaWNpdGx5IHJldHVybmluZyBgTlVMTGAuIFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHVzZSBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgIHdpdGhpbiBgc2VnNmxvY2FsYCBCUEYgcHJvZ3JhbXMuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGlzIGBsd3Rfc2VnNmxvY2FsYCBCUEYgcHJvZ3JhbSB0eXBlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyByZWdpc3RlcmVkLCBob3cgaXQmIzM5O3MgdXNlZCwgYW5kIHdoYXQgb3RoZXIgcHJvZyB0eXBlcyBhcmUgaW4gcGxheSBoZXJlLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2hpZXZlLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IG1lYXN1cmU/IEEgYnVnIGZpeD8gSSBoYXZlIHRvIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzUtJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q6MTM2OnwgYGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgYCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgbHd0X3NlZzZsb2NhbGBgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzctJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0yNT1CUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyNzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNzk9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxMTQtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjkxMTU6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvYnRmLmMtOTExNi1cdFx0cmV0dXJuIEJURl9LRlVOQ19IT09LX0xXVDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODQzPXN0YXRpYyBib29sIGlzX25ldF9hZG1pbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg1MjpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1My1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4MTk9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19kaXJlY3RfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgyOC1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfT1VUOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4Mjk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODMwLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg3Nj1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg3LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg5LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzYtXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTM3Olx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXHRpZiAoSVNfRVJSKHApKSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0yMDI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcm9nX3R5cGVfbmFtZVtdID0ge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVx0W0JQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUl1cdD0gXCYjMzQ7Y2dyb3VwX3NvY2tfYWRkclwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjIyOlx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cdFx0PSBcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjMtXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVx0XHQ9IFwmIzM0O2xpcmNfbW9kZTJcJiMzNDssXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3MC1cdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XHR7IEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcyLVx0eyBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAgICAgICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xNzgtXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzoxNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjIyNzpcdHNjYWxlX3Rlc3QoXCYjMzQ7dGVzdF9zZWc2X2xvb3AuYnBmLm9cJiMzNDssIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVx0e1wmIzM0O2x3dF94bWl0XCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlx0e1wmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IEJQRiBWZXJpZmljYXRpb24gaW4gTmV0L0NvcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgcHJvZ3JhbSB2ZXJpZmllciBsb2dpYy4gSXQgc2VlbXMgdGhhdCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpcyByZXR1cm5pbmcgYE5VTExgIHVuZGVyIGEgc3BlY2lmaWMgY29uZGl0aW9uOiB3aGVuIHRoZSBgZnVuY19pZGAgaXMgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgLiBUaGlzIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZSBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGZvciBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRlbXB0aW5nIHRvIHV0aWxpemUgYGJwZl9za2JfcHVsbF9kYXRhKClgLiBUaGF0JiMzOTtzIGEgY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgaXNzdWUuCgpUaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBDYW4gd2UgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbj8gQWJzb2x1dGVseS4gVGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIHRoZSBgQlBGX1BST0dfTE9BRGAgY29tbWFuZCBhbmQgYSBwcm9ncmFtIHR5cGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgaXMgdGhlIHBhdGguIFNvLCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gbG9hZCB0aGlzIGFuZCB0cmlnZ2VyIHRoZSB2ZXJpZmllci4gVGhhdCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4KCk5vdywgZG9lcyB0aGlzIG1lZXQgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDs/IExldCYjMzk7cyBzZWUuLi4gQ29yZSBzdWJzeXN0ZW1zPyBDaGVjay4gQlBGIGFuZCBjb3JlIG5ldHdvcmtpbmc/IERlZmluaXRlbHkuIExvZ2ljIG1vZGlmaWNhdGlvbnM/IFllcywgdGhhdCBgTlVMTGAgcmV0dXJuIGlzIGEgZGVmaW5pdGUgbG9naWMgY2hhbmdlLiBSZWFjaGFibGU/IFllcywgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIGEgc3BlY2lmaWMgQlBGIHByb2dyYW0gdHlwZS4gT2theSwgdGhlIGZ1enppbmcgY3JpdGVyaWEgYXJlIG1ldC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZXhwbG9yZSB0aGlzIHByb3Blcmx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBlbmFibGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAsIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLCBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX05FVGAsIGBDT05GSUdfTFdUVU5ORUxgLCBgQ09ORklHX0lQVjZfU0VHNl9CUEZgLCBhbmQgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgLiBJJiMzOTtsbCBncmVwIGZvciBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGFuZCB3aGVyZSBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIGlzIGNvbXBpbGVkLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgSSBuZWVkIHRvIGhhdmUgZW5hYmxlZCBmb3IgUUVNVSB0byBiZSBhYmxlIHRvIGhpdCB0aGlzIGNvZGUgcGF0aCBhbmQgdGh1cyB0byBiZSBmdXp6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x3dF9zZWc2bG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDQ6bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0NS17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1Njc9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNTcxOmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE1NzI6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cdC5pc192YWxpZF9hY2Nlc3NcdD0gbHd0X2lzX3ZhbGlkX2FjY2Vzcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc3OmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3NlZzZsb2NhbF9wcm9nX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCB0aGF0IGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AgdGhpbmc6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGaWx0ZXJpbmcgYW5kIExXVCBTdXBwb3J0KioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgZmlndXJlIG91dCB3aGVyZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgbGFyZ2VyIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIG9yIGV4YW1pbmUgdGhlIE1ha2VmaWxlcyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBpbmNvcnBvcmF0ZWQuCgpUaGVuLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQ6IGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIEkga25vdyBhIGJpdCBhYm91dCBMV1QgKExpZ2h0d2VpZ2h0IFR1bm5lbHMpIGFuZCBTZWdtZW50IFJvdXRpbmcgdjYgKFNSdjYpLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSB2ZXJpZmllciBmaXRzIGluLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgdmVyaWZpY2F0aW9uIG9wZXJhdGlvbiB3aXRoaW4gdGhlIFNSdjYgY29udGV4dCwgcG9zc2libHkgcmVsYXRlZCB0byBsb2NhbCBzZWdtZW50IHByb2Nlc3Npbmcgb3Igc29tZSBraW5kIG9mIGVuY2Fwc3VsYXRpb24gdmVyaWZpY2F0aW9uLgoKSSYjMzk7bGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRob3NlIHByZXByb2Nlc3NvciBpZmRlZnMgYXJvdW5kIGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwganVpY2UgaXMuIFRob3NlIGlmZGVmcyBhcmUgdGhlIGJyZWFkY3J1bWJzIHRoYXQmIzM5O2xsIHNob3cgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBmZWF0dXJlIGZsYWdzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgKmVuYWJsZWQqIGF0IGNvbXBpbGUgdGltZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtb2R1bGUsIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24sIG9yIGEgc3BlY2lmaWMgZmVhdHVyZSBlbmFibGVkIGF0IGJvb3Q/IFVuZGVyc3RhbmRpbmcgdGhlIGlmZGVmcyB3aWxsIHF1aWNrbHkgY2xhcmlmeSBpZiBpdCYjMzk7cyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBzcGVjaWZpYyBtb2R1bGUgYmVpbmcgbG9hZGVkLCBvciBwZXJoYXBzIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBuZWVkcyB0byBiZSB0b2dnbGVkIHRvIGFjdGl2YXRlIGl0LiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIHN0cnVjdCBpcywgYW5kIGhvdyBpdHMgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGJlaW5nIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1NjU6XHR9O1xuMTE1NjY6XHRcbjExNTY3Olx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcbjExNTY4Olx0XHQudGVzdF9ydW5cdFx0PSBicGZfcHJvZ190ZXN0X3J1bl9za2IsXG4xMTU2OTpcdH07XG4xMTU3MDpcdFxuMTE1NzE6XHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcbjExNTcyOlx0XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8sXG4xMTU3MzpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxuMTE1NzQ6XHRcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcdD0gYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyxcbjExNTc1Olx0fTtcbjExNTc2Olx0XG4xMTU3NzpcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3NlZzZsb2NhbF9wcm9nX29wcyA9IHtcbjExNTc4Olx0fTtcbjExNTc5Olx0XG4xMTU4MDpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tfdmVyaWZpZXJfb3BzID0ge1xuMTE1ODE6XHRcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfZmlsdGVyX2Z1bmNfcHJvdG8sXG4xMTU4MjpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBzb2NrX2ZpbHRlcl9pc192YWxpZF9hY2Nlc3MsXG4xMTU4MzpcdFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBicGZfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3MsXG4xMTU4NDpcdH07XG4xMTU4NTpcdFxuMTE1ODY6XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGNnX3NvY2tfcHJvZ19vcHMgPSB7XG4xMTU4NzpcdH07XG4xMTU4ODpcdFxuMTE1ODk6XHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2NrX2FkZHJfdmVyaWZpZXJfb3BzID0ge1xuMTE1OTA6XHRcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfYWRkcl9mdW5jX3Byb3RvLFxuMTE1OTE6XHRcdC5pc192YWxpZF9hY2Nlc3NcdD0gc29ja19hZGRyX2lzX3ZhbGlkX2FjY2VzcyxcbjExNTkyOlx0XHQuY29udmVydF9jdHhfYWNjZXNzXHQ9IHNvY2tfYWRkcl9jb252ZXJ0X2N0eF9hY2Nlc3MsXG4xMTU5MzpcdH07XG4xMTU5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIE5ldHdvcmsgRmlsdGVyIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHBhdGggZm9yIGBuZXQvY29yZS9maWx0ZXIub2Agd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHNwZWNpZmljIG9iamVjdCBmaWxlIGlzIGNvbnN0cnVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IEtjb25maWcgb3B0aW9ucyBwbGF5IGEgcm9sZSBpbiBpdHMgY29tcGlsYXRpb24sIGFuZCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gZmVhdHVyZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBsaWtlIEJQRiwgSVB2NiwgTFdULCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy04Ny0gKlxubmV0L2NvcmUvcGt0Z2VuLmM6ODg6ICogUmVtb3ZlIGlmIGZpeCBmcm9tIGFkZGVkIEhhcmFsZCBXZWx0ZSBcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcdTAwM2UgMDQwNDE5XG5uZXQvY29yZS9wa3RnZW4uYy04OS0gKiBpYTY0IGNvbXBpbGF0aW9uIGZpeCBmcm9tICBBcm9uIEdyaWZmaXMgXHUwMDNjYXJvbkBocC5jb21cdTAwM2UgMDQwNjA0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTc0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgaGVyZT8gQXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlPyBEb2VzIG9uZSByZXF1aXJlIHRoZSBvdGhlcj8gSXMgdGhlcmUgc29tZSBjb25kaXRpb25hbCBlbmFibGluZyBnb2luZyBvbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZsYWdzIGludGVyYWN0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgYSBwcmV0dHkgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIGFueSBCUEYgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSBndWVzc2luZyBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIHByb2JhYmx5ICpuZWVkcyogaXQsIGJ1dCBJIHdhbnQgdG8gdmVyaWZ5IHRoZSBleGFjdCBLY29uZmlnIGxvZ2ljIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIEJQRiBjYXBhYmlsaXRpZXMgbGluZXMgdXAgd2l0aCBob3cgdGhlIGtlcm5lbCBpcyBhY3R1YWxseSBzdHJ1Y3R1cmVkLiBUaGVuLCBJIHdpbGwgc3RhcnQgYnkgc2VlaW5nIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBsb2NhdGVkLCBpbiB3aGF0IGZpbGVzLiBUaGlzIHdpbGwgc3RhcnQgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSB2YXJpb3VzIHBvc3NpYmxlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBWNl9TRUc2X0JQRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02ODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9jaGVja19tdHVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjg3Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjY4Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTAtfVxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMTojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTItXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Njk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzEtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE2My19O1xubmV0L2NvcmUvZmlsdGVyLmM6NzE2NDojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0OC1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA1MC1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0zMDA9Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM4OC1cdFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzg5Olx0XHR7IFwmIzM0O0NPTkZJR19JUFY2X1NFRzZfQlBGXCYjMzQ7LCB9LFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cdFx0LyogQlBGX1BST0dfVFlQRV9MSVJDX01PREUyIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTQ4PUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NDk6Q09ORklHX0lQVjZfU0VHNl9CUEY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4ODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIEJQRioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVBWNl9TRUc2X0JQRmAuIEkgcmVtZW1iZXIgdGhhdCBraW5kIG9mIHN0dWZmIGlzIHVzdWFsbHkgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGF0IGBuZXQvaXB2NmAgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIElQdjYgY29uZmlndXJhdGlvbiByZXNpZGVzLiBTbywgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYG5ldC9pcHY2L0tjb25maWdgLiBBbmQsIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGZpbmQgYElQVjZfU0VHNl9CUEZgLCBJJiMzOTtsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDMxMiDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbGF0ZWQgZmVhdHVyZXMgaW4gdGhvc2UgZmlsZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCwgb3IgYW55IGhhcmR3YXJlIG9yIHNvZnR3YXJlIHJlcXVpcmVtZW50cywgYmVmb3JlIGBJUFY2X1NFRzZfQlBGYCBjYW4gYmUgc2VsZWN0ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBJUHY2IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGJhc2UgSVB2NiBzdGFjaywgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYmV0dGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4gMzEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzExOlx0XG4gMzEyOlx0Y29uZmlnIElQVjZfU0VHNl9CUEZcbiAzMTM6XHRcdGRlZl9ib29sIHlcbiAzMTQ6XHRcdGRlcGVuZHMgb24gSVBWNl9TRUc2X0xXVFVOTkVMXG4gMzE1Olx0XHRkZXBlbmRzIG9uIElQVjYgPSB5XG4gMzE2Olx0XG4gMzE3Olx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG4gMzE4Olx0XHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuIDMxOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzIwOlx0XHRzZWxlY3QgTFdUVU5ORUxcbiAzMjE6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAzMjI6XHRcdGhlbHBcbiAzMjM6XHRcdCAgU3VwcG9ydCBmb3IgUkZDNjU1NCBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDMyNDpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cbiAzMjU6XHRcbiAzMjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAzMjc6XHRcbiAzMjg6XHRjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxuIDMyOTpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYElQVjZfU0VHNl9MV1RVTk5FTGAgaW4gYG5ldC9pcHY2L0tjb25maWdgOgoKKipDaGVja2luZyBJUHY2IFNlZ21lbnQgUm91dGluZyBTdXBwb3J0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucywgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCwgYXMgSSBzZWUgaXQsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IElQdjYgc2VnbWVudCByb3V0aW5nIHN1cHBvcnQgbG9va3MgbGlrZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIFRoZSAmIzM0O0tjb25maWcmIzM0OyBmaWxlIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LCBJIGltbWVkaWF0ZWx5IGtub3cgd2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgYW5kIGxpa2VseSwgaG93IHRoYXQgaXMgZXhwb3NlZCB0byB1cywgdGhlIHVzZXIuIEEgcHJvcGVyIGltcGxlbWVudGF0aW9uIG9mIHNlZ21lbnQgcm91dGluZyBpcyBpbmNyZWRpYmx5IGltcG9ydGFudCBmb3IgbWFueSBvZiBteSBwcm9mZXNzaW9uYWwgcHJvamVjdHMuIEkgc2hvdWxkIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoaXMgZmVhdHVyZS4KCk5vdywgbGV0IG1lIGRpZyBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGBJUFY2X1NFRzZfTFdUVU5ORUxgIG9wdGlvbiBpcyBhdmFpbGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlLiBJdOKAmXMgcG9zc2libGUgaXQgY29udHJvbHMgYSBzcGVjaWZpYyBtb2R1bGUsIGFuIGVudGlyZSBmZWF0dXJlIHNldCwgb3IgZXZlbiBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBTUnY2IHN0YWNrLiBJ4oCZbGwgYmUgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBwcmVzZW50LCBhbmQgZXhhY3RseSB3aGF0IGl0IGNvbnRyb2xzIHdpdGhpbiB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkgbWlnaHQgYWxyZWFkeSBrbm93IHdoYXQgaXQgZG9lcywgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBub3QgYXNzdW1lLiBEZXBlbmRpbmcgb24gd2hhdCBpdCBjb250cm9scywgSSBtYXkgbmVlZCB0byBtYWtlIHNldmVyYWwgY29uZmlnIGNoYW5nZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSBmb3IgYW55IGFyY2hpdGVjdHVyZS9rZXJuZWwgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gcnVuLiBJdCBjb3VsZCBkaWN0YXRlIGhvdyBJIGRlcGxveSBjZXJ0YWluIHByb2plY3RzLiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIGl0IGlzIGluY2x1ZGVkIGluIGFueSBidWlsZCBJIG1pZ2h0IG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gSVB2NiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIElQdjYgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjg2LiBJIGtub3cgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGFuYWx5c2lzLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIHdpbGwgYmUgcGxlbnR5IG9mIGludGVyZXN0aW5nIHRoaW5ncyB0byB1bnJhdmVsIGluIHRoYXQgc2VjdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg1Olx0XG4gMjg2Olx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxuIDI4NzpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDI4ODpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMjg5Olx0XHRzZWxlY3QgTFdUVU5ORUxcbiAyOTA6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAyOTE6XHRcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xuIDI5MjpcdFx0aGVscFxuIDI5MzpcdFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcbiAyOTQ6XHRcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XG4gMjk1Olx0XHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxuIDI5NjpcdFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cbiAyOTc6XHRcbiAyOTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyOTk6XHRcbiAzMDA6XHRjb25maWcgSVBWNl9TRUc2X0hNQUNcbiAzMDE6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuIDMwMjpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzAzOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gMzA0Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNlZzYgTG9jYWwgVmVyaWZpZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19ORVRgLCBgQ09ORklHX0lQVjZgLCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGFuZCBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGV2ZW4gaWYgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGZ1bmN0aW9uIGlzICpzdGlsbCogY29tcGlsZWQgaWYgd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0IGZlZWxzIG9kZCwgYW5kIEkgdGhpbmsgaXQmIzM5O3MgYmVjYXVzZSBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIGlzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgYXMgbG9uZyBhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AgbW9yZSBjbG9zZWx5IGFuZCBzZWUgaWYgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCBhY3R1YWxseSBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBMZXQgbWUgc2VhcmNoIHRoYXQgZmlsZSBmb3IgdGhlIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmUgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIEJQRiBQcm9ncmFtIFR5cGVzIGFuZCBTdHJ1Y3R1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgaXQmIzM5O3MgaW4gYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0Li4uIFllcCwgdGhlcmUgaXQgaXM6IGBCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCwgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpYC4gR29vZC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGJwZl90eXBlcy5oYCBpcyBzdHJ1Y3R1cmVkIGFuZCB3aGF0IHRoZSBtYWNybyBgQlBGX1BST0dfVFlQRWAgZG9lcyBiZWhpbmQgdGhlIHNjZW5lcy4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0eXBlcyBhcmUgYnVpbHQgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBwYXJ0aWN1bGFybHkgYF9fc2tfYnVmZmAgYW5kIGBza19idWZmYCBpbiB0aGlzIExXVCBjb250ZXh0LiBJJiMzOTtsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHlwZXNcXC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MjY5MT1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfdG9rZW5fZm9wcztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI2OTgtI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI2OTk6I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcdTAwM2VcbmluY2x1ZGUvbGludXgvYnBmLmgtMjcwMC0jdW5kZWYgQlBGX1BST0dfVFlQRVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDk5PWVudW0gYnBmX2F0dGFjaF90eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTE2Ni1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTY3Oi8qIEFkZCBCUEZfTElOS19UWVBFKHR5cGUsIG5hbWUpIGluIGJwZl90eXBlcy5oIHRvIGtlZXAgYnBmX2xpbmtfdHlwZV9zdHJzW11cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTY4LSAqIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYmVsb3cuXG4tLVxua2VybmVsL2JwZi9idGYuYz02MDc3PXN0YXRpYyB1bmlvbiB7XG4tLVxua2VybmVsL2JwZi9idGYuYy02MDgxLVx0a2Vybl9jdHhfdHlwZSBfaWQjI19rZXJuO1xua2VybmVsL2JwZi9idGYuYzo2MDgyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL2J0Zi5jLTYwODMtI3VuZGVmIEJQRl9QUk9HX1RZUEVcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTYwODg9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy02MDkwLVx0X19jdHhfY29udmVydCMjX2lkLFxua2VybmVsL2JwZi9idGYuYzo2MDkxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTItI3VuZGVmIEJQRl9QUk9HX1RZUEVcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTYwOTU9c3RhdGljIHU4IGJwZl9jdHhfY29udmVydF9tYXBbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTctXHRbX2lkXSA9IF9fY3R4X2NvbnZlcnQjI19pZCxcbmtlcm5lbC9icGYvYnRmLmM6NjA5ODojaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHlwZXMuaFx1MDAzZVxua2VybmVsL2JwZi9idGYuYy02MDk5LSN1bmRlZiBCUEZfUFJPR19UWVBFXG4tLVxua2VybmVsL2JwZi9idGYuYz02MTQ2PWJvb2wgYnRmX2lzX3Byb2dfY3R4X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjE5NC1cdFx0Lyogc2hvdWxkIG5vdCBoYXBwZW4gKi9cbmtlcm5lbC9icGYvYnRmLmM6NjE5NTpcdFx0YnBmX2xvZyhsb2csIFwmIzM0O1BsZWFzZSBmaXgga2VybmVsIGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcXG5cJiMzNDspO1xua2VybmVsL2JwZi9idGYuYy02MTk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03NS0jZGVmaW5lIEJQRl9MSU5LX1RZUEUoX2lkLCBfbmFtZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjc2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03Ny0jdW5kZWYgQlBGX1BST0dfVFlQRVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIzNDM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgKiBjb25zdCBicGZfcHJvZ190eXBlc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIzNDctI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMzQ4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMzQ5LSN1bmRlZiBCUEZfUFJPR19UWVBFXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzM5OT1zdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDAwLVx0W0JQRl9MSU5LX1RZUEVfVU5TUEVDXSA9IFwmIzM0O1x1MDAzY2ludmFsaWRcdTAwM2VcJiMzNDssXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDAxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXHUwMDNlXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDAyLX07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQtI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDU6I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcdTAwM2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Ni0jdW5kZWYgQlBGX1BST0dfVFlQRVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDk5PWVudW0gYnBmX2F0dGFjaF90eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTE2Ni1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTY3Oi8qIEFkZCBCUEZfTElOS19UWVBFKHR5cGUsIG5hbWUpIGluIGJwZl90eXBlcy5oIHRvIGtlZXAgYnBmX2xpbmtfdHlwZV9zdHJzW11cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTY4LSAqIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYmVsb3cuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIExXVCBTRUc2TE9DQUwgQlBGIFByb2dyYW0gTG9hZGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSB2ZXJpZmllciBvcGVyYXRpb25zIGZvciB0aGF0IHByb2dyYW0gdHlwZSwgYXMgZGVmaW5lZCBpbiBgYnBmX3ZlcmlmaWVyX29wc2AsIGFyZSBzZXQgdG8gdXNlIGAmYW1wO2x3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYC4gR29vZC4gTWFrZXMgc2Vuc2UuIFdoZW4gdGhlIGBCUEZfUFJPR19MT0FEYCBzeXNjYWxsIGNvbWVzIGluIHdpdGggdGhhdCBwcm9ncmFtIHR5cGUsIGBicGZfY2hlY2tgIGdldHMgY2FsbGVkLCBhbmQgYXMgcGFydCBvZiBpdHMgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGl0JiMzOTtzIGdvaW5nIHRvIGhpdCBgb3BzLSZndDtnZXRfZnVuY19wcm90b2AsIHdoaWNoIGluIHRoaXMgY2FzZSByZXNvbHZlcyB0byBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgdGhlIHByb2dyYW0gY29uZm9ybXMgdG8gdGhlIGV4cGVjdGVkIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcmVzb3VyY2VzIHdpdGhpbiB0aGUga2VybmVsIGNvbnRleHQuCgpUaGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyBob3cgdGhpcyB2ZXJpZmllZCBwcm9ncmFtICphY3R1YWxseSogZ2V0cyBleGVjdXRlZCwgb3IgYXR0YWNoZWQuIEFoLCByaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmZhY2UgY29tZXMgaW4sIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBSVE1fTkVXUk9VVEVgIHdpdGggYW4gYFNFRzZMT0NBTGAgZW5jYXBzdWxhdGlvbiBhbmQgYSBgU0VHNl9MT0NBTF9BQ1RJT05fQlBGYCBhY3Rpb24uIEFuZCwgdG8gdGllIHRoYXQgYWxsIHRvZ2V0aGVyLCB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgdGhlIGZpbmFsIGNyaXRpY2FsIHBpZWNlIHRvIGVuYWJsaW5nIHRoaXMgQlBGIHByb2dyYW0gZm9yIGRhdGEgcGxhbmUgcHJvY2Vzc2luZy4KCk5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIHNlZSBob3cgdGhvc2UgcGFydHMgYXJlIGltcGxlbWVudGVkLCB0aGUgZGV0YWlscyBhcm91bmQgYXR0YWNoaW5nIHRoZSBwcm9ncmFtIHRvIHRoZSBkYXRhIHBhdGgsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRoYXQgY29tZSB3aXRoIHVzaW5nIGEgQlBGIHByb2dyYW0gaW4gdGhhdCBsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTRUc2X0xPQ0FMX0FDVElPTl9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBmb3IgQWN0aW9ucyBpbiBgc2VnNl9sb2NhbC5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYWN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgc2VnNl9sb2NhbC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgbG9jYWwgZnVuY3Rpb24gbWFuaXB1bGF0aW9uIHNob3VsZCByZXNpZGUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGhhbmRsZXJzIGZvciB0aGUgdmFyaW91cyBTUnY2IGJlaGF2aW9ycy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucywgbGlrZWx5IHVzaW5nIGNvbW1vbiBuYW1pbmcgY29udmVudGlvbnMgd2l0aGluIHRoZSBTUnY2IGNvZGViYXNlIOKAkyBtYXliZSBzb21ldGhpbmcgcHJlZml4ZWQgd2l0aCAmIzM0O3NyaF9hY3Rpb25fJiMzNDsgb3Igc2ltaWxhciwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBvZnRlbiBsZXNzIHRoYW4gaW50dWl0aXZlLiBJdCBjb3VsZCBiZSBhIHN3aXRjaCBzdGF0ZW1lbnQsIGEgc2VyaWVzIG9mIGlmL2Vsc2UgYmxvY2tzLCBvciBldmVuIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXksIGlmIHRoZXkgYXJlIG9wdGltaXppbmcgcGVyZm9ybWFuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlc2UgYWN0aW9ucyBhcmUgaW52b2tlZCB3aXRoaW4gdGhlIGRhdGFwYXRoLCBsaWtlbHkgdHJpZ2dlcmVkIGJ5IGluY29taW5nIElQdjYgcGFja2V0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGVhY2ggb2YgdGhlc2UgYWN0aW9ucywgYW5kIGhvdyB0aGUgc3RhdGUgaXMgbWFuaXB1bGF0ZWQgYXMgdGhlIHBhY2tldHMgdHJhdmVyc2UgdGhlIFNSdjYgZG9tYWluLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNi0gKiAgRGF2aWQgTGVicnVuIFx1MDAzY2RhdmlkLmxlYnJ1bkB1Y2xvdXZhaW4uYmVcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3OiAqICBlQlBGIHN1cHBvcnQ6IE1hdGhpZXUgWGhvbm5ldXggXHUwMDNjbS54aG9ubmV1eEBnbWFpbC5jb21cdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04LSAqL1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2MS1cdHN3aXRjaCAocmV0KSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ2MjpcdGNhc2UgQlBGX09LOlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NjM6XHRjYXNlIEJQRl9SRURJUkVDVDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY0LVx0XHRicmVhaztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY1Olx0Y2FzZSBCUEZfRFJPUDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY2LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ3NjpcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzctXHRcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ4Nz1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3OC1cdHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTc5Olx0XHQuYWN0aW9uXHRcdD0gU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0JQRixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTgwOlx0XHQuYXR0cnNcdFx0PSBTRUc2X0ZfQVRUUihTRUc2X0xPQ0FMX0JQRiksXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4MS1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9wb2xpY3lbU0VHNl9MT0NBTF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NzAtXHRbU0VHNl9MT0NBTF9PSUZdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY3MTpcdFtTRUc2X0xPQ0FMX0JQRl1cdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjcyLVx0W1NFRzZfTE9DQUxfQ09VTlRFUlNdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MDA9c3RhdGljIGludCBjbXBfbmxhX29pZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkwOC0jZGVmaW5lIE1BWF9QUk9HX05BTUUgMjU2XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkwOTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnBmX3Byb2dfcG9saWN5W1NFRzZfTE9DQUxfQlBGX1BST0dfTUFYICYjNDM7IDFdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTA6XHRbU0VHNl9MT0NBTF9CUEZfUFJPR11cdCAgID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkxMTpcdFtTRUc2X0xPQ0FMX0JQRl9QUk9HX05BTUVdID0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MTItXHRcdFx0XHQgICAgICAgLmxlbiA9IE1BWF9QUk9HX05BTUUgfSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MTcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTg6XHRzdHJ1Y3QgbmxhdHRyICp0YltTRUc2X0xPQ0FMX0JQRl9QUk9HX01BWCAmIzQzOyAxXTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTE5LVx0c3RydWN0IGJwZl9wcm9nICpwO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTIyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MjM6XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFNFRzZfTE9DQUxfQlBGX1BST0dfTUFYLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MjQ6XHRcdFx0XHRcdCAgYXR0cnNbU0VHNl9MT0NBTF9CUEZdLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MjUtXHRcdFx0XHRcdCAgYnBmX3Byb2dfcG9saWN5LCBOVUxMKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkyOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTI5Olx0aWYgKCF0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSB8fCAhdGJbU0VHNl9MT0NBTF9CUEZfUFJPR19OQU1FXSlcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MzI6XHRzbHd0LVx1MDAzZWJwZi5uYW1lID0gbmxhX21lbWR1cCh0YltTRUc2X0xPQ0FMX0JQRl9QUk9HX05BTUVdLCBHRlBfS0VSTkVMKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMzLVx0aWYgKCFzbHd0LVx1MDAzZWJwZi5uYW1lKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM1LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MzY6XHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTM3Olx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXHRpZiAoSVNfRVJSKHApKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5NDc9c3RhdGljIGludCBwdXRfbmxhX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NTMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk1NDpcdG5lc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBTRUc2X0xPQ0FMX0JQRik7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1NS1cdGlmICghbmVzdClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTU4Olx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgU0VHNl9MT0NBTF9CUEZfUFJPRywgc2x3dC1cdTAwM2VicGYucHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQpKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NTktXHRcdHJldHVybiAtRU1TR1NJWkU7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjEtXHRpZiAoc2x3dC1cdTAwM2VicGYubmFtZSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTYyOlx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgU0VHNl9MT0NBTF9CUEZfUFJPR19OQU1FLCBzbHd0LVx1MDAzZWJwZi5uYW1lKSlcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTYzLVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMjk0PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fcGFyYW0gc2VnNl9hY3Rpb25fcGFyYW1zW1NFRzZfTE9DQUxfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzE5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzMjA6XHRbU0VHNl9MT0NBTF9CUEZdXHQ9IHsgLnBhcnNlID0gcGFyc2VfbmxhX2JwZixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzIxLVx0XHRcdFx0ICAgIC5wdXQgPSBwdXRfbmxhX2JwZixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjYwNT1zdGF0aWMgaW50IHNlZzZfbG9jYWxfZ2V0X2VuY2FwX3NpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2MzItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjYzMzpcdGlmIChhdHRycyBcdTAwMjYgU0VHNl9GX0FUVFIoU0VHNl9MT0NBTF9CUEYpKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2MzQtXHRcdG5sc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSAmIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxNQoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggVGFyZ2V0aW5nIEJQRiBWZXJpZmljYXRpb24gTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhcmdldCBhY3Rpb24gaXMgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CUEZgLCBhbmQgSSYjMzk7bSBob21pbmcgaW4gb24gcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgcmVsYXRlZCB0byBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHByZWNpc2Ugd2l0aCBteSBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AsIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAsIGFuZCBwb3RlbnRpYWxseSBgcGFyc2VfbmxhX2JwZmAgYXMgY2FuZGlkYXRlcy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHRhcmdldCBhcyBsb25nIGFzIGl0JiMzOTtzIG5vdCBhbiBpbmxpbmUgc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBoZWFkZXIuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyB2aXNpYmxlIGluIHRoZSB2bWxpbnV4IHN5bWJvbCB0YWJsZS4gVGhpcyBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gc3RydWN0dXJlIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGEgY29ycmVjdGx5LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBnaXZlbiB0aGlzIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIHRoaXMgcGF0Y2ggYWx0ZXJzIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIHRvIHByZXZlbnQgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHVzYWdlIGZvciBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtcy4gVGhpcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gYW5kIGxpZ2h0d2VpZ2h0IHR1bm5lbCBoYW5kbGluZy4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYW5kIGBwYXJzZV9ubGFfYnBmYC4gQW5kIGZpbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOiBgQlBGX1NZU0NBTExgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgSVBWNmAsIGFuZCBgTkVUYC4gSSYjMzk7dmUgbWFkZSBzdXJlIHRvIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4LgoKQWxyaWdodCwgSSYjMzk7dmUgY29uZmlybWVkIGFsbCB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgaW52b2NhdGlvbi4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9icGYmIzM0OywKICAgICYjMzQ7cGFyc2VfbmxhX2JwZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGhlbHBlciBmdW5jdGlvbiByZXNvbHV0aW9uIGZvciBzZWc2bG9jYWwgcHJvZ3JhbXMgKGx3dF9zZWc2bG9jYWxfZnVuY19wcm90bykgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gZGlzYWxsb3cgYnBmX3NrYl9wdWxsX2RhdGEuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGFuZCBJUHY2IFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2x3dF9zZWc2bG9jYWxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtwYXJzZV9ubGFfYnBmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaGVscGVyIGZ1bmN0aW9uIHJlc29sdXRpb24gZm9yIHNlZzZsb2NhbCBwcm9ncmFtcyAobHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBkaXNhbGxvdyBicGZfc2tiX3B1bGxfZGF0YS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIEJQRiB2ZXJpZmljYXRpb24gYW5kIElQdjYgU1J2NiBsaWdodHdlaWdodCB0dW5uZWwgZXhlY3V0aW9uIHBhdGhzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQyMTk0MzQzNzY4MzJmNDgyZTcyNmI2OTJlNzcwNjQxMGE2OWI5NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTA6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDg1MTMxNjdhODU4YTguLjJhODRmOWQwMTEzMTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC05MDQ0LDYgJiM0Mzs5MDQ0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqCiBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiB7CiAJc3dpdGNoIChmdW5jX2lkKSB7CiYjNDM7CWNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YToKJiM0MzsJCXJldHVybiBOVUxMOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpCiAJY2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczoKIAkJcmV0dXJuICZhbXA7YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLCBhbmQgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgY2hhbmdlcyB3aXRoaW4gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGEgYGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpgIHRoYXQgcmV0dXJucyBgTlVMTGAuIE5vdywgd2h5IHdvdWxkIHRoZXkgZG8gdGhhdD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLgoKVGhlIGZ1bmN0aW9uIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGl0c2VsZiBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgY2xlYXJseSBhIGRpc3BhdGNoZXIgZm9yIEJQRiBmdW5jdGlvbiBwcm90b3R5cGVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBhbmQgbG9jYWwgZnVuY3Rpb25zLiBUaGUgcHJlc2VuY2Ugb2YgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIGFuIGludGVyYWN0aW9uLCBvciBpbnRlbmRlZCBpbnRlcmFjdGlvbiwgd2l0aCBwYWNrZXQgZGF0YSBtYW5pcHVsYXRpb24sIHBvc3NpYmx5IGZvciBMV1QgKExpbnV4IFdpcmUgVHJhbnNwb3J0KSBvciBTUnY2IHByb2Nlc3NpbmcuCgpUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGJlaW5nICpkaXNhYmxlZCogaGVyZSBieSByZXR1cm5pbmcgYE5VTExgIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgY29uc2Npb3VzIGRlY2lzaW9uIHdhcyBtYWRlIHRvICpub3QqIGFsbG93IGBza2JfcHVsbF9kYXRhYCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGlzIGEgc2VjdXJpdHkgbWVhc3VyZT8gSXMgaXQgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIGlzIGl0IGEgY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIGhvdyBTUnY2IG9yIExXVCBpbnRlcmFjdHMgd2l0aCB0aGUgc2tiIGRhdGEgc3RydWN0dXJlPyBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhcm91bmQgbGluZSA5MDQ0IGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBhbmQgd2hhdCB0aGlzIEJQRiBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBkbyB3aXRoaW4gdGhpcyBzZWdtZW50IG9mIHRoZSBjb2RlLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgaXMgdmFsaWQgYW5kIGFwcHJvcHJpYXRlLCBvciBpZiBpdCBoYXMgc29tZSB1bmRlc2lyYWJsZSBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkwMzA6XHRcdGNhc2UgQlBGX0ZVTkNfbDNfY3N1bV9yZXBsYWNlOlxuOTAzMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2wzX2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzI6XHRcdGNhc2UgQlBGX0ZVTkNfbDRfY3N1bV9yZXBsYWNlOlxuOTAzMzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2w0X2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2V0X2hhc2hfaW52YWxpZDpcbjkwMzU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9zZXRfaGFzaF9pbnZhbGlkX3Byb3RvO1xuOTAzNjpcdFx0Y2FzZSBCUEZfRlVOQ19sd3RfcHVzaF9lbmNhcDpcbjkwMzc6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvO1xuOTAzODpcdFx0ZGVmYXVsdDpcbjkwMzk6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjkwNDA6XHRcdH1cbjkwNDE6XHR9XG45MDQyOlx0XG45MDQzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG45MDQ0Olx0bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuOTA0NTpcdHtcbjkwNDY6XHRcdHN3aXRjaCAoZnVuY19pZCkge1xuOTA0NzpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuOTA0ODpcdFx0XHRyZXR1cm4gTlVMTDtcbjkwNDk6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbjkwNTA6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XG45MDUxOlx0XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNfcHJvdG87XG45MDUyOlx0XHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcbjkwNTM6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG87XG45MDU0Olx0XHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FkanVzdF9zcmg6XG45MDU1Olx0XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90bztcbjkwNTY6XHQjZW5kaWZcbjkwNTc6XHRcdGRlZmF1bHQ6XG45MDU4Olx0XHRcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG45MDU5Olx0XHR9XG45MDYwOlx0fVxuOTA2MTpcdFxuOTA2MjpcdHN0YXRpYyBib29sIGJwZl9za2JfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuOTA2MzpcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbjkwNjQ6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbjkwNjU6XHR7XG45MDY2Olx0XHRjb25zdCBpbnQgc2l6ZV9kZWZhdWx0ID0gc2l6ZW9mKF9fdTMyKTtcbjkwNjc6XHRcbjkwNjg6XHRcdGlmIChvZmYgXHUwMDNjIDAgfHwgb2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBfX3NrX2J1ZmYpKVxuOTA2OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG45MDcwOlx0XG45MDcxOlx0XHQvKiBUaGUgdmVyaWZpZXIgZ3VhcmFudGVlcyB0aGF0IHNpemUgXHUwMDNlIDAuICovXG45MDcyOlx0XHRpZiAob2ZmICUgc2l6ZSAhPSAwKVxuOTA3MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG45MDc0Olx0XG45MDc1Olx0XHRzd2l0Y2ggKG9mZikge1xuOTA3NjpcdFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IF9fc2tfYnVmZiwgY2JbMF0sIGNiWzRdKTpcbjkwNzc6XHRcdFx0aWYgKG9mZiAmIzQzOyBzaXplIFx1MDAzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgX19za19idWZmLCBjYls0XSkpXG45MDc4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuOTA3OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGx3dF9vdXRfZnVuY19wcm90b2AgdGhpbmcuIFRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIG91dHB1dCBmdW5jdGlvbiBwcm90b3R5cGUsIGFuZCBnaXZlbiB0aGUgJiMzNDtsd3QmIzM0OyBwcmVmaXgsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggbGlnaHR3ZWlnaHQgdGhyZWFkcyBvciBjb25jdXJyZW5jeS4gT2theSwgd2hhdCYjMzk7cyBpbnNpZGUgdGhpcyB0aGluZz8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNvbnRlbnRzIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSXMgaXQgYSB0eXBlIGRlZmluaXRpb24sIGEgc3RydWN0LCBhbiBhYnN0cmFjdCBjbGFzcz8gSXMgaXQgYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uPyBLbm93aW5nICpleGFjdGx5KiB3aGF0IHRoaXMgaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgZm91bmRhdGlvbiBmb3Igd2hhdGV2ZXIgZm9sbG93cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHRoaW5nIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5MDAwOlx0XHRcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG45MDAxOlx0XHR9XG45MDAyOlx0fVxuOTAwMzpcdFxuOTAwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuOTAwNTpcdGx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG45MDA2Olx0e1xuOTAwNzpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG45MDA4Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX2tleTpcbjkwMDk6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZ2V0X3R1bm5lbF9rZXlfcHJvdG87XG45MDEwOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHVubmVsX2tleTpcbjkwMTE6XHRcdFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XG45MDEyOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX29wdDpcbjkwMTM6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZ2V0X3R1bm5lbF9vcHRfcHJvdG87XG45MDE0Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHVubmVsX29wdDpcbjkwMTU6XHRcdFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XG45MDE2Olx0XHRjYXNlIEJQRl9GVU5DX3JlZGlyZWN0OlxuOTAxNzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xuOTAxODpcdFx0Y2FzZSBCUEZfRlVOQ19jbG9uZV9yZWRpcmVjdDpcbjkwMTk6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9jbG9uZV9yZWRpcmVjdF9wcm90bztcbjkwMjA6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxuOTAyMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcbjkwMjI6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuOTAyMzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9jaGFuZ2VfaGVhZF9wcm90bztcbjkwMjQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX3N0b3JlX2J5dGVzOlxuOTAyNTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9zdG9yZV9ieXRlc19wcm90bztcbjkwMjY6XHRcdGNhc2UgQlBGX0ZVTkNfY3N1bV91cGRhdGU6XG45MDI3Olx0XHRcdHJldHVybiBcdTAwMjZicGZfY3N1bV91cGRhdGVfcHJvdG87XG45MDI4Olx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fbGV2ZWw6XG45MDI5Olx0XHRcdHJldHVybiBcdTAwMjZicGZfY3N1bV9sZXZlbF9wcm90bztcbjkwMzA6XHRcdGNhc2UgQlBGX0ZVTkNfbDNfY3N1bV9yZXBsYWNlOlxuOTAzMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2wzX2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzI6XHRcdGNhc2UgQlBGX0ZVTkNfbDRfY3N1bV9yZXBsYWNlOlxuOTAzMzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2w0X2NzdW1fcmVwbGFjZV9wcm90bztcbjkwMzQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2V0X2hhc2hfaW52YWxpZDpcbjkwMzU6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9zZXRfaGFzaF9pbnZhbGlkX3Byb3RvO1xuOTAzNjpcdFx0Y2FzZSBCUEZfRlVOQ19sd3RfcHVzaF9lbmNhcDpcbjkwMzc6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvO1xuOTAzODpcdFx0ZGVmYXVsdDpcbjkwMzk6XHRcdFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipOYXZpZ2F0aW5nIHRoZSBMV1QgTGFuZHNjYXBlKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLi4uIGxldCYjMzk7cyBwaW5wb2ludCB0aGF0IGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGRlY2xhcmF0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBpdCBhcm91bmQgbGluZSA4OTgwIGluIHRoZSBwYXN0LCBvciBhdCBsZWFzdCBpbiB0aGF0IHZpY2luaXR5LiBJdCYjMzk7cyBjcnVjaWFsIGJlY2F1c2UgaXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gaG93IHRoZSBMV1QgKGxpZ2h0d2VpZ2h0IHRocmVhZCkgb3V0cHV0IGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsuIEdldHRpbmcgYSB2aXN1YWwgb24gaXQgd2lsbCBoZWxwIG1lIGtlZXAgbXkgbWVudGFsIG1vZGVsIHN0cmFpZ2h0LiBUaGUgcHJvdG90eXBlIGl0c2VsZiBpcyBwcm9iYWJseSBub3QgdGhhdCBjb21wbGV4LCBidXQgaXQmIzM5O3Mgd2hhdCBkZXBlbmRzIG9uIHRoZSBwcm90b3R5cGUgdGhhdCBob2xkcyB0aGUgaW50ZXJlc3RpbmcgcGFydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg5NzA6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2xvYWRfYnl0ZXM6XG44OTcxOlx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XG44OTcyOlx0XHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XG44OTczOlx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX3B1bGxfZGF0YV9wcm90bztcbjg5NzQ6XHRcdGNhc2UgQlBGX0ZVTkNfY3N1bV9kaWZmOlxuODk3NTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2NzdW1fZGlmZl9wcm90bztcbjg5NzY6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X2Nncm91cF9jbGFzc2lkOlxuODk3NzpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9jZ3JvdXBfY2xhc3NpZF9wcm90bztcbjg5Nzg6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxuODk3OTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9yb3V0ZV9yZWFsbV9wcm90bztcbjg5ODA6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X2hhc2hfcmVjYWxjOlxuODk4MTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9oYXNoX3JlY2FsY19wcm90bztcbjg5ODI6XHRcdGNhc2UgQlBGX0ZVTkNfcGVyZl9ldmVudF9vdXRwdXQ6XG44OTgzOlx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbjg5ODQ6XHRcdGNhc2UgQlBGX0ZVTkNfZ2V0X3NtcF9wcm9jZXNzb3JfaWQ6XG44OTg1Olx0XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XG44OTg2Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl91bmRlcl9jZ3JvdXA6XG44OTg3Olx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX3VuZGVyX2Nncm91cF9wcm90bztcbjg5ODg6XHRcdGRlZmF1bHQ6XG44OTg5Olx0XHRcdHJldHVybiBicGZfc2tfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuODk5MDpcdFx0fVxuODk5MTpcdH1cbjg5OTI6XHRcbjg5OTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjg5OTQ6XHRsd3RfaW5fZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjg5OTU6XHR7XG44OTk2Olx0XHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbjg5OTc6XHRcdGNhc2UgQlBGX0ZVTkNfbHd0X3B1c2hfZW5jYXA6XG44OTk4Olx0XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X2luX3B1c2hfZW5jYXBfcHJvdG87XG44OTk5Olx0XHRkZWZhdWx0OlxuOTAwMDpcdFx0XHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuOTAwMTpcdFx0fVxuOTAwMjpcdH1cbjkwMDM6XHRcbjkwMDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byBDaGFuZ2UqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBub3RpY2luZyBhIGNoYW5nZSBpbiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gSXQgKnVzZWQqIHRvIGdyYWNlZnVsbHkgaGFuZGxlIHRoaW5ncywgZmFsbGluZyBiYWNrIHRvIGBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZylgLCB3aGljaCwgaW1wb3J0YW50bHksIG1lYW50IGl0IHdvdWxkIHN1cHBvcnQgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHRocm91Z2ggdGhlIGBicGZfc2tiX3B1bGxfZGF0YV9wcm90b2AgZnVuY3Rpb24gcG9pbnRlci4gQnV0IG5vdywgaXQmIzM5O3MgZXhwbGljaXRseSByZXR1cm5pbmcgYE5VTExgIHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYC4gVGhhdCYjMzk7cyBhIGRpcmVjdCwgaW50ZW50aW9uYWwgZGlmZmVyZW5jZS4KClRoZSBxdWVzdGlvbiwgbmF0dXJhbGx5LCBpcyAqd2h5Kj8gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBtb2RpZmljYXRpb247IHRoZXJlJiMzOTtzIGdvdCB0byBiZSBhIHNwZWNpZmljIHJlYXNvbiBmb3IgdGhpcyBleHBsaWNpdCBgTlVMTGAgcmV0dXJuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgYXJlIHRvIGRpdmUgaW50byB0aGUgY29tbWl0IGhpc3RvcnkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgY29tbWl0cyB0aGF0IHRvdWNoIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGl0c2VsZiwgb3IgbW9yZSBicm9hZGx5LCBjb21taXRzIHRoYXQgbWlnaHQgYmUgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBzZWc2bG9jYWwgQlBGIGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWxzbyBsb29rIGZvciBhbnkgcmVmZXJlbmNlcyBvciBkaXNjdXNzaW9ucyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCBpbnRlcmFjdHMgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW92ZSBpcyBrZXkuIFdhcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlPyBJIG5lZWQgdGhlIGRlZXBlciBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTkwNDM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ0Omx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDUte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNTcxPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE1NzI6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cdC5pc192YWxpZF9hY2Nlc3NcdD0gbHd0X2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipFeGFtaW5pbmcgdGhlIFJlc3RyaWN0aW9uIG9uIGBicGZfc2tiX3B1bGxfZGF0YWAgd2l0aGluIGBzZWc2bG9jYWxgKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHdoeSBgYnBmX3NrYl9wdWxsX2RhdGFgIGlzbiYjMzk7dCBhbGxvd2VkLCBvciBwZXJoYXBzIHdoYXQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGlzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYHNlZzZsb2NhbGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgcmVzdHJpY3Rpb24uIElzIGl0IGEgc2VjdXJpdHkgY29uY2Vybj8gQSBwZXJmb3JtYW5jZSBpc3N1ZT8gT3IgcGVyaGFwcyBhIGZ1bmRhbWVudGFsIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBvcGVyYXRpb25zIHdpdGhpbiBgc2VnNmxvY2FsYCBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgPyBNeSBleHBlcnRpc2UgbWFrZXMgbWUgcXVlc3Rpb24gaWYgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgc2tiIHN0cnVjdCBvciBvdGhlciBzdHJ1Y3R1cmVzIGluIHRoZSBkYXRhIHBhdGguCgpJJiMzOTttIHRoaW5raW5nIG15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhlIGRpc2FsbG93YW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIG1lbnRpb25lZC4gSSBhbSBiZXR0aW5nIHRoYXQgaXQgaXMgbm90IHVzZWQgaW4gdGhlIGtlcm5lbCBzcGFjZS4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBmb2N1cyBhbmQgZ28gZGlyZWN0bHkgdG8gbG9va2luZyBhdCB0aGUgY29yZSBgc2VnNl9sb2NhbC5jYCBzb3VyY2UgY29kZSwgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgcmVsYXRlZCB0byBgYnBmX2x3dF9zZWc2YC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgYHNlZzZsb2NhbGAgaW50ZXJhY3RzIHdpdGggQlBGIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSB3aGVyZSBvciB3aHkgYGJwZl9za2JfcHVsbF9kYXRhYCBpcyBiZWluZyBkZWVtZWQgaW5hcHByb3ByaWF0ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIHdpdGhpbiB0aGUgY29kZSBjb21tZW50cywgYW55IGNoZWNrcyBvciBjb25kaXRpb25zLCBvciBhbnkgZGVzaWduIGRlY2lzaW9ucyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gdGhpcyByZXN0cmljdGlvbi4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHdheSBgc2VnNmxvY2FsYCBoYW5kbGVzIHBhY2tldCBwcm9jZXNzaW5nIG1pZ2h0IGhhdmUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZSBhIGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbiBsaWtlIGBicGZfc2tiX3B1bGxfZGF0YWAgdW5zdWl0YWJsZSBmb3IgdGhlIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q9MTg9ZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBmb290bm90ZXMuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MztcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxMzY6fCBgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGBgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBsd3Rfc2VnNmxvY2FsYGAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0Mztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI2LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTA3OT1zdGF0aWMgaW50IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTExNC1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcbmtlcm5lbC9icGYvYnRmLmM6OTExNTpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi9idGYuYy05MTE2LVx0XHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfTFdUO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI4NDM9c3RhdGljIGJvb2wgaXNfbmV0X2FkbWluX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTEtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODUyOlx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUzLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDgxOT1zdGF0aWMgYm9vbCBtYXlfYWNjZXNzX2RpcmVjdF9wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODI4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDgyOTpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MzAtXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODc2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI4ODctXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4ODpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4ODktXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xOTE1PXN0YXRpYyBpbnQgcGFyc2VfbmxhX2JwZihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzNi1cdGZkID0gbmxhX2dldF91MzIodGJbU0VHNl9MT0NBTF9CUEZfUFJPR10pO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5Mzc6XHRwID0gYnBmX3Byb2dfZ2V0X3R5cGUoZmQsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzOC1cdGlmIChJU19FUlIocCkpIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTIwMj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb2dfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjEtXHRbQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSXVx0PSBcJiMzNDtjZ3JvdXBfc29ja19hZGRyXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XHRbQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMXVx0XHQ9IFwmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cdFtCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTJdXHRcdD0gXCYjMzQ7bGlyY19tb2RlMlwmIzM0Oyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTcxNTc9c3RhdGljIHN0cnVjdCB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcwLVx0eyBCUEZfUFJPR19UWVBFX0xXVF9PVVQsICAgICAgICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzE3MTpcdHsgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzItXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsICAgICAgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTEwMz1zdGF0aWMgaW50IHByb2JlX3Byb2dfbG9hZChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE3OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjE3OTpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTgwLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYz0yMjU9dm9pZCB0ZXN0X3ZlcmlmX3NjYWxlX3NlZzZfbG9vcCgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjYte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6MjI3Olx0c2NhbGVfdGVzdChcJiMzNDt0ZXN0X3NlZzZfbG9vcC5icGYub1wmIzM0OywgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBmYWxzZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjgtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYz0yMD1zdGF0aWMgc3RydWN0IHNlY19uYW1lX3Rlc3QgdGVzdHNbXSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDItXHR7XCYjMzQ7bHd0X3htaXRcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAwfSwgey1FSU5WQUwsIDB9IH0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6NDM6XHR7XCYjMzQ7bHd0X3NlZzZsb2NhbFwmIzM0OywgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQ0LVx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAzCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDUxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNhZmV0eSBJbXBsaWNhdGlvbnMgb2YgYSBCUEYgVmVyaWZpZXIgUmVzdHJpY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGJwZl9za2JfcHVsbF9kYXRhYCB1c2VzIGBza2JfcHVsbF9kYXRhKHNrYiwgbGVuKWAsIGFuZCBpdCYjMzk7cyBkaXNhYmxlZCBmb3IgYGx3dF9zZWc2bG9jYWxgLiBUaGUgcXVlc3Rpb24gaXMgKndoeSouIE15IGh1bmNoLCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0aGF0IGl0JiMzOTtzIGJlY2F1c2UgZWl0aGVyIHRoZSBwb2ludGVyIGludmFsaWRhdGlvbiBpcyBhbiBpc3N1ZSBpbiBgbHd0X3NlZzZsb2NhbGAsIHRoYXQgY29udGV4dCBkb2VzbiYjMzk7dCBzdXBwb3J0IGl0LCBvciB0aGF0IHRoZXJlJiMzOTtzIHNwZWNpZmljIFNSSCBoYW5kbGluZyB0aGF0IHNob3VsZG4mIzM5O3QgcmVhbGxvY2F0ZSB0aGUgU0tCIGhlYWQuIFRoZSAqd2h5KiBpc24mIzM5O3QgdGhlIGtleSBmb2N1cyBoZXJlLCB0aG91Z2guCgpXaGF0JiMzOTtzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvaW5nKj8gSXQmIzM5O3MgZWZmZWN0aXZlbHkgaGFyZGVuaW5nIHRoZSB2ZXJpZmllci4gSW5zdGVhZCBvZiBhbGxvd2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgdG8gJiMzNDtmYWxsIHRocm91Z2gmIzM0OyB0byB0aGUgZ2VuZXJpYyBgbHd0X291dF9mdW5jX3Byb3RvYCwgaXQgKmV4cGxpY2l0bHkqIHJlamVjdHMgaXQgaW4gYGx3dF9zZWc2bG9jYWxgIHByb2dyYW1zLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogcmV0dXJuIGBOVUxMYCBmcm9tIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIHdoZW4gdGhpcyBmdW5jdGlvbiBJRCBpcyBlbmNvdW50ZXJlZC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgb3IgY3JlYXRlZCBmb3IgdXNlcnNwYWNlLiBUaGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyByZWxpYW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgbm90IGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IHplcm9pbmcuIEFuZCwgY3JpdGljYWxseSwgdGhpcyBpc24mIzM5O3QgYWx0ZXJpbmcgYm91bmRzIGNoZWNrcyBvciBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBtaWdodCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgcmVhZC4gSXQmIzM5O3Mgc3RyaWN0bHkgYSAqcmVzdHJpY3Rpb24qIGVuZm9yY2VkIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBwcmV2ZW50aW5nIHRoZSBoZWxwZXIgZnJvbSBiZWluZyAqbG9hZGVkKiBmb3IgdGhhdCBwcm9ncmFtIHR5cGUuIFJlYWxseSwgaXQmIzM5O3MganVzdCBhZGRpbmcgdHdvIGxpbmVzIG9mIGNvZGUgd2l0aGluIHRoZSB2ZXJpZmllciB0byBkZW55IGEgY2VydGFpbiBvcGVyYXRpb24uCgpUaGlzIGlzIGEgdmVyaWZpZXIgKmhlbHBlciByZXN0cmljdGlvbiogdGhhdCBwcmV2ZW50cyBCUEYgcHJvZ3JhbXMgb2YgdHlwZSBMV1RfU0VHNkxPQ0FMIGZyb20gaW5hcHByb3ByaWF0ZWx5IGNhbGxpbmcgYGJwZl9za2JfcHVsbF9kYXRhYC4gSXQmIzM5O3MgYSBzYWZldHkgbWVhc3VyZSwgZXNzZW50aWFsbHkuIFRoZXJlIGlzICp6ZXJvKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byB0aGlzIGNoYW5nZS4gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZW1haW5pbmcgcG90ZW50aWFsIGlzc3VlcywgYnV0IHJlYWxseSwgdGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbiAqYmVmb3JlKiB0aGV5IGNhbiBvY2N1ci4gVGh1cywgaXQmIzM5O3Mgc2FmZSB0byBzYXkgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIGRpZmYgYW5kIG90aGVyIGFzcGVjdHMuIE5vIG90aGVyIGFyZWEgaXMgdG91Y2hlZC4gSXQmIzM5O3MganVzdCB0aG9zZSB0d28gbGluZXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZSBqdXN0aWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZGlzYWxsb3dzIHRoZSBCUEYgaGVscGVyIGBicGZfc2tiX3B1bGxfZGF0YWAgZm9yIEJQRiBwcm9ncmFtcyBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIGJ5IHJldHVybmluZyBOVUxMIGZyb20gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFRoaXMgaXMgYSB2ZXJpZmllci1sZXZlbCBoZWxwZXIgcmVzdHJpY3Rpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTA6NDYuMDgzNzA5NTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjQ3NTE3ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dF9zZWc2bG9jYWxfZnVuY19wcm90b1wiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInBhcnNlX25sYV9icGZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGRpc2FsbG93cyB0aGUgQlBGIGhlbHBlciBgYnBmX3NrYl9wdWxsX2RhdGFgIGZvciBCUEYgcHJvZ3JhbXMgb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBieSByZXR1cm5pbmcgTlVMTCBmcm9tIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLiBUaGlzIGlzIGEgdmVyaWZpZXItbGV2ZWwgaGVscGVyIHJlc3RyaWN0aW9uIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTA6NDYuMDgzNzE1MjUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg5MzcyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDIxOTQzNDM3NjgzMmY0ODJlNzI2YjY5MmU3NzA2NDEwYTY5Yjk0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTA6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDg1MTMxNjdhODU4YTguLjJhODRmOWQwMTEzMTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC05MDQ0LDYgKzkwNDQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG4gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiB7XFxuIFxcdHN3aXRjaCAoZnVuY19pZCkge1xcbitcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG4gXFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNfcHJvdG87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUwOjQ2LjYzMzMyODcyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI2NzQ1MjY3NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dF9zZWc2bG9jYWxfZnVuY19wcm90b1wiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInBhcnNlX25sYV9icGZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGhlbHBlciBmdW5jdGlvbiByZXNvbHV0aW9uIGZvciBzZWc2bG9jYWwgcHJvZ3JhbXMgKGx3dF9zZWc2bG9jYWxfZnVuY19wcm90bykgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gZGlzYWxsb3cgYnBmX3NrYl9wdWxsX2RhdGEuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBCUEYgdmVyaWZpY2F0aW9uIGFuZCBJUHY2IFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkMjE5NDM0Mzc2ODMyZjQ4MmU3MjZiNjkyZTc3MDY0MTBhNjliOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjUwOjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uMmE4NGY5ZDAxMTMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTkwNDQsNiArOTA0NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuIGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbitcdGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpcbitcdFx0cmV0dXJuIE5VTEw7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG4gXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuIFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTA6NDYuNjMzMzMwOTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc3OTk1MDg3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3l6a2FsbGVyIEZ1enppbmcgVHJpYWdlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHJlbGF0ZWQgdG8gZnV6emluZyB0cmlhZ2Ugd2l0aCBzeXprYWxsZXIuIFRoZSByZXF1ZXN0IGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGEgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2ssIG5vdGhpbmcgYWxhcm1pbmcgc28gZmFyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZy4gSXQgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIGRpZmYgc2hvd3MgYW4gYWRkaXRpb24gd2l0aGluIHRoZSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIG5ldyBjYXNlIHN0YXRlbWVudCBmb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHRoYXQgcmV0dXJucyBgTlVMTGAuXG5cbkdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgcmV0dXJuaW5nIGBOVUxMYCBoZXJlLiBNeSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGludmVzdGlnYXRlIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIGxpbmUgOTA0NCB0byBnZXQgc29tZSBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBhIGByZWFkLWZpbGVgIGNvbW1hbmQgb3IgbWF5YmUgYGdyZXBwZXJgIHRvIHNlZSB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IHNlY3Rpb24gb2YgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBkb2VzLCBob3cgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIGlzIHVzZWQgaW4gdGhpcyBjb250ZXh0LCBhbmQgd2h5IHJldHVybmluZyBgTlVMTGAgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gbWlnaHQgYmUgbmVjZXNzYXJ5LiBUaGVyZSdzIGEgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKWAgYmxvY2sgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBiZW5pZ24gc2VjdXJpdHkgbWVhc3VyZSwgYSBidWcgZml4LCBvciBzb21ldGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgbmV0d29yayBwZXJmb3JtYW5jZSBvciBzZWN1cml0eS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzeXprYWxsZXIgY29udGV4dCBhcyB3ZWxsIC0gYXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIHN5emthbGxlciByZXBvcnRzIG9yIGNyYXNoZXMgdGhhdCBsZWQgdG8gdGhpcyBjaGFuZ2U/IEknbGwgcHJvYmFibHkgY2hlY2sgdGhlIHN5emthbGxlciBpc3N1ZSB0cmFja2VyIGFzIHdlbGwsIGZvciBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTowNC40MzI4NDI5MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTAzNTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zZXRfaGFzaF9pbnZhbGlkX3Byb3RvO1xcbjkwMzY6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sd3RfcHVzaF9lbmNhcDpcXG45MDM3OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG87XFxuOTAzODpcXHRcXHRkZWZhdWx0OlxcbjkwMzk6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDQwOlxcdFxcdH1cXG45MDQxOlxcdH1cXG45MDQyOlxcdFxcbjkwNDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuOTA0NDpcXHRsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuOTA0NTpcXHR7XFxuOTA0NjpcXHRcXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcXG45MDQ3OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpcXG45MDQ4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjkwNDk6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxuOTA1MDpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxcbjkwNTE6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNfcHJvdG87XFxuOTA1MjpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcXG45MDUzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90bztcXG45MDU0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcXG45MDU1OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG87XFxuOTA1NjpcXHQjZW5kaWZcXG45MDU3OlxcdFxcdGRlZmF1bHQ6XFxuOTA1ODpcXHRcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjkwNTk6XFx0XFx0fVxcbjkwNjA6XFx0fVxcbjkwNjE6XFx0XFxuOTA2MjpcXHRzdGF0aWMgYm9vbCBicGZfc2tiX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG45MDYzOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuOTA2NDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9pbnNuX2FjY2Vzc19hdXggKmluZm8pXFxuOTA2NTpcXHR7XFxuOTA2NjpcXHRcXHRjb25zdCBpbnQgc2l6ZV9kZWZhdWx0ID0gc2l6ZW9mKF9fdTMyKTtcXG45MDY3OlxcdFxcbjkwNjg6XFx0XFx0aWYgKG9mZiBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgX19za19idWZmKSlcXG45MDY5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG45MDcwOlxcdFxcbjkwNzE6XFx0XFx0LyogVGhlIHZlcmlmaWVyIGd1YXJhbnRlZXMgdGhhdCBzaXplIFxcdTAwM2UgMC4gKi9cXG45MDcyOlxcdFxcdGlmIChvZmYgJSBzaXplICE9IDApXFxuOTA3MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuOTA3NDpcXHRcXG45MDc1OlxcdFxcdHN3aXRjaCAob2ZmKSB7XFxuOTA3NjpcXHRcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgX19za19idWZmLCBjYlswXSwgY2JbNF0pOlxcbjkwNzc6XFx0XFx0XFx0aWYgKG9mZiArIHNpemUgXFx1MDAzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgX19za19idWZmLCBjYls0XSkpXFxuOTA3ODpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuOTA3OTpcXHRcXHRcXHRicmVhaztcXG45MDgwOlxcdFxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgX19za19idWZmLCBkYXRhKTpcXG45MDgxOlxcdFxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgX19za19idWZmLCBkYXRhX21ldGEpOlxcbjkwODI6XFx0XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBfX3NrX2J1ZmYsIGRhdGFfZW5kKTpcXG45MDgzOlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2Vpc19sZHN4IHx8IHNpemUgIT0gc2l6ZV9kZWZhdWx0KVxcbjkwODQ6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTowNC40MzMyMjI3ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTU4MzI5MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgbGluZXMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVtOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExXVCBcdTAwMjYgQlBGIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLCB3aGVyZSBhcmUgd2UgY2FsbGluZyAqdGhhdCogZnJvbT8gR290dGEgdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXCIgSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGl0J3MgYmVpbmcgKmludm9rZWQqLCBiZWNhdXNlIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGtub3cgdGhlICd3aG8nLCAnd2hhdCcgYW5kICd3aHknLlxuXG5OZXh0IHVwLCBgbHd0X291dF9mdW5jX3Byb3RvYC4gQW5kIGluIHRoZXJlPyBBaCwgbG9va3MgbGlrZSB3ZSdyZSB1c2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZSBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgQlBGIGhlbHBlciBpcyBkb2luZywgZXhhY3RseSwgYXMgdGhpcyBjb2RlIGlzIHJlbGV2YW50IHRvIG1hbmlwdWxhdGluZyBTS0IgZGF0YSB3aXRoaW4gYW4gZUJQRiBjb250ZXh0LiBEZXBlbmRpbmcgb24gd2hhdCBgbHd0X291dF9mdW5jX3Byb3RvYCBkb2VzICp3aXRoKiB0aGF0IGhlbHBlciBpcyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBkYXRhIHByb2Nlc3NpbmcgaW52b2x2ZWQuIEl0IG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGUgaW1wbGljYXRpb24gb2YgdGhlIHVzYWdlOiBob3cgYXJlIHdlIHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBTS0I/IEFyZSB3ZSBkb2luZyBpdCBlZmZpY2llbnRseT8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEknbGwgcHJvYmFibHkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHVzYWdlIGlzIHNhZmUgYW5kIHRoYXQgdGhlIHB1bGxlZCBkYXRhIGlzIGhhbmRsZWQgY29ycmVjdGx5IGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTE6MDYuOTkxNTU0NjYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY4OTYzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTkwNDM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxubmV0L2NvcmUvZmlsdGVyLmM6OTA0NDpsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA0NS17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTU3MT1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MjpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTowOC43Mzg0NTYzMzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxMTQ0NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIGFuZCBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGx3dF9vdXRfZnVuY19wcm90b2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRleHQuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHdhcyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgaW5zcGVjdGlvbiwgYnV0IEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIHBhcnRpY3VsYXIgdXNlIGNhc2UgaGVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqd2h5KiB0aGF0IHNwZWNpZmljIEJQRiBoZWxwZXIgd2FzIGNob3NlbiDigJMgd2hhdCBkYXRhIHdhcyBpdCBwdWxsaW5nLCBmcm9tIHdoZXJlLCBhbmQgZm9yIHdoYXQgcHVycG9zZSB3aXRoaW4gdGhlIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIHdvcmtmbG93PyBJJ20gZ3Vlc3NpbmcgaXQncyBzb21lIGtpbmQgb2Ygb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGRlYWxpbmcgd2l0aCBwYWNrZXQgaGVhZGVycyBvciBwYXlsb2FkcywgYnV0IHRoZSBzcGVjaWZpYyBsb2dpYyBuZWVkcyB1bnBhY2tpbmcuIEdvdHRhIHRyYWNlIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MToxMC45ODk2MDQwNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0ODQ5MzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsd3Rfb3V0X2Z1bmNfcHJvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9ODk2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5uZXQvY29yZS9maWx0ZXIuYzo4OTY3Omx3dF9vdXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9maWx0ZXIuYy04OTY4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg5OTQ9bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04OTk5LVxcdGRlZmF1bHQ6XFxubmV0L2NvcmUvZmlsdGVyLmM6OTAwMDpcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMDEtXFx0fVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTAwNT1sd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTAzOC1cXHRkZWZhdWx0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwMzk6XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQwLVxcdH1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDQ9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA1Ny1cXHRkZWZhdWx0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTg6XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG5uZXQvY29yZS9maWx0ZXIuYy05MDU5LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTUwPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9vdXRfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTUxOlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X291dF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTUyLVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjEyLjgzODEwMjY0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM4NTg0NzE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgbHd0X291dF9mdW5jX3Byb3RvYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gLiBIbW0sIGp1c3QgdGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgcHJvdG90eXBlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gTHd0IG91dHB1dC4gS25vd2luZyBMd3QsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9ucywgcHJvYmFibHkgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIGFuZCBtYW5hZ2luZyBwcm9taXNlcyBvciBmdXR1cmVzIHRoYXQgcmVwcmVzZW50IHBlbmRpbmcgb3V0cHV0IHRhc2tzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHNpZ25hdHVyZS4gV2hhdCBhcmd1bWVudHMgZG9lcyBpdCB0YWtlPyBBcmUgdGhleSBoYW5kbGVzLCBidWZmZXJzLCBsZW5ndGhzLCBjYWxsYmFja3MsIG9yIHNvbWUgY29tYmluYXRpb24gdGhlcmVvZj8gVGhlIHNwZWNpZmljIHR5cGVzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZS4gRm9yIGV4YW1wbGUsIGRvZXMgaXQgaGFuZGxlIHJhdyBieXRlcywgb3IgZG9lcyBpdCBhYnN0cmFjdCBmdXJ0aGVyIHVwIGludG8gc3RyZWFtcywgZmlsZXMsIG9yIG5ldHdvcmsgc29ja2V0cz8gQW5kIGFyZSB0aGVyZSBhbnkgaW5kaWNhdGlvbnMgb2YgY29uY3VycmVuY3kgb3IgdGhyZWFkaW5nIGJ1aWx0IGluIGhlcmU/XG5cbk15IHByaW1hcnkgY29uY2VybiBpcyBlZmZpY2llbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBibG9ja2luZyBwb2ludHMsIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZC4gSWYgdGhpcyBpcyBtZWFudCB0byBiZSB0cnVseSBub24tYmxvY2tpbmcsIHRoZW4gSSBleHBlY3QgaGVhdnkgdXNlIG9mIGV2ZW50IGxvb3BzIG9yIHNvbWUgZm9ybSBvZiBjb250aW51YXRpb24gcGFzc2luZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG91dHB1dCBvcGVyYXRpb24gaXMgc2NoZWR1bGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSByZXNvdXJjZXMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4gV2hhdCBraW5kcyBvZiBleGNlcHRpb25zIG9yIHJldHVybiB2YWx1ZXMgZG9lcyBpdCBwcm9kdWNlPyBIb3cgZG9lcyBpdCBzaWduYWwgc3VjY2VzcyBvciBmYWlsdXJlPyBEb2VzIGl0IHByb3ZpZGUgYW55IG1lY2hhbmlzbXMgZm9yIGNhbmNlbGxhdGlvbiBvciB0aW1lb3V0PyBNb3JlIGdlbmVyYWxseSwgaG93IGRvZXMgaXQgZml0IGludG8gdGhlIGRlc2lnbiBvZiBMd3QncyBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5P1xuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgdHJ5IHRvIHBsYWNlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgTHd0IGZyYW1ld29yay4gSSB3YW50IHRvIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgbW9kdWxlcy4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gRG9lcyBpdCByZWx5IG9uIGxvd2VyLWxldmVsIHN5c3RlbSBjYWxscyBkaXJlY3RseSBvciBpcyBpdCBidWlsZGluZyB1cG9uIG1vcmUgYWJzdHJhY3QgTHd0IHByaW1pdGl2ZXM/XG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSBpbXBsaWNpdCBhc3N1bXB0aW9ucz8gSXMgdGhlcmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGFib3V0IGEgc2l0dWF0aW9uIHdoZXJlIEkgd291bGQgdXNlIHRoaXM/IEtub3dpbmcgdGhlIGludGVudCwgSSBjYW4gYXNzZXNzIHRoZSBjb2RlIGZvciBtYWludGFpbmFiaWxpdHksIGNsYXJpdHksIGFuZCBhZGhlcmVuY2UgdG8gdGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjE4LjIyMzk1MjczNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjg5NjU6XFx0XFxuODk2NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG44OTY3OlxcdGx3dF9vdXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG44OTY4OlxcdHtcXG44OTY5OlxcdFxcdHN3aXRjaCAoZnVuY19pZCkge1xcbjg5NzA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2JfbG9hZF9ieXRlczpcXG44OTcxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9sb2FkX2J5dGVzX3Byb3RvO1xcbjg5NzI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxcbjg5NzM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX3B1bGxfZGF0YV9wcm90bztcXG44OTc0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfY3N1bV9kaWZmOlxcbjg5NzU6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfY3N1bV9kaWZmX3Byb3RvO1xcbjg5NzY6XFx0XFx0Y2FzZSBCUEZfRlVOQ19nZXRfY2dyb3VwX2NsYXNzaWQ6XFxuODk3NzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfcHJvdG87XFxuODk3ODpcXHRcXHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcXG44OTc5OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9yb3V0ZV9yZWFsbV9wcm90bztcXG44OTgwOlxcdFxcdGNhc2UgQlBGX0ZVTkNfZ2V0X2hhc2hfcmVjYWxjOlxcbjg5ODE6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X2hhc2hfcmVjYWxjX3Byb3RvO1xcbjg5ODI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19wZXJmX2V2ZW50X291dHB1dDpcXG44OTgzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XFxuODk4NDpcXHRcXHRjYXNlIEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkOlxcbjg5ODU6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XFxuODk4NjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl91bmRlcl9jZ3JvdXA6XFxuODk4NzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfdW5kZXJfY2dyb3VwX3Byb3RvO1xcbjg5ODg6XFx0XFx0ZGVmYXVsdDpcXG44OTg5OlxcdFxcdFxcdHJldHVybiBicGZfc2tfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjg5OTA6XFx0XFx0fVxcbjg5OTE6XFx0fVxcbjg5OTI6XFx0XFxuODk5MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG44OTk0OlxcdGx3dF9pbl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjg5OTU6XFx0e1xcbjg5OTY6XFx0XFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuODk5NzpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxcbjg5OTg6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X2luX3B1c2hfZW5jYXBfcHJvdG87XFxuODk5OTpcXHRcXHRkZWZhdWx0OlxcbjkwMDA6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDAxOlxcdFxcdH1cXG45MDAyOlxcdH1cXG45MDAzOlxcdFxcbjkwMDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjE4LjIyNTA0Mzg4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk1MDE0NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbHd0X3NlZzZsb2NhbGAgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlLCBhbmQgaXQgc2VlbXMgbGlrZSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCB1c2VkIHRvIGhhdmUgYSBmYWxsYmFjayBtZWNoYW5pc20uIEl0IHdvdWxkIGRlZmVyIHRvIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gLCBhbmQgdGhhdCwgaW4gdHVybiwgd291bGQgcHJvdmlkZSBgXHUwMDI2YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG9gIGZvciBoYW5kbGluZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIEJ1dCBub3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBGb3IgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgLCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpcyBleHBsaWNpdGx5IHJldHVybmluZyBgTlVMTGAuIFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHVzZSBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgIHdpdGhpbiBgc2VnNmxvY2FsYCBCUEYgcHJvZ3JhbXMuIFRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhpcyBgbHd0X3NlZzZsb2NhbGAgQlBGIHByb2dyYW0gdHlwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQncyByZWdpc3RlcmVkLCBob3cgaXQncyB1c2VkLCBhbmQgd2hhdCBvdGhlciBwcm9nIHR5cGVzIGFyZSBpbiBwbGF5IGhlcmUuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgYW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gYWNoaWV2ZS4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBzZWN1cml0eSBtZWFzdXJlPyBBIGJ1ZyBmaXg/IEkgaGF2ZSB0byBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjIwLjgyMDA2MTczNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjk1NjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXFx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlxcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNzk9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTExNC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XFxua2VybmVsL2JwZi9idGYuYzo5MTE1OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvYnRmLmMtOTExNi1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfTFdUO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg0Mz1zdGF0aWMgYm9vbCBpc19uZXRfYWRtaW5fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODUyOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE5PXN0YXRpYyBib29sIG1heV9hY2Nlc3NfZGlyZWN0X3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgyOC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX09VVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDgyOTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgzMC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzY9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg3LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg5LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MTU9c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzYtXFx0ZmQgPSBubGFfZ2V0X3UzMih0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5Mzc6XFx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM4LVxcdGlmIChJU19FUlIocCkpIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XFx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVxcdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVxcdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXFx0PSBcXFwiY2dyb3VwX3NvY2tfYWRkclxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XFx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cXHRcXHQ9IFxcXCJsd3Rfc2VnNmxvY2FsXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVxcdFxcdD0gXFxcImxpcmNfbW9kZTJcXFwiLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcwLVxcdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XFx0eyBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3Mi1cXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsICAgICAgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MTc5OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyNi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6MjI3OlxcdHNjYWxlX3Rlc3QoXFxcInRlc3Rfc2VnNl9sb29wLmJwZi5vXFxcIiwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYz0yMD1zdGF0aWMgc3RydWN0IHNlY19uYW1lX3Rlc3QgdGVzdHNbXSA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00Mi1cXHR7XFxcImx3dF94bWl0XFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6NDM6XFx0e1xcXCJsd3Rfc2VnNmxvY2FsXFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgMH0sIHstRUlOVkFMLCAwfSB9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjIyLjQzNzA2OTA2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTMxNDkxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogQlBGIFZlcmlmaWNhdGlvbiBpbiBOZXQvQ29yZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtIHZlcmlmaWVyIGxvZ2ljLiBJdCBzZWVtcyB0aGF0IGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGlzIHJldHVybmluZyBgTlVMTGAgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb246IHdoZW4gdGhlIGBmdW5jX2lkYCBpcyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAuIFRoaXMgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zIHRoYXQgYXJlIGF0dGVtcHRpbmcgdG8gdXRpbGl6ZSBgYnBmX3NrYl9wdWxsX2RhdGEoKWAuIFRoYXQncyBhIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGlzc3VlLlxuXG5UaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBDYW4gd2UgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbj8gQWJzb2x1dGVseS4gVGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIHRoZSBgQlBGX1BST0dfTE9BRGAgY29tbWFuZCBhbmQgYSBwcm9ncmFtIHR5cGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgaXMgdGhlIHBhdGguIFNvLCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gbG9hZCB0aGlzIGFuZCB0cmlnZ2VyIHRoZSB2ZXJpZmllci4gVGhhdCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cblxuTm93LCBkb2VzIHRoaXMgbWVldCB0aGUgY3JpdGVyaWEgZm9yIFwiV29ydGhGdXp6aW5nPXRydWVcIj8gTGV0J3Mgc2VlLi4uIENvcmUgc3Vic3lzdGVtcz8gQ2hlY2suIEJQRiBhbmQgY29yZSBuZXR3b3JraW5nPyBEZWZpbml0ZWx5LiBMb2dpYyBtb2RpZmljYXRpb25zPyBZZXMsIHRoYXQgYE5VTExgIHJldHVybiBpcyBhIGRlZmluaXRlIGxvZ2ljIGNoYW5nZS4gUmVhY2hhYmxlPyBZZXMsIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBhIHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGUuIE9rYXksIHRoZSBmdXp6aW5nIGNyaXRlcmlhIGFyZSBtZXQuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZXhwbG9yZSB0aGlzIHByb3Blcmx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGVuYWJsZSBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCwgYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AsIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUYCwgYENPTkZJR19MV1RVTk5FTGAsIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAsIGFuZCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAuIEknbGwgZ3JlcCBmb3IgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBhbmQgd2hlcmUgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCBpcyBjb21waWxlZC4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBoYXZlIGVuYWJsZWQgZm9yIFFFTVUgdG8gYmUgYWJsZSB0byBoaXQgdGhpcyBjb2RlIHBhdGggYW5kIHRodXMgdG8gYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjI4Ljk2ODU2NTQyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1OTMyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0X3NlZzZsb2NhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ0Omx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ1LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTY3PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3htaXRfcHJvZ19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3MjpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU3My1cXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBsd3RfaXNfdmFsaWRfYWNjZXNzLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzYtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1Nzc6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3Rfc2VnNmxvY2FsX3Byb2dfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjI5LjAyMDE2NDIzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzU4NzAzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHRoYXQgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCB0aGluZzpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRmlsdGVyaW5nIGFuZCBMV1QgU3VwcG9ydCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgZmlndXJlIG91dCB3aGVyZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgbGFyZ2VyIHNjaGVtZSBvZiB0aGluZ3MuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBvciBleGFtaW5lIHRoZSBNYWtlZmlsZXMgdG8gZmlndXJlIG91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaXMgaW5jb3Jwb3JhdGVkLlxuXG5UaGVuLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQ6IGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIEkga25vdyBhIGJpdCBhYm91dCBMV1QgKExpZ2h0d2VpZ2h0IFR1bm5lbHMpIGFuZCBTZWdtZW50IFJvdXRpbmcgdjYgKFNSdjYpLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSB2ZXJpZmllciBmaXRzIGluLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB2ZXJpZmljYXRpb24gb3BlcmF0aW9uIHdpdGhpbiB0aGUgU1J2NiBjb250ZXh0LCBwb3NzaWJseSByZWxhdGVkIHRvIGxvY2FsIHNlZ21lbnQgcHJvY2Vzc2luZyBvciBzb21lIGtpbmQgb2YgZW5jYXBzdWxhdGlvbiB2ZXJpZmljYXRpb24uXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRob3NlIHByZXByb2Nlc3NvciBpZmRlZnMgYXJvdW5kIGBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBqdWljZSBpcy4gVGhvc2UgaWZkZWZzIGFyZSB0aGUgYnJlYWRjcnVtYnMgdGhhdCdsbCBzaG93IG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZmVhdHVyZSBmbGFncyB0aGF0IGNvbnRyb2wgd2hldGhlciBvciBub3QgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICplbmFibGVkKiBhdCBjb21waWxlIHRpbWUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgbW9kdWxlLCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLCBvciBhIHNwZWNpZmljIGZlYXR1cmUgZW5hYmxlZCBhdCBib290PyBVbmRlcnN0YW5kaW5nIHRoZSBpZmRlZnMgd2lsbCBxdWlja2x5IGNsYXJpZnkgaWYgaXQncyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBzcGVjaWZpYyBtb2R1bGUgYmVpbmcgbG9hZGVkLCBvciBwZXJoYXBzIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBuZWVkcyB0byBiZSB0b2dnbGVkIHRvIGFjdGl2YXRlIGl0LiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIHN0cnVjdCBpcywgYW5kIGhvdyBpdHMgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGJlaW5nIHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjMyLjc3ODg3MDc0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTY1OlxcdH07XFxuMTE1NjY6XFx0XFxuMTE1Njc6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcXG4xMTU2ODpcXHRcXHQudGVzdF9ydW5cXHRcXHQ9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYixcXG4xMTU2OTpcXHR9O1xcbjExNTcwOlxcdFxcbjExNTcxOlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xcbjExNTcyOlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxcbjExNTczOlxcdFxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuMTE1NzQ6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG4xMTU3NTpcXHR9O1xcbjExNTc2OlxcdFxcbjExNTc3OlxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3NlZzZsb2NhbF9wcm9nX29wcyA9IHtcXG4xMTU3ODpcXHR9O1xcbjExNTc5OlxcdFxcbjExNTgwOlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tfdmVyaWZpZXJfb3BzID0ge1xcbjExNTgxOlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc29ja19maWx0ZXJfZnVuY19wcm90byxcXG4xMTU4MjpcXHRcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBzb2NrX2ZpbHRlcl9pc192YWxpZF9hY2Nlc3MsXFxuMTE1ODM6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzLFxcbjExNTg0OlxcdH07XFxuMTE1ODU6XFx0XFxuMTE1ODY6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19zb2NrX3Byb2dfb3BzID0ge1xcbjExNTg3OlxcdH07XFxuMTE1ODg6XFx0XFxuMTE1ODk6XFx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja19hZGRyX3ZlcmlmaWVyX29wcyA9IHtcXG4xMTU5MDpcXHRcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNvY2tfYWRkcl9mdW5jX3Byb3RvLFxcbjExNTkxOlxcdFxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNvY2tfYWRkcl9pc192YWxpZF9hY2Nlc3MsXFxuMTE1OTI6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG4xMTU5MzpcXHR9O1xcbjExNTk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozMi43Nzk0MzkzOTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNTMxNzA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTmV0d29yayBGaWx0ZXIgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBwYXRoIGZvciBgbmV0L2NvcmUvZmlsdGVyLm9gIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgc3BlY2lmaWMgb2JqZWN0IGZpbGUgaXMgY29uc3RydWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zIHBsYXkgYSByb2xlIGluIGl0cyBjb21waWxhdGlvbiwgYW5kIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIGZlYXR1cmVzIEknbSBmYW1pbGlhciB3aXRoLCBsaWtlIEJQRiwgSVB2NiwgTFdULCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjM0LjY4NDc2MDcwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNzc0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozNC43MzI4NDM0MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwNjczNTY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSByZWxhdGlvbnNoaXAgaGVyZT8gQXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlPyBEb2VzIG9uZSByZXF1aXJlIHRoZSBvdGhlcj8gSXMgdGhlcmUgc29tZSBjb25kaXRpb25hbCBlbmFibGluZyBnb2luZyBvbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZsYWdzIGludGVyYWN0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCBgQ09ORklHX0JQRl9TWVNDQUxMYCB0byBiZSBhIHByZXR0eSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgYW55IEJQRiBmdW5jdGlvbmFsaXR5LCBzbyBJJ20gZ3Vlc3NpbmcgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBwcm9iYWJseSAqbmVlZHMqIGl0LCBidXQgSSB3YW50IHRvIHZlcmlmeSB0aGUgZXhhY3QgS2NvbmZpZyBsb2dpYyB0byBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIEJQRiBjYXBhYmlsaXRpZXMgbGluZXMgdXAgd2l0aCBob3cgdGhlIGtlcm5lbCBpcyBhY3R1YWxseSBzdHJ1Y3R1cmVkLiBUaGVuLCBJIHdpbGwgc3RhcnQgYnkgc2VlaW5nIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBsb2NhdGVkLCBpbiB3aGF0IGZpbGVzLiBUaGlzIHdpbGwgc3RhcnQgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSB2YXJpb3VzIHBvc3NpYmxlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozNi45Mzk1ODI2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTU5NjEzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9TRUc2X0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz02ODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9jaGVja19tdHVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02ODc3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY4Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjg3OS1zdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTAtfVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTE6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjE9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXFx0c3dpdGNoICh0eXBlKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9Njk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2OTcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzMtQlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTYzLX07XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE2NDojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy03MTY1LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ4LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA1MC1cXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0zMDA9Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYz0zMjg9c3RhdGljIHZvaWQgcHJvYmVfa2VybmVsX2ltYWdlX2NvbmZpZyhjb25zdCBjaGFyICpkZWZpbmVfcHJlZml4KVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM4OC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xXVF9TRUc2X0xPQ0FMIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzg5OlxcdFxcdHsgXFxcIkNPTkZJR19JUFY2X1NFRzZfQlBGXFxcIiwgfSxcXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzkwLVxcdFxcdC8qIEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMiBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTQ4PUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnOjQ5OkNPTkZJR19JUFY2X1NFRzZfQlBGPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTUwLUNPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUw9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MTozOC42MzU1NjAwNDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NTYyMDMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBCUEYqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVBWNl9TRUc2X0JQRmAuIEkgcmVtZW1iZXIgdGhhdCBraW5kIG9mIHN0dWZmIGlzIHVzdWFsbHkgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGF0IGBuZXQvaXB2NmAgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIElQdjYgY29uZmlndXJhdGlvbiByZXNpZGVzLiBTbywgSSdsbCBnbyBkaXJlY3RseSB0byBgbmV0L2lwdjYvS2NvbmZpZ2AuIEFuZCwgc2luY2UgSSdtIHRyeWluZyB0byBmaW5kIGBJUFY2X1NFRzZfQlBGYCwgSSdsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDMxMiDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcmVsYXRlZCBmZWF0dXJlcyBpbiB0aG9zZSBmaWxlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQsIG9yIGFueSBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMsIGJlZm9yZSBgSVBWNl9TRUc2X0JQRmAgY2FuIGJlIHNlbGVjdGVkLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBJUHY2IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGJhc2UgSVB2NiBzdGFjaywgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYmV0dGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQxLjAwMTE4NDA4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMjA6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDMyMTpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDMyMjpcXHRcXHRoZWxwXFxuIDMyMzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMzI0OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uXFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzI3OlxcdFxcbiAzMjg6XFx0Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG4gMzI5OlxcdFxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTE6NDEuMDAxMjY0Nzk3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjMwMjM1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYElQVjZfU0VHNl9MV1RVTk5FTGAgaW4gYG5ldC9pcHY2L0tjb25maWdgOlxuXG4qKkNoZWNraW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucywgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCwgYXMgSSBzZWUgaXQsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IElQdjYgc2VnbWVudCByb3V0aW5nIHN1cHBvcnQgbG9va3MgbGlrZSB3aXRoaW4gdGhlIHN5c3RlbSdzIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gVGhlIFwiS2NvbmZpZ1wiIGZpbGUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLCBJIGltbWVkaWF0ZWx5IGtub3cgd2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwncyBpbXBsZW1lbnRhdGlvbiBvZiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBhbmQgbGlrZWx5LCBob3cgdGhhdCBpcyBleHBvc2VkIHRvIHVzLCB0aGUgdXNlci4gQSBwcm9wZXIgaW1wbGVtZW50YXRpb24gb2Ygc2VnbWVudCByb3V0aW5nIGlzIGluY3JlZGlibHkgaW1wb3J0YW50IGZvciBtYW55IG9mIG15IHByb2Zlc3Npb25hbCBwcm9qZWN0cy4gSSBzaG91bGQgZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhpcyBmZWF0dXJlLlxuXG5Ob3csIGxldCBtZSBkaWcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBgSVBWNl9TRUc2X0xXVFVOTkVMYCBvcHRpb24gaXMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZS4gSXTigJlzIHBvc3NpYmxlIGl0IGNvbnRyb2xzIGEgc3BlY2lmaWMgbW9kdWxlLCBhbiBlbnRpcmUgZmVhdHVyZSBzZXQsIG9yIGV2ZW4gZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgU1J2NiBzdGFjay4gSeKAmWxsIGJlIGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgcHJlc2VudCwgYW5kIGV4YWN0bHkgd2hhdCBpdCBjb250cm9scyB3aXRoaW4gdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24uIEkgbWlnaHQgYWxyZWFkeSBrbm93IHdoYXQgaXQgZG9lcywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG5vdCBhc3N1bWUuIERlcGVuZGluZyBvbiB3aGF0IGl0IGNvbnRyb2xzLCBJIG1heSBuZWVkIHRvIG1ha2Ugc2V2ZXJhbCBjb25maWcgY2hhbmdlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGZvciBhbnkgYXJjaGl0ZWN0dXJlL2tlcm5lbCBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBydW4uIEl0IGNvdWxkIGRpY3RhdGUgaG93IEkgZGVwbG95IGNlcnRhaW4gcHJvamVjdHMuIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gaXQgaXMgaW5jbHVkZWQgaW4gYW55IGJ1aWxkIEkgbWlnaHQgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQ0LjE2NDI5MjIwN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDQwOTExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQ1Ljc3ODcwNjc5MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg0OTY2NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgSVB2NiBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIHdpdGhpbiB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyODYuIEkga25vdyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGFuYWx5c2lzLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIHdpbGwgYmUgcGxlbnR5IG9mIGludGVyZXN0aW5nIHRoaW5ncyB0byB1bnJhdmVsIGluIHRoYXQgc2VjdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTE6NDguMTYzNjc3MzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg1OlxcdFxcbiAyODY6XFx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAyODc6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDI4ODpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjg5OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAyOTA6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyOTE6XFx0XFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXFxuIDI5MjpcXHRcXHRoZWxwXFxuIDI5MzpcXHRcXHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxcbiAyOTQ6XFx0XFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMjk1OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXFxuIDI5NjpcXHRcXHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbiAzMDE6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMDM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAzMDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUxOjQ4LjE2Mzc1NTYxNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQzNzM3NDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTZWc2IExvY2FsIFZlcmlmaWVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB3ZSBoYXZlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX05FVGAsIGBDT05GSUdfSVBWNmAsIGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZXZlbiBpZiBgQ09ORklHX0lQVjZfU0VHNl9CUEZgIGlzbid0IGVuYWJsZWQsIHRoZSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBmdW5jdGlvbiBpcyAqc3RpbGwqIGNvbXBpbGVkIGlmIHdlIGhhdmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gVGhhdCBmZWVscyBvZGQsIGFuZCBJIHRoaW5rIGl0J3MgYmVjYXVzZSBgbHd0X3NlZzZsb2NhbF92ZXJpZmllcl9vcHNgIGlzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgYXMgbG9uZyBhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AgbW9yZSBjbG9zZWx5IGFuZCBzZWUgaWYgYGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzYCBhY3R1YWxseSBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBMZXQgbWUgc2VhcmNoIHRoYXQgZmlsZSBmb3IgdGhlIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MjoxNS42MDExMzM5NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDAwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00NTMzPUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTM1OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MzYtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjE1LjY0NzE0MzQ0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEwMjkwMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIEJQRiBQcm9ncmFtIFR5cGVzIGFuZCBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBhbmQgd2hlcmUgaXQncyBkZWZpbmVkLiBSaWdodCwgaXQncyBpbiBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAuIExldCdzIGNvbmZpcm0gdGhhdC4uLiBZZXAsIHRoZXJlIGl0IGlzOiBgQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGx3dF9zZWc2bG9jYWwsIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKWAuIEdvb2QuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBicGZfdHlwZXMuaGAgaXMgc3RydWN0dXJlZCBhbmQgd2hhdCB0aGUgbWFjcm8gYEJQRl9QUk9HX1RZUEVgIGRvZXMgYmVoaW5kIHRoZSBzY2VuZXMuIE5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHlwZXMgYXJlIGJ1aWx0IGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgcGFydGljdWxhcmx5IGBfX3NrX2J1ZmZgIGFuZCBgc2tfYnVmZmAgaW4gdGhpcyBMV1QgY29udGV4dC4gSSdsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE4NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjE4LjE1NzQzNTczM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODMwNTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHlwZXNcXFxcLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yNjkxPWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl90b2tlbl9mb3BzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNjk4LSNkZWZpbmUgQlBGX0xJTktfVFlQRShfaWQsIF9uYW1lKVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MjY5OTojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzAwLSN1bmRlZiBCUEZfUFJPR19UWVBFXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTE2Ni1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTE2NzovKiBBZGQgQlBGX0xJTktfVFlQRSh0eXBlLCBuYW1lKSBpbiBicGZfdHlwZXMuaCB0byBrZWVwIGJwZl9saW5rX3R5cGVfc3Ryc1tdXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExNjgtICogaW4gc3luYyB3aXRoIHRoZSBkZWZpbml0aW9ucyBiZWxvdy5cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjA3Nz1zdGF0aWMgdW5pb24ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MDgxLVxcdGtlcm5fY3R4X3R5cGUgX2lkIyNfa2VybjtcXG5rZXJuZWwvYnBmL2J0Zi5jOjYwODI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvYnRmLmMtNjA4My0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02MDg4PWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MDkwLVxcdF9fY3R4X2NvbnZlcnQjI19pZCxcXG5rZXJuZWwvYnBmL2J0Zi5jOjYwOTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvYnRmLmMtNjA5Mi0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02MDk1PXN0YXRpYyB1OCBicGZfY3R4X2NvbnZlcnRfbWFwW10gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTctXFx0W19pZF0gPSBfX2N0eF9jb252ZXJ0IyNfaWQsXFxua2VybmVsL2JwZi9idGYuYzo2MDk4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdHlwZXMuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2J0Zi5jLTYwOTktI3VuZGVmIEJQRl9QUk9HX1RZUEVcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjE0Nj1ib29sIGJ0Zl9pc19wcm9nX2N0eF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjE5NC1cXHRcXHQvKiBzaG91bGQgbm90IGhhcHBlbiAqL1xcbmtlcm5lbC9icGYvYnRmLmM6NjE5NTpcXHRcXHRicGZfbG9nKGxvZywgXFxcIlBsZWFzZSBmaXgga2VybmVsIGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvYnRmLmMtNjE5Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzUtI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NzY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTc3LSN1bmRlZiBCUEZfUFJPR19UWVBFXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMzQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzICogY29uc3QgYnBmX3Byb2dfdHlwZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIzNDctI2RlZmluZSBCUEZfTElOS19UWVBFKF9pZCwgX25hbWUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjM0ODojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcXHUwMDNlXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjM0OS0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzM5OT1zdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQwMC1cXHRbQlBGX0xJTktfVFlQRV9VTlNQRUNdID0gXFxcIlxcdTAwM2NpbnZhbGlkXFx1MDAzZVxcXCIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQwMTojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3R5cGVzLmhcXHUwMDNlXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQwMi19O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NC0jZGVmaW5lIEJQRl9MSU5LX1RZUEUoX2lkLCBfbmFtZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl90eXBlcy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Ni0jdW5kZWYgQlBGX1BST0dfVFlQRVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwOTk9ZW51bSBicGZfYXR0YWNoX3R5cGUge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExNjYtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjExNjc6LyogQWRkIEJQRl9MSU5LX1RZUEUodHlwZSwgbmFtZSkgaW4gYnBmX3R5cGVzLmggdG8ga2VlcCBicGZfbGlua190eXBlX3N0cnNbXVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTY4LSAqIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYmVsb3cuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjIwLjA2NTc0NTYyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzI1NDMzNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIExXVCBTRUc2TE9DQUwgQlBGIFByb2dyYW0gTG9hZGluZyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBoZXJlIGZvciBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtcy4gSSdtIHNlZWluZyB0aGF0IHRoZSB2ZXJpZmllciBvcGVyYXRpb25zIGZvciB0aGF0IHByb2dyYW0gdHlwZSwgYXMgZGVmaW5lZCBpbiBgYnBmX3ZlcmlmaWVyX29wc2AsIGFyZSBzZXQgdG8gdXNlIGBcdTAwMjZsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wc2AuIEdvb2QuIE1ha2VzIHNlbnNlLiBXaGVuIHRoZSBgQlBGX1BST0dfTE9BRGAgc3lzY2FsbCBjb21lcyBpbiB3aXRoIHRoYXQgcHJvZ3JhbSB0eXBlLCBgYnBmX2NoZWNrYCBnZXRzIGNhbGxlZCwgYW5kIGFzIHBhcnQgb2YgaXRzIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBpdCdzIGdvaW5nIHRvIGhpdCBgb3BzLVx1MDAzZWdldF9mdW5jX3Byb3RvYCwgd2hpY2ggaW4gdGhpcyBjYXNlIHJlc29sdmVzIHRvIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgcHJvZ3JhbSBjb25mb3JtcyB0byB0aGUgZXhwZWN0ZWQgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCByZXNvdXJjZXMgd2l0aGluIHRoZSBrZXJuZWwgY29udGV4dC5cblxuVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgaG93IHRoaXMgdmVyaWZpZWQgcHJvZ3JhbSAqYWN0dWFsbHkqIGdldHMgZXhlY3V0ZWQsIG9yIGF0dGFjaGVkLiBBaCwgcmlnaHQsIHRoYXQncyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmZhY2UgY29tZXMgaW4sIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBSVE1fTkVXUk9VVEVgIHdpdGggYW4gYFNFRzZMT0NBTGAgZW5jYXBzdWxhdGlvbiBhbmQgYSBgU0VHNl9MT0NBTF9BQ1RJT05fQlBGYCBhY3Rpb24uIEFuZCwgdG8gdGllIHRoYXQgYWxsIHRvZ2V0aGVyLCB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGBDT05GSUdfSVBWNl9TRUc2X0JQRmAuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgdGhlIGZpbmFsIGNyaXRpY2FsIHBpZWNlIHRvIGVuYWJsaW5nIHRoaXMgQlBGIHByb2dyYW0gZm9yIGRhdGEgcGxhbmUgcHJvY2Vzc2luZy5cblxuTm93LCBJIHNob3VsZCBkaXZlIGludG8gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gc2VlIGhvdyB0aG9zZSBwYXJ0cyBhcmUgaW1wbGVtZW50ZWQsIHRoZSBkZXRhaWxzIGFyb3VuZCBhdHRhY2hpbmcgdGhlIHByb2dyYW0gdG8gdGhlIGRhdGEgcGF0aCwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBjb21lIHdpdGggdXNpbmcgYSBCUEYgcHJvZ3JhbSBpbiB0aGF0IGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc2NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1MjoyMy43OTExODE3MTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ5NjU4OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNFRzZfTE9DQUxfQUNUSU9OX0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6MjUuMzQ2MTU2OTY5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTU3NDMyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgZm9yIEFjdGlvbnMgaW4gYHNlZzZfbG9jYWwuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYWN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgc2VnNl9sb2NhbC5jYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBsb2NhbCBmdW5jdGlvbiBtYW5pcHVsYXRpb24gc2hvdWxkIHJlc2lkZS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGhhbmRsZXJzIGZvciB0aGUgdmFyaW91cyBTUnY2IGJlaGF2aW9ycy4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGxpa2VseSB1c2luZyBjb21tb24gbmFtaW5nIGNvbnZlbnRpb25zIHdpdGhpbiB0aGUgU1J2NiBjb2RlYmFzZSDigJMgbWF5YmUgc29tZXRoaW5nIHByZWZpeGVkIHdpdGggXCJzcmhfYWN0aW9uX1wiIG9yIHNpbWlsYXIsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgb2Z0ZW4gbGVzcyB0aGFuIGludHVpdGl2ZS4gSXQgY291bGQgYmUgYSBzd2l0Y2ggc3RhdGVtZW50LCBhIHNlcmllcyBvZiBpZi9lbHNlIGJsb2Nrcywgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBmdW5jdGlvbiBwb2ludGVyIGFycmF5LCBpZiB0aGV5IGFyZSBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlc2UgYWN0aW9ucyBhcmUgaW52b2tlZCB3aXRoaW4gdGhlIGRhdGFwYXRoLCBsaWtlbHkgdHJpZ2dlcmVkIGJ5IGluY29taW5nIElQdjYgcGFja2V0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGVhY2ggb2YgdGhlc2UgYWN0aW9ucywgYW5kIGhvdyB0aGUgc3RhdGUgaXMgbWFuaXB1bGF0ZWQgYXMgdGhlIHBhY2tldHMgdHJhdmVyc2UgdGhlIFNSdjYgZG9tYWluLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6NDYuNTAzNTkyODY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIzMzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02LSAqICBEYXZpZCBMZWJydW4gXFx1MDAzY2RhdmlkLmxlYnJ1bkB1Y2xvdXZhaW4uYmVcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc6ICogIGVCUEYgc3VwcG9ydDogTWF0aGlldSBYaG9ubmV1eCBcXHUwMDNjbS54aG9ubmV1eEBnbWFpbC5jb21cXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTgtICovXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQzMD1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2MS1cXHRzd2l0Y2ggKHJldCkge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDYyOlxcdGNhc2UgQlBGX09LOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDYzOlxcdGNhc2UgQlBGX1JFRElSRUNUOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY0LVxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY1OlxcdGNhc2UgQlBGX0RST1A6XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjYtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NzY6XFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzctXFx0XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0ODc9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3OC1cXHR7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1Nzk6XFx0XFx0LmFjdGlvblxcdFxcdD0gU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0JQRixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU4MDpcXHRcXHQuYXR0cnNcXHRcXHQ9IFNFRzZfRl9BVFRSKFNFRzZfTE9DQUxfQlBGKSxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4MS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2xvY2FsX3BvbGljeVtTRUc2X0xPQ0FMX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NzAtXFx0W1NFRzZfTE9DQUxfT0lGXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY3MTpcXHRbU0VHNl9MT0NBTF9CUEZdXFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjcyLVxcdFtTRUc2X0xPQ0FMX0NPVU5URVJTXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xOTAwPXN0YXRpYyBpbnQgY21wX25sYV9vaWYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkwOC0jZGVmaW5lIE1BWF9QUk9HX05BTUUgMjU2XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MDk6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJwZl9wcm9nX3BvbGljeVtTRUc2X0xPQ0FMX0JQRl9QUk9HX01BWCArIDFdID0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTEwOlxcdFtTRUc2X0xPQ0FMX0JQRl9QUk9HXVxcdCAgID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTE6XFx0W1NFRzZfTE9DQUxfQlBGX1BST0dfTkFNRV0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MTItXFx0XFx0XFx0XFx0ICAgICAgIC5sZW4gPSBNQVhfUFJPR19OQU1FIH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkxNy17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MTg6XFx0c3RydWN0IG5sYXR0ciAqdGJbU0VHNl9MT0NBTF9CUEZfUFJPR19NQVggKyAxXTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkxOS1cXHRzdHJ1Y3QgYnBmX3Byb2cgKnA7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkyMi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkyMzpcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFNFRzZfTE9DQUxfQlBGX1BST0dfTUFYLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTI0OlxcdFxcdFxcdFxcdFxcdCAgYXR0cnNbU0VHNl9MT0NBTF9CUEZdLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTI1LVxcdFxcdFxcdFxcdFxcdCAgYnBmX3Byb2dfcG9saWN5LCBOVUxMKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTI4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTI5OlxcdGlmICghdGJbU0VHNl9MT0NBTF9CUEZfUFJPR10gfHwgIXRiW1NFRzZfTE9DQUxfQlBGX1BST0dfTkFNRV0pXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5MzI6XFx0c2x3dC1cXHUwMDNlYnBmLm5hbWUgPSBubGFfbWVtZHVwKHRiW1NFRzZfTE9DQUxfQlBGX1BST0dfTkFNRV0sIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMzLVxcdGlmICghc2x3dC1cXHUwMDNlYnBmLm5hbWUpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzNS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNjpcXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNzpcXHRwID0gYnBmX3Byb2dfZ2V0X3R5cGUoZmQsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXFx0aWYgKElTX0VSUihwKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5NDc9c3RhdGljIGludCBwdXRfbmxhX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1My1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk1NDpcXHRuZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgU0VHNl9MT0NBTF9CUEYpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTU1LVxcdGlmICghbmVzdClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTU3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTU4OlxcdGlmIChubGFfcHV0X3UzMihza2IsIFNFRzZfTE9DQUxfQlBGX1BST0csIHNsd3QtXFx1MDAzZWJwZi5wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWlkKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk1OS1cXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjEtXFx0aWYgKHNsd3QtXFx1MDAzZWJwZi5uYW1lIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5NjI6XFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgU0VHNl9MT0NBTF9CUEZfUFJPR19OQU1FLCBzbHd0LVxcdTAwM2VicGYubmFtZSkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjMtXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMjk0PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fcGFyYW0gc2VnNl9hY3Rpb25fcGFyYW1zW1NFRzZfTE9DQUxfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMxOS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjMyMDpcXHRbU0VHNl9MT0NBTF9CUEZdXFx0PSB7IC5wYXJzZSA9IHBhcnNlX25sYV9icGYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIzMjEtXFx0XFx0XFx0XFx0ICAgIC5wdXQgPSBwdXRfbmxhX2JwZixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjA1PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9nZXRfZW5jYXBfc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjMyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjMzOlxcdGlmIChhdHRycyBcXHUwMDI2IFNFRzZfRl9BVFRSKFNFRzZfTE9DQUxfQlBGKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjYzNC1cXHRcXHRubHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSArXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjQ2LjU1MDgzNDk1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzUyMjYzNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBhdGNoIFRhcmdldGluZyBCUEYgVmVyaWZpY2F0aW9uIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFyZ2V0IGFjdGlvbiBpcyBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0JQRmAsIGFuZCBJJ20gaG9taW5nIGluIG9uIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHByZWNpc2Ugd2l0aCBteSBzeW1ib2xzLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gLCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgLCBhbmQgcG90ZW50aWFsbHkgYHBhcnNlX25sYV9icGZgIGFzIGNhbmRpZGF0ZXMuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCB0YXJnZXQgYXMgbG9uZyBhcyBpdCdzIG5vdCBhbiBpbmxpbmUgc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBoZWFkZXIuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgdmlzaWJsZSBpbiB0aGUgdm1saW51eCBzeW1ib2wgdGFibGUuIFRoaXMgZ2l2ZXMgdXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHN0cnVjdHVyZSB0aGUgYHNldC1yZXN1bHRzYCBkYXRhIGNvcnJlY3RseS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAgZ2l2ZW4gdGhpcyBwYXRjaCB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGFsdGVycyBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCB0byBwcmV2ZW50IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCB1c2FnZSBmb3IgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgcHJvZ3JhbXMuIFRoaXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIGFuZCBsaWdodHdlaWdodCB0dW5uZWwgaGFuZGxpbmcuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYW5kIGBwYXJzZV9ubGFfYnBmYC4gQW5kIGZpbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOiBgQlBGX1NZU0NBTExgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgSVBWNmAsIGFuZCBgTkVUYC4gSSd2ZSBtYWRlIHN1cmUgdG8gc3RyaXAgdGhlIGBDT05GSUdfYCBwcmVmaXguXG5cbkFscmlnaHQsIEkndmUgY29uZmlybWVkIGFsbCB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgaW52b2NhdGlvbi4gSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODE1LCJPdXRwdXRUb2tlbnMiOjE4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1Mjo1My4zMDMxMDE4OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDkxMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJwYXJzZV9ubGFfYnBmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJwYXJzZV9ubGFfYnBmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBoZWxwZXIgZnVuY3Rpb24gcmVzb2x1dGlvbiBmb3Igc2VnNmxvY2FsIHByb2dyYW1zIChsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8pIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGRpc2FsbG93IGJwZl9za2JfcHVsbF9kYXRhLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgQlBGIHZlcmlmaWNhdGlvbiBhbmQgSVB2NiBTUnY2IGxpZ2h0d2VpZ2h0IHR1bm5lbCBleGVjdXRpb24gcGF0aHMgYWNjZXNzaWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6NTMuMzc4NjAwNTg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM1MjYxNzE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjUzLjM3OTE4MzA2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMzUyMDI5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkMjE5NDM0Mzc2ODMyZjQ4MmU3MjZiNjkyZTc3MDY0MTBhNjliOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjUwOjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uMmE4NGY5ZDAxMTMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTkwNDQsNiArOTA0NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuIGx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbitcdGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpcbitcdFx0cmV0dXJuIE5VTEw7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG4gXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuIFx0XHRyZXR1cm4gXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTI6NTMuMzc5MTg0MjA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNDY0Mjg0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2gsIGFuZCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBuZXQvY29yZS9maWx0ZXIuY2AuIEknbSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgY2hhbmdlcyB3aXRoaW4gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGEgYGNhc2UgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YTpgIHRoYXQgcmV0dXJucyBgTlVMTGAuIE5vdywgd2h5IHdvdWxkIHRoZXkgZG8gdGhhdD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cblRoZSBmdW5jdGlvbiBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpdHNlbGYgaXMgaW50ZXJlc3RpbmcuIEl0J3MgY2xlYXJseSBhIGRpc3BhdGNoZXIgZm9yIEJQRiBmdW5jdGlvbiBwcm90b3R5cGVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBhbmQgbG9jYWwgZnVuY3Rpb25zLiBUaGUgcHJlc2VuY2Ugb2YgYEJQRl9GVU5DX3NrYl9wdWxsX2RhdGFgIHN1Z2dlc3RzIHRoZXJlJ3MgYW4gaW50ZXJhY3Rpb24sIG9yIGludGVuZGVkIGludGVyYWN0aW9uLCB3aXRoIHBhY2tldCBkYXRhIG1hbmlwdWxhdGlvbiwgcG9zc2libHkgZm9yIExXVCAoTGludXggV2lyZSBUcmFuc3BvcnQpIG9yIFNSdjYgcHJvY2Vzc2luZy5cblxuVGhlIGZhY3QgdGhhdCBpdCdzIGJlaW5nICpkaXNhYmxlZCogaGVyZSBieSByZXR1cm5pbmcgYE5VTExgIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgY29uc2Npb3VzIGRlY2lzaW9uIHdhcyBtYWRlIHRvICpub3QqIGFsbG93IGBza2JfcHVsbF9kYXRhYCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGlzIGEgc2VjdXJpdHkgbWVhc3VyZT8gSXMgaXQgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIGlzIGl0IGEgY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIGhvdyBTUnY2IG9yIExXVCBpbnRlcmFjdHMgd2l0aCB0aGUgc2tiIGRhdGEgc3RydWN0dXJlPyBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aHkuIEknbGwgbmVlZCB0byBsb29rIGFyb3VuZCBsaW5lIDkwNDQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIGFuZCB3aGF0IHRoaXMgQlBGIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGRvIHdpdGhpbiB0aGlzIHNlZ21lbnQgb2YgdGhlIGNvZGUuIE9ubHkgdGhlbiBjYW4gSSBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB2YWxpZCBhbmQgYXBwcm9wcmlhdGUsIG9yIGlmIGl0IGhhcyBzb21lIHVuZGVzaXJhYmxlIGNvbnNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjU3LjUyNTYxNTI4M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTAzMDpcXHRcXHRjYXNlIEJQRl9GVU5DX2wzX2NzdW1fcmVwbGFjZTpcXG45MDMxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2wzX2NzdW1fcmVwbGFjZV9wcm90bztcXG45MDMyOlxcdFxcdGNhc2UgQlBGX0ZVTkNfbDRfY3N1bV9yZXBsYWNlOlxcbjkwMzM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbDRfY3N1bV9yZXBsYWNlX3Byb3RvO1xcbjkwMzQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19zZXRfaGFzaF9pbnZhbGlkOlxcbjkwMzU6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2V0X2hhc2hfaW52YWxpZF9wcm90bztcXG45MDM2OlxcdFxcdGNhc2UgQlBGX0ZVTkNfbHd0X3B1c2hfZW5jYXA6XFxuOTAzNzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvO1xcbjkwMzg6XFx0XFx0ZGVmYXVsdDpcXG45MDM5OlxcdFxcdFxcdHJldHVybiBsd3Rfb3V0X2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XFxuOTA0MDpcXHRcXHR9XFxuOTA0MTpcXHR9XFxuOTA0MjpcXHRcXG45MDQzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbjkwNDQ6XFx0bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjkwNDU6XFx0e1xcbjkwNDY6XFx0XFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuOTA0NzpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuOTA0ODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG45MDQ5OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbjkwNTA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcXG45MDUxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvO1xcbjkwNTI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9hY3Rpb246XFxuOTA1MzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG87XFxuOTA1NDpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FkanVzdF9zcmg6XFxuOTA1NTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvO1xcbjkwNTY6XFx0I2VuZGlmXFxuOTA1NzpcXHRcXHRkZWZhdWx0OlxcbjkwNTg6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDU5OlxcdFxcdH1cXG45MDYwOlxcdH1cXG45MDYxOlxcdFxcbjkwNjI6XFx0c3RhdGljIGJvb2wgYnBmX3NrYl9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuOTA2MzpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjkwNjQ6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxcbjkwNjU6XFx0e1xcbjkwNjY6XFx0XFx0Y29uc3QgaW50IHNpemVfZGVmYXVsdCA9IHNpemVvZihfX3UzMik7XFxuOTA2NzpcXHRcXG45MDY4OlxcdFxcdGlmIChvZmYgXFx1MDAzYyAwIHx8IG9mZiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IF9fc2tfYnVmZikpXFxuOTA2OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuOTA3MDpcXHRcXG45MDcxOlxcdFxcdC8qIFRoZSB2ZXJpZmllciBndWFyYW50ZWVzIHRoYXQgc2l6ZSBcXHUwMDNlIDAuICovXFxuOTA3MjpcXHRcXHRpZiAob2ZmICUgc2l6ZSAhPSAwKVxcbjkwNzM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjkwNzQ6XFx0XFxuOTA3NTpcXHRcXHRzd2l0Y2ggKG9mZikge1xcbjkwNzY6XFx0XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IF9fc2tfYnVmZiwgY2JbMF0sIGNiWzRdKTpcXG45MDc3OlxcdFxcdFxcdGlmIChvZmYgKyBzaXplIFxcdTAwM2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IF9fc2tfYnVmZiwgY2JbNF0pKVxcbjkwNzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjkwNzk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUyOjU3LjUyNjIyNDY4M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTY5MDY1NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBsd3Rfb3V0X2Z1bmNfcHJvdG9gIHRoaW5nLiBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIG91dHB1dCBmdW5jdGlvbiBwcm90b3R5cGUsIGFuZCBnaXZlbiB0aGUgXCJsd3RcIiBwcmVmaXgsIEknbSBndWVzc2luZyB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBsaWdodHdlaWdodCB0aHJlYWRzIG9yIGNvbmN1cnJlbmN5LiBPa2F5LCB3aGF0J3MgaW5zaWRlIHRoaXMgdGhpbmc/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjb250ZW50cyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSXMgaXQgYSB0eXBlIGRlZmluaXRpb24sIGEgc3RydWN0LCBhbiBhYnN0cmFjdCBjbGFzcz8gSXMgaXQgYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uPyBLbm93aW5nICpleGFjdGx5KiB3aGF0IHRoaXMgaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgZm91bmRhdGlvbiBmb3Igd2hhdGV2ZXIgZm9sbG93cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHRoaW5nIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1Mjo1OS40OTUyOTM5NDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkwMDA6XFx0XFx0XFx0cmV0dXJuIGx3dF9vdXRfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG45MDAxOlxcdFxcdH1cXG45MDAyOlxcdH1cXG45MDAzOlxcdFxcbjkwMDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuOTAwNTpcXHRsd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjkwMDY6XFx0e1xcbjkwMDc6XFx0XFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuOTAwODpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX2tleTpcXG45MDA5OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9nZXRfdHVubmVsX2tleV9wcm90bztcXG45MDEwOlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90dW5uZWxfa2V5OlxcbjkwMTE6XFx0XFx0XFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XFxuOTAxMjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfdHVubmVsX29wdDpcXG45MDEzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9nZXRfdHVubmVsX29wdF9wcm90bztcXG45MDE0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90dW5uZWxfb3B0OlxcbjkwMTU6XFx0XFx0XFx0cmV0dXJuIGJwZl9nZXRfc2tiX3NldF90dW5uZWxfcHJvdG8oZnVuY19pZCk7XFxuOTAxNjpcXHRcXHRjYXNlIEJQRl9GVU5DX3JlZGlyZWN0OlxcbjkwMTc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcHJvdG87XFxuOTAxODpcXHRcXHRjYXNlIEJQRl9GVU5DX2Nsb25lX3JlZGlyZWN0OlxcbjkwMTk6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfY2xvbmVfcmVkaXJlY3RfcHJvdG87XFxuOTAyMDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcXG45MDIxOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcXG45MDIyOlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxcbjkwMjM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV9oZWFkX3Byb3RvO1xcbjkwMjQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2Jfc3RvcmVfYnl0ZXM6XFxuOTAyNTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2Jfc3RvcmVfYnl0ZXNfcHJvdG87XFxuOTAyNjpcXHRcXHRjYXNlIEJQRl9GVU5DX2NzdW1fdXBkYXRlOlxcbjkwMjc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfY3N1bV91cGRhdGVfcHJvdG87XFxuOTAyODpcXHRcXHRjYXNlIEJQRl9GVU5DX2NzdW1fbGV2ZWw6XFxuOTAyOTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9jc3VtX2xldmVsX3Byb3RvO1xcbjkwMzA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19sM19jc3VtX3JlcGxhY2U6XFxuOTAzMTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sM19jc3VtX3JlcGxhY2VfcHJvdG87XFxuOTAzMjpcXHRcXHRjYXNlIEJQRl9GVU5DX2w0X2NzdW1fcmVwbGFjZTpcXG45MDMzOlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2w0X2NzdW1fcmVwbGFjZV9wcm90bztcXG45MDM0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2V0X2hhc2hfaW52YWxpZDpcXG45MDM1OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NldF9oYXNoX2ludmFsaWRfcHJvdG87XFxuOTAzNjpcXHRcXHRjYXNlIEJQRl9GVU5DX2x3dF9wdXNoX2VuY2FwOlxcbjkwMzc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90bztcXG45MDM4OlxcdFxcdGRlZmF1bHQ6XFxuOTAzOTpcXHRcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1Mjo1OS40OTU4Nzc4NzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwMDE4MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExXVCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLi4uIGxldCdzIHBpbnBvaW50IHRoYXQgYGx3dF9vdXRfZnVuY19wcm90b2AgZGVjbGFyYXRpb24uIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGFyb3VuZCBsaW5lIDg5ODAgaW4gdGhlIHBhc3QsIG9yIGF0IGxlYXN0IGluIHRoYXQgdmljaW5pdHkuIEl0J3MgY3J1Y2lhbCBiZWNhdXNlIGl0J3MgYSBrZXkgcGllY2UgaW4gaG93IHRoZSBMV1QgKGxpZ2h0d2VpZ2h0IHRocmVhZCkgb3V0cHV0IGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgZnJhbWV3b3JrLiBHZXR0aW5nIGEgdmlzdWFsIG9uIGl0IHdpbGwgaGVscCBtZSBrZWVwIG15IG1lbnRhbCBtb2RlbCBzdHJhaWdodC4gVGhlIHByb3RvdHlwZSBpdHNlbGYgaXMgcHJvYmFibHkgbm90IHRoYXQgY29tcGxleCwgYnV0IGl0J3Mgd2hhdCBkZXBlbmRzIG9uIHRoZSBwcm90b3R5cGUgdGhhdCBob2xkcyB0aGUgaW50ZXJlc3RpbmcgcGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjAyLjA5NjA2MDI1MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODk3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODk3MDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxcbjg5NzE6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XFxuODk3MjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuODk3MzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfcHVsbF9kYXRhX3Byb3RvO1xcbjg5NzQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19jc3VtX2RpZmY6XFxuODk3NTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XFxuODk3NjpcXHRcXHRjYXNlIEJQRl9GVU5DX2dldF9jZ3JvdXBfY2xhc3NpZDpcXG44OTc3OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9jZ3JvdXBfY2xhc3NpZF9wcm90bztcXG44OTc4OlxcdFxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxcbjg5Nzk6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3JvdXRlX3JlYWxtX3Byb3RvO1xcbjg5ODA6XFx0XFx0Y2FzZSBCUEZfRlVOQ19nZXRfaGFzaF9yZWNhbGM6XFxuODk4MTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfaGFzaF9yZWNhbGNfcHJvdG87XFxuODk4MjpcXHRcXHRjYXNlIEJQRl9GVU5DX3BlcmZfZXZlbnRfb3V0cHV0Olxcbjg5ODM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcXG44OTg0OlxcdFxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3NtcF9wcm9jZXNzb3JfaWQ6XFxuODk4NTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcXG44OTg2OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tiX3VuZGVyX2Nncm91cDpcXG44OTg3OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG87XFxuODk4ODpcXHRcXHRkZWZhdWx0Olxcbjg5ODk6XFx0XFx0XFx0cmV0dXJuIGJwZl9za19iYXNlX2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XFxuODk5MDpcXHRcXHR9XFxuODk5MTpcXHR9XFxuODk5MjpcXHRcXG44OTkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbjg5OTQ6XFx0bHd0X2luX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuODk5NTpcXHR7XFxuODk5NjpcXHRcXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcXG44OTk3OlxcdFxcdGNhc2UgQlBGX0ZVTkNfbHd0X3B1c2hfZW5jYXA6XFxuODk5ODpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9sd3RfaW5fcHVzaF9lbmNhcF9wcm90bztcXG44OTk5OlxcdFxcdGRlZmF1bHQ6XFxuOTAwMDpcXHRcXHRcXHRyZXR1cm4gbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjkwMDE6XFx0XFx0fVxcbjkwMDI6XFx0fVxcbjkwMDM6XFx0XFxuOTAwNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTM6MDIuMDk2NjkxNzcxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODcwNTEyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8gQ2hhbmdlKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbm90aWNpbmcgYSBjaGFuZ2UgaW4gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIEl0ICp1c2VkKiB0byBncmFjZWZ1bGx5IGhhbmRsZSB0aGluZ3MsIGZhbGxpbmcgYmFjayB0byBgbHd0X291dF9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpYCwgd2hpY2gsIGltcG9ydGFudGx5LCBtZWFudCBpdCB3b3VsZCBzdXBwb3J0IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCB0aHJvdWdoIHRoZSBgYnBmX3NrYl9wdWxsX2RhdGFfcHJvdG9gIGZ1bmN0aW9uIHBvaW50ZXIuIEJ1dCBub3csIGl0J3MgZXhwbGljaXRseSByZXR1cm5pbmcgYE5VTExgIHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYC4gVGhhdCdzIGEgZGlyZWN0LCBpbnRlbnRpb25hbCBkaWZmZXJlbmNlLlxuXG5UaGUgcXVlc3Rpb24sIG5hdHVyYWxseSwgaXMgKndoeSo/IFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBtb2RpZmljYXRpb247IHRoZXJlJ3MgZ290IHRvIGJlIGEgc3BlY2lmaWMgcmVhc29uIGZvciB0aGlzIGV4cGxpY2l0IGBOVUxMYCByZXR1cm4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwcyBhcmUgdG8gZGl2ZSBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSdsbCBzZWFyY2ggZm9yIGNvbW1pdHMgdGhhdCB0b3VjaCBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYCBpdHNlbGYsIG9yIG1vcmUgYnJvYWRseSwgY29tbWl0cyB0aGF0IG1pZ2h0IGJlIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2Ygc2VnNmxvY2FsIEJQRiBmdW5jdGlvbnMuIEknbGwgYWxzbyBsb29rIGZvciBhbnkgcmVmZXJlbmNlcyBvciBkaXNjdXNzaW9ucyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBCUEZfRlVOQ19za2JfcHVsbF9kYXRhYCBpbnRlcmFjdHMgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW92ZSBpcyBrZXkuIFdhcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlPyBJIG5lZWQgdGhlIGRlZXBlciBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjA0Ljc4Mzc0NTM1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTUwNDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9OTA0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5uZXQvY29yZS9maWx0ZXIuYzo5MDQ0Omx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ1LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTcxPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTcyOlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTczLVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjA2LjMzMzI2MDMxNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA2NTE3NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOlxuXG4qKkV4YW1pbmluZyB0aGUgUmVzdHJpY3Rpb24gb24gYGJwZl9za2JfcHVsbF9kYXRhYCB3aXRoaW4gYHNlZzZsb2NhbGAqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aHkgYGJwZl9za2JfcHVsbF9kYXRhYCBpc24ndCBhbGxvd2VkLCBvciBwZXJoYXBzIHdoYXQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGlzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYHNlZzZsb2NhbGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgcmVzdHJpY3Rpb24uIElzIGl0IGEgc2VjdXJpdHkgY29uY2Vybj8gQSBwZXJmb3JtYW5jZSBpc3N1ZT8gT3IgcGVyaGFwcyBhIGZ1bmRhbWVudGFsIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBvcGVyYXRpb25zIHdpdGhpbiBgc2VnNmxvY2FsYCBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiBgYnBmX3NrYl9wdWxsX2RhdGFgPyBNeSBleHBlcnRpc2UgbWFrZXMgbWUgcXVlc3Rpb24gaWYgaXQncyByZWxhdGVkIHRvIHRoZSBza2Igc3RydWN0IG9yIG90aGVyIHN0cnVjdHVyZXMgaW4gdGhlIGRhdGEgcGF0aC5cblxuSSdtIHRoaW5raW5nIG15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhlIGRpc2FsbG93YW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIG1lbnRpb25lZC4gSSBhbSBiZXR0aW5nIHRoYXQgaXQgaXMgbm90IHVzZWQgaW4gdGhlIGtlcm5lbCBzcGFjZS5cblxuTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgYW5kIGdvIGRpcmVjdGx5IHRvIGxvb2tpbmcgYXQgdGhlIGNvcmUgYHNlZzZfbG9jYWwuY2Agc291cmNlIGNvZGUsIGVzcGVjaWFsbHkgZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYGJwZl9sd3Rfc2VnNmAuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgYHNlZzZsb2NhbGAgaW50ZXJhY3RzIHdpdGggQlBGIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSB3aGVyZSBvciB3aHkgYGJwZl9za2JfcHVsbF9kYXRhYCBpcyBiZWluZyBkZWVtZWQgaW5hcHByb3ByaWF0ZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgd2l0aGluIHRoZSBjb2RlIGNvbW1lbnRzLCBhbnkgY2hlY2tzIG9yIGNvbmRpdGlvbnMsIG9yIGFueSBkZXNpZ24gZGVjaXNpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIHJlc3RyaWN0aW9uLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgd2F5IGBzZWc2bG9jYWxgIGhhbmRsZXMgcGFja2V0IHByb2Nlc3NpbmcgbWlnaHQgaGF2ZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgdGhhdCBtYWtlIGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uIGxpa2UgYGJwZl9za2JfcHVsbF9kYXRhYCB1bnN1aXRhYmxlIGZvciB0aGUgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjA5LjEzOTc4MTAzMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTY4MzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXFx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlxcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNzk9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTExNC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XFxua2VybmVsL2JwZi9idGYuYzo5MTE1OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvYnRmLmMtOTExNi1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfTFdUO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg0Mz1zdGF0aWMgYm9vbCBpc19uZXRfYWRtaW5fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODUyOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE5PXN0YXRpYyBib29sIG1heV9hY2Nlc3NfZGlyZWN0X3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgyOC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX09VVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDgyOTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgzMC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzY9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg3LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg5LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MTU9c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzYtXFx0ZmQgPSBubGFfZ2V0X3UzMih0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5Mzc6XFx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM4LVxcdGlmIChJU19FUlIocCkpIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XFx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVxcdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVxcdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXFx0PSBcXFwiY2dyb3VwX3NvY2tfYWRkclxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XFx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cXHRcXHQ9IFxcXCJsd3Rfc2VnNmxvY2FsXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVxcdFxcdD0gXFxcImxpcmNfbW9kZTJcXFwiLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcwLVxcdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XFx0eyBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3Mi1cXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsICAgICAgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MTc5OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyNi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6MjI3OlxcdHNjYWxlX3Rlc3QoXFxcInRlc3Rfc2VnNl9sb29wLmJwZi5vXFxcIiwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYz0yMD1zdGF0aWMgc3RydWN0IHNlY19uYW1lX3Rlc3QgdGVzdHNbXSA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00Mi1cXHR7XFxcImx3dF94bWl0XFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6NDM6XFx0e1xcXCJsd3Rfc2VnNmxvY2FsXFxcIiwgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgMH0sIHstRUlOVkFMLCAwfSB9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjEwLjY3OTQ3MDMwNloiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDUxNzIyNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2FmZXR5IEltcGxpY2F0aW9ucyBvZiBhIEJQRiBWZXJpZmllciBSZXN0cmljdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGJwZl9za2JfcHVsbF9kYXRhYCB1c2VzIGBza2JfcHVsbF9kYXRhKHNrYiwgbGVuKWAsIGFuZCBpdCdzIGRpc2FibGVkIGZvciBgbHd0X3NlZzZsb2NhbGAuIFRoZSBxdWVzdGlvbiBpcyAqd2h5Ki4gTXkgaHVuY2gsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIGlzIHRoYXQgaXQncyBiZWNhdXNlIGVpdGhlciB0aGUgcG9pbnRlciBpbnZhbGlkYXRpb24gaXMgYW4gaXNzdWUgaW4gYGx3dF9zZWc2bG9jYWxgLCB0aGF0IGNvbnRleHQgZG9lc24ndCBzdXBwb3J0IGl0LCBvciB0aGF0IHRoZXJlJ3Mgc3BlY2lmaWMgU1JIIGhhbmRsaW5nIHRoYXQgc2hvdWxkbid0IHJlYWxsb2NhdGUgdGhlIFNLQiBoZWFkLiBUaGUgKndoeSogaXNuJ3QgdGhlIGtleSBmb2N1cyBoZXJlLCB0aG91Z2guXG5cbldoYXQncyB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2luZyo/IEl0J3MgZWZmZWN0aXZlbHkgaGFyZGVuaW5nIHRoZSB2ZXJpZmllci4gSW5zdGVhZCBvZiBhbGxvd2luZyBgQlBGX0ZVTkNfc2tiX3B1bGxfZGF0YWAgdG8gXCJmYWxsIHRocm91Z2hcIiB0byB0aGUgZ2VuZXJpYyBgbHd0X291dF9mdW5jX3Byb3RvYCwgaXQgKmV4cGxpY2l0bHkqIHJlamVjdHMgaXQgaW4gYGx3dF9zZWc2bG9jYWxgIHByb2dyYW1zLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogcmV0dXJuIGBOVUxMYCBmcm9tIGBsd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG9gIHdoZW4gdGhpcyBmdW5jdGlvbiBJRCBpcyBlbmNvdW50ZXJlZC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIG9yIGNyZWF0ZWQgZm9yIHVzZXJzcGFjZS4gVGhlcmUncyBubyBjb25kaXRpb25hbCBsb2dpYyByZWxpYW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSdyZSBub3QgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGhvdXQgemVyb2luZy4gQW5kLCBjcml0aWNhbGx5LCB0aGlzIGlzbid0IGFsdGVyaW5nIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgbWlnaHQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIHJlYWQuIEl0J3Mgc3RyaWN0bHkgYSAqcmVzdHJpY3Rpb24qIGVuZm9yY2VkIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBwcmV2ZW50aW5nIHRoZSBoZWxwZXIgZnJvbSBiZWluZyAqbG9hZGVkKiBmb3IgdGhhdCBwcm9ncmFtIHR5cGUuIFJlYWxseSwgaXQncyBqdXN0IGFkZGluZyB0d28gbGluZXMgb2YgY29kZSB3aXRoaW4gdGhlIHZlcmlmaWVyIHRvIGRlbnkgYSBjZXJ0YWluIG9wZXJhdGlvbi5cblxuVGhpcyBpcyBhIHZlcmlmaWVyICpoZWxwZXIgcmVzdHJpY3Rpb24qIHRoYXQgcHJldmVudHMgQlBGIHByb2dyYW1zIG9mIHR5cGUgTFdUX1NFRzZMT0NBTCBmcm9tIGluYXBwcm9wcmlhdGVseSBjYWxsaW5nIGBicGZfc2tiX3B1bGxfZGF0YWAuIEl0J3MgYSBzYWZldHkgbWVhc3VyZSwgZXNzZW50aWFsbHkuIFRoZXJlIGlzICp6ZXJvKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byB0aGlzIGNoYW5nZS4gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZW1haW5pbmcgcG90ZW50aWFsIGlzc3VlcywgYnV0IHJlYWxseSwgdGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbiAqYmVmb3JlKiB0aGV5IGNhbiBvY2N1ci4gVGh1cywgaXQncyBzYWZlIHRvIHNheSBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ3ZlIGNoZWNrZWQgdGhlIGRpZmYgYW5kIG90aGVyIGFzcGVjdHMuIE5vIG90aGVyIGFyZWEgaXMgdG91Y2hlZC4gSXQncyBqdXN0IHRob3NlIHR3byBsaW5lcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgdGhlIGp1c3RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MDMsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjUzOjE1LjczMTE5NTY0N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZGlzYWxsb3dzIHRoZSBCUEYgaGVscGVyIGBicGZfc2tiX3B1bGxfZGF0YWAgZm9yIEJQRiBwcm9ncmFtcyBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIGJ5IHJldHVybmluZyBOVUxMIGZyb20gYGx3dF9zZWc2bG9jYWxfZnVuY19wcm90b2AuIFRoaXMgaXMgYSB2ZXJpZmllci1sZXZlbCBoZWxwZXIgcmVzdHJpY3Rpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkaXNhbGxvd3MgdGhlIEJQRiBoZWxwZXIgYGJwZl9za2JfcHVsbF9kYXRhYCBmb3IgQlBGIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgYnkgcmV0dXJuaW5nIE5VTEwgZnJvbSBgbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvYC4gVGhpcyBpcyBhIHZlcmlmaWVyLWxldmVsIGhlbHBlciByZXN0cmljdGlvbiBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[1] Phase: Succeeded StartedAt: 2026-09-09 04:53:27 +0000 UTC FinishedAt: 2026-09-09 04:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 04:53:27 +0000 UTC FinishedAt: 2026-09-09 04:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2] Phase: Succeeded StartedAt: 2026-09-09 04:53:27 +0000 UTC FinishedAt: 2026-09-09 08:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 04:53:27 +0000 UTC FinishedAt: 2026-09-09 08:33:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 04:53:27 +0000 UTC FinishedAt: 2026-09-09 04:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 04:53:27 +0000 UTC FinishedAt: 2026-09-09 04:53:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowwcrs8/series-workflowwcrs8-convert-artifact-1933086916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 04:53:37 +0000 UTC FinishedAt: 2026-09-09 05:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 04:53:37 +0000 UTC FinishedAt: 2026-09-09 05:10:00 +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:*285863ae-ae1b-4004-9d88-cd14ad1cb1b1,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-workflowwcrs8/series-workflowwcrs8-convert-artifact-1933086916/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": "c9c8c05d-235e-47ff-b91f-f9f6a444c525", "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-workflowwcrs8/series-workflowwcrs8-build-action-1586418690/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 04:53:37 +0000 UTC FinishedAt: 2026-09-09 05:09:50 +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:*285863ae-ae1b-4004-9d88-cd14ad1cb1b1,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-workflowwcrs8/series-workflowwcrs8-convert-artifact-1933086916/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": "c9c8c05d-235e-47ff-b91f-f9f6a444c525", "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-workflowwcrs8/series-workflowwcrs8-build-action-1586418690/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 05:10:00 +0000 UTC FinishedAt: 2026-09-09 05:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 05:10:00 +0000 UTC FinishedAt: 2026-09-09 05:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 05:10:00 +0000 UTC FinishedAt: 2026-09-09 05:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 05:10:00 +0000 UTC FinishedAt: 2026-09-09 05:10:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowwcrs8/series-workflowwcrs8-convert-artifact-1120160835/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 05:10:10 +0000 UTC FinishedAt: 2026-09-09 05:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 05:10:10 +0000 UTC FinishedAt: 2026-09-09 05:11:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c9c8c05d-235e-47ff-b91f-f9f6a444c525,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-workflowwcrs8/series-workflowwcrs8-build-action-1586418690/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-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 05:12:03 +0000 UTC FinishedAt: 2026-09-09 05:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 05:12:03 +0000 UTC FinishedAt: 2026-09-09 05:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 05:12:03 +0000 UTC FinishedAt: 2026-09-09 05:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 05:12:03 +0000 UTC FinishedAt: 2026-09-09 05:28:09 +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:*285863ae-ae1b-4004-9d88-cd14ad1cb1b1,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-workflowwcrs8/series-workflowwcrs8-convert-artifact-1120160835/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": "2a0882ab-13a6-4b28-8e63-63f98f1d61c9", "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-workflowwcrs8/series-workflowwcrs8-build-action-2474882807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 05:12:03 +0000 UTC FinishedAt: 2026-09-09 05:27:59 +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:*285863ae-ae1b-4004-9d88-cd14ad1cb1b1,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-workflowwcrs8/series-workflowwcrs8-convert-artifact-1120160835/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": "2a0882ab-13a6-4b28-8e63-63f98f1d61c9", "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-workflowwcrs8/series-workflowwcrs8-build-action-2474882807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 05:28:09 +0000 UTC FinishedAt: 2026-09-09 05:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 05:28:09 +0000 UTC FinishedAt: 2026-09-09 05:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 05:28:09 +0000 UTC FinishedAt: 2026-09-09 05:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 05:28:09 +0000 UTC FinishedAt: 2026-09-09 05:29:58 +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:*2a0882ab-13a6-4b28-8e63-63f98f1d61c9,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-workflowwcrs8/series-workflowwcrs8-build-action-2474882807/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-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 05:30:08 +0000 UTC FinishedAt: 2026-09-09 08:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 05:30:08 +0000 UTC FinishedAt: 2026-09-09 08:33:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"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:*c9c8c05d-235e-47ff-b91f-f9f6a444c525,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2a0882ab-13a6-4b28-8e63-63f98f1d61c9,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-workflowwcrs8/series-workflowwcrs8-build-action-1586418690/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-workflowwcrs8/series-workflowwcrs8-build-action-2474882807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 05:30:08 +0000 UTC FinishedAt: 2026-09-09 05:30:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 05:30:08 +0000 UTC FinishedAt: 2026-09-09 05:30:13 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"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-workflowwcrs8/series-workflowwcrs8-convert-artifact-2194158684/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 05:30:08 +0000 UTC FinishedAt: 2026-09-09 05:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 05:30:08 +0000 UTC FinishedAt: 2026-09-09 05:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 05:30:08 +0000 UTC FinishedAt: 2026-09-09 05:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 05:30:18 +0000 UTC FinishedAt: 2026-09-09 08:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcrs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwt_seg6local_func_proto","input_action_end_bpf","parse_nla_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF"],"series_id":"2f0f891b-40ac-4fd2-a047-59eb84850431","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 05:30:18 +0000 UTC FinishedAt: 2026-09-09 08:33:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c9c8c05d-235e-47ff-b91f-f9f6a444c525,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2a0882ab-13a6-4b28-8e63-63f98f1d61c9,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-workflowwcrs8/series-workflowwcrs8-build-action-1586418690/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-workflowwcrs8/series-workflowwcrs8-build-action-2474882807/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-workflowwcrs8/series-workflowwcrs8-convert-artifact-2194158684/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,}