Name: series-workflowwvxbp Phase: Succeeded StartedAt: 2026-09-11 02:12:25 +0000 UTC FinishedAt: 2026-09-11 03:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[0] Phase: Succeeded StartedAt: 2026-09-11 02:12:25 +0000 UTC FinishedAt: 2026-09-11 03:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 02:12:25 +0000 UTC FinishedAt: 2026-09-11 03:02:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "4c50ea25-9a65-48a0-a417-8b0ec1db1dac" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_defer_free_flush", "skb_attempt_defer_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3NrYl9hdHRlbXB0X2RlZmVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGBmb3JfZWFjaF9vbmxpbmVfbm9kZWApIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChgZm9yX2VhY2hfbm9kZWApIHdoZW4gZHJhaW5pbmcgZGVmZXJyZWQgc2tiIGxpc3RzLlxuXG5UaGlzIGlzIGEgbWlub3IgY29udHJvbCBmbG93IC8gb3B0aW1pemF0aW9uIGNoYW5nZSBpbiBuZXR3b3JrIGNvcmUgTkFQSSBkZWZlcnJlZCBTS0IgZnJlZWluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKSBpbiBjb3JlIG5ldHdvcmtpbmcgKG5ldC9jb3JlL2Rldi5jKSB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGZvcl9lYWNoX29ubGluZV9ub2RlKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoZm9yX2VhY2hfbm9kZSkuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIGR1cmluZyBOQVBJIHBvbGxpbmcgYW5kIHNvZnRpcnEgbmV0X3J4X2FjdGlvbiB0byBmbHVzaCBkZWZlcnJlZCBTS0JzIGFjcm9zcyBOVU1BIG5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTUEgbm9kZSB0cmFja2luZyBhbmQgZGVmZXJyZWQgcGFja2V0IGRlYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAyOTBlMGYwOTllNmJmLi5iNTI4YjZhOTg2ZmNmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNjkwNyw3ICYjNDM7NjkwNyw3IEBAIHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG4gXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbiBcdGludCBub2RlO1xuIFxuLVx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xuIFx0XHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSAmIzQzOyBub2RlO1xuIFxuIFx0XHRpZiAobGxpc3RfZW1wdHkoXHUwMDI2c2RuLVx1MDAzZWRlZmVyX2xpc3QpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3NrYl9hdHRlbXB0X2RlZmVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKSBpbiBjb3JlIG5ldHdvcmtpbmcgKG5ldC9jb3JlL2Rldi5jKSB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGZvcl9lYWNoX29ubGluZV9ub2RlKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoZm9yX2VhY2hfbm9kZSkuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIGR1cmluZyBOQVBJIHBvbGxpbmcgYW5kIHNvZnRpcnEgbmV0X3J4X2FjdGlvbiB0byBmbHVzaCBkZWZlcnJlZCBTS0JzIGFjcm9zcyBOVU1BIG5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTUEgbm9kZSB0cmFja2luZyBhbmQgZGVmZXJyZWQgcGFja2V0IGRlYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMjkwZTBmMDk5ZTZiZi4uYjUyOGI2YTk4NmZjZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTY5MDcsNyAmIzQzOzY5MDcsNyBAQCBzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKQogCXN0cnVjdCBza2JfZGVmZXJfbm9kZSAqc2RuOwogCWludCBub2RlOwogCi0JZm9yX2VhY2hfbm9kZShub2RlKSB7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKIAkJc2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTsKIAogCQlpZiAobGxpc3RfZW1wdHkoJmFtcDtzZG4tJmd0O2RlZmVyX2xpc3QpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTmV0d29yayBEZXZpY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIGRpZmYgYW5kIHRoZSBsaW5lIG51bWJlciwgNjkwNy4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgY29udGV4dC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCwgc28gSSBzdXNwZWN0IHdlJiMzOTtyZSBsb29raW5nIGF0IG9wdGltaXphdGlvbnMgb3IgY2hhbmdlcyB0byBob3cgU0tCcyBhcmUgaGFuZGxlZCBpbiBhIGRlZmVycmVkIGZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyB0aGUgYGZvcl9lYWNoX25vZGVgIGxvb3AsIHRoaXMgKm1pZ2h0KiBiZSByZWxhdGVkIHRvIE5VTUEgb3IgQ1BVIG5vZGUgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgaW4gdGhlIG5ldHdvcmsgc3RhY2suCgpMZXQgbWUgcXVpY2tseSBncmFiIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb24gYG5ldC9jb3JlL2Rldi5jYCB0byBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGZvcl9lYWNoX29ubGluZV9ub2RlYCBpcyB1c2VkIGhlcmUgYW5kIHNlZSB3aGF0IHdhcyBjaGFuZ2VkIGZyb20gYGZvcl9lYWNoX25vZGVgLiBUaGF04oCZcyBteSBwcmltYXJ5IGNvbmNlcm4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODkwOlx0XG42ODkxOlx0XHRpZiAodW5saWtlbHkodmFsIFx1MDAyNiBOQVBJRl9TVEFURV9NSVNTRUQpKSB7XG42ODkyOlx0XHRcdF9fbmFwaV9zY2hlZHVsZShuKTtcbjY4OTM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNjg5NDpcdFx0fVxuNjg5NTpcdFxuNjg5NjpcdFx0aWYgKHRpbWVvdXQpXG42ODk3Olx0XHRcdGhydGltZXJfc3RhcnQoXHUwMDI2bi1cdTAwM2V0aW1lciwgbnNfdG9fa3RpbWUodGltZW91dCksXG42ODk4Olx0XHRcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQpO1xuNjg5OTpcdFx0cmV0dXJuIHJldDtcbjY5MDA6XHR9XG42OTAxOlx0RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xuNjkwMjpcdFxuNjkwMzpcdHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG42OTA0Olx0e1xuNjkwNTpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfbGlzdDtcbjY5MDY6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0O1xuNjkwNzpcdFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG42OTA4Olx0XHRpbnQgbm9kZTtcbjY5MDk6XHRcbjY5MTA6XHRcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcbjY5MTE6XHRcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbjY5MTI6XHRcbjY5MTM6XHRcdFx0aWYgKGxsaXN0X2VtcHR5KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KSlcbjY5MTQ6XHRcdFx0XHRjb250aW51ZTtcbjY5MTU6XHRcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9jb3VudCwgMCk7XG42OTE2Olx0XHRcdGZyZWVfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RuLVx1MDAzZWRlZmVyX2xpc3QpO1xuNjkxNzpcdFxuNjkxODpcdFx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNrYiwgbmV4dCwgZnJlZV9saXN0LCBsbF9ub2RlKSB7XG42OTE5Olx0XHRcdFx0cHJlZmV0Y2gobmV4dCk7XG42OTIwOlx0XHRcdFx0bmFwaV9jb25zdW1lX3NrYihza2IsIDEpO1xuNjkyMTpcdFx0XHR9XG42OTIyOlx0XHR9XG42OTIzOlx0fVxuNjkyNDpcdFxuNjkyNTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxuNjkyNjpcdFxuNjkyNzpcdGVudW0ge1xuNjkyODpcdFx0TkFQSV9GX1BSRUZFUl9CVVNZX1BPTExcdD0gMSxcbjY5Mjk6XHRcdE5BUElfRl9FTkRfT05fUkVTQ0hFRFx0PSAyLFxuNjkzMDpcdH07XG42OTMxOlx0XG42OTMyOlx0c3RhdGljIHZvaWQgYnVzeV9wb2xsX3N0b3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB2b2lkICpoYXZlX3BvbGxfbG9jayxcbjY5MzM6XHRcdFx0XHQgICB1bnNpZ25lZCBmbGFncywgdTE2IGJ1ZGdldClcbjY5MzQ6XHR7XG42OTM1Olx0XHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbjY5MzY6XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7XG42OTM3Olx0XHRpbnQgcmM7XG42OTM4Olx0XG42OTM5Olx0XHQvKiBCdXN5IHBvbGxpbmcgbWVhbnMgdGhlcmUgaXMgYSBoaWdoIGNoYW5jZSBkZXZpY2UgZHJpdmVyIGhhcmQgaXJxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzZSBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCBpbiB0aGUgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHVzZSBvZiBgZ3JlcHBlcmAgc2hvdWxkIGRvIHRoZSB0cmljay4gSSYjMzk7bGwgbGF1bmNoIHRoZSBzZWFyY2ggYW5kIHNlZSB3aGF0IHBvcHMgdXAuIFNob3VsZG4mIzM5O3QgdGFrZSB0b28gbG9uZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2RlZmVyX2ZyZWVfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz02OTAxPUVYUE9SVF9TWU1CT0wobmFwaV9jb21wbGV0ZV9kb25lKTtcbm5ldC9jb3JlL2Rldi5jLTY5MDItXG5uZXQvY29yZS9kZXYuYzo2OTAzOnN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG5uZXQvY29yZS9kZXYuYy02OTA0LXtcbi0tXG5uZXQvY29yZS9kZXYuYz02OTg5PXN0YXRpYyB2b2lkIF9fbmFwaV9idXN5X2xvb3AodW5zaWduZWQgaW50IG5hcGlfaWQsXG4tLVxubmV0L2NvcmUvZGV2LmMtNzA0My1cdFx0XHRcdFx0TElOVVhfTUlCX0JVU1lQT0xMUlhQQUNLRVRTLCB3b3JrKTtcbm5ldC9jb3JlL2Rldi5jOjcwNDQ6XHRcdHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCk7XG5uZXQvY29yZS9kZXYuYy03MDQ1LVx0XHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9Nzg4OT1zdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxubmV0L2NvcmUvZGV2LmMtNzkxNi1cdFx0fVxubmV0L2NvcmUvZGV2LmM6NzkxNzpcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXHRcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcbi0tXG5uZXQvY29yZS9kZXYuYz03OTY4PXN0YXRpYyBfX2xhdGVudF9lbnRyb3B5IHZvaWQgbmV0X3J4X2FjdGlvbih2b2lkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5ODctXG5uZXQvY29yZS9kZXYuYzo3OTg4Olx0XHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xubmV0L2NvcmUvZGV2LmMtNzk4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXNgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQuIFRoZSBiZXN0IGZpcnN0IHN0ZXAgaXMgYSBxdWljayBgZ3JlcGAgZm9yIHRoZSBleGFjdCBzdHJpbmcsIGBza2JfZGVmZXJfbm9kZXNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBleHBsb3JlIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9kZWZlcl9ub2RlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ob3RkYXRhLmg9MTk9c3RydWN0IG5ldF9ob3RkYXRhIHtcbi0tXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNDEtI2VuZGlmXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6NDI6XHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgX19wZXJjcHUgKnNrYl9kZWZlcl9ub2RlcztcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00My1cdGludFx0XHRcdGdyb19ub3JtYWxfYmF0Y2g7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjkwMz1zdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY5MTAtXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7XG5uZXQvY29yZS9kZXYuYzo2OTExOlx0XHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSAmIzQzOyBub2RlO1xubmV0L2NvcmUvZGV2LmMtNjkxMi1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMzQyNj1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzQ3Ny1cdH1cbm5ldC9jb3JlL2Rldi5jOjEzNDc4Olx0bmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzID1cbm5ldC9jb3JlL2Rldi5jLTEzNDc5LVx0XHQgX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkgKiBucl9ub2RlX2lkcyxcbm5ldC9jb3JlL2Rldi5jLTEzNDgwLVx0XHRcdFx0X19hbGlnbm9mX18oc3RydWN0IHNrYl9kZWZlcl9ub2RlKSk7XG5uZXQvY29yZS9kZXYuYzoxMzQ4MTpcdGlmICghbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKVxubmV0L2NvcmUvZGV2LmMtMTM0ODItXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcdGtmcmVlX3NrYl9uYXBpX2NhY2hlKHNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cbm5ldC9jb3JlL3NrYnVmZi5jOjczNDc6XHRzZG4gPSBwZXJfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMsIGNwdSkgJiM0MzsgbnVtYV9ub2RlX2lkKCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MzQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBTS0IgRGVwdGhzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHNvY2tldCBidWZmZXJzLiBNeSBndXQgZmVlbGluZyBpcyBsZWFkaW5nIG1lIHRvd2FyZHMgYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIHNrYnMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBsaW5lIDczNDcgc291bmRzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYTsgaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGFjdGlvbiBpcy4gSG9wZWZ1bGx5IHRoZSBjb2RlIGluIHRoaXMgYXJlYSBtYWtlcyBpdCBjbGVhcmVyIHdoYXQgdGhlIGlzc3VlIGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGlmIHRoaXMgaHVuY2ggaG9sZHMgd2F0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczMzA6XHRcbjczMzE6XHRcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cbjczMzI6XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjczMzM6XHRcdFx0Z290byBub2RlZmVyO1xuNzMzNDpcdFxuNzMzNTpcdFx0Y3B1ID0gc2tiLVx1MDAzZWFsbG9jX2NwdTtcbjczMzY6XHRcdGlmIChjcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSB8fFxuNzMzNzpcdFx0ICAgIFdBUk5fT05fT05DRShjcHUgXHUwMDNlPSBucl9jcHVfaWRzKSB8fFxuNzMzODpcdFx0ICAgICFjcHVfb25saW5lKGNwdSkpIHtcbjczMzk6XHRub2RlZmVyOlx0a2ZyZWVfc2tiX25hcGlfY2FjaGUoc2tiKTtcbjczNDA6XHRcdFx0cmV0dXJuO1xuNzM0MTpcdFx0fVxuNzM0MjpcdFxuNzM0MzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2JfZHN0KHNrYikpO1xuNzM0NDpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2ItXHUwMDNlZGVzdHJ1Y3Rvcik7XG43MzQ1Olx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xuNzM0NjpcdFxuNzM0NzpcdFx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xuNzM0ODpcdFxuNzM0OTpcdFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcbjczNTA6XHRcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcdTAwMjZzZG4tXHUwMDNlZGVmZXJfY291bnQpO1xuNzM1MTpcdFxuNzM1MjpcdFx0aWYgKGRlZmVyX2NvdW50IFx1MDAzZT0gZGVmZXJfbWF4KVxuNzM1MzpcdFx0XHRnb3RvIG5vZGVmZXI7XG43MzU0Olx0XG43MzU1Olx0XHRsbGlzdF9hZGQoXHUwMDI2c2tiLVx1MDAzZWxsX25vZGUsIFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KTtcbjczNTY6XHRcbjczNTc6XHRcdC8qIFNlbmQgYW4gSVBJIGV2ZXJ5IHRpbWUgcXVldWUgcmVhY2hlcyBoYWxmIGNhcGFjaXR5LiAqL1xuNzM1ODpcdFx0a2ljayA9IChkZWZlcl9jb3VudCAtIDEpID09IChkZWZlcl9tYXggXHUwMDNlXHUwMDNlIDEpO1xuNzM1OTpcdFxuNzM2MDpcdFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcbjczNjE6XHRcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cbjczNjI6XHRcdCAqL1xuNzM2MzpcdFx0aWYgKHVubGlrZWx5KGtpY2spKVxuNzM2NDpcdFx0XHRraWNrX2RlZmVyX2xpc3RfcHVyZ2UoY3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBTS0IgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBuZXR3b3JrIGJlaGF2aW9yLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBoYW5kbGVkIHdpdGhpbiB0aGUgYG5ldC9jb3JlL3NrYnVmZi5jYCBmaWxlLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgKnNrX2J1ZmYqIHN0cnVjdHVyZSwgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIHVzZWQgdG8gcmVwcmVzZW50IG5ldHdvcmsgcGFja2V0cyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb3JlIHBhY2tldCBtYW5pcHVsYXRpb24sIGFsbG9jYXRpb24sIGFuZCBkZWFsbG9jYXRpb24gbG9naWMgcmVzaWRlcy4gVGltZSB0byBkaWcgaW4gYW5kIHBpbnBvaW50IHRoZSBwcmVjaXNlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGFsbG9jYXRpb24sIGNvcHlpbmcsIG9yIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcHJvYmFibHkgdGhlIGN1bHByaXQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBob2xkcywgbGV0JiMzOTtzIGV4cGxvcmUgdGhpcyBmaWxlIGFuZCBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MzIwOlx0dm9pZCBza2JfYXR0ZW1wdF9kZWZlcl9mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG43MzIxOlx0e1xuNzMyMjpcdFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG43MzIzOlx0XHR1bnNpZ25lZCBsb25nIGRlZmVyX2NvdW50O1xuNzMyNDpcdFx0dW5zaWduZWQgaW50IGRlZmVyX21heDtcbjczMjU6XHRcdGJvb2wga2ljaztcbjczMjY6XHRcdGludCBjcHU7XG43MzI3Olx0XG43MzI4Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZza2JfZGVmZXJfZGlzYWJsZV9rZXkpKVxuNzMyOTpcdFx0XHRnb3RvIG5vZGVmZXI7XG43MzMwOlx0XG43MzMxOlx0XHQvKiB6ZXJvIGNvcHkgbm90aWZpY2F0aW9ucyBzaG91bGQgbm90IGJlIGRlbGF5ZWQuICovXG43MzMyOlx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG43MzMzOlx0XHRcdGdvdG8gbm9kZWZlcjtcbjczMzQ6XHRcbjczMzU6XHRcdGNwdSA9IHNrYi1cdTAwM2VhbGxvY19jcHU7XG43MzM2Olx0XHRpZiAoY3B1ID09IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgfHxcbjczMzc6XHRcdCAgICBXQVJOX09OX09OQ0UoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcykgfHxcbjczMzg6XHRcdCAgICAhY3B1X29ubGluZShjcHUpKSB7XG43MzM5Olx0bm9kZWZlcjpcdGtmcmVlX3NrYl9uYXBpX2NhY2hlKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBTS0IgRGVmZXJyZWQgRnJlZSBJdGVyYXRpb24gQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSBpbiBgbmV0L2NvcmUvZGV2LmNgIHdpdGhpbiB0aGUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgdXNlZCBgZm9yX2VhY2hfbm9kZWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciAqcG9zc2libGUqIG5vZGVzLCBhbmQgbm93IGl0JiMzOTtzIHVzaW5nIGBmb3JfZWFjaF9vbmxpbmVfbm9kZWAuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50IGJlY2F1c2UgaXQmIzM5O3MgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIGRlZmVycmVkIFNLQiBmcmVlIG1lY2hhbmlzbSB3b3Jrcywgc3BlY2lmaWNhbGx5IGR1cmluZyBgbmV0X3J4X2FjdGlvbmAsIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIGFuZCBgX19uYXBpX2J1c3lfbG9vcGAg4oCTIGFsbCBjcml0aWNhbCBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiBTbywgeWVzLCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGZyZXF1ZW50bHkgZXhlY3V0ZWQuCgpJIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGhvcGluZyB0byBsaW1pdCB0aGUgc2NvcGUsIGJ1dCBpdCBsb29rcyBsaWtlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgYWx3YXlzIGNvbXBpbGVkIGluIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXQgYWx3YXlzIGlzIGZvciBhbnkgbmV0d29ya2luZyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyBhcm91bmQgTlVNQSBub2RlIHN0YXRlcy4gSWYgU0tCcyBhcmUgYWRkZWQgdG8gYSBub2RlIHRoYXQmIzM5O3MgKmFib3V0KiB0byBnbyBvZmZsaW5lIG9yIGlzIGluIGEgZGlmZmVyZW50IHN0YXRlLCB0aGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhhdCYjMzk7cyBhIHBlcmZlY3QgZnV6emluZyB0YXJnZXQuCgpNeSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGV2YWx1YXRpb24gaXMgbG9va2luZyBnb29kLiBUaGUgY2hhbmdlIGlzIGluIGNvcmUgbmV0d29ya2luZywgbW9kaWZpZXMgYSBjb3JlIGxvb3AsIGlzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIGFuZCBpbnZvbHZlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1ZSB0byBOVU1BIG5vZGUgc3RhdGUgdHJhbnNpdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXRzZWxmIGlzIHRoZSBwcmltYXJ5IHRhcmdldCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbG9vcCB3YXMgY2hhbmdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgaW5saW5lZCBvciBjYWxsZWQgZGlyZWN0bHkuIFRoZSByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBza2JfYXR0ZW1wdF9kZWZlcl9mcmVlYCAod2hpY2ggYWN0dWFsbHkgYWRkcyBTS0JzIHRvIHRoZSBkZWZlcnJhbCBsaXN0KSBhbmQgdGhlIE5BUEkvc29mdGlycSBoYW5kbGVycyBsaWtlIGBuZXRfcnhfYWN0aW9uYCwgYW5kIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIGFyZSBhbHNvIHJlbGV2YW50LiBVbHRpbWF0ZWx5LCBJJiMzOTtkIHNheSB0aGUgY29yZSBzeW1ib2xzIGhlcmUgZm9yIGZ1enppbmcgd291bGQgYmUgYm90aCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAgYW5kIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAuIEkgc2hvdWxkIGFsc28gcnVuIGEgYGdyZXBgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIHdpdGggU0tCIGRlZmVycmFsIGFuZCBmcmVlaW5nIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9kZWZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9uZXQucnN0PTM2MD1EZWZhdWx0IHZhbHVlIGlzIDEwLCBtaW5pbXVtIDEsIG1heGltdW0gMzYwMC5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3QtMzYxLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvbmV0LnJzdDozNjI6c2tiX2RlZmVyX21heFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvbmV0LnJzdC0zNjMtLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0PTc2OT10byBlYWNoIGluZGl2aWR1YWwgTUFDIGRyaXZlciBmb3IgUEhZIHRpbWVzdGFtcGluZyBzdXBwb3J0LiBUaGlzIGVudGFpbHM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNzc3LSAgYGBuZXRpZl9yeCgpYGAgYW5kIHNpbWlsYXIsIE1BQyBkcml2ZXJzIG11c3QgY2hlY2sgd2hldGhlclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q6Nzc4OiAgYGBza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYilgYCBpcyBuZWNlc3Nhcnkgb3Igbm90IC0gYW5kIGlmIGl0IGlzLCBkb24mIzM5O3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0LTc3OS0gIGNhbGwgYGBuZXRpZl9yeCgpYGAgYXQgYWxsLiAgSWYgYGBDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HYGAgaXNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03ODctICBgYG5ldGlmX3JlY2VpdmVfc2tiYGAsIHRoZSBzdGFjayBhdXRvbWF0aWNhbGx5IGNoZWNrcyB3aGV0aGVyXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdDo3ODg6ICBgYHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoKWBgIGlzIG5lY2Vzc2FyeSwgc28gdGhpcyBjaGVjayBpcyBub3QgbmVlZGVkIGluc2lkZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNzg5LSAgdGhlIGRyaXZlci5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q9NTcyPVNPX1RJTUVTVEFNUElORyBBUEkg5LiN5YWB6K645Li65ZCM5LiA5pWw5o2u5YyF5Lyg6YCS5aSa5Liq56Gs5Lu25pe26Ze05oiz77yM5Zug5q2k6Zmk5LqGIERTQVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjAtICDlnKggcGxhaW4gYGBuZXRpZl9yeCgpYGAg5ZKM57G75Ly85oOF5Ya15LiL77yMTUFDIOmpseWKqOeoi+W6j+W/hemhu+ajgOafpeaYr+WQplxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0OjYyMTogIGBgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpYGAg5piv5b+F6KaB55qE77yM5aaC5p6c5piv77yM5YiZ5LiN6LCD55SoIGBgbmV0aWZfcngoKWBg44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjIyLSAg5aaC5p6cIGBgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR2BgIOWQr+eUqO+8jOW5tuS4lFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjctICDlr7nkuo7lhbbku5Ygc2tiIOaOpeaUtuWHveaVsO+8jOS+i+WmgiBgYG5hcGlfZ3JvX3JlY2VpdmVgYCDlkowgYGBuZXRpZl9yZWNlaXZlX3NrYmBg77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q6NjI4OiAg5aCG5qCI5Lya6Ieq5Yqo5qOA5p+l5piv5ZCmIGBgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcCgpYGAg5piv5b+F6KaB55qE77yM5Zug5q2k5q2k5qOA5p+l5LiNXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjI5LSAg6ZyA6KaB5Zyo6amx5Yqo56iL5bqP5YaF6YOo44CCXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYz0zOTU9Ym9vbCBzamExMTEwX3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYy00MDctXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3B0cC5jOjQwODovKiBDYWxsZWQgZnJvbSBkc2Ffc2tiX2RlZmVyX3J4X3RpbWVzdGFtcCAqL1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYy00MDktYm9vbCBzamExMTA1X3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2xpYjgzOTAuYz02NTk9c3RhdGljIHZvaWQgZWlfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbGliODM5MC5jLTc0MC1cdFx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbGliODM5MC5jOjc0MTpcdFx0XHRcdGlmICghc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9saWI4MzkwLmMtNzQyLVx0XHRcdFx0XHRuZXRpZl9yeChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eC5jPTM4Mz1zdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTJ4eF9mZWNfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYy00MzEtXHRcdHJza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhyc2tiLCBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4LmM6NDMyOlx0XHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAocnNrYikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYy00MzMtXHRcdFx0bmV0aWZfcngocnNrYik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmM9NjQ1PXN0YXRpYyBpcnFyZXR1cm5fdCBsYW45NjZ4X3h0cl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jLTcyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jOjcyMzpcdFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYy03MjQtXHRcdFx0bmV0aWZfcngoc2tiKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmM9MzUzPXN0YXRpYyBib29sIG9jZWxvdF9mZG1hX3JlY2VpdmVfc2tiKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMtMzgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5jOjM4MzpcdGlmIChsaWtlbHkoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMtMzg0LVx0XHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYz00OT1zdGF0aWMgaXJxcmV0dXJuX3Qgb2NlbG90X3h0cl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jLTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jOjY2Olx0XHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYy02Ny1cdFx0XHRuZXRpZl9yeChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmM9OTY4PXN0YXRpYyB2b2lkIGxsX3RlbWFjX3JlY3Yoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYy0xMDIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYzoxMDIzOlx0XHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmMtMTAyNC1cdFx0XHRuZXRpZl9yeChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYz01OTE9c3RhdGljIHZvaWQgeGVtYWNsaXRlX3J4X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2VtYWNsaXRlLmMtNjIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jOjYyNDpcdGlmICghc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jLTYyNS1cdFx0bmV0aWZfcngoc2tiKTtcdC8qIFNlbmQgdGhlIHBhY2tldCB1cHN0cmVhbSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9Mzg5MT1zdGF0aWMgdm9pZCBsYW43OHh4X3NrYl9yZXR1cm4oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zOTAxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzozOTAyOlx0aWYgKHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzkwMy1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0zMjY9dm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM0OS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzozNTA6XHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM1MS1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDcxNT12b2lkIHNrYl9jbG9uZV90eF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ3MTY6Ym9vbCBza2JfZGVmZXJfcnhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzE3LVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDcyMD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Nsb25lX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDcyMy1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDcyNDpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzI1LXtcbi0tXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtMTItXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6MTM6c3RydWN0IHNrYl9kZWZlcl9ub2RlIHtcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC0xNC1cdHN0cnVjdCBsbGlzdF9oZWFkXHRkZWZlcl9saXN0O1xuLS1cbmluY2x1ZGUvbmV0L2hvdGRhdGEuaD0xOT1zdHJ1Y3QgbmV0X2hvdGRhdGEge1xuLS1cbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00MS0jZW5kaWZcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaDo0MjpcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSBfX3BlcmNwdSAqc2tiX2RlZmVyX25vZGVzO1xuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQzLVx0aW50XHRcdFx0Z3JvX25vcm1hbF9iYXRjaDtcbi0tXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNTEtXHRpbnRcdFx0XHRzeXNjdGxfbWF4X3NrYl9mcmFncztcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaDo1MjpcdGludFx0XHRcdHN5c2N0bF9za2JfZGVmZXJfbWF4O1xuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTUzLVx0aW50XHRcdFx0c3lzY3RsX21lbV9wY3B1X3Jzdjtcbi0tXG5uZXQvY29yZS9kZXYuYz02NDQxPXN0YXRpYyBpbnQgbmV0aWZfcmVjZWl2ZV9za2JfaW50ZXJuYWwoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy02NDQ2LVxubmV0L2NvcmUvZGV2LmM6NjQ0NzpcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG5uZXQvY29yZS9kZXYuYy02NDQ4LVx0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjQ2OD12b2lkIG5ldGlmX3JlY2VpdmVfc2tiX2xpc3RfaW50ZXJuYWwoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5uZXQvY29yZS9kZXYuYy02NDc2LVx0XHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xubmV0L2NvcmUvZGV2LmM6NjQ3NzpcdFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG5uZXQvY29yZS9kZXYuYy02NDc4LVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QsIFx1MDAyNnN1Ymxpc3QpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTY5MDE9RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xubmV0L2NvcmUvZGV2LmMtNjkwMi1cbm5ldC9jb3JlL2Rldi5jOjY5MDM6c3RhdGljIHZvaWQgc2tiX2RlZmVyX2ZyZWVfZmx1c2godm9pZClcbm5ldC9jb3JlL2Rldi5jLTY5MDQte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTY5MDYtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dDtcbm5ldC9jb3JlL2Rldi5jOjY5MDc6XHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbm5ldC9jb3JlL2Rldi5jLTY5MDgtXHRpbnQgbm9kZTtcbi0tXG5uZXQvY29yZS9kZXYuYy02OTEwLVx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xubmV0L2NvcmUvZGV2LmM6NjkxMTpcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbm5ldC9jb3JlL2Rldi5jLTY5MTItXG4tLVxubmV0L2NvcmUvZGV2LmM9Njk4OT1zdGF0aWMgdm9pZCBfX25hcGlfYnVzeV9sb29wKHVuc2lnbmVkIGludCBuYXBpX2lkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcwNDMtXHRcdFx0XHRcdExJTlVYX01JQl9CVVNZUE9MTFJYUEFDS0VUUywgd29yayk7XG5uZXQvY29yZS9kZXYuYzo3MDQ0Olx0XHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xubmV0L2NvcmUvZGV2LmMtNzA0NS1cdFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc4ODk9c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MTYtXHRcdH1cbm5ldC9jb3JlL2Rldi5jOjc5MTc6XHRcdHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCk7XG5uZXQvY29yZS9kZXYuYy03OTE4LVx0XHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9Nzk2OD1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIG5ldF9yeF9hY3Rpb24odm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy03OTg3LVxubmV0L2NvcmUvZGV2LmM6Nzk4ODpcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbm5ldC9jb3JlL2Rldi5jLTc5ODktXG4tLVxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTM0NzctXHR9XG5uZXQvY29yZS9kZXYuYzoxMzQ3ODpcdG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcyA9XG5uZXQvY29yZS9kZXYuYzoxMzQ3OTpcdFx0IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpICogbnJfbm9kZV9pZHMsXG5uZXQvY29yZS9kZXYuYzoxMzQ4MDpcdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkpO1xubmV0L2NvcmUvZGV2LmM6MTM0ODE6XHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2Rlcylcbm5ldC9jb3JlL2Rldi5jLTEzNDgyLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvY29yZS9ob3RkYXRhLmM9MTA9c3RydWN0IG5ldF9ob3RkYXRhIG5ldF9ob3RkYXRhIF9fY2FjaGVsaW5lX2FsaWduZWQgPSB7XG4tLVxubmV0L2NvcmUvaG90ZGF0YS5jLTIzLVx0LnN5c2N0bF9tYXhfc2tiX2ZyYWdzID0gTUFYX1NLQl9GUkFHUyxcbm5ldC9jb3JlL2hvdGRhdGEuYzoyNDpcdC5zeXNjdGxfc2tiX2RlZmVyX21heCA9IDEyOCxcbm5ldC9jb3JlL2hvdGRhdGEuYy0yNS1cdC5zeXNjdGxfbWVtX3BjcHVfcnN2ID0gU0tfTUVNT1JZX1BDUFVfUkVTRVJWRVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5oPTE1PWV4dGVybiBzdHJ1Y3QgbXV0ZXggcnBzX2RlZmF1bHRfbWFza19tdXRleDtcbm5ldC9jb3JlL25ldC1zeXNmcy5oLTE2LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmg6MTc6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XG5uZXQvY29yZS9uZXQtc3lzZnMuaC0xOC0jZW5kaWZcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xNTIyPXZvaWQgbmFwaV9jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYnVkZ2V0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1MzAtXG5uZXQvY29yZS9za2J1ZmYuYzoxNTMxOlx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnNrYl9kZWZlcl9kaXNhYmxlX2tleSkgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9za2J1ZmYuYy0xNTMyLVx0ICAgIHNrYi1cdTAwM2VhbGxvY19jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpIFx1MDAyNlx1MDAyNiAhc2tiX3NoYXJlZChza2IpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzI5Nz1zdGF0aWMgdm9pZCBrZnJlZV9za2JfbmFwaV9jYWNoZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczMDktXG5uZXQvY29yZS9za2J1ZmYuYzo3MzEwOkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XG5uZXQvY29yZS9za2J1ZmYuYy03MzExLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTczMjA9dm9pZCBza2JfYXR0ZW1wdF9kZWZlcl9mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy03MzIxLXtcbm5ldC9jb3JlL3NrYnVmZi5jOjczMjI6XHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjMtXHR1bnNpZ25lZCBsb25nIGRlZmVyX2NvdW50O1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczMjctXG5uZXQvY29yZS9za2J1ZmYuYzo3MzI4Olx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KSlcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjktXHRcdGdvdG8gbm9kZWZlcjtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MzM5PW5vZGVmZXI6XHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczNDYtXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3Olx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xubmV0L2NvcmUvc2tidWZmLmMtNzM0OC1cbm5ldC9jb3JlL3NrYnVmZi5jOjczNDk6XHRkZWZlcl9tYXggPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEuc3lzY3RsX3NrYl9kZWZlcl9tYXgpO1xubmV0L2NvcmUvc2tidWZmLmMtNzM1MC1cdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcdTAwMjZzZG4tXHUwMDNlZGVmZXJfY291bnQpO1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTMzND1zdGF0aWMgaW50IHByb2NfZG9fcnNzX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1MS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1MjpzdGF0aWMgaW50IHByb2NfZG9fc2tiX2RlZmVyX21heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzUzLVx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1NC17XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNTU6XHRzdGF0aWMgREVGSU5FX01VVEVYKHNrYl9kZWZlcl9tYXhfbXV0ZXgpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzU2LVx0aW50IHJldCwgb3ZhbCwgbnZhbDtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1Ny1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1ODpcdG11dGV4X2xvY2soXHUwMDI2c2tiX2RlZmVyX21heF9tdXRleCk7XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNTktXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNjA6XHRvdmFsID0gIW5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4O1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzYxLVx0cmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzYyOlx0bnZhbCA9ICFuZXRfaG90ZGF0YS5zeXNjdGxfc2tiX2RlZmVyX21heDtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM2My1cbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNjUtXHRcdGlmIChudmFsKVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzY2Olx0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNjctXHRcdGVsc2Vcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2ODpcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KTtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM2OS1cdH1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM3MC1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM3MTpcdG11dGV4X3VubG9jayhcdTAwMjZza2JfZGVmZXJfbWF4X211dGV4KTtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM3Mi1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NDMwPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNjcxLVx0e1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NjcyOlx0XHQucHJvY25hbWVcdD0gXCYjMzQ7c2tiX2RlZmVyX21heFwmIzM0Oyxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjY3MzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZXRfaG90ZGF0YS5zeXNjdGxfc2tiX2RlZmVyX21heCxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTY3NC1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNjc1LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo2NzY6XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb19za2JfZGVmZXJfbWF4LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNjc3LVx0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4tLVxubmV0L2NvcmUvdGltZXN0YW1waW5nLmM9NjU9RVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nsb25lX3R4X3RpbWVzdGFtcCk7XG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy02Ni1cbm5ldC9jb3JlL3RpbWVzdGFtcGluZy5jOjY3OmJvb2wgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvdGltZXN0YW1waW5nLmMtNjgte1xuLS1cbm5ldC9jb3JlL3RpbWVzdGFtcGluZy5jLTExMy19XG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYzoxMTQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcCk7XG4tLVxubmV0L2RzYS90YWcuYz0yMD1zdGF0aWMgREVGSU5FX01VVEVYKGRzYV90YWdfZHJpdmVyc19sb2NrKTtcbi0tXG5uZXQvZHNhL3RhZy5jLTI5LSAqL1xubmV0L2RzYS90YWcuYzozMDpzdGF0aWMgYm9vbCBkc2Ffc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChzdHJ1Y3QgZHNhX3VzZXJfcHJpdiAqcCxcbm5ldC9kc2EvdGFnLmMtMzEtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvZHNhL3RhZy5jPTU0PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZHNhL3RhZy5jLTExOS1cbm5ldC9kc2EvdGFnLmM6MTIwOlx0aWYgKGRzYV9za2JfZGVmZXJfcnhfdGltZXN0YW1wKHAsIHNrYikpXG5uZXQvZHNhL3RhZy5jLTEyMS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE1CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGVmZXJyZWQgU0tCIEZyZWVpbmcgZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgY2FsbGVkIGJ5IGBfX25hcGlfYnVzeV9sb29wYCwgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCwgYW5kIGBuZXRfcnhfYWN0aW9uYCwgd2hpbGUgYHNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGBuYXBpX2NvbnN1bWVfc2tiYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIGFuZCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBzeW1ib2xzIGFyZSBhbHNvIGFmZmVjdGVkLgoKQSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIGlzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19ORVRgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBjb25zaWRlci4gWWVzLCBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIGl0IGxvb2tzIGxpa2UgYE5FVGAgaXMgdGhlIG9ubHkgcmVxdWlyZWQgY29uZmlndXJhdGlvbi4KCk5vdywgYSBzYW5pdHkgY2hlY2sgb2YgdGhlIGd1aWRlbGluZXM6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGBFbmFibGVDb25maWdzYCBpcyBgWyYjMzQ7TkVUJiMzNDtdYCwgYW5kIGBGb2N1c1N5bWJvbHNgIGlzIGRlZmluZWQgYXMgYFsmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssICYjMzQ7c2tiX2F0dGVtcHRfZGVmZXJfZnJlZSYjMzQ7XWAuIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc3VjY2luY3QuCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY2hvaWNlIG9mIGZvY3VzIHN5bWJvbHMuIFllcywgdGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBza2IgZGVmZXJyZWQgZnJlZSBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB3aGVyZSB0aGUgbG9vcCBpdGVyYXRpb24gb3ZlciBOVU1BIG5vZGVzIHdhcyBjaGFuZ2VkLiBUaGUgZmFjdCB0aGF0IHRoZSBpdGVyYXRpb24gc3RyYXRlZ3kgaGFzIGNoYW5nZWQgaXMgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3NrYl9hdHRlbXB0X2RlZmVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKSBpbiBjb3JlIG5ldHdvcmtpbmcgKG5ldC9jb3JlL2Rldi5jKSB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGZvcl9lYWNoX29ubGluZV9ub2RlKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoZm9yX2VhY2hfbm9kZSkuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIGR1cmluZyBOQVBJIHBvbGxpbmcgYW5kIHNvZnRpcnEgbmV0X3J4X2FjdGlvbiB0byBmbHVzaCBkZWZlcnJlZCBTS0JzIGFjcm9zcyBOVU1BIG5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTUEgbm9kZSB0cmFja2luZyBhbmQgZGVmZXJyZWQgcGFja2V0IGRlYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX2RlZmVyX2ZyZWVfZmx1c2gmIzM0OywKICAgICYjMzQ7c2tiX2F0dGVtcHRfZGVmZXJfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza2JfZGVmZXJfZnJlZV9mbHVzaCgpIGluIGNvcmUgbmV0d29ya2luZyAobmV0L2NvcmUvZGV2LmMpIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoZm9yX2VhY2hfb25saW5lX25vZGUpIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChmb3JfZWFjaF9ub2RlKS4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgZHVyaW5nIE5BUEkgcG9sbGluZyBhbmQgc29mdGlycSBuZXRfcnhfYWN0aW9uIHRvIGZsdXNoIGRlZmVycmVkIFNLQnMgYWNyb3NzIE5VTUEgbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVNQSBub2RlIHRyYWNraW5nIGFuZCBkZWZlcnJlZCBwYWNrZXQgZGVhbGxvY2F0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChgZm9yX2VhY2hfb25saW5lX25vZGVgKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoYGZvcl9lYWNoX25vZGVgKSB3aGVuIGRyYWluaW5nIGRlZmVycmVkIHNrYiBsaXN0cy5cblxuVGhpcyBpcyBhIG1pbm9yIGNvbnRyb2wgZmxvdyAvIG9wdGltaXphdGlvbiBjaGFuZ2UgaW4gbmV0d29yayBjb3JlIE5BUEkgZGVmZXJyZWQgU0tCIGZyZWVpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZWVjNjdhZTQzZTg4OWUyMjQwZWY1NjFmZjg4YzM5YWJkMWNhZTVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDM6MDE6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDI5MGUwZjA5OWU2YmYuLmI1MjhiNmE5ODZmY2YgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC02OTA3LDcgJiM0Mzs2OTA3LDcgQEAgc3RhdGljIHZvaWQgc2tiX2RlZmVyX2ZyZWVfZmx1c2godm9pZCkKIAlzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjsKIAlpbnQgbm9kZTsKIAotCWZvcl9lYWNoX25vZGUobm9kZSkgewomIzQzOwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CiAJCXNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICYjNDM7IG5vZGU7CiAKIAkJaWYgKGxsaXN0X2VtcHR5KCZhbXA7c2RuLSZndDtkZWZlcl9saXN0KSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgZm9jdXNlZCBvbiBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGdvZXMgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCBub2RlcyB0byB1c2UgYGZvcl9lYWNoX29ubGluZV9ub2RlYCBpbnN0ZWFkIG9mIGBmb3JfZWFjaF9ub2RlYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBUaGUgdXNlIG9mIGBmb3JfZWFjaF9vbmxpbmVfbm9kZWAgc3VnZ2VzdHMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBmbHVzaGluZyBwcm9jZXNzLCBwb3RlbnRpYWxseSB0byBhdm9pZCBvcGVyYXRpbmcgb24gb2ZmbGluZSBub2RlcyBvciB1dGlsaXplIG9ubHkgYWN0aXZlIHByb2Nlc3NpbmcgdW5pdHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTtyZSBkb2luZyB0aGlzLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBcmUgdGhleSBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgYnVnIHJlbGF0ZWQgdG8gbm9kZSBhZmZpbml0eSBvciBOVU1BIGFyY2hpdGVjdHVyZXM/IEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgb2xkZXIgdmVyc2lvbiB3YXMgY3JlYXRpbmcgaXNzdWVzLiBMb29raW5nIGF0IHRoZSBjb250ZXh0IGFyb3VuZCBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIHdpbGwgYmUgY3JpdGljYWwuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGFuZCBpbnRlbnQgYmVoaW5kIHRoZSBgc2tiX2RlZmVyX25vZGVzYCBzdHJ1Y3R1cmUgYW5kIGBkZWZlcl9saXN0YCBpcyBhbHNvIHZpdGFsLiBUaGUgY2hhbmdlIHNlZW1zIHNtYWxsIG9uIHRoZSBzdXJmYWNlLCBidXQgaXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgbG9hZGVkIG5ldHdvcmsgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5MDA6XHR9XG42OTAxOlx0RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xuNjkwMjpcdFxuNjkwMzpcdHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG42OTA0Olx0e1xuNjkwNTpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfbGlzdDtcbjY5MDY6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0O1xuNjkwNzpcdFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG42OTA4Olx0XHRpbnQgbm9kZTtcbjY5MDk6XHRcbjY5MTA6XHRcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcbjY5MTE6XHRcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbjY5MTI6XHRcbjY5MTM6XHRcdFx0aWYgKGxsaXN0X2VtcHR5KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KSlcbjY5MTQ6XHRcdFx0XHRjb250aW51ZTtcbjY5MTU6XHRcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9jb3VudCwgMCk7XG42OTE2Olx0XHRcdGZyZWVfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RuLVx1MDAzZWRlZmVyX2xpc3QpO1xuNjkxNzpcdFxuNjkxODpcdFx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNrYiwgbmV4dCwgZnJlZV9saXN0LCBsbF9ub2RlKSB7XG42OTE5Olx0XHRcdFx0cHJlZmV0Y2gobmV4dCk7XG42OTIwOlx0XHRcdFx0bmFwaV9jb25zdW1lX3NrYihza2IsIDEpO1xuNjkyMTpcdFx0XHR9XG42OTIyOlx0XHR9XG42OTIzOlx0fVxuNjkyNDpcdFxuNjkyNTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxuNjkyNjpcdFxuNjkyNzpcdGVudW0ge1xuNjkyODpcdFx0TkFQSV9GX1BSRUZFUl9CVVNZX1BPTExcdD0gMSxcbjY5Mjk6XHRcdE5BUElfRl9FTkRfT05fUkVTQ0hFRFx0PSAyLFxuNjkzMDpcdH07XG42OTMxOlx0XG42OTMyOlx0c3RhdGljIHZvaWQgYnVzeV9wb2xsX3N0b3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB2b2lkICpoYXZlX3BvbGxfbG9jayxcbjY5MzM6XHRcdFx0XHQgICB1bnNpZ25lZCBmbGFncywgdTE2IGJ1ZGdldClcbjY5MzQ6XHR7XG42OTM1Olx0XHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbjY5MzY6XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7XG42OTM3Olx0XHRpbnQgcmM7XG42OTM4Olx0XG42OTM5Olx0XHQvKiBCdXN5IHBvbGxpbmcgbWVhbnMgdGhlcmUgaXMgYSBoaWdoIGNoYW5jZSBkZXZpY2UgZHJpdmVyIGhhcmQgaXJxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgYG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2Rlc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXNgIHN0cnVjdHVyZSBhbmQgdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBwaW5wb2ludGluZyB3aGVyZSB0aGlzIHRoaW5nIGlzIGdldHRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBob3QgZGF0YSBwYXRoLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uCgpJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGZvciB0aGUgdmFyaWFibGUgbmFtZSwgcGVyaGFwcyBmb2N1c2luZyBvbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0gZGlyZWN0b3JpZXMgZmlyc3QuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYWxsb2NhdGlvbiBjYWxscyBsaWtlIGBrbWFsbG9jYCwgYGt6YWxsb2NgLCBvciBldmVuIG1vcmUgc3BlY2lhbGl6ZWQgYWxsb2NhdG9ycyBpZiBpdOKAmXMgYSBwZXItQ1BVIG9yIG5vZGUtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuIEluaXRpYWxpemF0aW9uIGNvdWxkIGJlIGRvbmUgZGlyZWN0bHkgaW4gc29tZSBzdHJ1Y3QgZGVmaW5pdGlvbiB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgb3IgaW4gYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBtb2R1bGUgbG9hZCBvciBuZXR3b3JraW5nIHN0YWNrIGluaXRpYWxpemF0aW9uLiBBbHNvLCBJIG11c3Qga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgc3RhdGljIGluaXRpYWxpemF0aW9ucyBvciBpZiBpdOKAmXMgcGFydCBvZiBhIGxhcmdlciBzdHJ1Y3R1cmUuCgpGdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgYW55IHVzYWdlIHBhdHRlcm5zIGFyb3VuZCB0aGUgdmFyaWFibGUsIG5vdCBqdXN0IGRlY2xhcmF0aW9uLiBGb3IgaW5zdGFuY2UsIGlzIGl0IGJlaW5nIHVzZWQgaW4gbG9jayBjb250ZXh0cz8gSXMgaXQgYXNzb2NpYXRlZCB3aXRoIHNwZWNpZmljIG5ldHdvcmsgZGV2aWNlcyBvciBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgZGF0YSByYWNlcyB0byBiZSBhd2FyZSBvZj8gVGhhdCB3aWxsIGhlbHAgbWUgdG8gZGVkdWNlIGl0cyByb2xlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBpdHMgcm9sZSBieSBpbnNwZWN0aW5nIHRoZSB1c2FnZSBwYXR0ZXJucy4gSSYjMzk7bSBob3BpbmcgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSB0aGUgY29udGV4dCBvZiBpdHMgYWxsb2NhdGlvbiBhbmQgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGludGVuZGVkIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZGVmZXJfbm9kZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaG90ZGF0YS5oPTE5PXN0cnVjdCBuZXRfaG90ZGF0YSB7XG4tLVxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQxLSNlbmRpZlxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oOjQyOlx0c3RydWN0IHNrYl9kZWZlcl9ub2RlIF9fcGVyY3B1ICpza2JfZGVmZXJfbm9kZXM7XG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNDMtXHRpbnRcdFx0XHRncm9fbm9ybWFsX2JhdGNoO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTY5MDM9c3RhdGljIHZvaWQgc2tiX2RlZmVyX2ZyZWVfZmx1c2godm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy02OTEwLVx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xubmV0L2NvcmUvZGV2LmM6NjkxMTpcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbm5ldC9jb3JlL2Rldi5jLTY5MTItXG4tLVxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTM0NzctXHR9XG5uZXQvY29yZS9kZXYuYzoxMzQ3ODpcdG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcyA9XG5uZXQvY29yZS9kZXYuYy0xMzQ3OS1cdFx0IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpICogbnJfbm9kZV9pZHMsXG5uZXQvY29yZS9kZXYuYy0xMzQ4MC1cdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkpO1xubmV0L2NvcmUvZGV2LmM6MTM0ODE6XHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2Rlcylcbm5ldC9jb3JlL2Rldi5jLTEzNDgyLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MzM5PW5vZGVmZXI6XHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczNDYtXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3Olx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xubmV0L2NvcmUvc2tidWZmLmMtNzM0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNLQiBEZXB0aHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gc3VzcGVjdGluZyBzb21ldGhpbmcgZnVua3kgbWlnaHQgYmUgaGFwcGVuaW5nIHdpdGggdGhlIFNLQiBoYW5kbGluZywgYW5kIG15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lIDczMzkgaGFzIHBpcXVlZCBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYSwgd2hhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkIHRoZXJlLiBUaGUgaW50cmljYWNpZXMgb2YgU0tCIGxpZmVjeWNsZSBhcmUgb2Z0ZW4gd2hlcmUgdGhlIHN1YnRsZSBidWdzIGhpZGUsIHNvIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgcGFja2V0IHN0YXRlLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzZWUgd2hhdCBzZWNyZXRzIGxpbmUgNzMzOSBpcyBoaWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczMzA6XHRcbjczMzE6XHRcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cbjczMzI6XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjczMzM6XHRcdFx0Z290byBub2RlZmVyO1xuNzMzNDpcdFxuNzMzNTpcdFx0Y3B1ID0gc2tiLVx1MDAzZWFsbG9jX2NwdTtcbjczMzY6XHRcdGlmIChjcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSB8fFxuNzMzNzpcdFx0ICAgIFdBUk5fT05fT05DRShjcHUgXHUwMDNlPSBucl9jcHVfaWRzKSB8fFxuNzMzODpcdFx0ICAgICFjcHVfb25saW5lKGNwdSkpIHtcbjczMzk6XHRub2RlZmVyOlx0a2ZyZWVfc2tiX25hcGlfY2FjaGUoc2tiKTtcbjczNDA6XHRcdFx0cmV0dXJuO1xuNzM0MTpcdFx0fVxuNzM0MjpcdFxuNzM0MzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2JfZHN0KHNrYikpO1xuNzM0NDpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2ItXHUwMDNlZGVzdHJ1Y3Rvcik7XG43MzQ1Olx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xuNzM0NjpcdFxuNzM0NzpcdFx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xuNzM0ODpcdFxuNzM0OTpcdFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcbjczNTA6XHRcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcdTAwMjZzZG4tXHUwMDNlZGVmZXJfY291bnQpO1xuNzM1MTpcdFxuNzM1MjpcdFx0aWYgKGRlZmVyX2NvdW50IFx1MDAzZT0gZGVmZXJfbWF4KVxuNzM1MzpcdFx0XHRnb3RvIG5vZGVmZXI7XG43MzU0Olx0XG43MzU1Olx0XHRsbGlzdF9hZGQoXHUwMDI2c2tiLVx1MDAzZWxsX25vZGUsIFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KTtcbjczNTY6XHRcbjczNTc6XHRcdC8qIFNlbmQgYW4gSVBJIGV2ZXJ5IHRpbWUgcXVldWUgcmVhY2hlcyBoYWxmIGNhcGFjaXR5LiAqL1xuNzM1ODpcdFx0a2ljayA9IChkZWZlcl9jb3VudCAtIDEpID09IChkZWZlcl9tYXggXHUwMDNlXHUwMDNlIDEpO1xuNzM1OTpcdFxuNzM2MDpcdFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcbjczNjE6XHRcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cbjczNjI6XHRcdCAqL1xuNzM2MzpcdFx0aWYgKHVubGlrZWx5KGtpY2spKVxuNzM2NDpcdFx0XHRraWNrX2RlZmVyX2xpc3RfcHVyZ2UoY3B1KTtcbjczNjU6XHR9XG43MzY2Olx0XG43MzY3Olx0c3RhdGljIHZvaWQgc2tiX3NwbGljZV9jc3VtX3BhZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG43MzY4Olx0XHRcdFx0XHQgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbjczNjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTEKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIE5vZGUgSXRlcmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgd2UgaXRlcmF0ZSB0aHJvdWdoIE5VTUEgbm9kZXMgaW4gYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgbG9vcCBmcm9tIGBmb3JfZWFjaF9ub2RlYCB0byBgZm9yX2VhY2hfb25saW5lX25vZGVgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0JiMzOTtzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2U/IFByaW1hcmlseSwgdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24sIHJpZ2h0PyBUaGUgZ29hbCBpcyB0byBvbmx5IHByb2Nlc3MgZGVmZXJyZWQgU0tCcyBvbiBvbmxpbmUgTlVNQSBub2Rlcy4KCk5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIExldCYjMzk7cyBkaWcgaW50byBwb3RlbnRpYWwgaXNzdWVzOiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGVha3MgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBZnRlciBhIGNsb3NlIHJldmlldywgSSBjYW4gc2F5IHdpdGggY2VydGFpbnR5IHRoYXQgKm5vKiwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIGNvbmNlcm5zLiBUaGUgbWVtb3J5IGZvciBgc2tiX2RlZmVyX25vZGVzYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBfX2FsbG9jX3BlcmNwdWAgZHVyaW5nIGBuZXRfZGV2X2luaXRgLiBUaGUgbG9vcCBpdHNlbGYganVzdCBjb25zdW1lcyBTS0JzIGZyb20gZWFjaCBub2RlJiMzOTtzIGxpbmtlZCBsaXN0IG9uIHRoZSBjdXJyZW50IENQVSwgd2hpY2ggYXJlIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb3JlIGNoYW5nZSBoZXJlICpvbmx5KiByZXN0cmljdHMgdGhlIGl0ZXJhdGlvbiByYW5nZS4gTm8gdXNlciBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBwYWRkaW5nIGNvbmNlcm5zLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrcy4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgS01TQU4gaW1wbGljYXRpb25zLiBXZSBrbm93IEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIEtBU0FOIGlzIHRoZXJlIGZvciBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIHRob3NlIGFyZSBoYW5kbGVkLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYW5zd2VyIGlzIGNsZWFybHkgbm8uCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4KClNvLCBoZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBzdW1tYXJpemUgaXQ6IFRoZSBwYXRjaCBtb2RpZmllcyBub2RlIGl0ZXJhdGlvbiBpbiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAsIGNoYW5naW5nIGZyb20gYSBmdWxsIGVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIG5vZGVzIHRvIG9ubHkgaXRlcmF0aW5nIG92ZXIgb25saW5lIG9uZXMgd2hlbiBmbHVzaGluZyBwZXItQ1BVIGRlZmVycmVkIFNLQiBsaXN0cy4gVGhlIEtNU0FOIGZvY3VzIGlzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQga2VybmVsLXRvLXVzZXIgbGVha3MsIHdoaWNoIHRoaXMgY2hhbmdlIGF2b2lkcy4gVGhlIG5vZGUgSUQgbG9vcCBib3VuZCBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nOyBpdCBhbHNvIGRvZXNuJiMzOTt0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXItc3BhY2Ugb3IgY29uZGl0aW9uIGJyYW5jaGVzLiBJIGNhbiBjb25jbHVkZSB0aGF0IHN0YW5kYXJkIEtBU0FOIGFuZCBkZWJ1Z2dpbmcgdGVjaG5pcXVlcyBhcmUgc3VmZmljaWVudC4gTm8gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfZGVmZXJfZnJlZV9mbHVzaCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoYGZvcl9lYWNoX29ubGluZV9ub2RlYCkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGBmb3JfZWFjaF9ub2RlYCkgd2hlbiBkcmFpbmluZyBkZWZlcnJlZCBza2IgbGlzdHMuXG5cblRoaXMgaXMgYSBtaW5vciBjb250cm9sIGZsb3cgLyBvcHRpbWl6YXRpb24gY2hhbmdlIGluIG5ldHdvcmsgY29yZSBOQVBJIGRlZmVycmVkIFNLQiBmcmVlaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChgZm9yX2VhY2hfb25saW5lX25vZGVgKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoYGZvcl9lYWNoX25vZGVgKSB3aGVuIGRyYWluaW5nIGRlZmVycmVkIHNrYiBsaXN0cy5cblxuVGhpcyBpcyBhIG1pbm9yIGNvbnRyb2wgZmxvdyAvIG9wdGltaXphdGlvbiBjaGFuZ2UgaW4gbmV0d29yayBjb3JlIE5BUEkgZGVmZXJyZWQgU0tCIGZyZWVpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjMzLjMzMjY5NDIxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTAyNjc5MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9kZWZlcl9mcmVlX2ZsdXNoXCIsXG4gICAgXCJza2JfYXR0ZW1wdF9kZWZlcl9mcmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGBmb3JfZWFjaF9vbmxpbmVfbm9kZWApIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChgZm9yX2VhY2hfbm9kZWApIHdoZW4gZHJhaW5pbmcgZGVmZXJyZWQgc2tiIGxpc3RzLlxcblxcblRoaXMgaXMgYSBtaW5vciBjb250cm9sIGZsb3cgLyBvcHRpbWl6YXRpb24gY2hhbmdlIGluIG5ldHdvcmsgY29yZSBOQVBJIGRlZmVycmVkIFNLQiBmcmVlaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCkgaW4gY29yZSBuZXR3b3JraW5nIChuZXQvY29yZS9kZXYuYykgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChmb3JfZWFjaF9vbmxpbmVfbm9kZSkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGZvcl9lYWNoX25vZGUpLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCBkdXJpbmcgTkFQSSBwb2xsaW5nIGFuZCBzb2Z0aXJxIG5ldF9yeF9hY3Rpb24gdG8gZmx1c2ggZGVmZXJyZWQgU0tCcyBhY3Jvc3MgTlVNQSBub2RlcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBOVU1BIG5vZGUgdHJhY2tpbmcgYW5kIGRlZmVycmVkIHBhY2tldCBkZWFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjMzLjMzMjY5ODYxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MDI2NTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDM6MDE6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDI5MGUwZjA5OWU2YmYuLmI1MjhiNmE5ODZmY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC02OTA3LDcgKzY5MDcsNyBAQCBzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbiBcXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcXG4gXFx0aW50IG5vZGU7XFxuIFxcbi1cXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcXG4rXFx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xcbiBcXHRcXHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSArIG5vZGU7XFxuIFxcbiBcXHRcXHRpZiAobGxpc3RfZW1wdHkoXFx1MDAyNnNkbi1cXHUwMDNlZGVmZXJfbGlzdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjM0LjY3MzYyNjA4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDcyNjExNDAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX2RlZmVyX2ZyZWVfZmx1c2hcIixcbiAgICBcInNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza2JfZGVmZXJfZnJlZV9mbHVzaCgpIGluIGNvcmUgbmV0d29ya2luZyAobmV0L2NvcmUvZGV2LmMpIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoZm9yX2VhY2hfb25saW5lX25vZGUpIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChmb3JfZWFjaF9ub2RlKS4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgZHVyaW5nIE5BUEkgcG9sbGluZyBhbmQgc29mdGlycSBuZXRfcnhfYWN0aW9uIHRvIGZsdXNoIGRlZmVycmVkIFNLQnMgYWNyb3NzIE5VTUEgbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVNQSBub2RlIHRyYWNraW5nIGFuZCBkZWZlcnJlZCBwYWNrZXQgZGVhbGxvY2F0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLmI1MjhiNmE5ODZmY2YgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC02OTA3LDcgKzY5MDcsNyBAQCBzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxuIFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG4gXHRpbnQgbm9kZTtcbiBcbi1cdGZvcl9lYWNoX25vZGUobm9kZSkge1xuK1x0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xuIFx0XHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSArIG5vZGU7XG4gXG4gXHRcdGlmIChsbGlzdF9lbXB0eShcdTAwMjZzZG4tXHUwMDNlZGVmZXJfbGlzdCkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMTozNC42NzM2Mjc2OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDExMjYzNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTmV0d29yayBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHBhdGNoIGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIGRpZmYgYW5kIHRoZSBsaW5lIG51bWJlciwgNjkwNy4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBjb250ZXh0LiBXZSdyZSB0YWxraW5nIGFib3V0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAsIHNvIEkgc3VzcGVjdCB3ZSdyZSBsb29raW5nIGF0IG9wdGltaXphdGlvbnMgb3IgY2hhbmdlcyB0byBob3cgU0tCcyBhcmUgaGFuZGxlZCBpbiBhIGRlZmVycmVkIGZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyB0aGUgYGZvcl9lYWNoX25vZGVgIGxvb3AsIHRoaXMgKm1pZ2h0KiBiZSByZWxhdGVkIHRvIE5VTUEgb3IgQ1BVIG5vZGUgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgaW4gdGhlIG5ldHdvcmsgc3RhY2suXG5cbkxldCBtZSBxdWlja2x5IGdyYWIgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aCBgcmVhZC1maWxlYCBvbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZm9yX2VhY2hfb25saW5lX25vZGVgIGlzIHVzZWQgaGVyZSBhbmQgc2VlIHdoYXQgd2FzIGNoYW5nZWQgZnJvbSBgZm9yX2VhY2hfbm9kZWAuIFRoYXTigJlzIG15IHByaW1hcnkgY29uY2Vybi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDE6NDAuNjg0ODkzMDcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY4OTA6XFx0XFxuNjg5MTpcXHRcXHRpZiAodW5saWtlbHkodmFsIFxcdTAwMjYgTkFQSUZfU1RBVEVfTUlTU0VEKSkge1xcbjY4OTI6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKG4pO1xcbjY4OTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjY4OTQ6XFx0XFx0fVxcbjY4OTU6XFx0XFxuNjg5NjpcXHRcXHRpZiAodGltZW91dClcXG42ODk3OlxcdFxcdFxcdGhydGltZXJfc3RhcnQoXFx1MDAyNm4tXFx1MDAzZXRpbWVyLCBuc190b19rdGltZSh0aW1lb3V0KSxcXG42ODk4OlxcdFxcdFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfUElOTkVEKTtcXG42ODk5OlxcdFxcdHJldHVybiByZXQ7XFxuNjkwMDpcXHR9XFxuNjkwMTpcXHRFWFBPUlRfU1lNQk9MKG5hcGlfY29tcGxldGVfZG9uZSk7XFxuNjkwMjpcXHRcXG42OTAzOlxcdHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXFxuNjkwNDpcXHR7XFxuNjkwNTpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9saXN0O1xcbjY5MDY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHQ7XFxuNjkwNzpcXHRcXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcXG42OTA4OlxcdFxcdGludCBub2RlO1xcbjY5MDk6XFx0XFxuNjkxMDpcXHRcXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7XFxuNjkxMTpcXHRcXHRcXHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSArIG5vZGU7XFxuNjkxMjpcXHRcXG42OTEzOlxcdFxcdFxcdGlmIChsbGlzdF9lbXB0eShcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9saXN0KSlcXG42OTE0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjY5MTU6XFx0XFx0XFx0YXRvbWljX2xvbmdfc2V0KFxcdTAwMjZzZG4tXFx1MDAzZWRlZmVyX2NvdW50LCAwKTtcXG42OTE2OlxcdFxcdFxcdGZyZWVfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNkbi1cXHUwMDNlZGVmZXJfbGlzdCk7XFxuNjkxNzpcXHRcXG42OTE4OlxcdFxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2tiLCBuZXh0LCBmcmVlX2xpc3QsIGxsX25vZGUpIHtcXG42OTE5OlxcdFxcdFxcdFxcdHByZWZldGNoKG5leHQpO1xcbjY5MjA6XFx0XFx0XFx0XFx0bmFwaV9jb25zdW1lX3NrYihza2IsIDEpO1xcbjY5MjE6XFx0XFx0XFx0fVxcbjY5MjI6XFx0XFx0fVxcbjY5MjM6XFx0fVxcbjY5MjQ6XFx0XFxuNjkyNTpcXHQjaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXG42OTI2OlxcdFxcbjY5Mjc6XFx0ZW51bSB7XFxuNjkyODpcXHRcXHROQVBJX0ZfUFJFRkVSX0JVU1lfUE9MTFxcdD0gMSxcXG42OTI5OlxcdFxcdE5BUElfRl9FTkRfT05fUkVTQ0hFRFxcdD0gMixcXG42OTMwOlxcdH07XFxuNjkzMTpcXHRcXG42OTMyOlxcdHN0YXRpYyB2b2lkIGJ1c3lfcG9sbF9zdG9wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgdm9pZCAqaGF2ZV9wb2xsX2xvY2ssXFxuNjkzMzpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBmbGFncywgdTE2IGJ1ZGdldClcXG42OTM0OlxcdHtcXG42OTM1OlxcdFxcdHN0cnVjdCBicGZfbmV0X2NvbnRleHQgX19icGZfbmV0X2N0eCwgKmJwZl9uZXRfY3R4O1xcbjY5MzY6XFx0XFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDtcXG42OTM3OlxcdFxcdGludCByYztcXG42OTM4OlxcdFxcbjY5Mzk6XFx0XFx0LyogQnVzeSBwb2xsaW5nIG1lYW5zIHRoZXJlIGlzIGEgaGlnaCBjaGFuY2UgZGV2aWNlIGRyaXZlciBoYXJkIGlycVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMTo0MC42ODU2MTk3MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjUzNTkwMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVzZSBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoZSBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjayBkb3duIGl0cyBjYWxsIHNpdGVzLiBMZXQncyBzZWUuLi4gYSBxdWljayB1c2Ugb2YgYGdyZXBwZXJgIHNob3VsZCBkbyB0aGUgdHJpY2suIEknbGwgbGF1bmNoIHRoZSBzZWFyY2ggYW5kIHNlZSB3aGF0IHBvcHMgdXAuIFNob3VsZG4ndCB0YWtlIHRvbyBsb25nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDE6NDUuOTM5MjExNjQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzkzMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9kZWZlcl9mcmVlX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTY5MDE9RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xcbm5ldC9jb3JlL2Rldi5jLTY5MDItXFxubmV0L2NvcmUvZGV2LmM6NjkwMzpzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbm5ldC9jb3JlL2Rldi5jLTY5MDQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Njk4OT1zdGF0aWMgdm9pZCBfX25hcGlfYnVzeV9sb29wKHVuc2lnbmVkIGludCBuYXBpX2lkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzA0My1cXHRcXHRcXHRcXHRcXHRMSU5VWF9NSUJfQlVTWVBPTExSWFBBQ0tFVFMsIHdvcmspO1xcbm5ldC9jb3JlL2Rldi5jOjcwNDQ6XFx0XFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcXG5uZXQvY29yZS9kZXYuYy03MDQ1LVxcdFxcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc4ODk9c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzkxNi1cXHRcXHR9XFxubmV0L2NvcmUvZGV2LmM6NzkxNzpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Nzk2OD1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIG5ldF9yeF9hY3Rpb24odm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5ODctXFxubmV0L2NvcmUvZGV2LmM6Nzk4ODpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5ODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjQ1Ljk4NTYwOTAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDQzMDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgc2VlIHdoZXJlIGl0J3MgYmVpbmcgaGFuZGxlZC4gVGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyBhIHF1aWNrIGBncmVwYCBmb3IgdGhlIGV4YWN0IHN0cmluZywgYHNrYl9kZWZlcl9ub2Rlc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMTo0OC4xMDAwNDIzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1MzA1OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9kZWZlcl9ub2Rlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ob3RkYXRhLmg9MTk9c3RydWN0IG5ldF9ob3RkYXRhIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00MS0jZW5kaWZcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6NDI6XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlIF9fcGVyY3B1ICpza2JfZGVmZXJfbm9kZXM7XFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQzLVxcdGludFxcdFxcdFxcdGdyb19ub3JtYWxfYmF0Y2g7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02OTAzPXN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02OTEwLVxcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcXG5uZXQvY29yZS9kZXYuYzo2OTExOlxcdFxcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcXG5uZXQvY29yZS9kZXYuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3Ny1cXHR9XFxubmV0L2NvcmUvZGV2LmM6MTM0Nzg6XFx0bmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzID1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3OS1cXHRcXHQgX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkgKiBucl9ub2RlX2lkcyxcXG5uZXQvY29yZS9kZXYuYy0xMzQ4MC1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpKTtcXG5uZXQvY29yZS9kZXYuYzoxMzQ4MTpcXHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcylcXG5uZXQvY29yZS9kZXYuYy0xMzQ4Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3OlxcdHNkbiA9IHBlcl9jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcywgY3B1KSArIG51bWFfbm9kZV9pZCgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjQ5LjY4NTM2MjU5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5ODI4ODk4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFNLQiBEZXB0aHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgd2UncmUgaGFuZGxpbmcgc29ja2V0IGJ1ZmZlcnMuIE15IGd1dCBmZWVsaW5nIGlzIGxlYWRpbmcgbWUgdG93YXJkcyBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlc2Ugc2ticyBhcmUgYmVpbmcgaGFuZGxlZCwgYW5kIGxpbmUgNzM0NyBzb3VuZHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYTsgaXQncyBwcm9iYWJseSB3aGVyZSB0aGUgYWN0aW9uIGlzLiBIb3BlZnVsbHkgdGhlIGNvZGUgaW4gdGhpcyBhcmVhIG1ha2VzIGl0IGNsZWFyZXIgd2hhdCB0aGUgaXNzdWUgaXMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgdGhpcyBodW5jaCBob2xkcyB3YXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjUyLjY2ODI1NDU5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMzMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzMzMDpcXHRcXG43MzMxOlxcdFxcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cXG43MzMyOlxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG43MzMzOlxcdFxcdFxcdGdvdG8gbm9kZWZlcjtcXG43MzM0OlxcdFxcbjczMzU6XFx0XFx0Y3B1ID0gc2tiLVxcdTAwM2VhbGxvY19jcHU7XFxuNzMzNjpcXHRcXHRpZiAoY3B1ID09IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgfHxcXG43MzM3OlxcdFxcdCAgICBXQVJOX09OX09OQ0UoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpIHx8XFxuNzMzODpcXHRcXHQgICAgIWNwdV9vbmxpbmUoY3B1KSkge1xcbjczMzk6XFx0bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbjczNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjczNDE6XFx0XFx0fVxcbjczNDI6XFx0XFxuNzM0MzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9kc3Qoc2tiKSk7XFxuNzM0NDpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYi1cXHUwMDNlZGVzdHJ1Y3Rvcik7XFxuNzM0NTpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xcbjczNDY6XFx0XFxuNzM0NzpcXHRcXHRzZG4gPSBwZXJfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMsIGNwdSkgKyBudW1hX25vZGVfaWQoKTtcXG43MzQ4OlxcdFxcbjczNDk6XFx0XFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcXG43MzUwOlxcdFxcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9jb3VudCk7XFxuNzM1MTpcXHRcXG43MzUyOlxcdFxcdGlmIChkZWZlcl9jb3VudCBcXHUwMDNlPSBkZWZlcl9tYXgpXFxuNzM1MzpcXHRcXHRcXHRnb3RvIG5vZGVmZXI7XFxuNzM1NDpcXHRcXG43MzU1OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2c2tiLVxcdTAwM2VsbF9ub2RlLCBcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9saXN0KTtcXG43MzU2OlxcdFxcbjczNTc6XFx0XFx0LyogU2VuZCBhbiBJUEkgZXZlcnkgdGltZSBxdWV1ZSByZWFjaGVzIGhhbGYgY2FwYWNpdHkuICovXFxuNzM1ODpcXHRcXHRraWNrID0gKGRlZmVyX2NvdW50IC0gMSkgPT0gKGRlZmVyX21heCBcXHUwMDNlXFx1MDAzZSAxKTtcXG43MzU5OlxcdFxcbjczNjA6XFx0XFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcXG43MzYxOlxcdFxcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cXG43MzYyOlxcdFxcdCAqL1xcbjczNjM6XFx0XFx0aWYgKHVubGlrZWx5KGtpY2spKVxcbjczNjQ6XFx0XFx0XFx0a2lja19kZWZlcl9saXN0X3B1cmdlKGNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjUyLjY2ODU1MjMzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDc1MDQwODI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgU0tCIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBuZXR3b3JrIGJlaGF2aW9yLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0L2NvcmUvc2tidWZmLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSAqc2tfYnVmZiogc3RydWN0dXJlLCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgbmV0d29yayBwYWNrZXRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJdCdzIHdoZXJlIGFsbCB0aGUgY29yZSBwYWNrZXQgbWFuaXB1bGF0aW9uLCBhbGxvY2F0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIGxvZ2ljIHJlc2lkZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBwaW5wb2ludCB0aGUgcHJlY2lzZSBmdW5jdGlvbiByZXNwb25zaWJsZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGFsbG9jYXRpb24sIGNvcHlpbmcsIG9yIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcHJvYmFibHkgdGhlIGN1bHByaXQuIExldCdzIHNlZSBpZiB0aGlzIGh1bmNoIGhvbGRzLCBsZXQncyBleHBsb3JlIHRoaXMgZmlsZSBhbmQgZ2V0IHRvIHRoZSByb290IG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MDcuNDE4OTYyMzUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MzIwOlxcdHZvaWQgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjczMjE6XFx0e1xcbjczMjI6XFx0XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XFxuNzMyMzpcXHRcXHR1bnNpZ25lZCBsb25nIGRlZmVyX2NvdW50O1xcbjczMjQ6XFx0XFx0dW5zaWduZWQgaW50IGRlZmVyX21heDtcXG43MzI1OlxcdFxcdGJvb2wga2ljaztcXG43MzI2OlxcdFxcdGludCBjcHU7XFxuNzMyNzpcXHRcXG43MzI4OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZza2JfZGVmZXJfZGlzYWJsZV9rZXkpKVxcbjczMjk6XFx0XFx0XFx0Z290byBub2RlZmVyO1xcbjczMzA6XFx0XFxuNzMzMTpcXHRcXHQvKiB6ZXJvIGNvcHkgbm90aWZpY2F0aW9ucyBzaG91bGQgbm90IGJlIGRlbGF5ZWQuICovXFxuNzMzMjpcXHRcXHRpZiAoc2tiX3pjb3B5KHNrYikpXFxuNzMzMzpcXHRcXHRcXHRnb3RvIG5vZGVmZXI7XFxuNzMzNDpcXHRcXG43MzM1OlxcdFxcdGNwdSA9IHNrYi1cXHUwMDNlYWxsb2NfY3B1O1xcbjczMzY6XFx0XFx0aWYgKGNwdSA9PSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIHx8XFxuNzMzNzpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKGNwdSBcXHUwMDNlPSBucl9jcHVfaWRzKSB8fFxcbjczMzg6XFx0XFx0ICAgICFjcHVfb25saW5lKGNwdSkpIHtcXG43MzM5OlxcdG5vZGVmZXI6XFx0a2ZyZWVfc2tiX25hcGlfY2FjaGUoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MDcuNDE5MjUyMzQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NDY1OTE1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBTS0IgRGVmZXJyZWQgRnJlZSBJdGVyYXRpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIGNoYW5nZSBpbiBgbmV0L2NvcmUvZGV2LmNgIHdpdGhpbiB0aGUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgdXNlZCBgZm9yX2VhY2hfbm9kZWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciAqcG9zc2libGUqIG5vZGVzLCBhbmQgbm93IGl0J3MgdXNpbmcgYGZvcl9lYWNoX29ubGluZV9ub2RlYC4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBkZWZlcnJlZCBTS0IgZnJlZSBtZWNoYW5pc20gd29ya3MsIHNwZWNpZmljYWxseSBkdXJpbmcgYG5ldF9yeF9hY3Rpb25gLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBhbmQgYF9fbmFwaV9idXN5X2xvb3BgIOKAkyBhbGwgY3JpdGljYWwgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4gU28sIHllcywgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBmcmVxdWVudGx5IGV4ZWN1dGVkLlxuXG5JIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGhvcGluZyB0byBsaW1pdCB0aGUgc2NvcGUsIGJ1dCBpdCBsb29rcyBsaWtlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgYWx3YXlzIGNvbXBpbGVkIGluIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXQgYWx3YXlzIGlzIGZvciBhbnkgbmV0d29ya2luZyBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIGFyb3VuZCBOVU1BIG5vZGUgc3RhdGVzLiBJZiBTS0JzIGFyZSBhZGRlZCB0byBhIG5vZGUgdGhhdCdzICphYm91dCogdG8gZ28gb2ZmbGluZSBvciBpcyBpbiBhIGRpZmZlcmVudCBzdGF0ZSwgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoYXQncyBhIHBlcmZlY3QgZnV6emluZyB0YXJnZXQuXG5cbk15IFwiV29ydGhGdXp6aW5nXCIgZXZhbHVhdGlvbiBpcyBsb29raW5nIGdvb2QuIFRoZSBjaGFuZ2UgaXMgaW4gY29yZSBuZXR3b3JraW5nLCBtb2RpZmllcyBhIGNvcmUgbG9vcCwgaXMgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgYW5kIGludm9sdmVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIE5VTUEgbm9kZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBmZWVscyBsaWtlIGEgZGVmaW5pdGUgXCJ5ZXNcIiBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXRzZWxmIGlzIHRoZSBwcmltYXJ5IHRhcmdldCwgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBsb29wIHdhcyBjaGFuZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGlubGluZWQgb3IgY2FsbGVkIGRpcmVjdGx5LiBUaGUgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAgKHdoaWNoIGFjdHVhbGx5IGFkZHMgU0tCcyB0byB0aGUgZGVmZXJyYWwgbGlzdCkgYW5kIHRoZSBOQVBJL3NvZnRpcnEgaGFuZGxlcnMgbGlrZSBgbmV0X3J4X2FjdGlvbmAsIGFuZCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBhcmUgYWxzbyByZWxldmFudC4gVWx0aW1hdGVseSwgSSdkIHNheSB0aGUgY29yZSBzeW1ib2xzIGhlcmUgZm9yIGZ1enppbmcgd291bGQgYmUgYm90aCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAgYW5kIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAuIEkgc2hvdWxkIGFsc28gcnVuIGEgYGdyZXBgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIHdpdGggU0tCIGRlZmVycmFsIGFuZCBmcmVlaW5nIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjoxMy4zNjU4NDYwNTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTM5NjYwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2RlZmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3Q9MzYwPURlZmF1bHQgdmFsdWUgaXMgMTAsIG1pbmltdW0gMSwgbWF4aW11bSAzNjAwLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3QtMzYxLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3Q6MzYyOnNrYl9kZWZlcl9tYXhcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9uZXQucnN0LTM2My0tLS0tLS0tLS0tLS0tXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdD03Njk9dG8gZWFjaCBpbmRpdmlkdWFsIE1BQyBkcml2ZXIgZm9yIFBIWSB0aW1lc3RhbXBpbmcgc3VwcG9ydC4gVGhpcyBlbnRhaWxzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNzc3LSAgYGBuZXRpZl9yeCgpYGAgYW5kIHNpbWlsYXIsIE1BQyBkcml2ZXJzIG11c3QgY2hlY2sgd2hldGhlclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0Ojc3ODogIGBgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpYGAgaXMgbmVjZXNzYXJ5IG9yIG5vdCAtIGFuZCBpZiBpdCBpcywgZG9uJ3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03NzktICBjYWxsIGBgbmV0aWZfcngoKWBgIGF0IGFsbC4gIElmIGBgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR2BgIGlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03ODctICBgYG5ldGlmX3JlY2VpdmVfc2tiYGAsIHRoZSBzdGFjayBhdXRvbWF0aWNhbGx5IGNoZWNrcyB3aGV0aGVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q6Nzg4OiAgYGBza2JfZGVmZXJfcnhfdGltZXN0YW1wKClgYCBpcyBuZWNlc3NhcnksIHNvIHRoaXMgY2hlY2sgaXMgbm90IG5lZWRlZCBpbnNpZGVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03ODktICB0aGUgZHJpdmVyLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0PTU3Mj1TT19USU1FU1RBTVBJTkcgQVBJIOS4jeWFgeiuuOS4uuWQjOS4gOaVsOaNruWMheS8oOmAkuWkmuS4quehrOS7tuaXtumXtOaIs++8jOWboOatpOmZpOS6hiBEU0FcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjAtICDlnKggcGxhaW4gYGBuZXRpZl9yeCgpYGAg5ZKM57G75Ly85oOF5Ya15LiL77yMTUFDIOmpseWKqOeoi+W6j+W/hemhu+ajgOafpeaYr+WQplxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdDo2MjE6ICBgYHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKWBgIOaYr+W/heimgeeahO+8jOWmguaenOaYr++8jOWImeS4jeiwg+eUqCBgYG5ldGlmX3J4KClgYOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjItICDlpoLmnpwgYGBDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HYGAg5ZCv55So77yM5bm25LiUXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjI3LSAg5a+55LqO5YW25LuWIHNrYiDmjqXmlLblh73mlbDvvIzkvovlpoIgYGBuYXBpX2dyb19yZWNlaXZlYGAg5ZKMIGBgbmV0aWZfcmVjZWl2ZV9za2JgYO+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdDo2Mjg6ICDloIbmoIjkvJroh6rliqjmo4Dmn6XmmK/lkKYgYGBza2JfZGVmZXJfcnhfdGltZXN0YW1wKClgYCDmmK/lv4XopoHnmoTvvIzlm6DmraTmraTmo4Dmn6XkuI1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjI5LSAg6ZyA6KaB5Zyo6amx5Yqo56iL5bqP5YaF6YOo44CCXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3B0cC5jPTM5NT1ib29sIHNqYTExMTBfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfcHRwLmMtNDA3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfcHRwLmM6NDA4Oi8qIENhbGxlZCBmcm9tIGRzYV9za2JfZGVmZXJfcnhfdGltZXN0YW1wICovXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYy00MDktYm9vbCBzamExMTA1X3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbGliODM5MC5jPTY1OT1zdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2xpYjgzOTAuYy03NDAtXFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2xpYjgzOTAuYzo3NDE6XFx0XFx0XFx0XFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9saWI4MzkwLmMtNzQyLVxcdFxcdFxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYz0zODM9c3RhdGljIGlycXJldHVybl90IG1wYzUyeHhfZmVjX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYy00MzEtXFx0XFx0cnNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhyc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eC5jOjQzMjpcXHRcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAocnNrYikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4LmMtNDMzLVxcdFxcdFxcdG5ldGlmX3J4KHJza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmM9NjQ1PXN0YXRpYyBpcnFyZXR1cm5fdCBsYW45NjZ4X3h0cl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmMtNzIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jOjcyMzpcXHRcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYy03MjQtXFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X2ZkbWEuYz0zNTM9c3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfcmVjZWl2ZV9za2Ioc3RydWN0IG9jZWxvdCAqb2NlbG90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5jLTM4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmM6MzgzOlxcdGlmIChsaWtlbHkoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5jLTM4NC1cXHRcXHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jPTQ5PXN0YXRpYyBpcnFyZXR1cm5fdCBvY2Vsb3RfeHRyX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYy02NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF92c2M3NTE0LmM6NjY6XFx0XFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jLTY3LVxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvbGxfdGVtYWNfbWFpbi5jPTk2OD1zdGF0aWMgdm9pZCBsbF90ZW1hY19yZWN2KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYy0xMDIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmM6MTAyMzpcXHRcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvbGxfdGVtYWNfbWFpbi5jLTEwMjQtXFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYz01OTE9c3RhdGljIHZvaWQgeGVtYWNsaXRlX3J4X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYy02MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jOjYyNDpcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2VtYWNsaXRlLmMtNjI1LVxcdFxcdG5ldGlmX3J4KHNrYik7XFx0LyogU2VuZCB0aGUgcGFja2V0IHVwc3RyZWFtICovXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTM4OTE9c3RhdGljIHZvaWQgbGFuNzh4eF9za2JfcmV0dXJuKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zOTAxLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MzkwMjpcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzkwMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MzI2PXZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM0OS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzUwOlxcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQ3MTU9dm9pZCBza2JfY2xvbmVfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDcxNjpib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzE3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00NzIwPXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfY2xvbmVfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ3MjMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NzI0OnN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGVmZXJfcnhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzI1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC0xMi1cXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6MTM6c3RydWN0IHNrYl9kZWZlcl9ub2RlIHtcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtMTQtXFx0c3RydWN0IGxsaXN0X2hlYWRcXHRkZWZlcl9saXN0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oPTE5PXN0cnVjdCBuZXRfaG90ZGF0YSB7XFxuLS1cXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNDEtI2VuZGlmXFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oOjQyOlxcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSBfX3BlcmNwdSAqc2tiX2RlZmVyX25vZGVzO1xcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00My1cXHRpbnRcXHRcXHRcXHRncm9fbm9ybWFsX2JhdGNoO1xcbi0tXFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTUxLVxcdGludFxcdFxcdFxcdHN5c2N0bF9tYXhfc2tiX2ZyYWdzO1xcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaDo1MjpcXHRpbnRcXHRcXHRcXHRzeXNjdGxfc2tiX2RlZmVyX21heDtcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNTMtXFx0aW50XFx0XFx0XFx0c3lzY3RsX21lbV9wY3B1X3JzdjtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY0NDE9c3RhdGljIGludCBuZXRpZl9yZWNlaXZlX3NrYl9pbnRlcm5hbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjQ0Ni1cXG5uZXQvY29yZS9kZXYuYzo2NDQ3OlxcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxubmV0L2NvcmUvZGV2LmMtNjQ0OC1cXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02NDY4PXZvaWQgbmV0aWZfcmVjZWl2ZV9za2JfbGlzdF9pbnRlcm5hbChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjQ3Ni1cXHRcXHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xcbm5ldC9jb3JlL2Rldi5jOjY0Nzc6XFx0XFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxubmV0L2NvcmUvZGV2LmMtNjQ3OC1cXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZza2ItXFx1MDAzZWxpc3QsIFxcdTAwMjZzdWJsaXN0KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY5MDE9RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xcbm5ldC9jb3JlL2Rldi5jLTY5MDItXFxubmV0L2NvcmUvZGV2LmM6NjkwMzpzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbm5ldC9jb3JlL2Rldi5jLTY5MDQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjkwNi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dDtcXG5uZXQvY29yZS9kZXYuYzo2OTA3OlxcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSAqc2RuO1xcbm5ldC9jb3JlL2Rldi5jLTY5MDgtXFx0aW50IG5vZGU7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy02OTEwLVxcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcXG5uZXQvY29yZS9kZXYuYzo2OTExOlxcdFxcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcXG5uZXQvY29yZS9kZXYuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9Njk4OT1zdGF0aWMgdm9pZCBfX25hcGlfYnVzeV9sb29wKHVuc2lnbmVkIGludCBuYXBpX2lkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzA0My1cXHRcXHRcXHRcXHRcXHRMSU5VWF9NSUJfQlVTWVBPTExSWFBBQ0tFVFMsIHdvcmspO1xcbm5ldC9jb3JlL2Rldi5jOjcwNDQ6XFx0XFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcXG5uZXQvY29yZS9kZXYuYy03MDQ1LVxcdFxcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc4ODk9c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzkxNi1cXHRcXHR9XFxubmV0L2NvcmUvZGV2LmM6NzkxNzpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Nzk2OD1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIG5ldF9yeF9hY3Rpb24odm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5ODctXFxubmV0L2NvcmUvZGV2LmM6Nzk4ODpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5ODktXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzQyNj1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzNDc3LVxcdH1cXG5uZXQvY29yZS9kZXYuYzoxMzQ3ODpcXHRuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMgPVxcbm5ldC9jb3JlL2Rldi5jOjEzNDc5OlxcdFxcdCBfX2FsbG9jX3BlcmNwdShzaXplb2Yoc3RydWN0IHNrYl9kZWZlcl9ub2RlKSAqIG5yX25vZGVfaWRzLFxcbm5ldC9jb3JlL2Rldi5jOjEzNDgwOlxcdFxcdFxcdFxcdF9fYWxpZ25vZl9fKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkpO1xcbm5ldC9jb3JlL2Rldi5jOjEzNDgxOlxcdGlmICghbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKVxcbm5ldC9jb3JlL2Rldi5jLTEzNDgyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvaG90ZGF0YS5jPTEwPXN0cnVjdCBuZXRfaG90ZGF0YSBuZXRfaG90ZGF0YSBfX2NhY2hlbGluZV9hbGlnbmVkID0ge1xcbi0tXFxubmV0L2NvcmUvaG90ZGF0YS5jLTIzLVxcdC5zeXNjdGxfbWF4X3NrYl9mcmFncyA9IE1BWF9TS0JfRlJBR1MsXFxubmV0L2NvcmUvaG90ZGF0YS5jOjI0OlxcdC5zeXNjdGxfc2tiX2RlZmVyX21heCA9IDEyOCxcXG5uZXQvY29yZS9ob3RkYXRhLmMtMjUtXFx0LnN5c2N0bF9tZW1fcGNwdV9yc3YgPSBTS19NRU1PUllfUENQVV9SRVNFUlZFXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuaD0xNT1leHRlcm4gc3RydWN0IG11dGV4IHJwc19kZWZhdWx0X21hc2tfbXV0ZXg7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtMTYtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmg6MTc6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtMTgtI2VuZGlmXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xNTIyPXZvaWQgbmFwaV9jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYnVkZ2V0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTUzMC1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNTMxOlxcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1MzItXFx0ICAgIHNrYi1cXHUwMDNlYWxsb2NfY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSBcXHUwMDI2XFx1MDAyNiAhc2tiX3NoYXJlZChza2IpKSB7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03Mjk3PXN0YXRpYyB2b2lkIGtmcmVlX3NrYl9uYXBpX2NhY2hlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MzA5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjczMTA6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2tiX2RlZmVyX2Rpc2FibGVfa2V5KTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MzExLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzMyMD12b2lkIHNrYl9hdHRlbXB0X2RlZmVyX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy03MzIxLXtcXG5uZXQvY29yZS9za2J1ZmYuYzo3MzIyOlxcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSAqc2RuO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjMtXFx0dW5zaWduZWQgbG9uZyBkZWZlcl9jb3VudDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjctXFxubmV0L2NvcmUvc2tidWZmLmM6NzMyODpcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KSlcXG5uZXQvY29yZS9za2J1ZmYuYy03MzI5LVxcdFxcdGdvdG8gbm9kZWZlcjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3OlxcdHNkbiA9IHBlcl9jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcywgY3B1KSArIG51bWFfbm9kZV9pZCgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNDgtXFxubmV0L2NvcmUvc2tidWZmLmM6NzM0OTpcXHRkZWZlcl9tYXggPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEuc3lzY3RsX3NrYl9kZWZlcl9tYXgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNTAtXFx0ZGVmZXJfY291bnQgPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKFxcdTAwMjZzZG4tXFx1MDAzZWRlZmVyX2NvdW50KTtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTMzND1zdGF0aWMgaW50IHByb2NfZG9fcnNzX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzUxLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1MjpzdGF0aWMgaW50IHByb2NfZG9fc2tiX2RlZmVyX21heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1My1cXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNTQte1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1NTpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHNrYl9kZWZlcl9tYXhfbXV0ZXgpO1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1Ni1cXHRpbnQgcmV0LCBvdmFsLCBudmFsO1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1Ny1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNTg6XFx0bXV0ZXhfbG9jayhcXHUwMDI2c2tiX2RlZmVyX21heF9tdXRleCk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzU5LVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2MDpcXHRvdmFsID0gIW5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4O1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM2MS1cXHRyZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzYyOlxcdG52YWwgPSAhbmV0X2hvdGRhdGEuc3lzY3RsX3NrYl9kZWZlcl9tYXg7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzYzLVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzY1LVxcdFxcdGlmIChudmFsKVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2NjpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KTtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNjctXFx0XFx0ZWxzZVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2ODpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNnNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzY5LVxcdH1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNzAtXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzcxOlxcdG11dGV4X3VubG9jayhcXHUwMDI2c2tiX2RlZmVyX21heF9tdXRleCk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzcyLVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTY3MS1cXHR7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NjcyOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInNrYl9kZWZlcl9tYXhcXFwiLFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjY3MzpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNm5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4LFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTY3NC1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NzUtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6Njc2OlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9fc2tiX2RlZmVyX21heCxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NzctXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuLS1cXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYz02NT1FWFBPUlRfU1lNQk9MX0dQTChza2JfY2xvbmVfdHhfdGltZXN0YW1wKTtcXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy02Ni1cXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYzo2Nzpib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy02OC17XFxuLS1cXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy0xMTMtfVxcbm5ldC9jb3JlL3RpbWVzdGFtcGluZy5jOjExNDpFWFBPUlRfU1lNQk9MX0dQTChza2JfZGVmZXJfcnhfdGltZXN0YW1wKTtcXG4tLVxcbm5ldC9kc2EvdGFnLmM9MjA9c3RhdGljIERFRklORV9NVVRFWChkc2FfdGFnX2RyaXZlcnNfbG9jayk7XFxuLS1cXG5uZXQvZHNhL3RhZy5jLTI5LSAqL1xcbm5ldC9kc2EvdGFnLmM6MzA6c3RhdGljIGJvb2wgZHNhX3NrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IGRzYV91c2VyX3ByaXYgKnAsXFxubmV0L2RzYS90YWcuYy0zMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9kc2EvdGFnLmM9NTQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS90YWcuYy0xMTktXFxubmV0L2RzYS90YWcuYzoxMjA6XFx0aWYgKGRzYV9za2JfZGVmZXJfcnhfdGltZXN0YW1wKHAsIHNrYikpXFxubmV0L2RzYS90YWcuYy0xMjEtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjE1LjAxOTgxNzMzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODM5NzU0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZWZlcnJlZCBTS0IgRnJlZWluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgY2FsbGVkIGJ5IGBfX25hcGlfYnVzeV9sb29wYCwgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCwgYW5kIGBuZXRfcnhfYWN0aW9uYCwgd2hpbGUgYHNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGBuYXBpX2NvbnN1bWVfc2tiYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIGFuZCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBzeW1ib2xzIGFyZSBhbHNvIGFmZmVjdGVkLlxuXG5BIHF1aWNrIGxvb2sgcmV2ZWFscyB0aGF0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2LmNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX05FVGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyLiBZZXMsIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCwgaXQgbG9va3MgbGlrZSBgTkVUYCBpcyB0aGUgb25seSByZXF1aXJlZCBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGEgc2FuaXR5IGNoZWNrIG9mIHRoZSBndWlkZWxpbmVzOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBgRW5hYmxlQ29uZmlnc2AgaXMgYFtcIk5FVFwiXWAsIGFuZCBgRm9jdXNTeW1ib2xzYCBpcyBkZWZpbmVkIGFzIGBbXCJza2JfZGVmZXJfZnJlZV9mbHVzaFwiLCBcInNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVcIl1gLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHN1Y2NpbmN0LlxuXG5Pa2F5LCBsZXQncyBjb25maXJtIHRoZSBjaG9pY2Ugb2YgZm9jdXMgc3ltYm9scy4gWWVzLCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIHNrYiBkZWZlcnJlZCBmcmVlIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBsb29wIGl0ZXJhdGlvbiBvdmVyIE5VTUEgbm9kZXMgd2FzIGNoYW5nZWQuIFRoZSBmYWN0IHRoYXQgdGhlIGl0ZXJhdGlvbiBzdHJhdGVneSBoYXMgY2hhbmdlZCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTUsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjIxLjg1OTU3Mzg5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTkwMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfZGVmZXJfZnJlZV9mbHVzaFwiLFxuICAgIFwic2tiX2F0dGVtcHRfZGVmZXJfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCkgaW4gY29yZSBuZXR3b3JraW5nIChuZXQvY29yZS9kZXYuYykgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChmb3JfZWFjaF9vbmxpbmVfbm9kZSkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGZvcl9lYWNoX25vZGUpLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCBkdXJpbmcgTkFQSSBwb2xsaW5nIGFuZCBzb2Z0aXJxIG5ldF9yeF9hY3Rpb24gdG8gZmx1c2ggZGVmZXJyZWQgU0tCcyBhY3Jvc3MgTlVNQSBub2RlcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBOVU1BIG5vZGUgdHJhY2tpbmcgYW5kIGRlZmVycmVkIHBhY2tldCBkZWFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX2RlZmVyX2ZyZWVfZmx1c2hcIixcbiAgICBcInNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza2JfZGVmZXJfZnJlZV9mbHVzaCgpIGluIGNvcmUgbmV0d29ya2luZyAobmV0L2NvcmUvZGV2LmMpIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoZm9yX2VhY2hfb25saW5lX25vZGUpIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChmb3JfZWFjaF9ub2RlKS4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgZHVyaW5nIE5BUEkgcG9sbGluZyBhbmQgc29mdGlycSBuZXRfcnhfYWN0aW9uIHRvIGZsdXNoIGRlZmVycmVkIFNLQnMgYWNyb3NzIE5VTUEgbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVNQSBub2RlIHRyYWNraW5nIGFuZCBkZWZlcnJlZCBwYWNrZXQgZGVhbGxvY2F0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjoyMS45MzQ3Njk2ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTAwNTk0OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MjEuOTM1MjQ2NzA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjY5MDAxMTI3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfZGVmZXJfZnJlZV9mbHVzaCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoYGZvcl9lYWNoX29ubGluZV9ub2RlYCkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGBmb3JfZWFjaF9ub2RlYCkgd2hlbiBkcmFpbmluZyBkZWZlcnJlZCBza2IgbGlzdHMuXFxuXFxuVGhpcyBpcyBhIG1pbm9yIGNvbnRyb2wgZmxvdyAvIG9wdGltaXphdGlvbiBjaGFuZ2UgaW4gbmV0d29yayBjb3JlIE5BUEkgZGVmZXJyZWQgU0tCIGZyZWVpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmVlYzY3YWU0M2U4ODllMjI0MGVmNTYxZmY4OGMzOWFiZDFjYWU1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAzOjAxOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggMjkwZTBmMDk5ZTZiZi4uYjUyOGI2YTk4NmZjZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTY5MDcsNyArNjkwNyw3IEBAIHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG4gXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbiBcdGludCBub2RlO1xuIFxuLVx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XG4rXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7XG4gXHRcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcbiBcbiBcdFx0aWYgKGxsaXN0X2VtcHR5KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjIxLjkzNTI0NzU3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTU0ODc2MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZvY3VzZWQgb24gYG5ldC9jb3JlL2Rldi5jYC4gSW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiBnb2VzIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb2RpZmllZCB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCBub2RlcyB0byB1c2UgYGZvcl9lYWNoX29ubGluZV9ub2RlYCBpbnN0ZWFkIG9mIGBmb3JfZWFjaF9ub2RlYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBUaGUgdXNlIG9mIGBmb3JfZWFjaF9vbmxpbmVfbm9kZWAgc3VnZ2VzdHMgdGhleSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGZsdXNoaW5nIHByb2Nlc3MsIHBvdGVudGlhbGx5IHRvIGF2b2lkIG9wZXJhdGluZyBvbiBvZmZsaW5lIG5vZGVzIG9yIHV0aWxpemUgb25seSBhY3RpdmUgcHJvY2Vzc2luZyB1bml0cy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSdyZSBkb2luZyB0aGlzLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBcmUgdGhleSBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgYnVnIHJlbGF0ZWQgdG8gbm9kZSBhZmZpbml0eSBvciBOVU1BIGFyY2hpdGVjdHVyZXM/IEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgb2xkZXIgdmVyc2lvbiB3YXMgY3JlYXRpbmcgaXNzdWVzLiBMb29raW5nIGF0IHRoZSBjb250ZXh0IGFyb3VuZCBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIHdpbGwgYmUgY3JpdGljYWwuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGFuZCBpbnRlbnQgYmVoaW5kIHRoZSBgc2tiX2RlZmVyX25vZGVzYCBzdHJ1Y3R1cmUgYW5kIGBkZWZlcl9saXN0YCBpcyBhbHNvIHZpdGFsLiBUaGUgY2hhbmdlIHNlZW1zIHNtYWxsIG9uIHRoZSBzdXJmYWNlLCBidXQgaXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgbG9hZGVkIG5ldHdvcmsgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjoyOS40OTAxMjczMjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5MDA6XFx0fVxcbjY5MDE6XFx0RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xcbjY5MDI6XFx0XFxuNjkwMzpcXHRzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbjY5MDQ6XFx0e1xcbjY5MDU6XFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfbGlzdDtcXG42OTA2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0O1xcbjY5MDc6XFx0XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XFxuNjkwODpcXHRcXHRpbnQgbm9kZTtcXG42OTA5OlxcdFxcbjY5MTA6XFx0XFx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xcbjY5MTE6XFx0XFx0XFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgKyBub2RlO1xcbjY5MTI6XFx0XFxuNjkxMzpcXHRcXHRcXHRpZiAobGxpc3RfZW1wdHkoXFx1MDAyNnNkbi1cXHUwMDNlZGVmZXJfbGlzdCkpXFxuNjkxNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG42OTE1OlxcdFxcdFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9jb3VudCwgMCk7XFxuNjkxNjpcXHRcXHRcXHRmcmVlX2xpc3QgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzZG4tXFx1MDAzZWRlZmVyX2xpc3QpO1xcbjY5MTc6XFx0XFxuNjkxODpcXHRcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNrYiwgbmV4dCwgZnJlZV9saXN0LCBsbF9ub2RlKSB7XFxuNjkxOTpcXHRcXHRcXHRcXHRwcmVmZXRjaChuZXh0KTtcXG42OTIwOlxcdFxcdFxcdFxcdG5hcGlfY29uc3VtZV9za2Ioc2tiLCAxKTtcXG42OTIxOlxcdFxcdFxcdH1cXG42OTIyOlxcdFxcdH1cXG42OTIzOlxcdH1cXG42OTI0OlxcdFxcbjY5MjU6XFx0I2lmIGRlZmluZWQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXFxuNjkyNjpcXHRcXG42OTI3OlxcdGVudW0ge1xcbjY5Mjg6XFx0XFx0TkFQSV9GX1BSRUZFUl9CVVNZX1BPTExcXHQ9IDEsXFxuNjkyOTpcXHRcXHROQVBJX0ZfRU5EX09OX1JFU0NIRURcXHQ9IDIsXFxuNjkzMDpcXHR9O1xcbjY5MzE6XFx0XFxuNjkzMjpcXHRzdGF0aWMgdm9pZCBidXN5X3BvbGxfc3RvcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHZvaWQgKmhhdmVfcG9sbF9sb2NrLFxcbjY5MzM6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgZmxhZ3MsIHUxNiBidWRnZXQpXFxuNjkzNDpcXHR7XFxuNjkzNTpcXHRcXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcXG42OTM2OlxcdFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7XFxuNjkzNzpcXHRcXHRpbnQgcmM7XFxuNjkzODpcXHRcXG42OTM5OlxcdFxcdC8qIEJ1c3kgcG9sbGluZyBtZWFucyB0aGVyZSBpcyBhIGhpZ2ggY2hhbmNlIGRldmljZSBkcml2ZXIgaGFyZCBpcnFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MjkuNDkwNzYyODM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MzU0NjA4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBvZiBgbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXNgIHN0cnVjdHVyZSBhbmQgdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBwaW5wb2ludGluZyB3aGVyZSB0aGlzIHRoaW5nIGlzIGdldHRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBob3QgZGF0YSBwYXRoLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uXG5cbkknbGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBmb3IgdGhlIHZhcmlhYmxlIG5hbWUsIHBlcmhhcHMgZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc3Vic3lzdGVtIGRpcmVjdG9yaWVzIGZpcnN0LiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGFsbG9jYXRpb24gY2FsbHMgbGlrZSBga21hbGxvY2AsIGBremFsbG9jYCwgb3IgZXZlbiBtb3JlIHNwZWNpYWxpemVkIGFsbG9jYXRvcnMgaWYgaXTigJlzIGEgcGVyLUNQVSBvciBub2RlLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlLiBJbml0aWFsaXphdGlvbiBjb3VsZCBiZSBkb25lIGRpcmVjdGx5IGluIHNvbWUgc3RydWN0IGRlZmluaXRpb24gd2l0aCBhIGRlZmF1bHQgdmFsdWUsIG9yIGluIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGxvYWQgb3IgbmV0d29ya2luZyBzdGFjayBpbml0aWFsaXphdGlvbi4gQWxzbywgSSBtdXN0IGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN0YXRpYyBpbml0aWFsaXphdGlvbnMgb3IgaWYgaXTigJlzIHBhcnQgb2YgYSBsYXJnZXIgc3RydWN0dXJlLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgYW55IHVzYWdlIHBhdHRlcm5zIGFyb3VuZCB0aGUgdmFyaWFibGUsIG5vdCBqdXN0IGRlY2xhcmF0aW9uLiBGb3IgaW5zdGFuY2UsIGlzIGl0IGJlaW5nIHVzZWQgaW4gbG9jayBjb250ZXh0cz8gSXMgaXQgYXNzb2NpYXRlZCB3aXRoIHNwZWNpZmljIG5ldHdvcmsgZGV2aWNlcyBvciBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgZGF0YSByYWNlcyB0byBiZSBhd2FyZSBvZj8gVGhhdCB3aWxsIGhlbHAgbWUgdG8gZGVkdWNlIGl0cyByb2xlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBpdHMgcm9sZSBieSBpbnNwZWN0aW5nIHRoZSB1c2FnZSBwYXR0ZXJucy4gSSdtIGhvcGluZyBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBzZWUgdGhlIGNvbnRleHQgb2YgaXRzIGFsbG9jYXRpb24gYW5kIGdldCBhIHNlbnNlIG9mIHRoZSBpbnRlbmRlZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MzYuMTI2MjI2MzQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1MzE0MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9kZWZlcl9ub2Rlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ob3RkYXRhLmg9MTk9c3RydWN0IG5ldF9ob3RkYXRhIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00MS0jZW5kaWZcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6NDI6XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlIF9fcGVyY3B1ICpza2JfZGVmZXJfbm9kZXM7XFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQzLVxcdGludFxcdFxcdFxcdGdyb19ub3JtYWxfYmF0Y2g7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02OTAzPXN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02OTEwLVxcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcXG5uZXQvY29yZS9kZXYuYzo2OTExOlxcdFxcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcXG5uZXQvY29yZS9kZXYuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3Ny1cXHR9XFxubmV0L2NvcmUvZGV2LmM6MTM0Nzg6XFx0bmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzID1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3OS1cXHRcXHQgX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkgKiBucl9ub2RlX2lkcyxcXG5uZXQvY29yZS9kZXYuYy0xMzQ4MC1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpKTtcXG5uZXQvY29yZS9kZXYuYzoxMzQ4MTpcXHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcylcXG5uZXQvY29yZS9kZXYuYy0xMzQ4Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3OlxcdHNkbiA9IHBlcl9jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcywgY3B1KSArIG51bWFfbm9kZV9pZCgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjM3LjY2MTU0NTIwMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI1MTE1NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTS0IgRGVwdGhzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBzdXNwZWN0aW5nIHNvbWV0aGluZyBmdW5reSBtaWdodCBiZSBoYXBwZW5pbmcgd2l0aCB0aGUgU0tCIGhhbmRsaW5nLCBhbmQgbXkgZ3V0J3MgdGVsbGluZyBtZSB0byBzdGFydCBkaWdnaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFNwZWNpZmljYWxseSwgbGluZSA3MzM5IGhhcyBwaXF1ZWQgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYSwgd2hhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkIHRoZXJlLiBUaGUgaW50cmljYWNpZXMgb2YgU0tCIGxpZmVjeWNsZSBhcmUgb2Z0ZW4gd2hlcmUgdGhlIHN1YnRsZSBidWdzIGhpZGUsIHNvIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCByYWNlIGNvbmRpdGlvbnMsIG9yIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBwYWNrZXQgc3RhdGUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHNlZSB3aGF0IHNlY3JldHMgbGluZSA3MzM5IGlzIGhpZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjQwLjE4NjY2ODYzNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzE3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzMzMDpcXHRcXG43MzMxOlxcdFxcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cXG43MzMyOlxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG43MzMzOlxcdFxcdFxcdGdvdG8gbm9kZWZlcjtcXG43MzM0OlxcdFxcbjczMzU6XFx0XFx0Y3B1ID0gc2tiLVxcdTAwM2VhbGxvY19jcHU7XFxuNzMzNjpcXHRcXHRpZiAoY3B1ID09IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgfHxcXG43MzM3OlxcdFxcdCAgICBXQVJOX09OX09OQ0UoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpIHx8XFxuNzMzODpcXHRcXHQgICAgIWNwdV9vbmxpbmUoY3B1KSkge1xcbjczMzk6XFx0bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbjczNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjczNDE6XFx0XFx0fVxcbjczNDI6XFx0XFxuNzM0MzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9kc3Qoc2tiKSk7XFxuNzM0NDpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYi1cXHUwMDNlZGVzdHJ1Y3Rvcik7XFxuNzM0NTpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xcbjczNDY6XFx0XFxuNzM0NzpcXHRcXHRzZG4gPSBwZXJfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMsIGNwdSkgKyBudW1hX25vZGVfaWQoKTtcXG43MzQ4OlxcdFxcbjczNDk6XFx0XFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcXG43MzUwOlxcdFxcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9jb3VudCk7XFxuNzM1MTpcXHRcXG43MzUyOlxcdFxcdGlmIChkZWZlcl9jb3VudCBcXHUwMDNlPSBkZWZlcl9tYXgpXFxuNzM1MzpcXHRcXHRcXHRnb3RvIG5vZGVmZXI7XFxuNzM1NDpcXHRcXG43MzU1OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2c2tiLVxcdTAwM2VsbF9ub2RlLCBcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9saXN0KTtcXG43MzU2OlxcdFxcbjczNTc6XFx0XFx0LyogU2VuZCBhbiBJUEkgZXZlcnkgdGltZSBxdWV1ZSByZWFjaGVzIGhhbGYgY2FwYWNpdHkuICovXFxuNzM1ODpcXHRcXHRraWNrID0gKGRlZmVyX2NvdW50IC0gMSkgPT0gKGRlZmVyX21heCBcXHUwMDNlXFx1MDAzZSAxKTtcXG43MzU5OlxcdFxcbjczNjA6XFx0XFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcXG43MzYxOlxcdFxcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cXG43MzYyOlxcdFxcdCAqL1xcbjczNjM6XFx0XFx0aWYgKHVubGlrZWx5KGtpY2spKVxcbjczNjQ6XFx0XFx0XFx0a2lja19kZWZlcl9saXN0X3B1cmdlKGNwdSk7XFxuNzM2NTpcXHR9XFxuNzM2NjpcXHRcXG43MzY3OlxcdHN0YXRpYyB2b2lkIHNrYl9zcGxpY2VfY3N1bV9wYWdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwYWdlICpwYWdlLFxcbjczNjg6XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuNzM2OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjQwLjE4NzA0MTc1NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjQ4Mjk2NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIE5vZGUgSXRlcmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCBOVU1BIG5vZGVzIGluIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAuIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyB0aGUgbG9vcCBmcm9tIGBmb3JfZWFjaF9ub2RlYCB0byBgZm9yX2VhY2hfb25saW5lX25vZGVgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0J3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZT8gUHJpbWFyaWx5LCB0aGlzIGlzIGFuIG9wdGltaXphdGlvbiwgcmlnaHQ/IFRoZSBnb2FsIGlzIHRvIG9ubHkgcHJvY2VzcyBkZWZlcnJlZCBTS0JzIG9uIG9ubGluZSBOVU1BIG5vZGVzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIExldCdzIGRpZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFrcyB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIEFmdGVyIGEgY2xvc2UgcmV2aWV3LCBJIGNhbiBzYXkgd2l0aCBjZXJ0YWludHkgdGhhdCAqbm8qLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aG9zZSBjb25jZXJucy4gVGhlIG1lbW9yeSBmb3IgYHNrYl9kZWZlcl9ub2Rlc2AgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgX19hbGxvY19wZXJjcHVgIGR1cmluZyBgbmV0X2Rldl9pbml0YC4gVGhlIGxvb3AgaXRzZWxmIGp1c3QgY29uc3VtZXMgU0tCcyBmcm9tIGVhY2ggbm9kZSdzIGxpbmtlZCBsaXN0IG9uIHRoZSBjdXJyZW50IENQVSwgd2hpY2ggYXJlIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb3JlIGNoYW5nZSBoZXJlICpvbmx5KiByZXN0cmljdHMgdGhlIGl0ZXJhdGlvbiByYW5nZS4gTm8gdXNlciBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBwYWRkaW5nIGNvbmNlcm5zLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrcy5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMuIFdlIGtub3cgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgS0FTQU4gaXMgdGhlcmUgZm9yIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGhhbmRsZWQuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBhbnN3ZXIgaXMgY2xlYXJseSBuby5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC5cblxuU28sIGhlcmUncyBob3cgSSdsbCBzdW1tYXJpemUgaXQ6IFRoZSBwYXRjaCBtb2RpZmllcyBub2RlIGl0ZXJhdGlvbiBpbiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAsIGNoYW5naW5nIGZyb20gYSBmdWxsIGVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIG5vZGVzIHRvIG9ubHkgaXRlcmF0aW5nIG92ZXIgb25saW5lIG9uZXMgd2hlbiBmbHVzaGluZyBwZXItQ1BVIGRlZmVycmVkIFNLQiBsaXN0cy4gVGhlIEtNU0FOIGZvY3VzIGlzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQga2VybmVsLXRvLXVzZXIgbGVha3MsIHdoaWNoIHRoaXMgY2hhbmdlIGF2b2lkcy4gVGhlIG5vZGUgSUQgbG9vcCBib3VuZCBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmc7IGl0IGFsc28gZG9lc24ndCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyLXNwYWNlIG9yIGNvbmRpdGlvbiBicmFuY2hlcy4gSSBjYW4gY29uY2x1ZGUgdGhhdCBzdGFuZGFyZCBLQVNBTiBhbmQgZGVidWdnaW5nIHRlY2huaXF1ZXMgYXJlIHN1ZmZpY2llbnQuIE5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDExLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjQ4LjgzNTM0MTAxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChgZm9yX2VhY2hfb25saW5lX25vZGVgKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoYGZvcl9lYWNoX25vZGVgKSB3aGVuIGRyYWluaW5nIGRlZmVycmVkIHNrYiBsaXN0cy5cXG5cXG5UaGlzIGlzIGEgbWlub3IgY29udHJvbCBmbG93IC8gb3B0aW1pemF0aW9uIGNoYW5nZSBpbiBuZXR3b3JrIGNvcmUgTkFQSSBkZWZlcnJlZCBTS0IgZnJlZWluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGBmb3JfZWFjaF9vbmxpbmVfbm9kZWApIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChgZm9yX2VhY2hfbm9kZWApIHdoZW4gZHJhaW5pbmcgZGVmZXJyZWQgc2tiIGxpc3RzLlxcblxcblRoaXMgaXMgYSBtaW5vciBjb250cm9sIGZsb3cgLyBvcHRpbWl6YXRpb24gY2hhbmdlIGluIG5ldHdvcmsgY29yZSBOQVBJIGRlZmVycmVkIFNLQiBmcmVlaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwvxbp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 02:12:25 +0000 UTC FinishedAt: 2026-09-11 03:02:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "4c50ea25-9a65-48a0-a417-8b0ec1db1dac" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_defer_free_flush", "skb_attempt_defer_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3NrYl9hdHRlbXB0X2RlZmVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGBmb3JfZWFjaF9vbmxpbmVfbm9kZWApIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChgZm9yX2VhY2hfbm9kZWApIHdoZW4gZHJhaW5pbmcgZGVmZXJyZWQgc2tiIGxpc3RzLlxuXG5UaGlzIGlzIGEgbWlub3IgY29udHJvbCBmbG93IC8gb3B0aW1pemF0aW9uIGNoYW5nZSBpbiBuZXR3b3JrIGNvcmUgTkFQSSBkZWZlcnJlZCBTS0IgZnJlZWluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKSBpbiBjb3JlIG5ldHdvcmtpbmcgKG5ldC9jb3JlL2Rldi5jKSB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGZvcl9lYWNoX29ubGluZV9ub2RlKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoZm9yX2VhY2hfbm9kZSkuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIGR1cmluZyBOQVBJIHBvbGxpbmcgYW5kIHNvZnRpcnEgbmV0X3J4X2FjdGlvbiB0byBmbHVzaCBkZWZlcnJlZCBTS0JzIGFjcm9zcyBOVU1BIG5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTUEgbm9kZSB0cmFja2luZyBhbmQgZGVmZXJyZWQgcGFja2V0IGRlYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAyOTBlMGYwOTllNmJmLi5iNTI4YjZhOTg2ZmNmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNjkwNyw3ICYjNDM7NjkwNyw3IEBAIHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG4gXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbiBcdGludCBub2RlO1xuIFxuLVx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xuIFx0XHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSAmIzQzOyBub2RlO1xuIFxuIFx0XHRpZiAobGxpc3RfZW1wdHkoXHUwMDI2c2RuLVx1MDAzZWRlZmVyX2xpc3QpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3NrYl9hdHRlbXB0X2RlZmVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKSBpbiBjb3JlIG5ldHdvcmtpbmcgKG5ldC9jb3JlL2Rldi5jKSB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGZvcl9lYWNoX29ubGluZV9ub2RlKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoZm9yX2VhY2hfbm9kZSkuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIGR1cmluZyBOQVBJIHBvbGxpbmcgYW5kIHNvZnRpcnEgbmV0X3J4X2FjdGlvbiB0byBmbHVzaCBkZWZlcnJlZCBTS0JzIGFjcm9zcyBOVU1BIG5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTUEgbm9kZSB0cmFja2luZyBhbmQgZGVmZXJyZWQgcGFja2V0IGRlYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMjkwZTBmMDk5ZTZiZi4uYjUyOGI2YTk4NmZjZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTY5MDcsNyAmIzQzOzY5MDcsNyBAQCBzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKQogCXN0cnVjdCBza2JfZGVmZXJfbm9kZSAqc2RuOwogCWludCBub2RlOwogCi0JZm9yX2VhY2hfbm9kZShub2RlKSB7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKIAkJc2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTsKIAogCQlpZiAobGxpc3RfZW1wdHkoJmFtcDtzZG4tJmd0O2RlZmVyX2xpc3QpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTmV0d29yayBEZXZpY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIGRpZmYgYW5kIHRoZSBsaW5lIG51bWJlciwgNjkwNy4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgY29udGV4dC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCwgc28gSSBzdXNwZWN0IHdlJiMzOTtyZSBsb29raW5nIGF0IG9wdGltaXphdGlvbnMgb3IgY2hhbmdlcyB0byBob3cgU0tCcyBhcmUgaGFuZGxlZCBpbiBhIGRlZmVycmVkIGZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyB0aGUgYGZvcl9lYWNoX25vZGVgIGxvb3AsIHRoaXMgKm1pZ2h0KiBiZSByZWxhdGVkIHRvIE5VTUEgb3IgQ1BVIG5vZGUgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgaW4gdGhlIG5ldHdvcmsgc3RhY2suCgpMZXQgbWUgcXVpY2tseSBncmFiIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb24gYG5ldC9jb3JlL2Rldi5jYCB0byBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGZvcl9lYWNoX29ubGluZV9ub2RlYCBpcyB1c2VkIGhlcmUgYW5kIHNlZSB3aGF0IHdhcyBjaGFuZ2VkIGZyb20gYGZvcl9lYWNoX25vZGVgLiBUaGF04oCZcyBteSBwcmltYXJ5IGNvbmNlcm4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODkwOlx0XG42ODkxOlx0XHRpZiAodW5saWtlbHkodmFsIFx1MDAyNiBOQVBJRl9TVEFURV9NSVNTRUQpKSB7XG42ODkyOlx0XHRcdF9fbmFwaV9zY2hlZHVsZShuKTtcbjY4OTM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNjg5NDpcdFx0fVxuNjg5NTpcdFxuNjg5NjpcdFx0aWYgKHRpbWVvdXQpXG42ODk3Olx0XHRcdGhydGltZXJfc3RhcnQoXHUwMDI2bi1cdTAwM2V0aW1lciwgbnNfdG9fa3RpbWUodGltZW91dCksXG42ODk4Olx0XHRcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQpO1xuNjg5OTpcdFx0cmV0dXJuIHJldDtcbjY5MDA6XHR9XG42OTAxOlx0RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xuNjkwMjpcdFxuNjkwMzpcdHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG42OTA0Olx0e1xuNjkwNTpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfbGlzdDtcbjY5MDY6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0O1xuNjkwNzpcdFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG42OTA4Olx0XHRpbnQgbm9kZTtcbjY5MDk6XHRcbjY5MTA6XHRcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcbjY5MTE6XHRcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbjY5MTI6XHRcbjY5MTM6XHRcdFx0aWYgKGxsaXN0X2VtcHR5KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KSlcbjY5MTQ6XHRcdFx0XHRjb250aW51ZTtcbjY5MTU6XHRcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9jb3VudCwgMCk7XG42OTE2Olx0XHRcdGZyZWVfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RuLVx1MDAzZWRlZmVyX2xpc3QpO1xuNjkxNzpcdFxuNjkxODpcdFx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNrYiwgbmV4dCwgZnJlZV9saXN0LCBsbF9ub2RlKSB7XG42OTE5Olx0XHRcdFx0cHJlZmV0Y2gobmV4dCk7XG42OTIwOlx0XHRcdFx0bmFwaV9jb25zdW1lX3NrYihza2IsIDEpO1xuNjkyMTpcdFx0XHR9XG42OTIyOlx0XHR9XG42OTIzOlx0fVxuNjkyNDpcdFxuNjkyNTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxuNjkyNjpcdFxuNjkyNzpcdGVudW0ge1xuNjkyODpcdFx0TkFQSV9GX1BSRUZFUl9CVVNZX1BPTExcdD0gMSxcbjY5Mjk6XHRcdE5BUElfRl9FTkRfT05fUkVTQ0hFRFx0PSAyLFxuNjkzMDpcdH07XG42OTMxOlx0XG42OTMyOlx0c3RhdGljIHZvaWQgYnVzeV9wb2xsX3N0b3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB2b2lkICpoYXZlX3BvbGxfbG9jayxcbjY5MzM6XHRcdFx0XHQgICB1bnNpZ25lZCBmbGFncywgdTE2IGJ1ZGdldClcbjY5MzQ6XHR7XG42OTM1Olx0XHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbjY5MzY6XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7XG42OTM3Olx0XHRpbnQgcmM7XG42OTM4Olx0XG42OTM5Olx0XHQvKiBCdXN5IHBvbGxpbmcgbWVhbnMgdGhlcmUgaXMgYSBoaWdoIGNoYW5jZSBkZXZpY2UgZHJpdmVyIGhhcmQgaXJxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzZSBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCBpbiB0aGUgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHVzZSBvZiBgZ3JlcHBlcmAgc2hvdWxkIGRvIHRoZSB0cmljay4gSSYjMzk7bGwgbGF1bmNoIHRoZSBzZWFyY2ggYW5kIHNlZSB3aGF0IHBvcHMgdXAuIFNob3VsZG4mIzM5O3QgdGFrZSB0b28gbG9uZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2RlZmVyX2ZyZWVfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz02OTAxPUVYUE9SVF9TWU1CT0wobmFwaV9jb21wbGV0ZV9kb25lKTtcbm5ldC9jb3JlL2Rldi5jLTY5MDItXG5uZXQvY29yZS9kZXYuYzo2OTAzOnN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG5uZXQvY29yZS9kZXYuYy02OTA0LXtcbi0tXG5uZXQvY29yZS9kZXYuYz02OTg5PXN0YXRpYyB2b2lkIF9fbmFwaV9idXN5X2xvb3AodW5zaWduZWQgaW50IG5hcGlfaWQsXG4tLVxubmV0L2NvcmUvZGV2LmMtNzA0My1cdFx0XHRcdFx0TElOVVhfTUlCX0JVU1lQT0xMUlhQQUNLRVRTLCB3b3JrKTtcbm5ldC9jb3JlL2Rldi5jOjcwNDQ6XHRcdHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCk7XG5uZXQvY29yZS9kZXYuYy03MDQ1LVx0XHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9Nzg4OT1zdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxubmV0L2NvcmUvZGV2LmMtNzkxNi1cdFx0fVxubmV0L2NvcmUvZGV2LmM6NzkxNzpcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXHRcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcbi0tXG5uZXQvY29yZS9kZXYuYz03OTY4PXN0YXRpYyBfX2xhdGVudF9lbnRyb3B5IHZvaWQgbmV0X3J4X2FjdGlvbih2b2lkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5ODctXG5uZXQvY29yZS9kZXYuYzo3OTg4Olx0XHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xubmV0L2NvcmUvZGV2LmMtNzk4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXNgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQuIFRoZSBiZXN0IGZpcnN0IHN0ZXAgaXMgYSBxdWljayBgZ3JlcGAgZm9yIHRoZSBleGFjdCBzdHJpbmcsIGBza2JfZGVmZXJfbm9kZXNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBleHBsb3JlIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9kZWZlcl9ub2RlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ob3RkYXRhLmg9MTk9c3RydWN0IG5ldF9ob3RkYXRhIHtcbi0tXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNDEtI2VuZGlmXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6NDI6XHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgX19wZXJjcHUgKnNrYl9kZWZlcl9ub2RlcztcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00My1cdGludFx0XHRcdGdyb19ub3JtYWxfYmF0Y2g7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjkwMz1zdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY5MTAtXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7XG5uZXQvY29yZS9kZXYuYzo2OTExOlx0XHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSAmIzQzOyBub2RlO1xubmV0L2NvcmUvZGV2LmMtNjkxMi1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMzQyNj1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzQ3Ny1cdH1cbm5ldC9jb3JlL2Rldi5jOjEzNDc4Olx0bmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzID1cbm5ldC9jb3JlL2Rldi5jLTEzNDc5LVx0XHQgX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkgKiBucl9ub2RlX2lkcyxcbm5ldC9jb3JlL2Rldi5jLTEzNDgwLVx0XHRcdFx0X19hbGlnbm9mX18oc3RydWN0IHNrYl9kZWZlcl9ub2RlKSk7XG5uZXQvY29yZS9kZXYuYzoxMzQ4MTpcdGlmICghbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKVxubmV0L2NvcmUvZGV2LmMtMTM0ODItXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcdGtmcmVlX3NrYl9uYXBpX2NhY2hlKHNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cbm5ldC9jb3JlL3NrYnVmZi5jOjczNDc6XHRzZG4gPSBwZXJfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMsIGNwdSkgJiM0MzsgbnVtYV9ub2RlX2lkKCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MzQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBTS0IgRGVwdGhzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHNvY2tldCBidWZmZXJzLiBNeSBndXQgZmVlbGluZyBpcyBsZWFkaW5nIG1lIHRvd2FyZHMgYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIHNrYnMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBsaW5lIDczNDcgc291bmRzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYTsgaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGFjdGlvbiBpcy4gSG9wZWZ1bGx5IHRoZSBjb2RlIGluIHRoaXMgYXJlYSBtYWtlcyBpdCBjbGVhcmVyIHdoYXQgdGhlIGlzc3VlIGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGlmIHRoaXMgaHVuY2ggaG9sZHMgd2F0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczMzA6XHRcbjczMzE6XHRcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cbjczMzI6XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjczMzM6XHRcdFx0Z290byBub2RlZmVyO1xuNzMzNDpcdFxuNzMzNTpcdFx0Y3B1ID0gc2tiLVx1MDAzZWFsbG9jX2NwdTtcbjczMzY6XHRcdGlmIChjcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSB8fFxuNzMzNzpcdFx0ICAgIFdBUk5fT05fT05DRShjcHUgXHUwMDNlPSBucl9jcHVfaWRzKSB8fFxuNzMzODpcdFx0ICAgICFjcHVfb25saW5lKGNwdSkpIHtcbjczMzk6XHRub2RlZmVyOlx0a2ZyZWVfc2tiX25hcGlfY2FjaGUoc2tiKTtcbjczNDA6XHRcdFx0cmV0dXJuO1xuNzM0MTpcdFx0fVxuNzM0MjpcdFxuNzM0MzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2JfZHN0KHNrYikpO1xuNzM0NDpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2ItXHUwMDNlZGVzdHJ1Y3Rvcik7XG43MzQ1Olx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xuNzM0NjpcdFxuNzM0NzpcdFx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xuNzM0ODpcdFxuNzM0OTpcdFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcbjczNTA6XHRcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcdTAwMjZzZG4tXHUwMDNlZGVmZXJfY291bnQpO1xuNzM1MTpcdFxuNzM1MjpcdFx0aWYgKGRlZmVyX2NvdW50IFx1MDAzZT0gZGVmZXJfbWF4KVxuNzM1MzpcdFx0XHRnb3RvIG5vZGVmZXI7XG43MzU0Olx0XG43MzU1Olx0XHRsbGlzdF9hZGQoXHUwMDI2c2tiLVx1MDAzZWxsX25vZGUsIFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KTtcbjczNTY6XHRcbjczNTc6XHRcdC8qIFNlbmQgYW4gSVBJIGV2ZXJ5IHRpbWUgcXVldWUgcmVhY2hlcyBoYWxmIGNhcGFjaXR5LiAqL1xuNzM1ODpcdFx0a2ljayA9IChkZWZlcl9jb3VudCAtIDEpID09IChkZWZlcl9tYXggXHUwMDNlXHUwMDNlIDEpO1xuNzM1OTpcdFxuNzM2MDpcdFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcbjczNjE6XHRcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cbjczNjI6XHRcdCAqL1xuNzM2MzpcdFx0aWYgKHVubGlrZWx5KGtpY2spKVxuNzM2NDpcdFx0XHRraWNrX2RlZmVyX2xpc3RfcHVyZ2UoY3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBTS0IgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBuZXR3b3JrIGJlaGF2aW9yLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBoYW5kbGVkIHdpdGhpbiB0aGUgYG5ldC9jb3JlL3NrYnVmZi5jYCBmaWxlLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgKnNrX2J1ZmYqIHN0cnVjdHVyZSwgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIHVzZWQgdG8gcmVwcmVzZW50IG5ldHdvcmsgcGFja2V0cyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb3JlIHBhY2tldCBtYW5pcHVsYXRpb24sIGFsbG9jYXRpb24sIGFuZCBkZWFsbG9jYXRpb24gbG9naWMgcmVzaWRlcy4gVGltZSB0byBkaWcgaW4gYW5kIHBpbnBvaW50IHRoZSBwcmVjaXNlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGFsbG9jYXRpb24sIGNvcHlpbmcsIG9yIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcHJvYmFibHkgdGhlIGN1bHByaXQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBob2xkcywgbGV0JiMzOTtzIGV4cGxvcmUgdGhpcyBmaWxlIGFuZCBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MzIwOlx0dm9pZCBza2JfYXR0ZW1wdF9kZWZlcl9mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG43MzIxOlx0e1xuNzMyMjpcdFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG43MzIzOlx0XHR1bnNpZ25lZCBsb25nIGRlZmVyX2NvdW50O1xuNzMyNDpcdFx0dW5zaWduZWQgaW50IGRlZmVyX21heDtcbjczMjU6XHRcdGJvb2wga2ljaztcbjczMjY6XHRcdGludCBjcHU7XG43MzI3Olx0XG43MzI4Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZza2JfZGVmZXJfZGlzYWJsZV9rZXkpKVxuNzMyOTpcdFx0XHRnb3RvIG5vZGVmZXI7XG43MzMwOlx0XG43MzMxOlx0XHQvKiB6ZXJvIGNvcHkgbm90aWZpY2F0aW9ucyBzaG91bGQgbm90IGJlIGRlbGF5ZWQuICovXG43MzMyOlx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG43MzMzOlx0XHRcdGdvdG8gbm9kZWZlcjtcbjczMzQ6XHRcbjczMzU6XHRcdGNwdSA9IHNrYi1cdTAwM2VhbGxvY19jcHU7XG43MzM2Olx0XHRpZiAoY3B1ID09IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgfHxcbjczMzc6XHRcdCAgICBXQVJOX09OX09OQ0UoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcykgfHxcbjczMzg6XHRcdCAgICAhY3B1X29ubGluZShjcHUpKSB7XG43MzM5Olx0bm9kZWZlcjpcdGtmcmVlX3NrYl9uYXBpX2NhY2hlKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBTS0IgRGVmZXJyZWQgRnJlZSBJdGVyYXRpb24gQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSBpbiBgbmV0L2NvcmUvZGV2LmNgIHdpdGhpbiB0aGUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgdXNlZCBgZm9yX2VhY2hfbm9kZWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciAqcG9zc2libGUqIG5vZGVzLCBhbmQgbm93IGl0JiMzOTtzIHVzaW5nIGBmb3JfZWFjaF9vbmxpbmVfbm9kZWAuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50IGJlY2F1c2UgaXQmIzM5O3MgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIGRlZmVycmVkIFNLQiBmcmVlIG1lY2hhbmlzbSB3b3Jrcywgc3BlY2lmaWNhbGx5IGR1cmluZyBgbmV0X3J4X2FjdGlvbmAsIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIGFuZCBgX19uYXBpX2J1c3lfbG9vcGAg4oCTIGFsbCBjcml0aWNhbCBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiBTbywgeWVzLCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGZyZXF1ZW50bHkgZXhlY3V0ZWQuCgpJIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGhvcGluZyB0byBsaW1pdCB0aGUgc2NvcGUsIGJ1dCBpdCBsb29rcyBsaWtlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgYWx3YXlzIGNvbXBpbGVkIGluIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXQgYWx3YXlzIGlzIGZvciBhbnkgbmV0d29ya2luZyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyBhcm91bmQgTlVNQSBub2RlIHN0YXRlcy4gSWYgU0tCcyBhcmUgYWRkZWQgdG8gYSBub2RlIHRoYXQmIzM5O3MgKmFib3V0KiB0byBnbyBvZmZsaW5lIG9yIGlzIGluIGEgZGlmZmVyZW50IHN0YXRlLCB0aGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhhdCYjMzk7cyBhIHBlcmZlY3QgZnV6emluZyB0YXJnZXQuCgpNeSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGV2YWx1YXRpb24gaXMgbG9va2luZyBnb29kLiBUaGUgY2hhbmdlIGlzIGluIGNvcmUgbmV0d29ya2luZywgbW9kaWZpZXMgYSBjb3JlIGxvb3AsIGlzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIGFuZCBpbnZvbHZlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1ZSB0byBOVU1BIG5vZGUgc3RhdGUgdHJhbnNpdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXRzZWxmIGlzIHRoZSBwcmltYXJ5IHRhcmdldCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbG9vcCB3YXMgY2hhbmdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgaW5saW5lZCBvciBjYWxsZWQgZGlyZWN0bHkuIFRoZSByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBza2JfYXR0ZW1wdF9kZWZlcl9mcmVlYCAod2hpY2ggYWN0dWFsbHkgYWRkcyBTS0JzIHRvIHRoZSBkZWZlcnJhbCBsaXN0KSBhbmQgdGhlIE5BUEkvc29mdGlycSBoYW5kbGVycyBsaWtlIGBuZXRfcnhfYWN0aW9uYCwgYW5kIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIGFyZSBhbHNvIHJlbGV2YW50LiBVbHRpbWF0ZWx5LCBJJiMzOTtkIHNheSB0aGUgY29yZSBzeW1ib2xzIGhlcmUgZm9yIGZ1enppbmcgd291bGQgYmUgYm90aCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAgYW5kIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAuIEkgc2hvdWxkIGFsc28gcnVuIGEgYGdyZXBgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIHdpdGggU0tCIGRlZmVycmFsIGFuZCBmcmVlaW5nIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9kZWZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9uZXQucnN0PTM2MD1EZWZhdWx0IHZhbHVlIGlzIDEwLCBtaW5pbXVtIDEsIG1heGltdW0gMzYwMC5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3QtMzYxLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvbmV0LnJzdDozNjI6c2tiX2RlZmVyX21heFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvbmV0LnJzdC0zNjMtLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0PTc2OT10byBlYWNoIGluZGl2aWR1YWwgTUFDIGRyaXZlciBmb3IgUEhZIHRpbWVzdGFtcGluZyBzdXBwb3J0LiBUaGlzIGVudGFpbHM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNzc3LSAgYGBuZXRpZl9yeCgpYGAgYW5kIHNpbWlsYXIsIE1BQyBkcml2ZXJzIG11c3QgY2hlY2sgd2hldGhlclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q6Nzc4OiAgYGBza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYilgYCBpcyBuZWNlc3Nhcnkgb3Igbm90IC0gYW5kIGlmIGl0IGlzLCBkb24mIzM5O3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0LTc3OS0gIGNhbGwgYGBuZXRpZl9yeCgpYGAgYXQgYWxsLiAgSWYgYGBDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HYGAgaXNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03ODctICBgYG5ldGlmX3JlY2VpdmVfc2tiYGAsIHRoZSBzdGFjayBhdXRvbWF0aWNhbGx5IGNoZWNrcyB3aGV0aGVyXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdDo3ODg6ICBgYHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoKWBgIGlzIG5lY2Vzc2FyeSwgc28gdGhpcyBjaGVjayBpcyBub3QgbmVlZGVkIGluc2lkZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNzg5LSAgdGhlIGRyaXZlci5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q9NTcyPVNPX1RJTUVTVEFNUElORyBBUEkg5LiN5YWB6K645Li65ZCM5LiA5pWw5o2u5YyF5Lyg6YCS5aSa5Liq56Gs5Lu25pe26Ze05oiz77yM5Zug5q2k6Zmk5LqGIERTQVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjAtICDlnKggcGxhaW4gYGBuZXRpZl9yeCgpYGAg5ZKM57G75Ly85oOF5Ya15LiL77yMTUFDIOmpseWKqOeoi+W6j+W/hemhu+ajgOafpeaYr+WQplxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0OjYyMTogIGBgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpYGAg5piv5b+F6KaB55qE77yM5aaC5p6c5piv77yM5YiZ5LiN6LCD55SoIGBgbmV0aWZfcngoKWBg44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjIyLSAg5aaC5p6cIGBgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR2BgIOWQr+eUqO+8jOW5tuS4lFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjctICDlr7nkuo7lhbbku5Ygc2tiIOaOpeaUtuWHveaVsO+8jOS+i+WmgiBgYG5hcGlfZ3JvX3JlY2VpdmVgYCDlkowgYGBuZXRpZl9yZWNlaXZlX3NrYmBg77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q6NjI4OiAg5aCG5qCI5Lya6Ieq5Yqo5qOA5p+l5piv5ZCmIGBgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcCgpYGAg5piv5b+F6KaB55qE77yM5Zug5q2k5q2k5qOA5p+l5LiNXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjI5LSAg6ZyA6KaB5Zyo6amx5Yqo56iL5bqP5YaF6YOo44CCXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYz0zOTU9Ym9vbCBzamExMTEwX3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYy00MDctXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3B0cC5jOjQwODovKiBDYWxsZWQgZnJvbSBkc2Ffc2tiX2RlZmVyX3J4X3RpbWVzdGFtcCAqL1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYy00MDktYm9vbCBzamExMTA1X3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2xpYjgzOTAuYz02NTk9c3RhdGljIHZvaWQgZWlfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbGliODM5MC5jLTc0MC1cdFx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbGliODM5MC5jOjc0MTpcdFx0XHRcdGlmICghc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9saWI4MzkwLmMtNzQyLVx0XHRcdFx0XHRuZXRpZl9yeChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eC5jPTM4Mz1zdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTJ4eF9mZWNfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYy00MzEtXHRcdHJza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhyc2tiLCBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4LmM6NDMyOlx0XHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAocnNrYikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYy00MzMtXHRcdFx0bmV0aWZfcngocnNrYik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmM9NjQ1PXN0YXRpYyBpcnFyZXR1cm5fdCBsYW45NjZ4X3h0cl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jLTcyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jOjcyMzpcdFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYy03MjQtXHRcdFx0bmV0aWZfcngoc2tiKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmM9MzUzPXN0YXRpYyBib29sIG9jZWxvdF9mZG1hX3JlY2VpdmVfc2tiKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMtMzgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5jOjM4MzpcdGlmIChsaWtlbHkoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMtMzg0LVx0XHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYz00OT1zdGF0aWMgaXJxcmV0dXJuX3Qgb2NlbG90X3h0cl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jLTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jOjY2Olx0XHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYy02Ny1cdFx0XHRuZXRpZl9yeChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmM9OTY4PXN0YXRpYyB2b2lkIGxsX3RlbWFjX3JlY3Yoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYy0xMDIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYzoxMDIzOlx0XHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmMtMTAyNC1cdFx0XHRuZXRpZl9yeChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYz01OTE9c3RhdGljIHZvaWQgeGVtYWNsaXRlX3J4X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2VtYWNsaXRlLmMtNjIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jOjYyNDpcdGlmICghc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jLTYyNS1cdFx0bmV0aWZfcngoc2tiKTtcdC8qIFNlbmQgdGhlIHBhY2tldCB1cHN0cmVhbSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9Mzg5MT1zdGF0aWMgdm9pZCBsYW43OHh4X3NrYl9yZXR1cm4oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zOTAxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzozOTAyOlx0aWYgKHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzkwMy1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0zMjY9dm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM0OS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzozNTA6XHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM1MS1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDcxNT12b2lkIHNrYl9jbG9uZV90eF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ3MTY6Ym9vbCBza2JfZGVmZXJfcnhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzE3LVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDcyMD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Nsb25lX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDcyMy1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDcyNDpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzI1LXtcbi0tXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtMTItXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6MTM6c3RydWN0IHNrYl9kZWZlcl9ub2RlIHtcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC0xNC1cdHN0cnVjdCBsbGlzdF9oZWFkXHRkZWZlcl9saXN0O1xuLS1cbmluY2x1ZGUvbmV0L2hvdGRhdGEuaD0xOT1zdHJ1Y3QgbmV0X2hvdGRhdGEge1xuLS1cbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00MS0jZW5kaWZcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaDo0MjpcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSBfX3BlcmNwdSAqc2tiX2RlZmVyX25vZGVzO1xuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQzLVx0aW50XHRcdFx0Z3JvX25vcm1hbF9iYXRjaDtcbi0tXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNTEtXHRpbnRcdFx0XHRzeXNjdGxfbWF4X3NrYl9mcmFncztcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaDo1MjpcdGludFx0XHRcdHN5c2N0bF9za2JfZGVmZXJfbWF4O1xuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTUzLVx0aW50XHRcdFx0c3lzY3RsX21lbV9wY3B1X3Jzdjtcbi0tXG5uZXQvY29yZS9kZXYuYz02NDQxPXN0YXRpYyBpbnQgbmV0aWZfcmVjZWl2ZV9za2JfaW50ZXJuYWwoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy02NDQ2LVxubmV0L2NvcmUvZGV2LmM6NjQ0NzpcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG5uZXQvY29yZS9kZXYuYy02NDQ4LVx0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjQ2OD12b2lkIG5ldGlmX3JlY2VpdmVfc2tiX2xpc3RfaW50ZXJuYWwoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5uZXQvY29yZS9kZXYuYy02NDc2LVx0XHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xubmV0L2NvcmUvZGV2LmM6NjQ3NzpcdFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG5uZXQvY29yZS9kZXYuYy02NDc4LVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QsIFx1MDAyNnN1Ymxpc3QpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTY5MDE9RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xubmV0L2NvcmUvZGV2LmMtNjkwMi1cbm5ldC9jb3JlL2Rldi5jOjY5MDM6c3RhdGljIHZvaWQgc2tiX2RlZmVyX2ZyZWVfZmx1c2godm9pZClcbm5ldC9jb3JlL2Rldi5jLTY5MDQte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTY5MDYtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dDtcbm5ldC9jb3JlL2Rldi5jOjY5MDc6XHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbm5ldC9jb3JlL2Rldi5jLTY5MDgtXHRpbnQgbm9kZTtcbi0tXG5uZXQvY29yZS9kZXYuYy02OTEwLVx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xubmV0L2NvcmUvZGV2LmM6NjkxMTpcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbm5ldC9jb3JlL2Rldi5jLTY5MTItXG4tLVxubmV0L2NvcmUvZGV2LmM9Njk4OT1zdGF0aWMgdm9pZCBfX25hcGlfYnVzeV9sb29wKHVuc2lnbmVkIGludCBuYXBpX2lkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcwNDMtXHRcdFx0XHRcdExJTlVYX01JQl9CVVNZUE9MTFJYUEFDS0VUUywgd29yayk7XG5uZXQvY29yZS9kZXYuYzo3MDQ0Olx0XHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xubmV0L2NvcmUvZGV2LmMtNzA0NS1cdFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc4ODk9c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MTYtXHRcdH1cbm5ldC9jb3JlL2Rldi5jOjc5MTc6XHRcdHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCk7XG5uZXQvY29yZS9kZXYuYy03OTE4LVx0XHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9Nzk2OD1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIG5ldF9yeF9hY3Rpb24odm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy03OTg3LVxubmV0L2NvcmUvZGV2LmM6Nzk4ODpcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbm5ldC9jb3JlL2Rldi5jLTc5ODktXG4tLVxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTM0NzctXHR9XG5uZXQvY29yZS9kZXYuYzoxMzQ3ODpcdG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcyA9XG5uZXQvY29yZS9kZXYuYzoxMzQ3OTpcdFx0IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpICogbnJfbm9kZV9pZHMsXG5uZXQvY29yZS9kZXYuYzoxMzQ4MDpcdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkpO1xubmV0L2NvcmUvZGV2LmM6MTM0ODE6XHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2Rlcylcbm5ldC9jb3JlL2Rldi5jLTEzNDgyLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvY29yZS9ob3RkYXRhLmM9MTA9c3RydWN0IG5ldF9ob3RkYXRhIG5ldF9ob3RkYXRhIF9fY2FjaGVsaW5lX2FsaWduZWQgPSB7XG4tLVxubmV0L2NvcmUvaG90ZGF0YS5jLTIzLVx0LnN5c2N0bF9tYXhfc2tiX2ZyYWdzID0gTUFYX1NLQl9GUkFHUyxcbm5ldC9jb3JlL2hvdGRhdGEuYzoyNDpcdC5zeXNjdGxfc2tiX2RlZmVyX21heCA9IDEyOCxcbm5ldC9jb3JlL2hvdGRhdGEuYy0yNS1cdC5zeXNjdGxfbWVtX3BjcHVfcnN2ID0gU0tfTUVNT1JZX1BDUFVfUkVTRVJWRVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5oPTE1PWV4dGVybiBzdHJ1Y3QgbXV0ZXggcnBzX2RlZmF1bHRfbWFza19tdXRleDtcbm5ldC9jb3JlL25ldC1zeXNmcy5oLTE2LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmg6MTc6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XG5uZXQvY29yZS9uZXQtc3lzZnMuaC0xOC0jZW5kaWZcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xNTIyPXZvaWQgbmFwaV9jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYnVkZ2V0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1MzAtXG5uZXQvY29yZS9za2J1ZmYuYzoxNTMxOlx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnNrYl9kZWZlcl9kaXNhYmxlX2tleSkgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9za2J1ZmYuYy0xNTMyLVx0ICAgIHNrYi1cdTAwM2VhbGxvY19jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpIFx1MDAyNlx1MDAyNiAhc2tiX3NoYXJlZChza2IpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzI5Nz1zdGF0aWMgdm9pZCBrZnJlZV9za2JfbmFwaV9jYWNoZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczMDktXG5uZXQvY29yZS9za2J1ZmYuYzo3MzEwOkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XG5uZXQvY29yZS9za2J1ZmYuYy03MzExLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTczMjA9dm9pZCBza2JfYXR0ZW1wdF9kZWZlcl9mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy03MzIxLXtcbm5ldC9jb3JlL3NrYnVmZi5jOjczMjI6XHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjMtXHR1bnNpZ25lZCBsb25nIGRlZmVyX2NvdW50O1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczMjctXG5uZXQvY29yZS9za2J1ZmYuYzo3MzI4Olx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KSlcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjktXHRcdGdvdG8gbm9kZWZlcjtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MzM5PW5vZGVmZXI6XHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczNDYtXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3Olx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xubmV0L2NvcmUvc2tidWZmLmMtNzM0OC1cbm5ldC9jb3JlL3NrYnVmZi5jOjczNDk6XHRkZWZlcl9tYXggPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEuc3lzY3RsX3NrYl9kZWZlcl9tYXgpO1xubmV0L2NvcmUvc2tidWZmLmMtNzM1MC1cdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcdTAwMjZzZG4tXHUwMDNlZGVmZXJfY291bnQpO1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTMzND1zdGF0aWMgaW50IHByb2NfZG9fcnNzX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1MS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1MjpzdGF0aWMgaW50IHByb2NfZG9fc2tiX2RlZmVyX21heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzUzLVx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1NC17XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNTU6XHRzdGF0aWMgREVGSU5FX01VVEVYKHNrYl9kZWZlcl9tYXhfbXV0ZXgpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzU2LVx0aW50IHJldCwgb3ZhbCwgbnZhbDtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1Ny1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1ODpcdG11dGV4X2xvY2soXHUwMDI2c2tiX2RlZmVyX21heF9tdXRleCk7XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNTktXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNjA6XHRvdmFsID0gIW5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4O1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzYxLVx0cmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzYyOlx0bnZhbCA9ICFuZXRfaG90ZGF0YS5zeXNjdGxfc2tiX2RlZmVyX21heDtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM2My1cbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNjUtXHRcdGlmIChudmFsKVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzY2Olx0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNjctXHRcdGVsc2Vcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2ODpcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KTtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM2OS1cdH1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM3MC1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM3MTpcdG11dGV4X3VubG9jayhcdTAwMjZza2JfZGVmZXJfbWF4X211dGV4KTtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM3Mi1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NDMwPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNjcxLVx0e1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NjcyOlx0XHQucHJvY25hbWVcdD0gXCYjMzQ7c2tiX2RlZmVyX21heFwmIzM0Oyxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjY3MzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZXRfaG90ZGF0YS5zeXNjdGxfc2tiX2RlZmVyX21heCxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTY3NC1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNjc1LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo2NzY6XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb19za2JfZGVmZXJfbWF4LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNjc3LVx0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4tLVxubmV0L2NvcmUvdGltZXN0YW1waW5nLmM9NjU9RVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nsb25lX3R4X3RpbWVzdGFtcCk7XG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy02Ni1cbm5ldC9jb3JlL3RpbWVzdGFtcGluZy5jOjY3OmJvb2wgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvdGltZXN0YW1waW5nLmMtNjgte1xuLS1cbm5ldC9jb3JlL3RpbWVzdGFtcGluZy5jLTExMy19XG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYzoxMTQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcCk7XG4tLVxubmV0L2RzYS90YWcuYz0yMD1zdGF0aWMgREVGSU5FX01VVEVYKGRzYV90YWdfZHJpdmVyc19sb2NrKTtcbi0tXG5uZXQvZHNhL3RhZy5jLTI5LSAqL1xubmV0L2RzYS90YWcuYzozMDpzdGF0aWMgYm9vbCBkc2Ffc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChzdHJ1Y3QgZHNhX3VzZXJfcHJpdiAqcCxcbm5ldC9kc2EvdGFnLmMtMzEtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvZHNhL3RhZy5jPTU0PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZHNhL3RhZy5jLTExOS1cbm5ldC9kc2EvdGFnLmM6MTIwOlx0aWYgKGRzYV9za2JfZGVmZXJfcnhfdGltZXN0YW1wKHAsIHNrYikpXG5uZXQvZHNhL3RhZy5jLTEyMS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE1CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGVmZXJyZWQgU0tCIEZyZWVpbmcgZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgY2FsbGVkIGJ5IGBfX25hcGlfYnVzeV9sb29wYCwgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCwgYW5kIGBuZXRfcnhfYWN0aW9uYCwgd2hpbGUgYHNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGBuYXBpX2NvbnN1bWVfc2tiYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIGFuZCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBzeW1ib2xzIGFyZSBhbHNvIGFmZmVjdGVkLgoKQSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIGlzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19ORVRgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBjb25zaWRlci4gWWVzLCBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIGl0IGxvb2tzIGxpa2UgYE5FVGAgaXMgdGhlIG9ubHkgcmVxdWlyZWQgY29uZmlndXJhdGlvbi4KCk5vdywgYSBzYW5pdHkgY2hlY2sgb2YgdGhlIGd1aWRlbGluZXM6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGBFbmFibGVDb25maWdzYCBpcyBgWyYjMzQ7TkVUJiMzNDtdYCwgYW5kIGBGb2N1c1N5bWJvbHNgIGlzIGRlZmluZWQgYXMgYFsmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssICYjMzQ7c2tiX2F0dGVtcHRfZGVmZXJfZnJlZSYjMzQ7XWAuIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc3VjY2luY3QuCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY2hvaWNlIG9mIGZvY3VzIHN5bWJvbHMuIFllcywgdGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBza2IgZGVmZXJyZWQgZnJlZSBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB3aGVyZSB0aGUgbG9vcCBpdGVyYXRpb24gb3ZlciBOVU1BIG5vZGVzIHdhcyBjaGFuZ2VkLiBUaGUgZmFjdCB0aGF0IHRoZSBpdGVyYXRpb24gc3RyYXRlZ3kgaGFzIGNoYW5nZWQgaXMgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9kZWZlcl9mcmVlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3NrYl9hdHRlbXB0X2RlZmVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKSBpbiBjb3JlIG5ldHdvcmtpbmcgKG5ldC9jb3JlL2Rldi5jKSB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGZvcl9lYWNoX29ubGluZV9ub2RlKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoZm9yX2VhY2hfbm9kZSkuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIGR1cmluZyBOQVBJIHBvbGxpbmcgYW5kIHNvZnRpcnEgbmV0X3J4X2FjdGlvbiB0byBmbHVzaCBkZWZlcnJlZCBTS0JzIGFjcm9zcyBOVU1BIG5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTUEgbm9kZSB0cmFja2luZyBhbmQgZGVmZXJyZWQgcGFja2V0IGRlYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX2RlZmVyX2ZyZWVfZmx1c2gmIzM0OywKICAgICYjMzQ7c2tiX2F0dGVtcHRfZGVmZXJfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza2JfZGVmZXJfZnJlZV9mbHVzaCgpIGluIGNvcmUgbmV0d29ya2luZyAobmV0L2NvcmUvZGV2LmMpIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoZm9yX2VhY2hfb25saW5lX25vZGUpIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChmb3JfZWFjaF9ub2RlKS4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgZHVyaW5nIE5BUEkgcG9sbGluZyBhbmQgc29mdGlycSBuZXRfcnhfYWN0aW9uIHRvIGZsdXNoIGRlZmVycmVkIFNLQnMgYWNyb3NzIE5VTUEgbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVNQSBub2RlIHRyYWNraW5nIGFuZCBkZWZlcnJlZCBwYWNrZXQgZGVhbGxvY2F0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChgZm9yX2VhY2hfb25saW5lX25vZGVgKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoYGZvcl9lYWNoX25vZGVgKSB3aGVuIGRyYWluaW5nIGRlZmVycmVkIHNrYiBsaXN0cy5cblxuVGhpcyBpcyBhIG1pbm9yIGNvbnRyb2wgZmxvdyAvIG9wdGltaXphdGlvbiBjaGFuZ2UgaW4gbmV0d29yayBjb3JlIE5BUEkgZGVmZXJyZWQgU0tCIGZyZWVpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZWVjNjdhZTQzZTg4OWUyMjQwZWY1NjFmZjg4YzM5YWJkMWNhZTVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDM6MDE6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDI5MGUwZjA5OWU2YmYuLmI1MjhiNmE5ODZmY2YgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC02OTA3LDcgJiM0Mzs2OTA3LDcgQEAgc3RhdGljIHZvaWQgc2tiX2RlZmVyX2ZyZWVfZmx1c2godm9pZCkKIAlzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjsKIAlpbnQgbm9kZTsKIAotCWZvcl9lYWNoX25vZGUobm9kZSkgewomIzQzOwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CiAJCXNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICYjNDM7IG5vZGU7CiAKIAkJaWYgKGxsaXN0X2VtcHR5KCZhbXA7c2RuLSZndDtkZWZlcl9saXN0KSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgZm9jdXNlZCBvbiBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGdvZXMgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCBub2RlcyB0byB1c2UgYGZvcl9lYWNoX29ubGluZV9ub2RlYCBpbnN0ZWFkIG9mIGBmb3JfZWFjaF9ub2RlYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBUaGUgdXNlIG9mIGBmb3JfZWFjaF9vbmxpbmVfbm9kZWAgc3VnZ2VzdHMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBmbHVzaGluZyBwcm9jZXNzLCBwb3RlbnRpYWxseSB0byBhdm9pZCBvcGVyYXRpbmcgb24gb2ZmbGluZSBub2RlcyBvciB1dGlsaXplIG9ubHkgYWN0aXZlIHByb2Nlc3NpbmcgdW5pdHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTtyZSBkb2luZyB0aGlzLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBcmUgdGhleSBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgYnVnIHJlbGF0ZWQgdG8gbm9kZSBhZmZpbml0eSBvciBOVU1BIGFyY2hpdGVjdHVyZXM/IEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgb2xkZXIgdmVyc2lvbiB3YXMgY3JlYXRpbmcgaXNzdWVzLiBMb29raW5nIGF0IHRoZSBjb250ZXh0IGFyb3VuZCBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIHdpbGwgYmUgY3JpdGljYWwuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGFuZCBpbnRlbnQgYmVoaW5kIHRoZSBgc2tiX2RlZmVyX25vZGVzYCBzdHJ1Y3R1cmUgYW5kIGBkZWZlcl9saXN0YCBpcyBhbHNvIHZpdGFsLiBUaGUgY2hhbmdlIHNlZW1zIHNtYWxsIG9uIHRoZSBzdXJmYWNlLCBidXQgaXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgbG9hZGVkIG5ldHdvcmsgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5MDA6XHR9XG42OTAxOlx0RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xuNjkwMjpcdFxuNjkwMzpcdHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG42OTA0Olx0e1xuNjkwNTpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfbGlzdDtcbjY5MDY6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0O1xuNjkwNzpcdFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG42OTA4Olx0XHRpbnQgbm9kZTtcbjY5MDk6XHRcbjY5MTA6XHRcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcbjY5MTE6XHRcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbjY5MTI6XHRcbjY5MTM6XHRcdFx0aWYgKGxsaXN0X2VtcHR5KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KSlcbjY5MTQ6XHRcdFx0XHRjb250aW51ZTtcbjY5MTU6XHRcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9jb3VudCwgMCk7XG42OTE2Olx0XHRcdGZyZWVfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RuLVx1MDAzZWRlZmVyX2xpc3QpO1xuNjkxNzpcdFxuNjkxODpcdFx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNrYiwgbmV4dCwgZnJlZV9saXN0LCBsbF9ub2RlKSB7XG42OTE5Olx0XHRcdFx0cHJlZmV0Y2gobmV4dCk7XG42OTIwOlx0XHRcdFx0bmFwaV9jb25zdW1lX3NrYihza2IsIDEpO1xuNjkyMTpcdFx0XHR9XG42OTIyOlx0XHR9XG42OTIzOlx0fVxuNjkyNDpcdFxuNjkyNTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxuNjkyNjpcdFxuNjkyNzpcdGVudW0ge1xuNjkyODpcdFx0TkFQSV9GX1BSRUZFUl9CVVNZX1BPTExcdD0gMSxcbjY5Mjk6XHRcdE5BUElfRl9FTkRfT05fUkVTQ0hFRFx0PSAyLFxuNjkzMDpcdH07XG42OTMxOlx0XG42OTMyOlx0c3RhdGljIHZvaWQgYnVzeV9wb2xsX3N0b3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB2b2lkICpoYXZlX3BvbGxfbG9jayxcbjY5MzM6XHRcdFx0XHQgICB1bnNpZ25lZCBmbGFncywgdTE2IGJ1ZGdldClcbjY5MzQ6XHR7XG42OTM1Olx0XHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbjY5MzY6XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7XG42OTM3Olx0XHRpbnQgcmM7XG42OTM4Olx0XG42OTM5Olx0XHQvKiBCdXN5IHBvbGxpbmcgbWVhbnMgdGhlcmUgaXMgYSBoaWdoIGNoYW5jZSBkZXZpY2UgZHJpdmVyIGhhcmQgaXJxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgYG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2Rlc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXNgIHN0cnVjdHVyZSBhbmQgdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBwaW5wb2ludGluZyB3aGVyZSB0aGlzIHRoaW5nIGlzIGdldHRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBob3QgZGF0YSBwYXRoLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uCgpJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGZvciB0aGUgdmFyaWFibGUgbmFtZSwgcGVyaGFwcyBmb2N1c2luZyBvbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0gZGlyZWN0b3JpZXMgZmlyc3QuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYWxsb2NhdGlvbiBjYWxscyBsaWtlIGBrbWFsbG9jYCwgYGt6YWxsb2NgLCBvciBldmVuIG1vcmUgc3BlY2lhbGl6ZWQgYWxsb2NhdG9ycyBpZiBpdOKAmXMgYSBwZXItQ1BVIG9yIG5vZGUtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuIEluaXRpYWxpemF0aW9uIGNvdWxkIGJlIGRvbmUgZGlyZWN0bHkgaW4gc29tZSBzdHJ1Y3QgZGVmaW5pdGlvbiB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgb3IgaW4gYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBtb2R1bGUgbG9hZCBvciBuZXR3b3JraW5nIHN0YWNrIGluaXRpYWxpemF0aW9uLiBBbHNvLCBJIG11c3Qga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgc3RhdGljIGluaXRpYWxpemF0aW9ucyBvciBpZiBpdOKAmXMgcGFydCBvZiBhIGxhcmdlciBzdHJ1Y3R1cmUuCgpGdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgYW55IHVzYWdlIHBhdHRlcm5zIGFyb3VuZCB0aGUgdmFyaWFibGUsIG5vdCBqdXN0IGRlY2xhcmF0aW9uLiBGb3IgaW5zdGFuY2UsIGlzIGl0IGJlaW5nIHVzZWQgaW4gbG9jayBjb250ZXh0cz8gSXMgaXQgYXNzb2NpYXRlZCB3aXRoIHNwZWNpZmljIG5ldHdvcmsgZGV2aWNlcyBvciBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgZGF0YSByYWNlcyB0byBiZSBhd2FyZSBvZj8gVGhhdCB3aWxsIGhlbHAgbWUgdG8gZGVkdWNlIGl0cyByb2xlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBpdHMgcm9sZSBieSBpbnNwZWN0aW5nIHRoZSB1c2FnZSBwYXR0ZXJucy4gSSYjMzk7bSBob3BpbmcgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSB0aGUgY29udGV4dCBvZiBpdHMgYWxsb2NhdGlvbiBhbmQgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGludGVuZGVkIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZGVmZXJfbm9kZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaG90ZGF0YS5oPTE5PXN0cnVjdCBuZXRfaG90ZGF0YSB7XG4tLVxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQxLSNlbmRpZlxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oOjQyOlx0c3RydWN0IHNrYl9kZWZlcl9ub2RlIF9fcGVyY3B1ICpza2JfZGVmZXJfbm9kZXM7XG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNDMtXHRpbnRcdFx0XHRncm9fbm9ybWFsX2JhdGNoO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTY5MDM9c3RhdGljIHZvaWQgc2tiX2RlZmVyX2ZyZWVfZmx1c2godm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy02OTEwLVx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xubmV0L2NvcmUvZGV2LmM6NjkxMTpcdFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgJiM0Mzsgbm9kZTtcbm5ldC9jb3JlL2Rldi5jLTY5MTItXG4tLVxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTM0NzctXHR9XG5uZXQvY29yZS9kZXYuYzoxMzQ3ODpcdG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcyA9XG5uZXQvY29yZS9kZXYuYy0xMzQ3OS1cdFx0IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpICogbnJfbm9kZV9pZHMsXG5uZXQvY29yZS9kZXYuYy0xMzQ4MC1cdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkpO1xubmV0L2NvcmUvZGV2LmM6MTM0ODE6XHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2Rlcylcbm5ldC9jb3JlL2Rldi5jLTEzNDgyLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MzM5PW5vZGVmZXI6XHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczNDYtXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3Olx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xubmV0L2NvcmUvc2tidWZmLmMtNzM0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNLQiBEZXB0aHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gc3VzcGVjdGluZyBzb21ldGhpbmcgZnVua3kgbWlnaHQgYmUgaGFwcGVuaW5nIHdpdGggdGhlIFNLQiBoYW5kbGluZywgYW5kIG15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lIDczMzkgaGFzIHBpcXVlZCBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYSwgd2hhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkIHRoZXJlLiBUaGUgaW50cmljYWNpZXMgb2YgU0tCIGxpZmVjeWNsZSBhcmUgb2Z0ZW4gd2hlcmUgdGhlIHN1YnRsZSBidWdzIGhpZGUsIHNvIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgcGFja2V0IHN0YXRlLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzZWUgd2hhdCBzZWNyZXRzIGxpbmUgNzMzOSBpcyBoaWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczMzA6XHRcbjczMzE6XHRcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cbjczMzI6XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjczMzM6XHRcdFx0Z290byBub2RlZmVyO1xuNzMzNDpcdFxuNzMzNTpcdFx0Y3B1ID0gc2tiLVx1MDAzZWFsbG9jX2NwdTtcbjczMzY6XHRcdGlmIChjcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSB8fFxuNzMzNzpcdFx0ICAgIFdBUk5fT05fT05DRShjcHUgXHUwMDNlPSBucl9jcHVfaWRzKSB8fFxuNzMzODpcdFx0ICAgICFjcHVfb25saW5lKGNwdSkpIHtcbjczMzk6XHRub2RlZmVyOlx0a2ZyZWVfc2tiX25hcGlfY2FjaGUoc2tiKTtcbjczNDA6XHRcdFx0cmV0dXJuO1xuNzM0MTpcdFx0fVxuNzM0MjpcdFxuNzM0MzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2JfZHN0KHNrYikpO1xuNzM0NDpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2ItXHUwMDNlZGVzdHJ1Y3Rvcik7XG43MzQ1Olx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xuNzM0NjpcdFxuNzM0NzpcdFx0c2RuID0gcGVyX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzLCBjcHUpICYjNDM7IG51bWFfbm9kZV9pZCgpO1xuNzM0ODpcdFxuNzM0OTpcdFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcbjczNTA6XHRcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcdTAwMjZzZG4tXHUwMDNlZGVmZXJfY291bnQpO1xuNzM1MTpcdFxuNzM1MjpcdFx0aWYgKGRlZmVyX2NvdW50IFx1MDAzZT0gZGVmZXJfbWF4KVxuNzM1MzpcdFx0XHRnb3RvIG5vZGVmZXI7XG43MzU0Olx0XG43MzU1Olx0XHRsbGlzdF9hZGQoXHUwMDI2c2tiLVx1MDAzZWxsX25vZGUsIFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KTtcbjczNTY6XHRcbjczNTc6XHRcdC8qIFNlbmQgYW4gSVBJIGV2ZXJ5IHRpbWUgcXVldWUgcmVhY2hlcyBoYWxmIGNhcGFjaXR5LiAqL1xuNzM1ODpcdFx0a2ljayA9IChkZWZlcl9jb3VudCAtIDEpID09IChkZWZlcl9tYXggXHUwMDNlXHUwMDNlIDEpO1xuNzM1OTpcdFxuNzM2MDpcdFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcbjczNjE6XHRcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cbjczNjI6XHRcdCAqL1xuNzM2MzpcdFx0aWYgKHVubGlrZWx5KGtpY2spKVxuNzM2NDpcdFx0XHRraWNrX2RlZmVyX2xpc3RfcHVyZ2UoY3B1KTtcbjczNjU6XHR9XG43MzY2Olx0XG43MzY3Olx0c3RhdGljIHZvaWQgc2tiX3NwbGljZV9jc3VtX3BhZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG43MzY4Olx0XHRcdFx0XHQgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbjczNjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTEKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIE5vZGUgSXRlcmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgd2UgaXRlcmF0ZSB0aHJvdWdoIE5VTUEgbm9kZXMgaW4gYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgbG9vcCBmcm9tIGBmb3JfZWFjaF9ub2RlYCB0byBgZm9yX2VhY2hfb25saW5lX25vZGVgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0JiMzOTtzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2U/IFByaW1hcmlseSwgdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24sIHJpZ2h0PyBUaGUgZ29hbCBpcyB0byBvbmx5IHByb2Nlc3MgZGVmZXJyZWQgU0tCcyBvbiBvbmxpbmUgTlVNQSBub2Rlcy4KCk5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIExldCYjMzk7cyBkaWcgaW50byBwb3RlbnRpYWwgaXNzdWVzOiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGVha3MgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBZnRlciBhIGNsb3NlIHJldmlldywgSSBjYW4gc2F5IHdpdGggY2VydGFpbnR5IHRoYXQgKm5vKiwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIGNvbmNlcm5zLiBUaGUgbWVtb3J5IGZvciBgc2tiX2RlZmVyX25vZGVzYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBfX2FsbG9jX3BlcmNwdWAgZHVyaW5nIGBuZXRfZGV2X2luaXRgLiBUaGUgbG9vcCBpdHNlbGYganVzdCBjb25zdW1lcyBTS0JzIGZyb20gZWFjaCBub2RlJiMzOTtzIGxpbmtlZCBsaXN0IG9uIHRoZSBjdXJyZW50IENQVSwgd2hpY2ggYXJlIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb3JlIGNoYW5nZSBoZXJlICpvbmx5KiByZXN0cmljdHMgdGhlIGl0ZXJhdGlvbiByYW5nZS4gTm8gdXNlciBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBwYWRkaW5nIGNvbmNlcm5zLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrcy4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgS01TQU4gaW1wbGljYXRpb25zLiBXZSBrbm93IEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIEtBU0FOIGlzIHRoZXJlIGZvciBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIHRob3NlIGFyZSBoYW5kbGVkLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYW5zd2VyIGlzIGNsZWFybHkgbm8uCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4KClNvLCBoZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBzdW1tYXJpemUgaXQ6IFRoZSBwYXRjaCBtb2RpZmllcyBub2RlIGl0ZXJhdGlvbiBpbiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAsIGNoYW5naW5nIGZyb20gYSBmdWxsIGVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIG5vZGVzIHRvIG9ubHkgaXRlcmF0aW5nIG92ZXIgb25saW5lIG9uZXMgd2hlbiBmbHVzaGluZyBwZXItQ1BVIGRlZmVycmVkIFNLQiBsaXN0cy4gVGhlIEtNU0FOIGZvY3VzIGlzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQga2VybmVsLXRvLXVzZXIgbGVha3MsIHdoaWNoIHRoaXMgY2hhbmdlIGF2b2lkcy4gVGhlIG5vZGUgSUQgbG9vcCBib3VuZCBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nOyBpdCBhbHNvIGRvZXNuJiMzOTt0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXItc3BhY2Ugb3IgY29uZGl0aW9uIGJyYW5jaGVzLiBJIGNhbiBjb25jbHVkZSB0aGF0IHN0YW5kYXJkIEtBU0FOIGFuZCBkZWJ1Z2dpbmcgdGVjaG5pcXVlcyBhcmUgc3VmZmljaWVudC4gTm8gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfZGVmZXJfZnJlZV9mbHVzaCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoYGZvcl9lYWNoX29ubGluZV9ub2RlYCkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGBmb3JfZWFjaF9ub2RlYCkgd2hlbiBkcmFpbmluZyBkZWZlcnJlZCBza2IgbGlzdHMuXG5cblRoaXMgaXMgYSBtaW5vciBjb250cm9sIGZsb3cgLyBvcHRpbWl6YXRpb24gY2hhbmdlIGluIG5ldHdvcmsgY29yZSBOQVBJIGRlZmVycmVkIFNLQiBmcmVlaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChgZm9yX2VhY2hfb25saW5lX25vZGVgKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoYGZvcl9lYWNoX25vZGVgKSB3aGVuIGRyYWluaW5nIGRlZmVycmVkIHNrYiBsaXN0cy5cblxuVGhpcyBpcyBhIG1pbm9yIGNvbnRyb2wgZmxvdyAvIG9wdGltaXphdGlvbiBjaGFuZ2UgaW4gbmV0d29yayBjb3JlIE5BUEkgZGVmZXJyZWQgU0tCIGZyZWVpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjMzLjMzMjY5NDIxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTAyNjc5MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9kZWZlcl9mcmVlX2ZsdXNoXCIsXG4gICAgXCJza2JfYXR0ZW1wdF9kZWZlcl9mcmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGBmb3JfZWFjaF9vbmxpbmVfbm9kZWApIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChgZm9yX2VhY2hfbm9kZWApIHdoZW4gZHJhaW5pbmcgZGVmZXJyZWQgc2tiIGxpc3RzLlxcblxcblRoaXMgaXMgYSBtaW5vciBjb250cm9sIGZsb3cgLyBvcHRpbWl6YXRpb24gY2hhbmdlIGluIG5ldHdvcmsgY29yZSBOQVBJIGRlZmVycmVkIFNLQiBmcmVlaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCkgaW4gY29yZSBuZXR3b3JraW5nIChuZXQvY29yZS9kZXYuYykgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChmb3JfZWFjaF9vbmxpbmVfbm9kZSkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGZvcl9lYWNoX25vZGUpLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCBkdXJpbmcgTkFQSSBwb2xsaW5nIGFuZCBzb2Z0aXJxIG5ldF9yeF9hY3Rpb24gdG8gZmx1c2ggZGVmZXJyZWQgU0tCcyBhY3Jvc3MgTlVNQSBub2RlcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBOVU1BIG5vZGUgdHJhY2tpbmcgYW5kIGRlZmVycmVkIHBhY2tldCBkZWFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjMzLjMzMjY5ODYxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MDI2NTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDM6MDE6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDI5MGUwZjA5OWU2YmYuLmI1MjhiNmE5ODZmY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC02OTA3LDcgKzY5MDcsNyBAQCBzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbiBcXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcXG4gXFx0aW50IG5vZGU7XFxuIFxcbi1cXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcXG4rXFx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xcbiBcXHRcXHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSArIG5vZGU7XFxuIFxcbiBcXHRcXHRpZiAobGxpc3RfZW1wdHkoXFx1MDAyNnNkbi1cXHUwMDNlZGVmZXJfbGlzdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjM0LjY3MzYyNjA4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDcyNjExNDAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX2RlZmVyX2ZyZWVfZmx1c2hcIixcbiAgICBcInNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza2JfZGVmZXJfZnJlZV9mbHVzaCgpIGluIGNvcmUgbmV0d29ya2luZyAobmV0L2NvcmUvZGV2LmMpIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoZm9yX2VhY2hfb25saW5lX25vZGUpIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChmb3JfZWFjaF9ub2RlKS4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgZHVyaW5nIE5BUEkgcG9sbGluZyBhbmQgc29mdGlycSBuZXRfcnhfYWN0aW9uIHRvIGZsdXNoIGRlZmVycmVkIFNLQnMgYWNyb3NzIE5VTUEgbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVNQSBub2RlIHRyYWNraW5nIGFuZCBkZWZlcnJlZCBwYWNrZXQgZGVhbGxvY2F0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZlZWM2N2FlNDNlODg5ZTIyNDBlZjU2MWZmODhjMzlhYmQxY2FlNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLmI1MjhiNmE5ODZmY2YgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC02OTA3LDcgKzY5MDcsNyBAQCBzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxuIFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XG4gXHRpbnQgbm9kZTtcbiBcbi1cdGZvcl9lYWNoX25vZGUobm9kZSkge1xuK1x0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xuIFx0XHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSArIG5vZGU7XG4gXG4gXHRcdGlmIChsbGlzdF9lbXB0eShcdTAwMjZzZG4tXHUwMDNlZGVmZXJfbGlzdCkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMTozNC42NzM2Mjc2OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDExMjYzNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTmV0d29yayBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHBhdGNoIGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIGRpZmYgYW5kIHRoZSBsaW5lIG51bWJlciwgNjkwNy4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBjb250ZXh0LiBXZSdyZSB0YWxraW5nIGFib3V0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAsIHNvIEkgc3VzcGVjdCB3ZSdyZSBsb29raW5nIGF0IG9wdGltaXphdGlvbnMgb3IgY2hhbmdlcyB0byBob3cgU0tCcyBhcmUgaGFuZGxlZCBpbiBhIGRlZmVycmVkIGZyZWUgc2NlbmFyaW8uIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyB0aGUgYGZvcl9lYWNoX25vZGVgIGxvb3AsIHRoaXMgKm1pZ2h0KiBiZSByZWxhdGVkIHRvIE5VTUEgb3IgQ1BVIG5vZGUgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgaW4gdGhlIG5ldHdvcmsgc3RhY2suXG5cbkxldCBtZSBxdWlja2x5IGdyYWIgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aCBgcmVhZC1maWxlYCBvbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZm9yX2VhY2hfb25saW5lX25vZGVgIGlzIHVzZWQgaGVyZSBhbmQgc2VlIHdoYXQgd2FzIGNoYW5nZWQgZnJvbSBgZm9yX2VhY2hfbm9kZWAuIFRoYXTigJlzIG15IHByaW1hcnkgY29uY2Vybi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDE6NDAuNjg0ODkzMDcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY4OTA6XFx0XFxuNjg5MTpcXHRcXHRpZiAodW5saWtlbHkodmFsIFxcdTAwMjYgTkFQSUZfU1RBVEVfTUlTU0VEKSkge1xcbjY4OTI6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKG4pO1xcbjY4OTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjY4OTQ6XFx0XFx0fVxcbjY4OTU6XFx0XFxuNjg5NjpcXHRcXHRpZiAodGltZW91dClcXG42ODk3OlxcdFxcdFxcdGhydGltZXJfc3RhcnQoXFx1MDAyNm4tXFx1MDAzZXRpbWVyLCBuc190b19rdGltZSh0aW1lb3V0KSxcXG42ODk4OlxcdFxcdFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfUElOTkVEKTtcXG42ODk5OlxcdFxcdHJldHVybiByZXQ7XFxuNjkwMDpcXHR9XFxuNjkwMTpcXHRFWFBPUlRfU1lNQk9MKG5hcGlfY29tcGxldGVfZG9uZSk7XFxuNjkwMjpcXHRcXG42OTAzOlxcdHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXFxuNjkwNDpcXHR7XFxuNjkwNTpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9saXN0O1xcbjY5MDY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHQ7XFxuNjkwNzpcXHRcXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcXG42OTA4OlxcdFxcdGludCBub2RlO1xcbjY5MDk6XFx0XFxuNjkxMDpcXHRcXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7XFxuNjkxMTpcXHRcXHRcXHRzZG4gPSB0aGlzX2NwdV9wdHIobmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKSArIG5vZGU7XFxuNjkxMjpcXHRcXG42OTEzOlxcdFxcdFxcdGlmIChsbGlzdF9lbXB0eShcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9saXN0KSlcXG42OTE0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjY5MTU6XFx0XFx0XFx0YXRvbWljX2xvbmdfc2V0KFxcdTAwMjZzZG4tXFx1MDAzZWRlZmVyX2NvdW50LCAwKTtcXG42OTE2OlxcdFxcdFxcdGZyZWVfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNkbi1cXHUwMDNlZGVmZXJfbGlzdCk7XFxuNjkxNzpcXHRcXG42OTE4OlxcdFxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2tiLCBuZXh0LCBmcmVlX2xpc3QsIGxsX25vZGUpIHtcXG42OTE5OlxcdFxcdFxcdFxcdHByZWZldGNoKG5leHQpO1xcbjY5MjA6XFx0XFx0XFx0XFx0bmFwaV9jb25zdW1lX3NrYihza2IsIDEpO1xcbjY5MjE6XFx0XFx0XFx0fVxcbjY5MjI6XFx0XFx0fVxcbjY5MjM6XFx0fVxcbjY5MjQ6XFx0XFxuNjkyNTpcXHQjaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXG42OTI2OlxcdFxcbjY5Mjc6XFx0ZW51bSB7XFxuNjkyODpcXHRcXHROQVBJX0ZfUFJFRkVSX0JVU1lfUE9MTFxcdD0gMSxcXG42OTI5OlxcdFxcdE5BUElfRl9FTkRfT05fUkVTQ0hFRFxcdD0gMixcXG42OTMwOlxcdH07XFxuNjkzMTpcXHRcXG42OTMyOlxcdHN0YXRpYyB2b2lkIGJ1c3lfcG9sbF9zdG9wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgdm9pZCAqaGF2ZV9wb2xsX2xvY2ssXFxuNjkzMzpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBmbGFncywgdTE2IGJ1ZGdldClcXG42OTM0OlxcdHtcXG42OTM1OlxcdFxcdHN0cnVjdCBicGZfbmV0X2NvbnRleHQgX19icGZfbmV0X2N0eCwgKmJwZl9uZXRfY3R4O1xcbjY5MzY6XFx0XFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDtcXG42OTM3OlxcdFxcdGludCByYztcXG42OTM4OlxcdFxcbjY5Mzk6XFx0XFx0LyogQnVzeSBwb2xsaW5nIG1lYW5zIHRoZXJlIGlzIGEgaGlnaCBjaGFuY2UgZGV2aWNlIGRyaXZlciBoYXJkIGlycVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMTo0MC42ODU2MTk3MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjUzNTkwMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVzZSBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoZSBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjayBkb3duIGl0cyBjYWxsIHNpdGVzLiBMZXQncyBzZWUuLi4gYSBxdWljayB1c2Ugb2YgYGdyZXBwZXJgIHNob3VsZCBkbyB0aGUgdHJpY2suIEknbGwgbGF1bmNoIHRoZSBzZWFyY2ggYW5kIHNlZSB3aGF0IHBvcHMgdXAuIFNob3VsZG4ndCB0YWtlIHRvbyBsb25nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDE6NDUuOTM5MjExNjQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzkzMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9kZWZlcl9mcmVlX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTY5MDE9RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xcbm5ldC9jb3JlL2Rldi5jLTY5MDItXFxubmV0L2NvcmUvZGV2LmM6NjkwMzpzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbm5ldC9jb3JlL2Rldi5jLTY5MDQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Njk4OT1zdGF0aWMgdm9pZCBfX25hcGlfYnVzeV9sb29wKHVuc2lnbmVkIGludCBuYXBpX2lkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzA0My1cXHRcXHRcXHRcXHRcXHRMSU5VWF9NSUJfQlVTWVBPTExSWFBBQ0tFVFMsIHdvcmspO1xcbm5ldC9jb3JlL2Rldi5jOjcwNDQ6XFx0XFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcXG5uZXQvY29yZS9kZXYuYy03MDQ1LVxcdFxcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc4ODk9c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzkxNi1cXHRcXHR9XFxubmV0L2NvcmUvZGV2LmM6NzkxNzpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Nzk2OD1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIG5ldF9yeF9hY3Rpb24odm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5ODctXFxubmV0L2NvcmUvZGV2LmM6Nzk4ODpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5ODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjQ1Ljk4NTYwOTAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDQzMDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgc2VlIHdoZXJlIGl0J3MgYmVpbmcgaGFuZGxlZC4gVGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyBhIHF1aWNrIGBncmVwYCBmb3IgdGhlIGV4YWN0IHN0cmluZywgYHNrYl9kZWZlcl9ub2Rlc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMTo0OC4xMDAwNDIzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1MzA1OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9kZWZlcl9ub2Rlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ob3RkYXRhLmg9MTk9c3RydWN0IG5ldF9ob3RkYXRhIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00MS0jZW5kaWZcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6NDI6XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlIF9fcGVyY3B1ICpza2JfZGVmZXJfbm9kZXM7XFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQzLVxcdGludFxcdFxcdFxcdGdyb19ub3JtYWxfYmF0Y2g7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02OTAzPXN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02OTEwLVxcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcXG5uZXQvY29yZS9kZXYuYzo2OTExOlxcdFxcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcXG5uZXQvY29yZS9kZXYuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3Ny1cXHR9XFxubmV0L2NvcmUvZGV2LmM6MTM0Nzg6XFx0bmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzID1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3OS1cXHRcXHQgX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkgKiBucl9ub2RlX2lkcyxcXG5uZXQvY29yZS9kZXYuYy0xMzQ4MC1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpKTtcXG5uZXQvY29yZS9kZXYuYzoxMzQ4MTpcXHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcylcXG5uZXQvY29yZS9kZXYuYy0xMzQ4Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3OlxcdHNkbiA9IHBlcl9jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcywgY3B1KSArIG51bWFfbm9kZV9pZCgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjQ5LjY4NTM2MjU5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5ODI4ODk4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFNLQiBEZXB0aHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgd2UncmUgaGFuZGxpbmcgc29ja2V0IGJ1ZmZlcnMuIE15IGd1dCBmZWVsaW5nIGlzIGxlYWRpbmcgbWUgdG93YXJkcyBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlc2Ugc2ticyBhcmUgYmVpbmcgaGFuZGxlZCwgYW5kIGxpbmUgNzM0NyBzb3VuZHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYTsgaXQncyBwcm9iYWJseSB3aGVyZSB0aGUgYWN0aW9uIGlzLiBIb3BlZnVsbHkgdGhlIGNvZGUgaW4gdGhpcyBhcmVhIG1ha2VzIGl0IGNsZWFyZXIgd2hhdCB0aGUgaXNzdWUgaXMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgdGhpcyBodW5jaCBob2xkcyB3YXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjUyLjY2ODI1NDU5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMzMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzMzMDpcXHRcXG43MzMxOlxcdFxcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cXG43MzMyOlxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG43MzMzOlxcdFxcdFxcdGdvdG8gbm9kZWZlcjtcXG43MzM0OlxcdFxcbjczMzU6XFx0XFx0Y3B1ID0gc2tiLVxcdTAwM2VhbGxvY19jcHU7XFxuNzMzNjpcXHRcXHRpZiAoY3B1ID09IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgfHxcXG43MzM3OlxcdFxcdCAgICBXQVJOX09OX09OQ0UoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpIHx8XFxuNzMzODpcXHRcXHQgICAgIWNwdV9vbmxpbmUoY3B1KSkge1xcbjczMzk6XFx0bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbjczNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjczNDE6XFx0XFx0fVxcbjczNDI6XFx0XFxuNzM0MzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9kc3Qoc2tiKSk7XFxuNzM0NDpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYi1cXHUwMDNlZGVzdHJ1Y3Rvcik7XFxuNzM0NTpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xcbjczNDY6XFx0XFxuNzM0NzpcXHRcXHRzZG4gPSBwZXJfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMsIGNwdSkgKyBudW1hX25vZGVfaWQoKTtcXG43MzQ4OlxcdFxcbjczNDk6XFx0XFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcXG43MzUwOlxcdFxcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9jb3VudCk7XFxuNzM1MTpcXHRcXG43MzUyOlxcdFxcdGlmIChkZWZlcl9jb3VudCBcXHUwMDNlPSBkZWZlcl9tYXgpXFxuNzM1MzpcXHRcXHRcXHRnb3RvIG5vZGVmZXI7XFxuNzM1NDpcXHRcXG43MzU1OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2c2tiLVxcdTAwM2VsbF9ub2RlLCBcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9saXN0KTtcXG43MzU2OlxcdFxcbjczNTc6XFx0XFx0LyogU2VuZCBhbiBJUEkgZXZlcnkgdGltZSBxdWV1ZSByZWFjaGVzIGhhbGYgY2FwYWNpdHkuICovXFxuNzM1ODpcXHRcXHRraWNrID0gKGRlZmVyX2NvdW50IC0gMSkgPT0gKGRlZmVyX21heCBcXHUwMDNlXFx1MDAzZSAxKTtcXG43MzU5OlxcdFxcbjczNjA6XFx0XFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcXG43MzYxOlxcdFxcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cXG43MzYyOlxcdFxcdCAqL1xcbjczNjM6XFx0XFx0aWYgKHVubGlrZWx5KGtpY2spKVxcbjczNjQ6XFx0XFx0XFx0a2lja19kZWZlcl9saXN0X3B1cmdlKGNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAxOjUyLjY2ODU1MjMzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDc1MDQwODI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgU0tCIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBuZXR3b3JrIGJlaGF2aW9yLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0L2NvcmUvc2tidWZmLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSAqc2tfYnVmZiogc3RydWN0dXJlLCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgbmV0d29yayBwYWNrZXRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJdCdzIHdoZXJlIGFsbCB0aGUgY29yZSBwYWNrZXQgbWFuaXB1bGF0aW9uLCBhbGxvY2F0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIGxvZ2ljIHJlc2lkZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBwaW5wb2ludCB0aGUgcHJlY2lzZSBmdW5jdGlvbiByZXNwb25zaWJsZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGFsbG9jYXRpb24sIGNvcHlpbmcsIG9yIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcHJvYmFibHkgdGhlIGN1bHByaXQuIExldCdzIHNlZSBpZiB0aGlzIGh1bmNoIGhvbGRzLCBsZXQncyBleHBsb3JlIHRoaXMgZmlsZSBhbmQgZ2V0IHRvIHRoZSByb290IG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MDcuNDE4OTYyMzUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MzIwOlxcdHZvaWQgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjczMjE6XFx0e1xcbjczMjI6XFx0XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XFxuNzMyMzpcXHRcXHR1bnNpZ25lZCBsb25nIGRlZmVyX2NvdW50O1xcbjczMjQ6XFx0XFx0dW5zaWduZWQgaW50IGRlZmVyX21heDtcXG43MzI1OlxcdFxcdGJvb2wga2ljaztcXG43MzI2OlxcdFxcdGludCBjcHU7XFxuNzMyNzpcXHRcXG43MzI4OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZza2JfZGVmZXJfZGlzYWJsZV9rZXkpKVxcbjczMjk6XFx0XFx0XFx0Z290byBub2RlZmVyO1xcbjczMzA6XFx0XFxuNzMzMTpcXHRcXHQvKiB6ZXJvIGNvcHkgbm90aWZpY2F0aW9ucyBzaG91bGQgbm90IGJlIGRlbGF5ZWQuICovXFxuNzMzMjpcXHRcXHRpZiAoc2tiX3pjb3B5KHNrYikpXFxuNzMzMzpcXHRcXHRcXHRnb3RvIG5vZGVmZXI7XFxuNzMzNDpcXHRcXG43MzM1OlxcdFxcdGNwdSA9IHNrYi1cXHUwMDNlYWxsb2NfY3B1O1xcbjczMzY6XFx0XFx0aWYgKGNwdSA9PSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIHx8XFxuNzMzNzpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKGNwdSBcXHUwMDNlPSBucl9jcHVfaWRzKSB8fFxcbjczMzg6XFx0XFx0ICAgICFjcHVfb25saW5lKGNwdSkpIHtcXG43MzM5OlxcdG5vZGVmZXI6XFx0a2ZyZWVfc2tiX25hcGlfY2FjaGUoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MDcuNDE5MjUyMzQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NDY1OTE1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBTS0IgRGVmZXJyZWQgRnJlZSBJdGVyYXRpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIGNoYW5nZSBpbiBgbmV0L2NvcmUvZGV2LmNgIHdpdGhpbiB0aGUgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgdXNlZCBgZm9yX2VhY2hfbm9kZWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciAqcG9zc2libGUqIG5vZGVzLCBhbmQgbm93IGl0J3MgdXNpbmcgYGZvcl9lYWNoX29ubGluZV9ub2RlYC4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBkZWZlcnJlZCBTS0IgZnJlZSBtZWNoYW5pc20gd29ya3MsIHNwZWNpZmljYWxseSBkdXJpbmcgYG5ldF9yeF9hY3Rpb25gLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBhbmQgYF9fbmFwaV9idXN5X2xvb3BgIOKAkyBhbGwgY3JpdGljYWwgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4gU28sIHllcywgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBmcmVxdWVudGx5IGV4ZWN1dGVkLlxuXG5JIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGhvcGluZyB0byBsaW1pdCB0aGUgc2NvcGUsIGJ1dCBpdCBsb29rcyBsaWtlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgYWx3YXlzIGNvbXBpbGVkIGluIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXQgYWx3YXlzIGlzIGZvciBhbnkgbmV0d29ya2luZyBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIGFyb3VuZCBOVU1BIG5vZGUgc3RhdGVzLiBJZiBTS0JzIGFyZSBhZGRlZCB0byBhIG5vZGUgdGhhdCdzICphYm91dCogdG8gZ28gb2ZmbGluZSBvciBpcyBpbiBhIGRpZmZlcmVudCBzdGF0ZSwgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoYXQncyBhIHBlcmZlY3QgZnV6emluZyB0YXJnZXQuXG5cbk15IFwiV29ydGhGdXp6aW5nXCIgZXZhbHVhdGlvbiBpcyBsb29raW5nIGdvb2QuIFRoZSBjaGFuZ2UgaXMgaW4gY29yZSBuZXR3b3JraW5nLCBtb2RpZmllcyBhIGNvcmUgbG9vcCwgaXMgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgYW5kIGludm9sdmVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIE5VTUEgbm9kZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBmZWVscyBsaWtlIGEgZGVmaW5pdGUgXCJ5ZXNcIiBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXRzZWxmIGlzIHRoZSBwcmltYXJ5IHRhcmdldCwgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBsb29wIHdhcyBjaGFuZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGlubGluZWQgb3IgY2FsbGVkIGRpcmVjdGx5LiBUaGUgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAgKHdoaWNoIGFjdHVhbGx5IGFkZHMgU0tCcyB0byB0aGUgZGVmZXJyYWwgbGlzdCkgYW5kIHRoZSBOQVBJL3NvZnRpcnEgaGFuZGxlcnMgbGlrZSBgbmV0X3J4X2FjdGlvbmAsIGFuZCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBhcmUgYWxzbyByZWxldmFudC4gVWx0aW1hdGVseSwgSSdkIHNheSB0aGUgY29yZSBzeW1ib2xzIGhlcmUgZm9yIGZ1enppbmcgd291bGQgYmUgYm90aCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAgYW5kIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAuIEkgc2hvdWxkIGFsc28gcnVuIGEgYGdyZXBgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIHdpdGggU0tCIGRlZmVycmFsIGFuZCBmcmVlaW5nIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjoxMy4zNjU4NDYwNTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTM5NjYwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2RlZmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3Q9MzYwPURlZmF1bHQgdmFsdWUgaXMgMTAsIG1pbmltdW0gMSwgbWF4aW11bSAzNjAwLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3QtMzYxLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL25ldC5yc3Q6MzYyOnNrYl9kZWZlcl9tYXhcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9uZXQucnN0LTM2My0tLS0tLS0tLS0tLS0tXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdD03Njk9dG8gZWFjaCBpbmRpdmlkdWFsIE1BQyBkcml2ZXIgZm9yIFBIWSB0aW1lc3RhbXBpbmcgc3VwcG9ydC4gVGhpcyBlbnRhaWxzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNzc3LSAgYGBuZXRpZl9yeCgpYGAgYW5kIHNpbWlsYXIsIE1BQyBkcml2ZXJzIG11c3QgY2hlY2sgd2hldGhlclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0Ojc3ODogIGBgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpYGAgaXMgbmVjZXNzYXJ5IG9yIG5vdCAtIGFuZCBpZiBpdCBpcywgZG9uJ3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03NzktICBjYWxsIGBgbmV0aWZfcngoKWBgIGF0IGFsbC4gIElmIGBgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR2BgIGlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03ODctICBgYG5ldGlmX3JlY2VpdmVfc2tiYGAsIHRoZSBzdGFjayBhdXRvbWF0aWNhbGx5IGNoZWNrcyB3aGV0aGVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3Q6Nzg4OiAgYGBza2JfZGVmZXJfcnhfdGltZXN0YW1wKClgYCBpcyBuZWNlc3NhcnksIHNvIHRoaXMgY2hlY2sgaXMgbm90IG5lZWRlZCBpbnNpZGVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC03ODktICB0aGUgZHJpdmVyLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy90aW1lc3RhbXBpbmcucnN0PTU3Mj1TT19USU1FU1RBTVBJTkcgQVBJIOS4jeWFgeiuuOS4uuWQjOS4gOaVsOaNruWMheS8oOmAkuWkmuS4quehrOS7tuaXtumXtOaIs++8jOWboOatpOmZpOS6hiBEU0FcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjAtICDlnKggcGxhaW4gYGBuZXRpZl9yeCgpYGAg5ZKM57G75Ly85oOF5Ya15LiL77yMTUFDIOmpseWKqOeoi+W6j+W/hemhu+ajgOafpeaYr+WQplxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdDo2MjE6ICBgYHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKWBgIOaYr+W/heimgeeahO+8jOWmguaenOaYr++8jOWImeS4jeiwg+eUqCBgYG5ldGlmX3J4KClgYOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdC02MjItICDlpoLmnpwgYGBDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HYGAg5ZCv55So77yM5bm25LiUXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjI3LSAg5a+55LqO5YW25LuWIHNrYiDmjqXmlLblh73mlbDvvIzkvovlpoIgYGBuYXBpX2dyb19yZWNlaXZlYGAg5ZKMIGBgbmV0aWZfcmVjZWl2ZV9za2JgYO+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnJzdDo2Mjg6ICDloIbmoIjkvJroh6rliqjmo4Dmn6XmmK/lkKYgYGBza2JfZGVmZXJfcnhfdGltZXN0YW1wKClgYCDmmK/lv4XopoHnmoTvvIzlm6DmraTmraTmo4Dmn6XkuI1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy5yc3QtNjI5LSAg6ZyA6KaB5Zyo6amx5Yqo56iL5bqP5YaF6YOo44CCXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3B0cC5jPTM5NT1ib29sIHNqYTExMTBfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfcHRwLmMtNDA3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfcHRwLmM6NDA4Oi8qIENhbGxlZCBmcm9tIGRzYV9za2JfZGVmZXJfcnhfdGltZXN0YW1wICovXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9wdHAuYy00MDktYm9vbCBzamExMTA1X3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbGliODM5MC5jPTY1OT1zdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2xpYjgzOTAuYy03NDAtXFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2xpYjgzOTAuYzo3NDE6XFx0XFx0XFx0XFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9saWI4MzkwLmMtNzQyLVxcdFxcdFxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYz0zODM9c3RhdGljIGlycXJldHVybl90IG1wYzUyeHhfZmVjX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHguYy00MzEtXFx0XFx0cnNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhyc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eC5jOjQzMjpcXHRcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAocnNrYikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4LmMtNDMzLVxcdFxcdFxcdG5ldGlmX3J4KHJza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmM9NjQ1PXN0YXRpYyBpcnFyZXR1cm5fdCBsYW45NjZ4X3h0cl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmMtNzIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jOjcyMzpcXHRcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYy03MjQtXFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X2ZkbWEuYz0zNTM9c3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfcmVjZWl2ZV9za2Ioc3RydWN0IG9jZWxvdCAqb2NlbG90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5jLTM4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmM6MzgzOlxcdGlmIChsaWtlbHkoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5jLTM4NC1cXHRcXHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jPTQ5PXN0YXRpYyBpcnFyZXR1cm5fdCBvY2Vsb3RfeHRyX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYy02NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF92c2M3NTE0LmM6NjY6XFx0XFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jLTY3LVxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvbGxfdGVtYWNfbWFpbi5jPTk2OD1zdGF0aWMgdm9pZCBsbF90ZW1hY19yZWN2KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYy0xMDIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmM6MTAyMzpcXHRcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvbGxfdGVtYWNfbWFpbi5jLTEwMjQtXFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYz01OTE9c3RhdGljIHZvaWQgeGVtYWNsaXRlX3J4X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYy02MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jOjYyNDpcXHRpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2VtYWNsaXRlLmMtNjI1LVxcdFxcdG5ldGlmX3J4KHNrYik7XFx0LyogU2VuZCB0aGUgcGFja2V0IHVwc3RyZWFtICovXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTM4OTE9c3RhdGljIHZvaWQgbGFuNzh4eF9za2JfcmV0dXJuKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zOTAxLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MzkwMjpcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzkwMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MzI2PXZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM0OS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzUwOlxcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQ3MTU9dm9pZCBza2JfY2xvbmVfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDcxNjpib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzE3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00NzIwPXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfY2xvbmVfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ3MjMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NzI0OnN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGVmZXJfcnhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzI1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC0xMi1cXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6MTM6c3RydWN0IHNrYl9kZWZlcl9ub2RlIHtcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtMTQtXFx0c3RydWN0IGxsaXN0X2hlYWRcXHRkZWZlcl9saXN0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oPTE5PXN0cnVjdCBuZXRfaG90ZGF0YSB7XFxuLS1cXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNDEtI2VuZGlmXFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oOjQyOlxcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSBfX3BlcmNwdSAqc2tiX2RlZmVyX25vZGVzO1xcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00My1cXHRpbnRcXHRcXHRcXHRncm9fbm9ybWFsX2JhdGNoO1xcbi0tXFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTUxLVxcdGludFxcdFxcdFxcdHN5c2N0bF9tYXhfc2tiX2ZyYWdzO1xcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaDo1MjpcXHRpbnRcXHRcXHRcXHRzeXNjdGxfc2tiX2RlZmVyX21heDtcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmgtNTMtXFx0aW50XFx0XFx0XFx0c3lzY3RsX21lbV9wY3B1X3JzdjtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY0NDE9c3RhdGljIGludCBuZXRpZl9yZWNlaXZlX3NrYl9pbnRlcm5hbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjQ0Ni1cXG5uZXQvY29yZS9kZXYuYzo2NDQ3OlxcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxubmV0L2NvcmUvZGV2LmMtNjQ0OC1cXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02NDY4PXZvaWQgbmV0aWZfcmVjZWl2ZV9za2JfbGlzdF9pbnRlcm5hbChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjQ3Ni1cXHRcXHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xcbm5ldC9jb3JlL2Rldi5jOjY0Nzc6XFx0XFx0aWYgKCFza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXFxubmV0L2NvcmUvZGV2LmMtNjQ3OC1cXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZza2ItXFx1MDAzZWxpc3QsIFxcdTAwMjZzdWJsaXN0KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY5MDE9RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xcbm5ldC9jb3JlL2Rldi5jLTY5MDItXFxubmV0L2NvcmUvZGV2LmM6NjkwMzpzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbm5ldC9jb3JlL2Rldi5jLTY5MDQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjkwNi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dDtcXG5uZXQvY29yZS9kZXYuYzo2OTA3OlxcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSAqc2RuO1xcbm5ldC9jb3JlL2Rldi5jLTY5MDgtXFx0aW50IG5vZGU7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy02OTEwLVxcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcXG5uZXQvY29yZS9kZXYuYzo2OTExOlxcdFxcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcXG5uZXQvY29yZS9kZXYuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9Njk4OT1zdGF0aWMgdm9pZCBfX25hcGlfYnVzeV9sb29wKHVuc2lnbmVkIGludCBuYXBpX2lkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzA0My1cXHRcXHRcXHRcXHRcXHRMSU5VWF9NSUJfQlVTWVBPTExSWFBBQ0tFVFMsIHdvcmspO1xcbm5ldC9jb3JlL2Rldi5jOjcwNDQ6XFx0XFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcXG5uZXQvY29yZS9kZXYuYy03MDQ1LVxcdFxcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc4ODk9c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzkxNi1cXHRcXHR9XFxubmV0L2NvcmUvZGV2LmM6NzkxNzpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Nzk2OD1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIG5ldF9yeF9hY3Rpb24odm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5ODctXFxubmV0L2NvcmUvZGV2LmM6Nzk4ODpcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbm5ldC9jb3JlL2Rldi5jLTc5ODktXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzQyNj1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzNDc3LVxcdH1cXG5uZXQvY29yZS9kZXYuYzoxMzQ3ODpcXHRuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMgPVxcbm5ldC9jb3JlL2Rldi5jOjEzNDc5OlxcdFxcdCBfX2FsbG9jX3BlcmNwdShzaXplb2Yoc3RydWN0IHNrYl9kZWZlcl9ub2RlKSAqIG5yX25vZGVfaWRzLFxcbm5ldC9jb3JlL2Rldi5jOjEzNDgwOlxcdFxcdFxcdFxcdF9fYWxpZ25vZl9fKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkpO1xcbm5ldC9jb3JlL2Rldi5jOjEzNDgxOlxcdGlmICghbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzKVxcbm5ldC9jb3JlL2Rldi5jLTEzNDgyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvaG90ZGF0YS5jPTEwPXN0cnVjdCBuZXRfaG90ZGF0YSBuZXRfaG90ZGF0YSBfX2NhY2hlbGluZV9hbGlnbmVkID0ge1xcbi0tXFxubmV0L2NvcmUvaG90ZGF0YS5jLTIzLVxcdC5zeXNjdGxfbWF4X3NrYl9mcmFncyA9IE1BWF9TS0JfRlJBR1MsXFxubmV0L2NvcmUvaG90ZGF0YS5jOjI0OlxcdC5zeXNjdGxfc2tiX2RlZmVyX21heCA9IDEyOCxcXG5uZXQvY29yZS9ob3RkYXRhLmMtMjUtXFx0LnN5c2N0bF9tZW1fcGNwdV9yc3YgPSBTS19NRU1PUllfUENQVV9SRVNFUlZFXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuaD0xNT1leHRlcm4gc3RydWN0IG11dGV4IHJwc19kZWZhdWx0X21hc2tfbXV0ZXg7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtMTYtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmg6MTc6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKHNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtMTgtI2VuZGlmXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xNTIyPXZvaWQgbmFwaV9jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYnVkZ2V0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTUzMC1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNTMxOlxcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1MzItXFx0ICAgIHNrYi1cXHUwMDNlYWxsb2NfY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSBcXHUwMDI2XFx1MDAyNiAhc2tiX3NoYXJlZChza2IpKSB7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03Mjk3PXN0YXRpYyB2b2lkIGtmcmVlX3NrYl9uYXBpX2NhY2hlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MzA5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjczMTA6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2tiX2RlZmVyX2Rpc2FibGVfa2V5KTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MzExLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzMyMD12b2lkIHNrYl9hdHRlbXB0X2RlZmVyX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy03MzIxLXtcXG5uZXQvY29yZS9za2J1ZmYuYzo3MzIyOlxcdHN0cnVjdCBza2JfZGVmZXJfbm9kZSAqc2RuO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjMtXFx0dW5zaWduZWQgbG9uZyBkZWZlcl9jb3VudDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTczMjctXFxubmV0L2NvcmUvc2tidWZmLmM6NzMyODpcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KSlcXG5uZXQvY29yZS9za2J1ZmYuYy03MzI5LVxcdFxcdGdvdG8gbm9kZWZlcjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3OlxcdHNkbiA9IHBlcl9jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcywgY3B1KSArIG51bWFfbm9kZV9pZCgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNDgtXFxubmV0L2NvcmUvc2tidWZmLmM6NzM0OTpcXHRkZWZlcl9tYXggPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEuc3lzY3RsX3NrYl9kZWZlcl9tYXgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNTAtXFx0ZGVmZXJfY291bnQgPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKFxcdTAwMjZzZG4tXFx1MDAzZWRlZmVyX2NvdW50KTtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTMzND1zdGF0aWMgaW50IHByb2NfZG9fcnNzX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzUxLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1MjpzdGF0aWMgaW50IHByb2NfZG9fc2tiX2RlZmVyX21heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1My1cXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNTQte1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM1NTpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHNrYl9kZWZlcl9tYXhfbXV0ZXgpO1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1Ni1cXHRpbnQgcmV0LCBvdmFsLCBudmFsO1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM1Ny1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNTg6XFx0bXV0ZXhfbG9jayhcXHUwMDI2c2tiX2RlZmVyX21heF9tdXRleCk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzU5LVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2MDpcXHRvdmFsID0gIW5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4O1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM2MS1cXHRyZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzYyOlxcdG52YWwgPSAhbmV0X2hvdGRhdGEuc3lzY3RsX3NrYl9kZWZlcl9tYXg7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzYzLVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzY1LVxcdFxcdGlmIChudmFsKVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2NjpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2c2tiX2RlZmVyX2Rpc2FibGVfa2V5KTtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNjctXFx0XFx0ZWxzZVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjM2ODpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNnNrYl9kZWZlcl9kaXNhYmxlX2tleSk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzY5LVxcdH1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNzAtXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzcxOlxcdG11dGV4X3VubG9jayhcXHUwMDI2c2tiX2RlZmVyX21heF9tdXRleCk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzcyLVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTY3MS1cXHR7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NjcyOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInNrYl9kZWZlcl9tYXhcXFwiLFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjY3MzpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNm5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4LFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTY3NC1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NzUtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6Njc2OlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9fc2tiX2RlZmVyX21heCxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NzctXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuLS1cXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYz02NT1FWFBPUlRfU1lNQk9MX0dQTChza2JfY2xvbmVfdHhfdGltZXN0YW1wKTtcXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy02Ni1cXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYzo2Nzpib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy02OC17XFxuLS1cXG5uZXQvY29yZS90aW1lc3RhbXBpbmcuYy0xMTMtfVxcbm5ldC9jb3JlL3RpbWVzdGFtcGluZy5jOjExNDpFWFBPUlRfU1lNQk9MX0dQTChza2JfZGVmZXJfcnhfdGltZXN0YW1wKTtcXG4tLVxcbm5ldC9kc2EvdGFnLmM9MjA9c3RhdGljIERFRklORV9NVVRFWChkc2FfdGFnX2RyaXZlcnNfbG9jayk7XFxuLS1cXG5uZXQvZHNhL3RhZy5jLTI5LSAqL1xcbm5ldC9kc2EvdGFnLmM6MzA6c3RhdGljIGJvb2wgZHNhX3NrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IGRzYV91c2VyX3ByaXYgKnAsXFxubmV0L2RzYS90YWcuYy0zMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9kc2EvdGFnLmM9NTQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS90YWcuYy0xMTktXFxubmV0L2RzYS90YWcuYzoxMjA6XFx0aWYgKGRzYV9za2JfZGVmZXJfcnhfdGltZXN0YW1wKHAsIHNrYikpXFxubmV0L2RzYS90YWcuYy0xMjEtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjE1LjAxOTgxNzMzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODM5NzU0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZWZlcnJlZCBTS0IgRnJlZWluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgY2FsbGVkIGJ5IGBfX25hcGlfYnVzeV9sb29wYCwgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCwgYW5kIGBuZXRfcnhfYWN0aW9uYCwgd2hpbGUgYHNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGBuYXBpX2NvbnN1bWVfc2tiYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIGFuZCBgc2tiX2F0dGVtcHRfZGVmZXJfZnJlZWAuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBzeW1ib2xzIGFyZSBhbHNvIGFmZmVjdGVkLlxuXG5BIHF1aWNrIGxvb2sgcmV2ZWFscyB0aGF0IGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgaXMgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2LmNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX05FVGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyLiBZZXMsIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCwgaXQgbG9va3MgbGlrZSBgTkVUYCBpcyB0aGUgb25seSByZXF1aXJlZCBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGEgc2FuaXR5IGNoZWNrIG9mIHRoZSBndWlkZWxpbmVzOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBgRW5hYmxlQ29uZmlnc2AgaXMgYFtcIk5FVFwiXWAsIGFuZCBgRm9jdXNTeW1ib2xzYCBpcyBkZWZpbmVkIGFzIGBbXCJza2JfZGVmZXJfZnJlZV9mbHVzaFwiLCBcInNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVcIl1gLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHN1Y2NpbmN0LlxuXG5Pa2F5LCBsZXQncyBjb25maXJtIHRoZSBjaG9pY2Ugb2YgZm9jdXMgc3ltYm9scy4gWWVzLCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIHNrYiBkZWZlcnJlZCBmcmVlIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBsb29wIGl0ZXJhdGlvbiBvdmVyIE5VTUEgbm9kZXMgd2FzIGNoYW5nZWQuIFRoZSBmYWN0IHRoYXQgdGhlIGl0ZXJhdGlvbiBzdHJhdGVneSBoYXMgY2hhbmdlZCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTUsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjIxLjg1OTU3Mzg5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTkwMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfZGVmZXJfZnJlZV9mbHVzaFwiLFxuICAgIFwic2tiX2F0dGVtcHRfZGVmZXJfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCkgaW4gY29yZSBuZXR3b3JraW5nIChuZXQvY29yZS9kZXYuYykgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChmb3JfZWFjaF9vbmxpbmVfbm9kZSkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGZvcl9lYWNoX25vZGUpLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCBkdXJpbmcgTkFQSSBwb2xsaW5nIGFuZCBzb2Z0aXJxIG5ldF9yeF9hY3Rpb24gdG8gZmx1c2ggZGVmZXJyZWQgU0tCcyBhY3Jvc3MgTlVNQSBub2RlcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBOVU1BIG5vZGUgdHJhY2tpbmcgYW5kIGRlZmVycmVkIHBhY2tldCBkZWFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX2RlZmVyX2ZyZWVfZmx1c2hcIixcbiAgICBcInNrYl9hdHRlbXB0X2RlZmVyX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza2JfZGVmZXJfZnJlZV9mbHVzaCgpIGluIGNvcmUgbmV0d29ya2luZyAobmV0L2NvcmUvZGV2LmMpIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoZm9yX2VhY2hfb25saW5lX25vZGUpIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChmb3JfZWFjaF9ub2RlKS4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgZHVyaW5nIE5BUEkgcG9sbGluZyBhbmQgc29mdGlycSBuZXRfcnhfYWN0aW9uIHRvIGZsdXNoIGRlZmVycmVkIFNLQnMgYWNyb3NzIE5VTUEgbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVNQSBub2RlIHRyYWNraW5nIGFuZCBkZWZlcnJlZCBwYWNrZXQgZGVhbGxvY2F0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjoyMS45MzQ3Njk2ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTAwNTk0OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MjEuOTM1MjQ2NzA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjY5MDAxMTI3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfZGVmZXJfZnJlZV9mbHVzaCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGl0ZXJhdGUgb3ZlciBvbmxpbmUgTlVNQSBub2RlcyAoYGZvcl9lYWNoX29ubGluZV9ub2RlYCkgaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgbm9kZXMgKGBmb3JfZWFjaF9ub2RlYCkgd2hlbiBkcmFpbmluZyBkZWZlcnJlZCBza2IgbGlzdHMuXFxuXFxuVGhpcyBpcyBhIG1pbm9yIGNvbnRyb2wgZmxvdyAvIG9wdGltaXphdGlvbiBjaGFuZ2UgaW4gbmV0d29yayBjb3JlIE5BUEkgZGVmZXJyZWQgU0tCIGZyZWVpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmVlYzY3YWU0M2U4ODllMjI0MGVmNTYxZmY4OGMzOWFiZDFjYWU1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAzOjAxOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggMjkwZTBmMDk5ZTZiZi4uYjUyOGI2YTk4NmZjZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTY5MDcsNyArNjkwNyw3IEBAIHN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXG4gXHRzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUgKnNkbjtcbiBcdGludCBub2RlO1xuIFxuLVx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XG4rXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7XG4gXHRcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcbiBcbiBcdFx0aWYgKGxsaXN0X2VtcHR5KFx1MDAyNnNkbi1cdTAwM2VkZWZlcl9saXN0KSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjIxLjkzNTI0NzU3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTU0ODc2MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZvY3VzZWQgb24gYG5ldC9jb3JlL2Rldi5jYC4gSW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiBnb2VzIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb2RpZmllZCB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCBub2RlcyB0byB1c2UgYGZvcl9lYWNoX29ubGluZV9ub2RlYCBpbnN0ZWFkIG9mIGBmb3JfZWFjaF9ub2RlYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBUaGUgdXNlIG9mIGBmb3JfZWFjaF9vbmxpbmVfbm9kZWAgc3VnZ2VzdHMgdGhleSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGZsdXNoaW5nIHByb2Nlc3MsIHBvdGVudGlhbGx5IHRvIGF2b2lkIG9wZXJhdGluZyBvbiBvZmZsaW5lIG5vZGVzIG9yIHV0aWxpemUgb25seSBhY3RpdmUgcHJvY2Vzc2luZyB1bml0cy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSdyZSBkb2luZyB0aGlzLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBcmUgdGhleSBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgYnVnIHJlbGF0ZWQgdG8gbm9kZSBhZmZpbml0eSBvciBOVU1BIGFyY2hpdGVjdHVyZXM/IEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgb2xkZXIgdmVyc2lvbiB3YXMgY3JlYXRpbmcgaXNzdWVzLiBMb29raW5nIGF0IHRoZSBjb250ZXh0IGFyb3VuZCBgc2tiX2RlZmVyX2ZyZWVfZmx1c2hgIHdpbGwgYmUgY3JpdGljYWwuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGFuZCBpbnRlbnQgYmVoaW5kIHRoZSBgc2tiX2RlZmVyX25vZGVzYCBzdHJ1Y3R1cmUgYW5kIGBkZWZlcl9saXN0YCBpcyBhbHNvIHZpdGFsLiBUaGUgY2hhbmdlIHNlZW1zIHNtYWxsIG9uIHRoZSBzdXJmYWNlLCBidXQgaXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgbG9hZGVkIG5ldHdvcmsgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjoyOS40OTAxMjczMjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5MDA6XFx0fVxcbjY5MDE6XFx0RVhQT1JUX1NZTUJPTChuYXBpX2NvbXBsZXRlX2RvbmUpO1xcbjY5MDI6XFx0XFxuNjkwMzpcXHRzdGF0aWMgdm9pZCBza2JfZGVmZXJfZnJlZV9mbHVzaCh2b2lkKVxcbjY5MDQ6XFx0e1xcbjY5MDU6XFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfbGlzdDtcXG42OTA2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0O1xcbjY5MDc6XFx0XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlICpzZG47XFxuNjkwODpcXHRcXHRpbnQgbm9kZTtcXG42OTA5OlxcdFxcbjY5MTA6XFx0XFx0Zm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkge1xcbjY5MTE6XFx0XFx0XFx0c2RuID0gdGhpc19jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcykgKyBub2RlO1xcbjY5MTI6XFx0XFxuNjkxMzpcXHRcXHRcXHRpZiAobGxpc3RfZW1wdHkoXFx1MDAyNnNkbi1cXHUwMDNlZGVmZXJfbGlzdCkpXFxuNjkxNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG42OTE1OlxcdFxcdFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9jb3VudCwgMCk7XFxuNjkxNjpcXHRcXHRcXHRmcmVlX2xpc3QgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzZG4tXFx1MDAzZWRlZmVyX2xpc3QpO1xcbjY5MTc6XFx0XFxuNjkxODpcXHRcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNrYiwgbmV4dCwgZnJlZV9saXN0LCBsbF9ub2RlKSB7XFxuNjkxOTpcXHRcXHRcXHRcXHRwcmVmZXRjaChuZXh0KTtcXG42OTIwOlxcdFxcdFxcdFxcdG5hcGlfY29uc3VtZV9za2Ioc2tiLCAxKTtcXG42OTIxOlxcdFxcdFxcdH1cXG42OTIyOlxcdFxcdH1cXG42OTIzOlxcdH1cXG42OTI0OlxcdFxcbjY5MjU6XFx0I2lmIGRlZmluZWQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXFxuNjkyNjpcXHRcXG42OTI3OlxcdGVudW0ge1xcbjY5Mjg6XFx0XFx0TkFQSV9GX1BSRUZFUl9CVVNZX1BPTExcXHQ9IDEsXFxuNjkyOTpcXHRcXHROQVBJX0ZfRU5EX09OX1JFU0NIRURcXHQ9IDIsXFxuNjkzMDpcXHR9O1xcbjY5MzE6XFx0XFxuNjkzMjpcXHRzdGF0aWMgdm9pZCBidXN5X3BvbGxfc3RvcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHZvaWQgKmhhdmVfcG9sbF9sb2NrLFxcbjY5MzM6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgZmxhZ3MsIHUxNiBidWRnZXQpXFxuNjkzNDpcXHR7XFxuNjkzNTpcXHRcXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcXG42OTM2OlxcdFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7XFxuNjkzNzpcXHRcXHRpbnQgcmM7XFxuNjkzODpcXHRcXG42OTM5OlxcdFxcdC8qIEJ1c3kgcG9sbGluZyBtZWFucyB0aGVyZSBpcyBhIGhpZ2ggY2hhbmNlIGRldmljZSBkcml2ZXIgaGFyZCBpcnFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MjkuNDkwNzYyODM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MzU0NjA4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBvZiBgbmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXNgIHN0cnVjdHVyZSBhbmQgdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBwaW5wb2ludGluZyB3aGVyZSB0aGlzIHRoaW5nIGlzIGdldHRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBob3QgZGF0YSBwYXRoLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uXG5cbkknbGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBmb3IgdGhlIHZhcmlhYmxlIG5hbWUsIHBlcmhhcHMgZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc3Vic3lzdGVtIGRpcmVjdG9yaWVzIGZpcnN0LiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGFsbG9jYXRpb24gY2FsbHMgbGlrZSBga21hbGxvY2AsIGBremFsbG9jYCwgb3IgZXZlbiBtb3JlIHNwZWNpYWxpemVkIGFsbG9jYXRvcnMgaWYgaXTigJlzIGEgcGVyLUNQVSBvciBub2RlLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlLiBJbml0aWFsaXphdGlvbiBjb3VsZCBiZSBkb25lIGRpcmVjdGx5IGluIHNvbWUgc3RydWN0IGRlZmluaXRpb24gd2l0aCBhIGRlZmF1bHQgdmFsdWUsIG9yIGluIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGxvYWQgb3IgbmV0d29ya2luZyBzdGFjayBpbml0aWFsaXphdGlvbi4gQWxzbywgSSBtdXN0IGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN0YXRpYyBpbml0aWFsaXphdGlvbnMgb3IgaWYgaXTigJlzIHBhcnQgb2YgYSBsYXJnZXIgc3RydWN0dXJlLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgYW55IHVzYWdlIHBhdHRlcm5zIGFyb3VuZCB0aGUgdmFyaWFibGUsIG5vdCBqdXN0IGRlY2xhcmF0aW9uLiBGb3IgaW5zdGFuY2UsIGlzIGl0IGJlaW5nIHVzZWQgaW4gbG9jayBjb250ZXh0cz8gSXMgaXQgYXNzb2NpYXRlZCB3aXRoIHNwZWNpZmljIG5ldHdvcmsgZGV2aWNlcyBvciBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgZGF0YSByYWNlcyB0byBiZSBhd2FyZSBvZj8gVGhhdCB3aWxsIGhlbHAgbWUgdG8gZGVkdWNlIGl0cyByb2xlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBpdHMgcm9sZSBieSBpbnNwZWN0aW5nIHRoZSB1c2FnZSBwYXR0ZXJucy4gSSdtIGhvcGluZyBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBzZWUgdGhlIGNvbnRleHQgb2YgaXRzIGFsbG9jYXRpb24gYW5kIGdldCBhIHNlbnNlIG9mIHRoZSBpbnRlbmRlZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MzYuMTI2MjI2MzQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1MzE0MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9kZWZlcl9ub2Rlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ob3RkYXRhLmg9MTk9c3RydWN0IG5ldF9ob3RkYXRhIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2hvdGRhdGEuaC00MS0jZW5kaWZcXG5pbmNsdWRlL25ldC9ob3RkYXRhLmg6NDI6XFx0c3RydWN0IHNrYl9kZWZlcl9ub2RlIF9fcGVyY3B1ICpza2JfZGVmZXJfbm9kZXM7XFxuaW5jbHVkZS9uZXQvaG90ZGF0YS5oLTQzLVxcdGludFxcdFxcdFxcdGdyb19ub3JtYWxfYmF0Y2g7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02OTAzPXN0YXRpYyB2b2lkIHNrYl9kZWZlcl9mcmVlX2ZsdXNoKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02OTEwLVxcdGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHtcXG5uZXQvY29yZS9kZXYuYzo2OTExOlxcdFxcdHNkbiA9IHRoaXNfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMpICsgbm9kZTtcXG5uZXQvY29yZS9kZXYuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTM0MjY9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3Ny1cXHR9XFxubmV0L2NvcmUvZGV2LmM6MTM0Nzg6XFx0bmV0X2hvdGRhdGEuc2tiX2RlZmVyX25vZGVzID1cXG5uZXQvY29yZS9kZXYuYy0xMzQ3OS1cXHRcXHQgX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBza2JfZGVmZXJfbm9kZSkgKiBucl9ub2RlX2lkcyxcXG5uZXQvY29yZS9kZXYuYy0xMzQ4MC1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3Qgc2tiX2RlZmVyX25vZGUpKTtcXG5uZXQvY29yZS9kZXYuYzoxMzQ4MTpcXHRpZiAoIW5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcylcXG5uZXQvY29yZS9kZXYuYy0xMzQ4Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczMzk9bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzM0Ni1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MzQ3OlxcdHNkbiA9IHBlcl9jcHVfcHRyKG5ldF9ob3RkYXRhLnNrYl9kZWZlcl9ub2RlcywgY3B1KSArIG51bWFfbm9kZV9pZCgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTczNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjM3LjY2MTU0NTIwMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI1MTE1NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTS0IgRGVwdGhzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBzdXNwZWN0aW5nIHNvbWV0aGluZyBmdW5reSBtaWdodCBiZSBoYXBwZW5pbmcgd2l0aCB0aGUgU0tCIGhhbmRsaW5nLCBhbmQgbXkgZ3V0J3MgdGVsbGluZyBtZSB0byBzdGFydCBkaWdnaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFNwZWNpZmljYWxseSwgbGluZSA3MzM5IGhhcyBwaXF1ZWQgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIHRoYXQgYXJlYSwgd2hhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkIHRoZXJlLiBUaGUgaW50cmljYWNpZXMgb2YgU0tCIGxpZmVjeWNsZSBhcmUgb2Z0ZW4gd2hlcmUgdGhlIHN1YnRsZSBidWdzIGhpZGUsIHNvIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCByYWNlIGNvbmRpdGlvbnMsIG9yIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBwYWNrZXQgc3RhdGUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHNlZSB3aGF0IHNlY3JldHMgbGluZSA3MzM5IGlzIGhpZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjQwLjE4NjY2ODYzNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzE3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzMzMDpcXHRcXG43MzMxOlxcdFxcdC8qIHplcm8gY29weSBub3RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgZGVsYXllZC4gKi9cXG43MzMyOlxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG43MzMzOlxcdFxcdFxcdGdvdG8gbm9kZWZlcjtcXG43MzM0OlxcdFxcbjczMzU6XFx0XFx0Y3B1ID0gc2tiLVxcdTAwM2VhbGxvY19jcHU7XFxuNzMzNjpcXHRcXHRpZiAoY3B1ID09IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgfHxcXG43MzM3OlxcdFxcdCAgICBXQVJOX09OX09OQ0UoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpIHx8XFxuNzMzODpcXHRcXHQgICAgIWNwdV9vbmxpbmUoY3B1KSkge1xcbjczMzk6XFx0bm9kZWZlcjpcXHRrZnJlZV9za2JfbmFwaV9jYWNoZShza2IpO1xcbjczNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjczNDE6XFx0XFx0fVxcbjczNDI6XFx0XFxuNzM0MzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9kc3Qoc2tiKSk7XFxuNzM0NDpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYi1cXHUwMDNlZGVzdHJ1Y3Rvcik7XFxuNzM0NTpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYl9uZmN0KHNrYikpO1xcbjczNDY6XFx0XFxuNzM0NzpcXHRcXHRzZG4gPSBwZXJfY3B1X3B0cihuZXRfaG90ZGF0YS5za2JfZGVmZXJfbm9kZXMsIGNwdSkgKyBudW1hX25vZGVfaWQoKTtcXG43MzQ4OlxcdFxcbjczNDk6XFx0XFx0ZGVmZXJfbWF4ID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnN5c2N0bF9za2JfZGVmZXJfbWF4KTtcXG43MzUwOlxcdFxcdGRlZmVyX2NvdW50ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybihcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9jb3VudCk7XFxuNzM1MTpcXHRcXG43MzUyOlxcdFxcdGlmIChkZWZlcl9jb3VudCBcXHUwMDNlPSBkZWZlcl9tYXgpXFxuNzM1MzpcXHRcXHRcXHRnb3RvIG5vZGVmZXI7XFxuNzM1NDpcXHRcXG43MzU1OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2c2tiLVxcdTAwM2VsbF9ub2RlLCBcXHUwMDI2c2RuLVxcdTAwM2VkZWZlcl9saXN0KTtcXG43MzU2OlxcdFxcbjczNTc6XFx0XFx0LyogU2VuZCBhbiBJUEkgZXZlcnkgdGltZSBxdWV1ZSByZWFjaGVzIGhhbGYgY2FwYWNpdHkuICovXFxuNzM1ODpcXHRcXHRraWNrID0gKGRlZmVyX2NvdW50IC0gMSkgPT0gKGRlZmVyX21heCBcXHUwMDNlXFx1MDAzZSAxKTtcXG43MzU5OlxcdFxcbjczNjA6XFx0XFx0LyogTWFrZSBzdXJlIHRvIHRyaWdnZXIgTkVUX1JYX1NPRlRJUlEgb24gdGhlIHJlbW90ZSBDUFVcXG43MzYxOlxcdFxcdCAqIGlmIHdlIGFyZSB1bmx1Y2t5IGVub3VnaCAodGhpcyBzZWVtcyB2ZXJ5IHVubGlrZWx5KS5cXG43MzYyOlxcdFxcdCAqL1xcbjczNjM6XFx0XFx0aWYgKHVubGlrZWx5KGtpY2spKVxcbjczNjQ6XFx0XFx0XFx0a2lja19kZWZlcl9saXN0X3B1cmdlKGNwdSk7XFxuNzM2NTpcXHR9XFxuNzM2NjpcXHRcXG43MzY3OlxcdHN0YXRpYyB2b2lkIHNrYl9zcGxpY2VfY3N1bV9wYWdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwYWdlICpwYWdlLFxcbjczNjg6XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuNzM2OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjQwLjE4NzA0MTc1NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjQ4Mjk2NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIE5vZGUgSXRlcmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCBOVU1BIG5vZGVzIGluIGBza2JfZGVmZXJfZnJlZV9mbHVzaGAuIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyB0aGUgbG9vcCBmcm9tIGBmb3JfZWFjaF9ub2RlYCB0byBgZm9yX2VhY2hfb25saW5lX25vZGVgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0J3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZT8gUHJpbWFyaWx5LCB0aGlzIGlzIGFuIG9wdGltaXphdGlvbiwgcmlnaHQ/IFRoZSBnb2FsIGlzIHRvIG9ubHkgcHJvY2VzcyBkZWZlcnJlZCBTS0JzIG9uIG9ubGluZSBOVU1BIG5vZGVzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIExldCdzIGRpZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFrcyB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIEFmdGVyIGEgY2xvc2UgcmV2aWV3LCBJIGNhbiBzYXkgd2l0aCBjZXJ0YWludHkgdGhhdCAqbm8qLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aG9zZSBjb25jZXJucy4gVGhlIG1lbW9yeSBmb3IgYHNrYl9kZWZlcl9ub2Rlc2AgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgX19hbGxvY19wZXJjcHVgIGR1cmluZyBgbmV0X2Rldl9pbml0YC4gVGhlIGxvb3AgaXRzZWxmIGp1c3QgY29uc3VtZXMgU0tCcyBmcm9tIGVhY2ggbm9kZSdzIGxpbmtlZCBsaXN0IG9uIHRoZSBjdXJyZW50IENQVSwgd2hpY2ggYXJlIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb3JlIGNoYW5nZSBoZXJlICpvbmx5KiByZXN0cmljdHMgdGhlIGl0ZXJhdGlvbiByYW5nZS4gTm8gdXNlciBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBwYWRkaW5nIGNvbmNlcm5zLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrcy5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMuIFdlIGtub3cgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgS0FTQU4gaXMgdGhlcmUgZm9yIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGhhbmRsZWQuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBhbnN3ZXIgaXMgY2xlYXJseSBuby5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC5cblxuU28sIGhlcmUncyBob3cgSSdsbCBzdW1tYXJpemUgaXQ6IFRoZSBwYXRjaCBtb2RpZmllcyBub2RlIGl0ZXJhdGlvbiBpbiBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAsIGNoYW5naW5nIGZyb20gYSBmdWxsIGVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIG5vZGVzIHRvIG9ubHkgaXRlcmF0aW5nIG92ZXIgb25saW5lIG9uZXMgd2hlbiBmbHVzaGluZyBwZXItQ1BVIGRlZmVycmVkIFNLQiBsaXN0cy4gVGhlIEtNU0FOIGZvY3VzIGlzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQga2VybmVsLXRvLXVzZXIgbGVha3MsIHdoaWNoIHRoaXMgY2hhbmdlIGF2b2lkcy4gVGhlIG5vZGUgSUQgbG9vcCBib3VuZCBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmc7IGl0IGFsc28gZG9lc24ndCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyLXNwYWNlIG9yIGNvbmRpdGlvbiBicmFuY2hlcy4gSSBjYW4gY29uY2x1ZGUgdGhhdCBzdGFuZGFyZCBLQVNBTiBhbmQgZGVidWdnaW5nIHRlY2huaXF1ZXMgYXJlIHN1ZmZpY2llbnQuIE5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDExLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjQ4LjgzNTM0MTAxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9kZWZlcl9mcmVlX2ZsdXNoKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gaXRlcmF0ZSBvdmVyIG9ubGluZSBOVU1BIG5vZGVzIChgZm9yX2VhY2hfb25saW5lX25vZGVgKSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBub2RlcyAoYGZvcl9lYWNoX25vZGVgKSB3aGVuIGRyYWluaW5nIGRlZmVycmVkIHNrYiBsaXN0cy5cXG5cXG5UaGlzIGlzIGEgbWlub3IgY29udHJvbCBmbG93IC8gb3B0aW1pemF0aW9uIGNoYW5nZSBpbiBuZXR3b3JrIGNvcmUgTkFQSSBkZWZlcnJlZCBTS0IgZnJlZWluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tiX2RlZmVyX2ZyZWVfZmx1c2goKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBpdGVyYXRlIG92ZXIgb25saW5lIE5VTUEgbm9kZXMgKGBmb3JfZWFjaF9vbmxpbmVfbm9kZWApIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIChgZm9yX2VhY2hfbm9kZWApIHdoZW4gZHJhaW5pbmcgZGVmZXJyZWQgc2tiIGxpc3RzLlxcblxcblRoaXMgaXMgYSBtaW5vciBjb250cm9sIGZsb3cgLyBvcHRpbWl6YXRpb24gY2hhbmdlIGluIG5ldHdvcmsgY29yZSBOQVBJIGRlZmVycmVkIFNLQiBmcmVlaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwvxbp[1] Phase: Succeeded StartedAt: 2026-09-11 03:02:59 +0000 UTC FinishedAt: 2026-09-11 03:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 03:02:59 +0000 UTC FinishedAt: 2026-09-11 03:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2] Phase: Succeeded StartedAt: 2026-09-11 03:02:59 +0000 UTC FinishedAt: 2026-09-11 03:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 03:02:59 +0000 UTC FinishedAt: 2026-09-11 03:46:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 03:02:59 +0000 UTC FinishedAt: 2026-09-11 03:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 03:02:59 +0000 UTC FinishedAt: 2026-09-11 03:03:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowwvxbp/series-workflowwvxbp-convert-artifact-1318407199/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 03:03:09 +0000 UTC FinishedAt: 2026-09-11 03:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 03:03:09 +0000 UTC FinishedAt: 2026-09-11 03:19:04 +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:*c098ff12-5ea6-48bf-a4fd-978cc8070438,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-workflowwvxbp/series-workflowwvxbp-convert-artifact-1318407199/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": "ab4d6d85-2dee-4758-8627-d446cecbf40c", "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-workflowwvxbp/series-workflowwvxbp-build-action-266190373/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 03:03:09 +0000 UTC FinishedAt: 2026-09-11 03:18:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c098ff12-5ea6-48bf-a4fd-978cc8070438,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-workflowwvxbp/series-workflowwvxbp-convert-artifact-1318407199/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": "ab4d6d85-2dee-4758-8627-d446cecbf40c", "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-workflowwvxbp/series-workflowwvxbp-build-action-266190373/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 03:19:04 +0000 UTC FinishedAt: 2026-09-11 03:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 03:19:04 +0000 UTC FinishedAt: 2026-09-11 03:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 03:19:04 +0000 UTC FinishedAt: 2026-09-11 03:19:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 03:19:04 +0000 UTC FinishedAt: 2026-09-11 03:19:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowwvxbp/series-workflowwvxbp-convert-artifact-1160884398/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 03:19:15 +0000 UTC FinishedAt: 2026-09-11 03:21:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 03:19:15 +0000 UTC FinishedAt: 2026-09-11 03:20:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab4d6d85-2dee-4758-8627-d446cecbf40c,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-workflowwvxbp/series-workflowwvxbp-build-action-266190373/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-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 03:21:03 +0000 UTC FinishedAt: 2026-09-11 03:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 03:21:04 +0000 UTC FinishedAt: 2026-09-11 03:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 03:21:04 +0000 UTC FinishedAt: 2026-09-11 03:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 03:21:04 +0000 UTC FinishedAt: 2026-09-11 03:41:19 +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:*c098ff12-5ea6-48bf-a4fd-978cc8070438,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-workflowwvxbp/series-workflowwvxbp-convert-artifact-1160884398/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": "8861cfe4-83a7-451b-923d-6f759c77f4eb", "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-workflowwvxbp/series-workflowwvxbp-build-action-1701472194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 03:21:04 +0000 UTC FinishedAt: 2026-09-11 03:41:16 +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:*c098ff12-5ea6-48bf-a4fd-978cc8070438,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-workflowwvxbp/series-workflowwvxbp-convert-artifact-1160884398/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": "8861cfe4-83a7-451b-923d-6f759c77f4eb", "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-workflowwvxbp/series-workflowwvxbp-build-action-1701472194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 03:41:19 +0000 UTC FinishedAt: 2026-09-11 03:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 03:41:19 +0000 UTC FinishedAt: 2026-09-11 03:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 03:41:19 +0000 UTC FinishedAt: 2026-09-11 03:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 03:41:19 +0000 UTC FinishedAt: 2026-09-11 03:43:03 +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:*8861cfe4-83a7-451b-923d-6f759c77f4eb,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-workflowwvxbp/series-workflowwvxbp-build-action-1701472194/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-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 03:43:13 +0000 UTC FinishedAt: 2026-09-11 03:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 03:43:13 +0000 UTC FinishedAt: 2026-09-11 03:46:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"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:*ab4d6d85-2dee-4758-8627-d446cecbf40c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8861cfe4-83a7-451b-923d-6f759c77f4eb,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-workflowwvxbp/series-workflowwvxbp-build-action-266190373/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-workflowwvxbp/series-workflowwvxbp-build-action-1701472194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 03:43:13 +0000 UTC FinishedAt: 2026-09-11 03:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 03:43:13 +0000 UTC FinishedAt: 2026-09-11 03:43:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"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-workflowwvxbp/series-workflowwvxbp-convert-artifact-3181079379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 03:43:13 +0000 UTC FinishedAt: 2026-09-11 03:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 03:43:13 +0000 UTC FinishedAt: 2026-09-11 03:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 03:43:13 +0000 UTC FinishedAt: 2026-09-11 03:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 03:43:23 +0000 UTC FinishedAt: 2026-09-11 03:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwvxbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_defer_free_flush","skb_attempt_defer_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4c50ea25-9a65-48a0-a417-8b0ec1db1dac","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 03:43:23 +0000 UTC FinishedAt: 2026-09-11 03:45:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab4d6d85-2dee-4758-8627-d446cecbf40c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8861cfe4-83a7-451b-923d-6f759c77f4eb,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-workflowwvxbp/series-workflowwvxbp-build-action-266190373/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-workflowwvxbp/series-workflowwvxbp-build-action-1701472194/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-workflowwvxbp/series-workflowwvxbp-convert-artifact-3181079379/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,}