Name: series-workflowltwlh Phase: Succeeded StartedAt: 2026-09-06 06:52:49 +0000 UTC FinishedAt: 2026-09-06 10:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[0] Phase: Succeeded StartedAt: 2026-09-06 06:52:49 +0000 UTC FinishedAt: 2026-09-06 08:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 06:52:49 +0000 UTC FinishedAt: 2026-09-06 08:28:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "377b5ef5-ed84-4a69-adab-9d29d7eb6107" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "control_write", "ch9200_bind", "ch9200_mdio_write" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OywKICAgICYjMzQ7Y2g5MjAwX21kaW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGFuIGVycm9uZW91cyBgcmV0dXJuIDA7YCBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOmNvbnRyb2xfd3JpdGUoKWAsIGFsbG93aW5nIGVycm9yIHJldHVybiB2YWx1ZXMgZnJvbSBgdXNiX2NvbnRyb2xfbXNnKClgIG9yIGAtRUlOVkFMYCBvbiBpbmNvbXBsZXRlIHdyaXRlcyB0byBwcm9wZXJseSBwcm9wYWdhdGUgYmFjayB0byB0aGUgY2FsbGVyIGluc3RlYWQgb2YgYmVpbmcgdW5jb25kaXRpb25hbGx5IG1hc2tlZCBieSBgMGAuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2Vyc3BhY2UtZmFjaW5nIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCBidWZmZXJzIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVycyBwcmlvciB0byBpbnZvY2F0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgZnVsbHkgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLiBGdXp6aW5nIGNhbiB2ZXJpZnkgZXJyb3ItaGFuZGxpbmcgYW5kIGJpbmRpbmcgbG9naWMgd2hlbiBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZmFpbCBvciByZXR1cm4gdW5leHBlY3RlZCBzaXplcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlYjViMzhkZTgwN2ZjMjE0N2QyYjBmZWJhZTRmZjg0MzdmOGRkMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjI3OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuaW5kZXggYTIwNmZmYTc2ZjFiOS4uM2E4MWU5ZTk2ZmQzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5AQCAtMTY4LDggJiM0MzsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJyX291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OywKICAgICYjMzQ7Y2g5MjAwX21kaW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLiBGdXp6aW5nIGNhbiB2ZXJpZnkgZXJyb3ItaGFuZGxpbmcgYW5kIGJpbmRpbmcgbG9naWMgd2hlbiBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZmFpbCBvciByZXR1cm4gdW5leHBlY3RlZCBzaXplcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlYjViMzhkZTgwN2ZjMjE0N2QyYjBmZWJhZTRmZjg0MzdmOGRkMzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA4OjI3OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKQEAgLTE2OCw4ICYjNDM7MTY4LDYgQEAgc3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LAogCQllcnIgPSAtRUlOVkFMOwogCWtmcmVlKGJ1Zik7CiAKLQlyZXR1cm4gMDsKLQogZXJyX291dDoKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG1vZGlmaWVkIGZpbGUsIHdoaWNoIGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBOb3csIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgMTY4IGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0e1xuIDE0MTpcdFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcbiAxNDI6XHRcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xuIDE0MzpcdFx0aW50IGVyciA9IDA7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxuIDE0NjpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuIDE0NzpcdFx0XHRcdFx0VVNCX1JFQ0lQX09USEVSKTtcbiAxNDg6XHRcdGVsc2VcbiAxNDk6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNTA6XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UpO1xuIDE1MTpcdFxuIDE1MjpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxuXCYjMzQ7LFxuIDE1MzpcdFx0XHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xuIDE1NDpcdFxuIDE1NTpcdFx0aWYgKGRhdGEpIHtcbiAxNTY6XHRcdFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcbiAxNTc6XHRcdFx0aWYgKCFidWYpIHtcbiAxNTg6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDE1OTpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiAxNjA6XHRcdFx0fVxuIDE2MTpcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cdTAwM2V1ZGV2LFxuIDE2NDpcdFx0XHRcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXHUwMDNldWRldiwgMCksXG4gMTY1Olx0XHRcdFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcbiAxNjY6XHRcdFx0XHQgICAgICB0aW1lb3V0KTtcbiAxNjc6XHRcdGlmIChlcnIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBlcnIgXHUwMDNjIHNpemUpXG4gMTY4Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTY5Olx0XHRrZnJlZShidWYpO1xuIDE3MDpcdFxuIDE3MTpcdGVycl9vdXQ6XG4gMTcyOlx0XHRyZXR1cm4gZXJyO1xuIDE3MzpcdH1cbiAxNzQ6XHRcbiAxNzU6XHRzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcbiAxNzY6XHR7XG4gMTc3Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDE3ODpcdFx0dW5zaWduZWQgY2hhciBidWZmWzJdO1xuIDE3OTpcdFx0aW50IHJldDtcbiAxODA6XHRcbiAxODE6XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDslcyBwaHlfaWQ6JTAyeCBsb2M6JTAyeFxcblwmIzM0OyxcbiAxODI6XHRcdFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChwaHlfaWQgIT0gMClcbiAxODU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTg2Olx0XG4gMTg3Olx0XHRyZXQgPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIGxvYyAqIDIsIGJ1ZmYsIDB4MDIsXG4gMTg4Olx0XHRcdFx0ICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAxODk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBjaDkyMDAuY2AgYW5kIGBjb250cm9sX3dyaXRlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBgY2g5MjAwLmNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgY29udHJvbF93cml0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgZXhhbWluYXRpb24gb2YgYGNvbnRyb2xfd3JpdGVgIGl0c2VsZjsgdW5kZXJzdGFuZGluZyBpdHMgY29yZSBwdXJwb3NlIGFuZCB0aGUgcGFyYW1ldGVycyBpdCBoYW5kbGVzIGlzIGtleS4gQWZ0ZXIgdGhhdCwgdGhlIG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIHdpdGhpbiB0aGUgYGNoOTIwMC5jYCBmaWxlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgZ2l2ZXMgY3JpdGljYWwgaW5zaWdodCBpbnRvIHRoZSBzeXN0ZW0mIzM5O3Mgb3BlcmF0aW9uYWwgbG9naWMuIEl0IGlzIGxpa2VseSB0aGF0IGBjb250cm9sX3dyaXRlYCBpcyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBgY2g5MjAwLmNgIG1vZHVsZSwgc28gdW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb24gaW4gcmVsYXRpb24gdG8gdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGlzIGltcG9ydGFudC4gRm9sbG93aW5nIHRoZXNlIGluaXRpYWwgaW52ZXN0aWdhdGlvbnMsIGxldCB1cyByZWFkIG1vcmUgb2YgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBgY2g5MjAwLmNgIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKlxuICAgMjpcdCAqIFVTQiAxME0vMTAwTSBldGhlcm5ldCBhZGFwdGVyXG4gICAzOlx0ICpcbiAgIDQ6XHQgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgNTpcdCAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIFwmIzM0O2FzIGlzXCYjMzQ7IHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueVxuICAgNjpcdCAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkXG4gICA3Olx0ICpcbiAgIDg6XHQgKi9cbiAgIDk6XHRcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMjM6XHRcbiAgMjQ6XHQjZGVmaW5lIENIOTIwMF9WSURcdFx0MHgxQTg2XG4gIDI1Olx0I2RlZmluZSBDSDkyMDBfUElEX0UwOTJcdFx0MHhFMDkyXG4gIDI2Olx0XG4gIDI3Olx0I2RlZmluZSBDVFJMX1RJTUVPVVRfTVNcdFx0MTAwMFxuICAyODpcdFxuICAyOTpcdCNkZWZpbmUgQ09OVFJPTF9USU1FT1VUX01TIDEwMDBcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIFJFUVVFU1RfUkVBRFx0MHgwRVxuICAzMjpcdCNkZWZpbmUgUkVRVUVTVF9XUklURVx0MHgwRlxuICAzMzpcdFxuICAzNDpcdC8qIEFkZHJlc3Mgc3BhY2U6XG4gIDM1Olx0ICogMDAtNjMgOiBNSUlcbiAgMzY6XHQgKiA2NC0xMjg6IE1BQ1xuICAzNzpcdCAqXG4gIDM4Olx0ICogTm90ZTogYWxsIGFjY2Vzc2VzIG11c3QgYmUgMTYtYml0XG4gIDM5Olx0ICovXG4gIDQwOlx0XG4gIDQxOlx0I2RlZmluZSBNQUNfUkVHX0NUUkwgNjRcbiAgNDI6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVFVTIDY2XG4gIDQzOlx0I2RlZmluZSBNQUNfUkVHX0lOVEVSUlVQVF9NQVNLIDY4XG4gIDQ0Olx0I2RlZmluZSBNQUNfUkVHX1BIWV9DT01NQU5EIDcwXG4gIDQ1Olx0I2RlZmluZSBNQUNfUkVHX1BIWV9EQVRBIDcyXG4gIDQ2Olx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTCA3NFxuICA0NzpcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX00gNzZcbiAgNDg6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVElPTl9IIDc4XG4gIDQ5Olx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTCA4MFxuICA1MDpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00xIDgyXG4gIDUxOlx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTTIgODRcbiAgNTI6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9IIDg2XG4gIDUzOlx0I2RlZmluZSBNQUNfUkVHX1RIUkVTSE9MRCA4OFxuICA1NDpcdCNkZWZpbmUgTUFDX1JFR19GSUZPX0RFUFRIIDkwXG4gIDU1Olx0I2RlZmluZSBNQUNfUkVHX1BBVVNFIDkyXG4gIDU2Olx0I2RlZmluZSBNQUNfUkVHX0ZMT1dfQ09OVFJPTCA5NFxuICA1NzpcdFxuICA1ODpcdC8qIENvbnRyb2wgcmVnaXN0ZXIgYml0c1xuICA1OTpcdCAqXG4gIDYwOlx0ICogTm90ZTogYml0cyAxMyBhbmQgMTUgYXJlIHJlc2VydmVkXG4gIDYxOlx0ICovXG4gIDYyOlx0I2RlZmluZSBMT09QQkFDS1x0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTQpXG4gIDYzOlx0I2RlZmluZSBCQVNFMTAwWFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTIpXG4gIDY0Olx0I2RlZmluZSBNQlBTXzEwXHRcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDExKVxuICA2NTpcdCNkZWZpbmUgRFVQTEVYX01PREVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEwKVxuICA2NjpcdCNkZWZpbmUgUEFVU0VfRlJBTUVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDkpXG4gIDY3Olx0I2RlZmluZSBQUk9NSVNDVU9VU1x0XHQoMHgwMSBcdTAwM2NcdTAwM2MgOClcbiAgNjg6XHQjZGVmaW5lIE1VTFRJQ0FTVFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNylcbiAgNjk6XHQjZGVmaW5lIEJST0FEQ0FTVFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNilcbiAgNzA6XHQjZGVmaW5lIEhBU0hcdFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNSlcbiAgNzE6XHQjZGVmaW5lIEFQUEVORF9QQURcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDQpXG4gIDcyOlx0I2RlZmluZSBBUFBFTkRfQ1JDXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAzKVxuICA3MzpcdCNkZWZpbmUgVFJBTlNNSVRURVJfQUNUSU9OXHQoMHgwMSBcdTAwM2NcdTAwM2MgMilcbiAgNzQ6XHQjZGVmaW5lIFJFQ0VJVkVSX0FDVElPTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMSlcbiAgNzU6XHQjZGVmaW5lIERNQV9BQ1RJT05cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDApXG4gIDc2Olx0XG4gIDc3Olx0LyogU3RhdHVzIHJlZ2lzdGVyIGJpdHNcbiAgNzg6XHQgKlxuICA3OTpcdCAqIE5vdGU6IGJpdHMgNy0xNSBhcmUgcmVzZXJ2ZWRcbiAgODA6XHQgKi9cbiAgODE6XHQjZGVmaW5lIEFMSUdOTUVOVFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNilcbiAgODI6XHQjZGVmaW5lIEZJRk9fT1ZFUl9SVU5cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDUpXG4gIDgzOlx0I2RlZmluZSBGSUZPX1VOREVSX1JVTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNClcbiAgODQ6XHQjZGVmaW5lIFJYX0VSUk9SXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAzKVxuICA4NTpcdCNkZWZpbmUgUlhfQ09NUExFVEVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDIpXG4gIDg2Olx0I2RlZmluZSBUWF9FUlJPUlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMSlcbiAgODc6XHQjZGVmaW5lIFRYX0NPTVBMRVRFXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAwKVxuICA4ODpcdFxuICA4OTpcdC8qIEZJRk8gZGVwdGggcmVnaXN0ZXIgYml0c1xuICA5MDpcdCAqXG4gIDkxOlx0ICogTm90ZTogYml0cyA2IGFuZCAxNCBhcmUgcmVzZXJ2ZWRcbiAgOTI6XHQgKi9cbiAgOTM6XHRcbiAgOTQ6XHQjZGVmaW5lIEVUSF9UWEJEXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxNSlcbiAgOTU6XHQjZGVmaW5lIEVUTl9UWF9GSUZPX0RFUFRIXHQoMHgwMSBcdTAwM2NcdTAwM2MgOClcbiAgOTY6XHQjZGVmaW5lIEVUSF9SWEJEXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA3KVxuICA5NzpcdCNkZWZpbmUgRVRIX1JYX0ZJRk9fREVQVEhcdCgweDAxIFx1MDAzY1x1MDAzYyAwKVxuICA5ODpcdFxuICA5OTpcdHN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcbiAxMDA6XHRcdFx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgZm9yIHRoaXMgQ0g5MjAwIFVTQiBFdGhlcm5ldCBhZGFwdGVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHR5cGljYWwgVVNCIGRyaXZlciBjaGFsbGVuZ2VzIOKAkyBlbmRwb2ludCBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBzb21lIHF1aXJrcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGlwc2V0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYSBzdHJ1Y3R1cmVkIGFwcHJvYWNoLCBsaWtlbHkgdXNpbmcgdGhlIFVTQiBjb3JlJiMzOTtzIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGRyaXZlciBlbnRyeSBwb2ludHMgbGlrZSBgcHJvYmVgLCBgZGlzY29ubmVjdGAsIGFuZCBgc3VzcGVuZC9yZXN1bWVgIGltcGxlbWVudGF0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBjb250cm9sIHRyYW5zZmVyIHNlcXVlbmNlcy4gSSB3aWxsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGVpciBlcnJvciBoYW5kbGluZzsgVVNCIGRldmljZXMgY2FuIGJlIG5vdG9yaW91c2x5IHNlbnNpdGl2ZS4gSXQmIzM5O3MgYWx3YXlzIGludGVyZXN0aW5nIHRvIHNlZSBob3cgZGlmZmVyZW50IGRldmVsb3BlcnMgYXBwcm9hY2ggdGhlIHNhbWUgcHJvYmxlbSwgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIG1hZGUsIGFuZCBhbnkgY2xldmVyIHRlY2huaXF1ZXMgdGhleSYjMzk7dmUgZW1wbG95ZWQgdG8gd29yayBhcm91bmQgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XG4gMTgxOlx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7JXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXG5cJiMzNDssXG4gMTgyOlx0XHRcdCAgIF9fZnVuY19fLCBwaHlfaWQsIGxvYyk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAocGh5X2lkICE9IDApXG4gMTg1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDE4NjpcdFxuIDE4NzpcdFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxuIDE4ODpcdFx0XHRcdCAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMTg5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE5MDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5MTpcdFxuIDE5MjpcdFx0cmV0dXJuIChidWZmWzBdIHwgYnVmZlsxXSBcdTAwM2NcdTAwM2MgOCk7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdHN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gMTk2Olx0XHRcdFx0ICAgICAgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbClcbiAxOTc6XHR7XG4gMTk4Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDE5OTpcdFx0dW5zaWduZWQgY2hhciBidWZmWzJdO1xuIDIwMDpcdFxuIDIwMTpcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0OyVzKCkgcGh5X2lkPSUwMnggbG9jOiUwMnhcXG5cJiMzNDssXG4gMjAyOlx0XHRcdCAgIF9fZnVuY19fLCBwaHlfaWQsIGxvYyk7XG4gMjAzOlx0XG4gMjA0Olx0XHRpZiAocGh5X2lkICE9IDApXG4gMjA1Olx0XHRcdHJldHVybjtcbiAyMDY6XHRcbiAyMDc6XHRcdGJ1ZmZbMF0gPSAodW5zaWduZWQgY2hhcil2YWw7XG4gMjA4Olx0XHRidWZmWzFdID0gKHVuc2lnbmVkIGNoYXIpKHZhbCBcdTAwM2VcdTAwM2UgOCk7XG4gMjA5Olx0XG4gMjEwOlx0XHRjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcbiAyMTE6XHRcdFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAyMTI6XHR9XG4gMjEzOlx0XG4gMjE0Olx0c3RhdGljIGludCBjaDkyMDBfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gMjE1Olx0e1xuIDIxNjpcdFx0c3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7XG4gMjE3Olx0XG4gMjE4Olx0XHRtaWlfY2hlY2tfbWVkaWEoXHUwMDI2ZGV2LVx1MDAzZW1paSwgMSwgMSk7XG4gMjE5Olx0XHRtaWlfZXRodG9vbF9nc2V0KFx1MDAyNmRldi1cdTAwM2VtaWksIFx1MDAyNmVjbWQpO1xuIDIyMDpcdFxuIDIyMTpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIHNwZWVkOiVkIGR1cGxleDolZFxcblwmIzM0OyxcbiAyMjI6XHRcdFx0ICAgX19mdW5jX18sIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4KTtcbiAyMjM6XHRcbiAyMjQ6XHRcdHJldHVybiAwO1xuIDIyNTpcdH1cbiAyMjY6XHRcbiAyMjc6XHRzdGF0aWMgdm9pZCBjaDkyMDBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuIDIyODpcdHtcbiAyMjk6XHRcdGludCBsaW5rO1xuIDIzMDpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIFx1MDAzYyAxNilcbiAyMzM6XHRcdFx0cmV0dXJuO1xuIDIzNDpcdFxuIDIzNTpcdFx0YnVmID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcbiAyMzY6XHRcdGxpbmsgPSAhIShidWZbMF0gXHUwMDI2IDB4MDEpO1xuIDIzNzpcdFxuIDIzODpcdFx0aWYgKGxpbmspIHtcbiAyMzk6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXHUwMDNlbmV0KTtcbiAyNDA6XHRcdFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX0xJTktfUkVTRVQpO1xuIDI0MTpcdFx0fSBlbHNlIHtcbiAyNDI6XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2LVx1MDAzZW5ldCk7XG4gMjQzOlx0XHR9XG4gMjQ0Olx0fVxuIDI0NTpcdFxuIDI0NjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNDc6XHRcdFx0XHRcdCAgICAgICBnZnBfdCBmbGFncylcbiAyNDg6XHR7XG4gMjQ5Olx0XHRpbnQgaSA9IDA7XG4gMjUwOlx0XHRpbnQgbGVuID0gMDtcbiAyNTE6XHRcdGludCB0eF9vdmVyaGVhZCA9IDA7XG4gMjUyOlx0XG4gMjUzOlx0XHR0eF9vdmVyaGVhZCA9IDB4NDA7XG4gMjU0Olx0XG4gMjU1Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDI1NjpcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIHR4X292ZXJoZWFkKSkge1xuIDI1NzpcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDI1ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNTk6XHRcdH1cbiAyNjA6XHRcbiAyNjE6XHRcdF9fc2tiX3B1c2goc2tiLCB0eF9vdmVyaGVhZCk7XG4gMjYyOlx0XHQvKiB1c2JuZXQgYWRkcyBwYWRkaW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHBhY2tldCBzaXplXG4gMjYzOlx0XHQgKiBpZiBzbywgYWRqdXN0IGxlbmd0aCB2YWx1ZSBpbiBoZWFkZXJcbiAyNjQ6XHRcdCAqL1xuIDI2NTpcdFx0aWYgKChza2ItXHUwMDNlbGVuICUgZGV2LVx1MDAzZW1heHBhY2tldCkgPT0gMClcbiAyNjY6XHRcdFx0bGVuJiM0MzsmIzQzOztcbiAyNjc6XHRcbiAyNjg6XHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gbGVuO1xuIDI2OTpcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBsZW4gXHUwMDNlXHUwMDNlIDg7XG4gMjcwOlx0XHRza2ItXHUwMDNlZGF0YVsyXSA9IDB4MDA7XG4gMjcxOlx0XHRza2ItXHUwMDNlZGF0YVszXSA9IDB4ODA7XG4gMjcyOlx0XG4gMjczOlx0XHRmb3IgKGkgPSA0OyBpIFx1MDAzYyA0ODsgaSYjNDM7JiM0MzspXG4gMjc0Olx0XHRcdHNrYi1cdTAwM2VkYXRhW2ldID0gMHgwMDtcbiAyNzU6XHRcbiAyNzY6XHRcdHNrYi1cdTAwM2VkYXRhWzQ4XSA9IGxlbjtcbiAyNzc6XHRcdHNrYi1cdTAwM2VkYXRhWzQ5XSA9IGxlbiBcdTAwM2VcdTAwM2UgODtcbiAyNzg6XHRcdHNrYi1cdTAwM2VkYXRhWzUwXSA9IDB4MDA7XG4gMjc5Olx0XHRza2ItXHUwMDNlZGF0YVs1MV0gPSAweDgwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgZm9yIHRoaXMgQ0g5MjAwIFVTQiBFdGhlcm5ldCBhZGFwdGVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHR5cGljYWwgVVNCIGRyaXZlciBjaGFsbGVuZ2VzIOKAkyBlbmRwb2ludCBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBzb21lIHF1aXJrcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGlwc2V0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYSBzdHJ1Y3R1cmVkIGFwcHJvYWNoLCBsaWtlbHkgdXNpbmcgdGhlIFVTQiBjb3JlJiMzOTtzIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGRyaXZlciBlbnRyeSBwb2ludHMgbGlrZSBgcHJvYmVgLCBgZGlzY29ubmVjdGAsIGFuZCBgc3VzcGVuZC9yZXN1bWVgIGltcGxlbWVudGF0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBjb250cm9sIHRyYW5zZmVyIHNlcXVlbmNlcy4gSSB3aWxsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGVpciBlcnJvciBoYW5kbGluZzsgVVNCIGRldmljZXMgY2FuIGJlIG5vdG9yaW91c2x5IHNlbnNpdGl2ZS4gSXQmIzM5O3MgYWx3YXlzIGludGVyZXN0aW5nIHRvIHNlZSBob3cgZGlmZmVyZW50IGRldmVsb3BlcnMgYXBwcm9hY2ggdGhlIHNhbWUgcHJvYmxlbSwgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIG1hZGUsIGFuZCBhbnkgY2xldmVyIHRlY2huaXF1ZXMgdGhleSYjMzk7dmUgZW1wbG95ZWQgdG8gd29yayBhcm91bmQgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFxuIDI4MTpcdFx0Zm9yIChpID0gNTI7IGkgXHUwMDNjIDY0OyBpJiM0MzsmIzQzOylcbiAyODI6XHRcdFx0c2tiLVx1MDAzZWRhdGFbaV0gPSAweDAwO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0dXJuIHNrYjtcbiAyODU6XHR9XG4gMjg2Olx0XG4gMjg3Olx0c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI4ODpcdHtcbiAyODk6XHRcdGludCBsZW4gPSAwO1xuIDI5MDpcdFx0aW50IHJ4X292ZXJoZWFkID0gMDtcbiAyOTE6XHRcbiAyOTI6XHRcdHJ4X292ZXJoZWFkID0gNjQ7XG4gMjkzOlx0XG4gMjk0Olx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XG4gMjk1Olx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXG5cJiMzNDspO1xuIDI5NjpcdFx0XHRyZXR1cm4gMDtcbiAyOTc6XHRcdH1cbiAyOTg6XHRcbiAyOTk6XHRcdGxlbiA9IChza2ItXHUwMDNlZGF0YVtza2ItXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVx1MDAzZWRhdGFbc2tiLVx1MDAzZWxlbiAtIDE1XSBcdTAwM2NcdTAwM2MgOCk7XG4gMzAwOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMzAxOlx0XG4gMzAyOlx0XHRyZXR1cm4gMTtcbiAzMDM6XHR9XG4gMzA0Olx0XG4gMzA1Olx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuIDMwNjpcdHtcbiAzMDc6XHRcdGludCBlcnIgPSAwO1xuIDMwODpcdFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcbiAzMDk6XHRcdGludCByZF9tYWNfbGVuID0gMDtcbiAzMTA6XHRcbiAzMTE6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXM6XFxuXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcblwmIzM0OywgX19mdW5jX18sXG4gMzEyOlx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxuIDMxMzpcdFx0XHQgICBsZTE2X3RvX2NwdShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xuIDMxNDpcdFxuIDMxNTpcdFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcbiAzMTY6XHRcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXG4gMzE3Olx0XHRcdFx0XHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcbiAzMTg6XHRcdFx0XHRcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMTk6XHRcdHJkX21hY19sZW4gJiM0Mzs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXG4gMzIwOlx0XHRcdFx0XHQgICBtYWNfYWRkciAmIzQzOyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMTpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcbiAzMjI6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzIzOlx0XHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcbiAzMjQ6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMjU6XHRcbiAzMjY6XHRcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcbiAzMjc6XHRcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcbiAzMjg6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMjk6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzA6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzE6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzI6XHRcbiAzMzM6XHRcdHJldHVybiBlcnI7XG4gMzM0Olx0fVxuIDMzNTpcdFxuIDMzNjpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzc6XHR7XG4gMzM4Olx0XHRpbnQgcmV0dmFsID0gMDtcbiAzMzk6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDA6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MTpcdFxuIDM0MjpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDM6XHRcdGlmIChyZXR2YWwpXG4gMzQ0Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ3Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNDk6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTA6XHRcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1MjpcdFxuIDM1MzpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU0Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NTpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTY6XHRcbiAzNTc6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM1ODpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzU5Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYwOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYxOlx0XG4gMzYyOlx0XHRkYXRhWzBdID0gMHhBMDtcbiAzNjM6XHRcdGRhdGFbMV0gPSAweDkwO1xuIDM2NDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiAzNjU6XHRcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzNjY6XHRcbiAzNjc6XHRcdGRhdGFbMF0gPSAweDMwO1xuIDM2ODpcdFx0ZGF0YVsxXSA9IDB4MDA7XG4gMzY5Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbiAzNzA6XHRcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzNzE6XHRcbiAzNzI6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM3MzpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzc0Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzc1Olx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzc2Olx0XG4gMzc3Olx0XHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiAzNzg6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM3OTpcdFx0ZGF0YVsxXSA9IDB4MDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBmaWxlLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgVVNCIERyaXZlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGNoOTIwMC5jYCBmaWxlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSYjMzk7bSBhbHJlYWR5IGZvcm1pbmcgc29tZSBleHBlY3RhdGlvbnMgYmFzZWQgb24gdGhlIGZpbGVuYW1lIGFuZCBwYXRoLiBLbm93aW5nIHRoZSBgZHJpdmVycy9uZXQvdXNiYCBsb2NhdGlvbiwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBpcyBhIG5ldHdvcmsgZHJpdmVyIGZvciBhIFVTQi1iYXNlZCBkZXZpY2UsIHByb2JhYmx5IGEgVVNCIEV0aGVybmV0IGFkYXB0ZXIgdXNpbmcgdGhlIENIOTIwMCBjaGlwc2V0LiBJJiMzOTttIGxpa2VseSBnb2luZyB0byBiZSBsb29raW5nIGF0IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgVVNCIGVudW1lcmF0aW9uLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGRhdGEgdHJhbnNmZXIsIGFuZCBwb3RlbnRpYWxseSBwb3dlciBtYW5hZ2VtZW50LiBUaGUgJiMzNDtjaDkyMDAmIzM0OyBwYXJ0IG5hcnJvd3MgaXQgZG93biBldmVuIGZ1cnRoZXIsIHN1Z2dlc3RpbmcgdGhpcyBkcml2ZXIgaXMgc3BlY2lmaWNhbGx5IHdyaXR0ZW4gZm9yIGEgZGV2aWNlIHVzaW5nIHRoYXQgcGFydGljdWxhciBzaWxpY29uLiBJJiMzOTttIGN1cmlvdXMgaWYgdGhpcyB1c2VzIHN0YW5kYXJkIFVTQiBuZXR3b3JrIGRldmljZSBjbGFzcyBwcm90b2NvbHMgb3IgaWYgaXQgaGFzIGFueSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIFVTQiBkZXNjcmlwdG9yIHBhcnNpbmcgYW5kIHRoZSBjb250cm9sIHRyYW5zZmVycy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBVU0IgZXJyb3JzIGFuZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBhbmQgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBuZXR3b3JrIHRyYWZmaWMgZmxvdywgcGVyaGFwcyBleGFtaW5pbmcgdGhlIHVzZSBvZiBwYWNrZXQgZGVzY3JpcHRvcnMsIERNQSwgYW5kIGFueSBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIDM4MTpcdFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM4MjpcdFxuIDM4MzpcdFx0ZGF0YVswXSA9IDB4NUY7XG4gMzg0Olx0XHRkYXRhWzFdID0gMHgwRDtcbiAzODU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXG4gMzg2Olx0XHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg3Olx0XG4gMzg4Olx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiAzODk6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiAzOTA6XHRcbiAzOTE6XHRcdHJldHVybiByZXR2YWw7XG4gMzkyOlx0fVxuIDM5MzpcdFxuIDM5NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gMzk1Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiAzOTY6XHRcdC5mbGFncyA9IEZMQUdfRVRIRVIsXG4gMzk3Olx0XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuIDM5ODpcdFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxuIDM5OTpcdFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxuIDQwMDpcdFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG4gNDAxOlx0XHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxuIDQwMjpcdFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXG4gNDAzOlx0fTtcbiA0MDQ6XHRcbiA0MDU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XG4gNDA2Olx0XHR7XG4gNDA3Olx0XHQgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MiksXG4gNDA4Olx0XHQgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y2g5MjAwX2luZm8sXG4gNDA5Olx0XHQgfSxcbiA0MTA6XHRcdHt9LFxuIDQxMTpcdH07XG4gNDEyOlx0XG4gNDEzOlx0TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNoOTIwMF9wcm9kdWN0cyk7XG4gNDE0Olx0XG4gNDE1Olx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoOTIwMF9kcml2ZXIgPSB7XG4gNDE2Olx0XHQubmFtZSA9IFwmIzM0O2NoOTIwMFwmIzM0OyxcbiA0MTc6XHRcdC5pZF90YWJsZSA9IGNoOTIwMF9wcm9kdWN0cyxcbiA0MTg6XHRcdC5wcm9iZSA9IHVzYm5ldF9wcm9iZSxcbiA0MTk6XHRcdC5kaXNjb25uZWN0ID0gdXNibmV0X2Rpc2Nvbm5lY3QsXG4gNDIwOlx0XHQuc3VzcGVuZCA9IHVzYm5ldF9zdXNwZW5kLFxuIDQyMTpcdFx0LnJlc3VtZSA9IHVzYm5ldF9yZXN1bWUsXG4gNDIyOlx0fTtcbiA0MjM6XHRcbiA0MjQ6XHRtb2R1bGVfdXNiX2RyaXZlcihjaDkyMDBfZHJpdmVyKTtcbiA0MjU6XHRcbiA0MjY6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UWluSGVuZyBDSDkyMDAgVVNCIE5ldHdvcmsgZGV2aWNlXCYjMzQ7KTtcbiA0Mjc6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgRHJpdmVyIEJ1Z2ZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzLCBmcmFua2x5LCBhIGJpdCBzbG9wcHkuIFRoZSBmdW5jdGlvbiwgYWZ0ZXIgY2FsbGluZyBgdXNiX2NvbnRyb2xfbXNnYCwgd291bGQgKmFsd2F5cyogcmV0dXJuIDAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIFVTQiBjb250cm9sIG1lc3NhZ2UgY2FsbC4gRXZlbiBpZiBgdXNiX2NvbnRyb2xfbXNnYCByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGxpa2UgLUVJTlZBTCwgdGhlIGNvZGUgd291bGQgcGxvdyB0aHJvdWdoIGFuZCByZXR1cm4gMCwgZWZmZWN0aXZlbHkgbWFza2luZyB0aGUgcHJvYmxlbSEgVGhlIGNvZGUgd2FzIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgYGVycmAgdmFyaWFibGUgYGVyciAmZ3Q7PSAwICZhbXA7JmFtcDsgZXJyICZsdDsgc2l6ZWAuIFdoZW4gdGhpcyBjb25kaXRpb24gd2FzIHRydWUgdGhlIGNvZGUgc2V0IGBlcnIgPSAtRUlOVkFMO2AgYW5kIHRoZW4gcmV0dXJuZWQgMCwgd2lwaW5nIG91dCB0aGUgZXJyb3IuIFRoZSBmaXggcmVtb3ZlcyB0aGlzICYjMzQ7cmV0dXJuIDA7JiMzNDsgbWFraW5nIGBjb250cm9sX3dyaXRlYCBhY3R1YWxseSByZXR1cm4gdGhlIGVycm9yIGNvZGUuIFNvIG5vdywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcmVjZWl2ZSBhIG1lYW5pbmdmdWwgaW5kaWNhdGlvbiBvZiB3aGV0aGVyIHRoZSBjb250cm9sIHRyYW5zZmVyIHN1Y2NlZWRlZCBvciBmYWlsZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiBleHBsb2l0LCBtZWFuaW5nLCBpcyBpdCBzb21ldGhpbmcgd2UgY2FuIHRyaWdnZXIgYW5kIGZ1eno/CgpMZXQmIzM5O3Mgc2VlLiBUaGlzIGBjaDkyMDBgIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLiBTeXprYWxsZXIgc3VwcG9ydHMgVVNCIGVtdWxhdGlvbjsgaXQgY2FuIHNpbXVsYXRlIGEgVVNCIGRldmljZSB3aXRoIFZJRCAweDFBODYgYW5kIFBJRCAweEUwOTIsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIHNob3VsZCBjYXVzZSB0aGUgYGNoOTIwMGAgZHJpdmVyIHRvIGJlIHByb2JlZCwgdWx0aW1hdGVseSBpbnZva2luZyBgY29udHJvbF93cml0ZWAgdmlhIHRoZSBwcm9iZSBwcm9jZXNzIChgdXNibmV0X3Byb2JlYCAtJmd0OyBgY2g5MjAwX2JpbmRgKS4gVGhlIGtleSBpcyB3aGV0aGVyIGBjb250cm9sX3dyaXRlYCBnZXRzIGV4ZWN1dGVkIGluIHRoaXMgc2VxdWVuY2UuCgpZZXMsIGBjaDkyMDBfYmluZGAgZGVmaW5pdGVseSBjYWxscyBgY29udHJvbF93cml0ZWAsIGFuZCBzbyBkb2VzIGBjaDkyMDBfbWRpb193cml0ZWAuIFNvLCB0aGUgcGF0aCBpcyB0aGVyZSEKClN5emthbGxlciBpcyBhbHJlYWR5IHNldCB1cCB0byBmdXp6IFVTQiBkcml2ZXJzLiBTZWN0aW9uIDMgb2YgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgbWVudGlvbnMgVVNCIGdhZGdldCBzdXBwb3J0LgoKU28sIGluIHN1bW1hcnk6IHdlIGhhdmUgYSBwb3RlbnRpYWwgYnVnIHRoYXQsIHRoYW5rcyB0byB0aGUgZml4LCBjYW4gbm93IHByb3BhZ2F0ZSBlcnJvcnMuIFRoZSBkcml2ZXIgaXMgYWNjZXNzaWJsZSB2aWEgVVNCIGVtdWxhdGlvbiwgYW5kIHN5emthbGxlciBpcyBhIHBlcmZlY3QgdG9vbCBmb3IgZnV6emluZyBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgS2NvbmZpZyBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCwgYnV0IGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1enppbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0g5MjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjEzLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE1Olx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTYtXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTktXHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFVTQiBldGhlcm5ldCBhZGFwdGVyIHdpdGggYSBRaW5IZW5nXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo2MjA6XHQgIENIOTIwMCBjaGlwc2V0LlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjIxLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfVVNCX05FVF9DRENfTUJJTSlcdCYjNDM7PSBjZGNfbWJpbS5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVx0JiM0Mzs9IGNoOTIwMC5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVFDMTExKVx0JiM0Mzs9IGFxYzExMS5vXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjI0OiNkZWZpbmUgQ0g5MjAwX1ZJRFx0XHQweDFBODZcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNTojZGVmaW5lIENIOTIwMF9QSURfRTA5Mlx0XHQweEUwOTJcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9Mzk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzk1Olx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzk2LVx0LmZsYWdzID0gRkxBR19FVEhFUixcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9NDI0PW1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MjY6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1FpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI3LU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIFVTQl9ORVRfQ0g5MjAwIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYFVTQl9ORVRfQ0g5MjAwYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyByZXF1aXJlZCBhbmQgd2hhdCBlbmFibGluZyB0aGlzIGRyaXZlciBlbnRhaWxzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGhlYWRpbmcgdG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCB0byBzdGFydCB0aGUgYW5hbHlzaXMuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgZ29pbmcgdG8gYmUgYSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaGlkZGVuIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IGJhc2UgVVNCIG5ldHdvcmtpbmcgc3VwcG9ydCwgYW55IHJlbGV2YW50IFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywgYW55IG90aGVyIGNoaXBzZXQtc3BlY2lmaWMgb3B0aW9ucyB0aGF0IG1pZ2h0IGNvbWUgaW50byBwbGF5LCBhbmQgd2hldGhlciB0aGlzIGRyaXZlciBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBhbnkgb3RoZXJzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBlbnN1cmUgYSByb2J1c3QgYW5kIHdlbGwtZGVmaW5lZCBjb25maWd1cmF0aW9uIHRoYXQgd29uJiMzOTt0IGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaXNzdWVzIGRvd24gdGhlIGxpbmUgd2hlbiBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdCAgNEcgbW9kZW0gZnJvbSBWZXJpem9uOlxuIDYxMTpcdFxuIDYxMjpcdFx0ICBodHRwOi8vdWJ1bnR1Zm9ydW1zLm9yZy9zaG93cG9zdC5waHA/cD0xMDU4OTY0N1x1MDAyNnBvc3Rjb3VudD0xN1xuIDYxMzpcdFxuIDYxNDpcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuIDYxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gNjE2Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2MTc6XHRcdHNlbGVjdCBNSUlcbiA2MTg6XHRcdGhlbHBcbiA2MTk6XHRcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgVVNCIGV0aGVybmV0IGFkYXB0ZXIgd2l0aCBhIFFpbkhlbmdcbiA2MjA6XHRcdCAgQ0g5MjAwIGNoaXBzZXQuXG4gNjIxOlx0XG4gNjIyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDYyMzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxuIDYyNDpcdFxuIDYyNTpcdGNvbmZpZyBVU0JfTkVUX0FRQzExMVxuIDYyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XCYjMzQ7XG4gNjI3Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2Mjg6XHRcdHNlbGVjdCBDUkMzMlxuIDYyOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBVU0JfVVNCTkVUIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfVVNCTkVUYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBmb3Jnb3R0ZW4gYWJvdXQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGxpZ2h0IG9mIHRoZSByZWNlbnQgY2hhbmdlcy4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gbmV0d29ya2luZyBhY3Jvc3Mgc3VjaCBhIHdpZGUgYXJyYXkgb2YgZGV2aWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgZmVhdHVyZSBidWlsZHMgY2xlYW5seSwgbGlua3MgY29ycmVjdGx5LCBhbmQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIGFueSBgZGVmYXVsdGAgdmFsdWVzIHRoYXQgY291bGQgaW5kaXJlY3RseSBpbXBhY3QgYFVTQl9VU0JORVRgJiMzOTtzIGluY2x1c2lvbiBvciBleGNsdXNpb24uIEkgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCB3ZWxsLCBzbyBvdGhlcnMgY2FuIGZpbmQgd2hhdCB0aGV5IG5lZWQsIGFuZCBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZmxpY3RzIHdpdGggb3RoZXIgVVNCIG9yIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBldmVyeSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1VTQk5FVFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgLSBMaW5lcyAxMzAtMTQwKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDEzMC0xNDAgb2YgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHNlY3Rpb24gcGVydGFpbnMgdG8gYSBzcGVjaWZpYyBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyLCBnaXZlbiB0aGUgZmlsZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBwb3NzaWJseSBzb21lIGRlZmF1bHQgc2V0dGluZ3MuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGRyaXZlciYjMzk7cyBjb25maWd1cmFiaWxpdHkgbGllcy4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gYXNzZXNzIHRoZSBtb2R1bGFyaXR5LCBhbnkgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgbmV0d29yayBvciBVU0Igc3Vic3lzdGVtcywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBjaG9pY2VzIG1hZGUgYnkgdGhlIGRyaXZlciBtYWludGFpbmVyLiBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzIGhlbHBzIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmVoYXZlIGJ5IGRlZmF1bHQuIEkgYW0gbG9va2luZyBmb3Igd2F5cyBJIGNvdWxkIGN1c3RvbWl6ZSB0aGUgZHJpdmVyLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciBhbnkgdW51c3VhbCBmbGFncyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB0aGF0IG1pZ2h0IGluZGljYXRlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydC4gSSB3aWxsIGJlIGNvbXBhcmluZyB0aGlzIHBhcnQgdG8gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cbiAxMzE6XHRcbiAxMzI6XHRjb25maWcgVVNCX1VTQk5FVFxuIDEzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiAxMzQ6XHRcdHNlbGVjdCBNSUlcbiAxMzU6XHRcdGhlbHBcbiAxMzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxuIDEzNzpcdFx0ICB3aXRoIFwmIzM0O21pbmlkcml2ZXJzXCYjMzQ7IGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXG4gMTM4Olx0XHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xuIDEzOTpcdFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIFRoZSBVU0IgaG9zdCBydW5zIFwmIzM0O3VzYm5ldFwmIzM0OywgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XG4gMTQyOlx0XG4gMTQzOlx0XHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXCYjMzQ7bmV0d29ya1wmIzM0OyBvciBcJiMzNDtkYXRhIHRyYW5zZmVyXCYjMzQ7XG4gMTQ0Olx0XHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIGZvciB0aGUgYFVTQl9VU0JORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgaXQgcmVsaWVzIG9uIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCX1NVUFBPUlRgLCBvciBgTkVUREVWSUNFU2AuIEJlc3QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBiZWdpbiBteSBhbmFseXNpcyBmcm9tIHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBsaW5lIG9uZSwgYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIGZyb20gdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbW1lbnQgXCYjMzQ7SG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XCYjMzQ7XG4gICA2Olx0XHRkZXBlbmRzIG9uICFVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTmV0d29yayBBZGFwdGVyc1wmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCBVU0IgaWYgVVNCXG4gIDExOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gIDEyOlx0XG4gIDEzOlx0aWYgVVNCX05FVF9EUklWRVJTXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFVTQl9DQVRDXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcbiAgMjA6XHRcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcbiAgMjE6XHRcdCAgQmVsa2luIEY1VTAxMVxuICAyMjpcdFx0ICBCZWxraW4gRjVVMTExXG4gIDIzOlx0XHQgIENBVEMgTmV0TWF0ZVxuICAyNDpcdFx0ICBDQVRDIE5ldE1hdGUgSUlcbiAgMjU6XHRcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXG4gIDI2Olx0XG4gIDI3Olx0XHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXG4gIDI4Olx0XHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cbiAgMjk6XHRcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFVTQl9LQVdFVEhcbiAgMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxuICAzODpcdFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcbiAgMzk6XHRcdCAgM0NvbSAzQzE5MjUwXG4gIDQwOlx0XHQgIEFEUyBVU0ItMTBCVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwNwoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA3NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENIOTIwMCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zLiBgVVNCX05FVF9DSDkyMDBgIGRlcGVuZHMgb24gYFVTQl9VU0JORVRgLCB3aGljaCBpcyBpdHNlbGYgdW5kZXIgYFVTQl9ORVRfRFJJVkVSU2AuIEFuZCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBVU0JgIGNvbmZpZyBpcyByZXF1aXJlZC4gU28sIHRoZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgVVNCX05FVF9DSDkyMDBgLCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQgYFVTQmAuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZD8gQWhhLCBpdCYjMzk7cyB0aGUgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uLCB3aGljaCBpcyAqc3RhdGljKiB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIFRoaXMgaXMgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlIHdobyBjYWxscyBpdDogYGNoOTIwMF9tZGlvX3dyaXRlYCBhbmQgYGNoOTIwMF9iaW5kYC4gT2theSwgc28gYGNoOTIwMF9iaW5kYCBhbmQgYGNoOTIwMF9tZGlvX3dyaXRlYCBhcmUgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY2hhbmdlcyB0byBgY29udHJvbF93cml0ZWAuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMgaW4gYGNoOTIwMC5jYCBhcmUgYGNoOTIwMF9iaW5kYCwgYGNoOTIwMF9tZGlvX3dyaXRlYCBhbmQgb2YgY291cnNlIGBjb250cm9sX3dyaXRlYC4gSSBuZWVkIHRvIGNvbmZpcm0gYWdhaW4gdGhhdCBgY29udHJvbF93cml0ZWAgaXMgaW5kZWVkIHN0YXRpYy4gQWggeWVzLCBpdCBpcy4gQnV0IGBjaDkyMDBfYmluZGAgaXMgbm9uLXN0YXRpYyAoYnV0IGFsc28gc3RhdGljIGluIHRoZSBjb2RlLCBsaW5lIDMzNiBvZiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCA6IGBzdGF0aWMgaW50IGNoOTIwMF9iaW5kLi4uYCBidXQgcmVmZXJlbmNlZCBpbiBgY2g5MjAwX2luZm9gIHN0cnVjdCkuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IGdsb2JhbGx5IGV4cG9ydGVkLCBhcmUgc3RpbGwgc3ltYm9saWNhbGx5IHByZXNlbnQgaW4gc3RhbmRhcmQgYnVpbGRzICh3aXRoIGBrYWxsc3ltc2Agb3IgZnVuY3Rpb24gdHJhY2luZykgd2l0aGluIHRoZSBrZXJuZWwgb3IgdGhlIG1vZHVsZSwgdW5sZXNzIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0sIHNvIHRoYXQmIzM5O3MgZ29vZC4KCk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSB3aGF0IHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENvbnNpZGVyaW5nIG91ciBnb2FscywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4gU28sIGBjb250cm9sX3dyaXRlYCwgYGNoOTIwMF9iaW5kYCwgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAgYXJlIHRoZSB0YXJnZXRzLiBNYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIHJlcXVpcmVtZW50czogSXQmIzM5O3MgYSByZWFjaGFibGUgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgdmlhIHZpcnR1YWwgYnVzZXMgKHJhdy1nYWRnZXQgVVNCIGZ1enppbmcpLCBzbyB0aGF0JiMzOTtzIGEgY2hlY2suIEFsc28sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgY29udHJvbF93cml0ZWAuIEluc3RlYWQgb2YgYWx3YXlzIHJldHVybmluZyAwLCBpdCB3aWxsIHJldHVybiBlcnJvcnMsIHBvdGVudGlhbGx5IGltcGFjdGluZyBgY2g5MjAwX2JpbmRgIGFuZCBgY2g5MjAwX21kaW9fd3JpdGVgLiBUaGlzIGNoYW5nZSBjYW4gbGVhZCB0byBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIHByb2JlL2JpbmQvd3JpdGUgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgpTbywgaXMgaXQgV29ydGhGdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuCgpGaW5hbGx5LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYC4KCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCB0byB0aGUgcG9pbnQuIFRoaXMgVVNCIG5ldHdvcmsgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIHN5emthbGxlciBVU0IgcmF3LWdhZGdldCBlbXVsYXRpb24sIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYGNvbnRyb2xfd3JpdGVgIGlzIGNoYW5nZWQgdG8gcHJvcGVybHkgcHJvcGFnYXRlIFVTQiBjb250cm9sIG1lc3NhZ2UgZXJyb3JzIGR1cmluZyBiaW5kL3dyaXRlIG9wZXJhdGlvbnMuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywgJiMzNDtjaDkyMDBfYmluZCYjMzQ7LCAmIzM0O2NoOTIwMF9tZGlvX3dyaXRlJiMzNDtdYC4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LCAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LCAmIzM0O1VTQiYjMzQ7XWAuCgpFdmVyeXRoaW5nIHNlZW1zIGNvcnJlY3QsIGFsbCBiYXNlcyBhcmUgY292ZXJlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb250cm9sX3dyaXRlJiMzNDssCiAgICAmIzM0O2NoOTIwMF9iaW5kJiMzNDssCiAgICAmIzM0O2NoOTIwMF9tZGlvX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBzbyB0aGF0IGNvbnRyb2xfd3JpdGUoKSBjb3JyZWN0bHkgcHJvcGFnYXRlcyBlcnJvciBjb2RlcyBmcm9tIHVzYl9jb250cm9sX21zZygpIHJhdGhlciB0aGFuIHVuY29uZGl0aW9uYWxseSByZXR1cm5pbmcgMC4gQ0g5MjAwIGlzIGEgVVNCIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OywKICAgICYjMzQ7Y2g5MjAwX21kaW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLiBGdXp6aW5nIGNhbiB2ZXJpZnkgZXJyb3ItaGFuZGxpbmcgYW5kIGJpbmRpbmcgbG9naWMgd2hlbiBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZmFpbCBvciByZXR1cm4gdW5leHBlY3RlZCBzaXplcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXJzcGFjZS1mYWNpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIGJ1ZmZlcnMgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXJzIHByaW9yIHRvIGludm9jYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDg6Mjc6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKaW5kZXggYTIwNmZmYTc2ZjFiOS4uM2E4MWU5ZTk2ZmQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwpAQCAtMTY4LDggJiM0MzsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsCiAJCWVyciA9IC1FSU5WQUw7CiAJa2ZyZWUoYnVmKTsKIAotCXJldHVybiAwOwotCiBlcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjaDkyMDAgRHJpdmVyIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIFRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBteSBmaXJzdCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UsIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWFkIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJiMzOTtsbCBsZXZlcmFnZSBteSBleHBlcnQga25vd2xlZGdlIGFuZCBkaXJlY3RseSB1c2UgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgbGluZSAxNjguIEZvY3VzaW5nIGluIG9uIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gc3RhcnQgZm9ybWluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDEzMTpcdFx0a2ZyZWUoYnVmKTtcbiAxMzI6XHRcbiAxMzM6XHRlcnJfb3V0OlxuIDEzNDpcdFx0cmV0dXJuIGVycjtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxuIDEzODpcdFx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4gMTM5Olx0XHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxuIDE0MDpcdHtcbiAxNDE6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XG4gMTQyOlx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcbiAxNDM6XHRcdGludCBlcnIgPSAwO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9XUklURSlcbiAxNDY6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNDc6XHRcdFx0XHRcdFVTQl9SRUNJUF9PVEhFUik7XG4gMTQ4Olx0XHRlbHNlXG4gMTQ5Olx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTUwOlx0XHRcdFx0XHRVU0JfUkVDSVBfREVWSUNFKTtcbiAxNTE6XHRcbiAxNTI6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcblwmIzM0OyxcbiAxNTM6XHRcdFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdGlmIChkYXRhKSB7XG4gMTU2Olx0XHRcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTU3Olx0XHRcdGlmICghYnVmKSB7XG4gMTU4Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxNTk6XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gMTYwOlx0XHRcdH1cbiAxNjE6XHRcdH1cbiAxNjI6XHRcbiAxNjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxNjQ6XHRcdFx0XHQgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDE2NTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTY2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTY3Olx0XHRpZiAoZXJyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZXJyIFx1MDAzYyBzaXplKVxuIDE2ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE2OTpcdFx0a2ZyZWUoYnVmKTtcbiAxNzA6XHRcbiAxNzE6XHRlcnJfb3V0OlxuIDE3MjpcdFx0cmV0dXJuIGVycjtcbiAxNzM6XHR9XG4gMTc0Olx0XG4gMTc1Olx0c3RhdGljIGludCBjaDkyMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG4gMTc2Olx0e1xuIDE3NzpcdFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiAxNzg6XHRcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcbiAxNzk6XHRcdGludCByZXQ7XG4gMTgwOlx0XG4gMTgxOlx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7JXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXG5cJiMzNDssXG4gMTgyOlx0XHRcdCAgIF9fZnVuY19fLCBwaHlfaWQsIGxvYyk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAocGh5X2lkICE9IDApXG4gMTg1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDE4NjpcdFxuIDE4NzpcdFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxuIDE4ODpcdFx0XHRcdCAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMTg5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNvbnRyb2xfd3JpdGVgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgY29udHJvbF93cml0ZWAgZnVuY3Rpb24sIHRoZXJlIHdhcyBhIGdsYXJpbmcgaXNzdWUuIFByZXZpb3VzbHksIGV2ZW4gaWYgdGhlIGB1c2JfY29udHJvbF9tc2dgIGZ1bmN0aW9uIHJldHVybmVkIGFuIGVycm9yIOKAkyBtYXliZSBhIHRpbWVvdXQgb3IgYSBwaXBlIGVycm9yIOKAkyB0aGUgY29kZSB3YXMgKnVuY29uZGl0aW9uYWxseSogcmV0dXJuaW5nIDAhIFRoZSBgcmV0dXJuIDA7YCB3YXMgZWZmZWN0aXZlbHkgbWFza2luZyBhbnkgZXJyb3JzLiBJdCB3YXMgY29tcGxldGVseSBpZ25vcmluZyB0aGUgdmFsdWUgb2YgYGVycmAgc2V0IGJ5IHRoZSBgdXNiX2NvbnRyb2xfbXNnYCBjYWxsLiBBbmQgZXZlbiBpZiBgZXJyYCB3YXMgc2V0IHRvIGAtRUlOVkFMYCBpZiBgZXJyICZsdDsgc2l6ZWAsIHRoZSBgcmV0dXJuIDA7YCB3YXMgc3RpbGwgb3ZlcnJpZGluZyB0aGUgZXJyb3IuIE5vdywgcmVtb3ZpbmcgdGhlIGByZXR1cm4gMDtgIHdpbGwgY2hhbmdlIHRoZSBiZWhhdmlvciwgc28gdGhhdCBpdCByZXR1cm5zIGBlcnJgLCB0aGUgY29ycmVjdCBlcnJvciBjb2RlLgoKTm93IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGB1c2JfY29udHJvbF9tc2dgIHJldHVybnMgb24gc3VjY2Vzcy4gRm9yIGFuIE9VVCB0cmFuc2ZlciAoaG9zdCB0byBkZXZpY2UpIGxpa2UgdGhpcywgaXQgcmV0dXJucyB0aGUgKm51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCosIHRoYXQgaXMsIGBzaXplYC4gU28sIGlmIGBlcnJgIGVxdWFscyBgc2l6ZWAsIHRoYXQgbWVhbnMgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLCBhbmQgd2Ugd2FudCB0byByZXR1cm4gYHNpemVgLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2FsbGVycyBhcmUgaGFuZGxpbmcgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHNlZSBob3cgYGNvbnRyb2xfd3JpdGVgIGlzIGJlaW5nIHVzZWQgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIFRpbWUgdG8gY2hlY2sgdGhvc2UgY2FsbGVycyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29udHJvbF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9OTk9c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTM3OnN0YXRpYyBpbnQgY29udHJvbF93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9MTk1PXN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIwOS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyMTA6XHRjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTEtXHRcdCAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTMzNj1zdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM1OC1cdGRhdGFbMV0gPSAweDBGO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM1OTpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjAtXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2My1cdGRhdGFbMV0gPSAweDkwO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM2NDpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzY1LVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjgtXHRkYXRhWzFdID0gMHgwMDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjk6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzAtXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3My1cdGRhdGFbMV0gPSAweEQ4O1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NDpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzUtXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3OS1cdGRhdGFbMV0gPSAweDAwO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM4MDpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgxLVx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODQtXHRkYXRhWzFdID0gMHgwRDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODU6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4Ni1cdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYGNoOTIwMF9iaW5kYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiB0aGUgYGNoOTIwMF9iaW5kYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgY29kZSBibG9jayB0aGF0IHJ1bnMgZnJvbSByb3VnaGx5IGxpbmUgMzM2IHRocm91Z2ggMzkwLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGJpbmRpbmcgaXMgaGFwcGVuaW5nLCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHBvc3NpYmxlIGFyZWFzIHRoYXQgYXJlIGNhdXNpbmcgdGhlIGlzc3VlLiBUaW1lIHRvIGFuYWx5emUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzY6XHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gMzM3Olx0e1xuIDMzODpcdFx0aW50IHJldHZhbCA9IDA7XG4gMzM5Olx0XHR1bnNpZ25lZCBjaGFyIGRhdGFbMl07XG4gMzQwOlx0XHR1OCBhZGRyW0VUSF9BTEVOXTtcbiAzNDE6XHRcbiAzNDI6XHRcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XG4gMzQzOlx0XHRpZiAocmV0dmFsKVxuIDM0NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM0NTpcdFxuIDM0NjpcdFx0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuIDM0NzpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xuIDM0ODpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XG4gMzUwOlx0XG4gMzUxOlx0XHRkZXYtXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VoYXJkX210dSA9IGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VuZXQtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIDM1NDpcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCAmIzQzOyAxNjtcbiAzNTU6XHRcdG1paV9ud2F5X3Jlc3RhcnQoXHUwMDI2ZGV2LVx1MDAzZW1paSk7XG4gMzU2Olx0XG4gMzU3Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzNTg6XHRcdGRhdGFbMV0gPSAweDBGO1xuIDM1OTpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxuIDM2MDpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM2MTpcdFxuIDM2MjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzYzOlx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjQ6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY1Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzY2Olx0XG4gMzY3Olx0XHRkYXRhWzBdID0gMHgzMDtcbiAzNjg6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM2OTpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG4gMzcwOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcxOlx0XG4gMzcyOlx0XHRkYXRhWzBdID0gMHgxNztcbiAzNzM6XHRcdGRhdGFbMV0gPSAweEQ4O1xuIDM3NDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxuIDM3NTpcdFx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NjpcdFxuIDM3NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzc4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzNzk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM4MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzODE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzODI6XHRcbiAzODM6XHRcdGRhdGFbMF0gPSAweDVGO1xuIDM4NDpcdFx0ZGF0YVsxXSA9IDB4MEQ7XG4gMzg1Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuIDM4NjpcdFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM4NzpcdFxuIDM4ODpcdFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XG4gMzg5Olx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYWRkcik7XG4gMzkwOlx0XG4gMzkxOlx0XHRyZXR1cm4gcmV0dmFsO1xuIDM5MjpcdH1cbiAzOTM6XHRcbiAzOTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xuIDM5NTpcdFx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gVVNCIE5ldHdvcmsgRHJpdmVyIExvZ2ljKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGNvbnRyb2xfcmVhZGAgYW5kIGBjb250cm9sX3dyaXRlYCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIENIOTIwMCBVU0IgbmV0d29yayBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBjb250cm9sX3JlYWRgIGluIHRoYXQgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGJvdGggcmVhZCBhbmQgd3JpdGUgcmVmZXIgdG8gdGhlIGNvbnRyb2wgZW5kcG9pbnQsIHNvIGEgY2FyZWZ1bCBpbnNwZWN0aW9uIG9mIHRoaXMgc2VjdGlvbiBzaG91bGQgc2hvdyBtZSBob3cgdGhlIGRldmljZSYjMzk7cyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgaG9zdCBpbnRlcmFjdHMgd2l0aCB0aGUgQ0g5MjAwIGluIHRoZSBjb250cm9sIHRyYW5zZmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0I2RlZmluZSBFVE5fVFhfRklGT19ERVBUSFx0KDB4MDEgXHUwMDNjXHUwMDNjIDgpXG4gIDk2Olx0I2RlZmluZSBFVEhfUlhCRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNylcbiAgOTc6XHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgOTg6XHRcbiAgOTk6XHRzdGF0aWMgaW50IGNvbnRyb2xfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsXG4gMTAwOlx0XHRcdFx0dW5zaWduZWQgY2hhciByZXF1ZXN0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSxcbiAxMDE6XHRcdFx0XHR1bnNpZ25lZCBzaG9ydCBpbmRleCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSxcbiAxMDI6XHRcdFx0XHRpbnQgdGltZW91dClcbiAxMDM6XHR7XG4gMTA0Olx0XHR1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMO1xuIDEwNTpcdFx0dW5zaWduZWQgY2hhciByZXF1ZXN0X3R5cGU7XG4gMTA2Olx0XHRpbnQgZXJyID0gMDtcbiAxMDc6XHRcbiAxMDg6XHRcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfUkVBRClcbiAxMDk6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfT1RIRVIpO1xuIDExMDpcdFx0ZWxzZVxuIDExMTpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTEyOlx0XHRcdFx0XHRVU0JfUkVDSVBfREVWSUNFKTtcbiAxMTM6XHRcbiAxMTQ6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcblwmIzM0OyxcbiAxMTU6XHRcdFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcbiAxMTY6XHRcbiAxMTc6XHRcdGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTE4Olx0XHRpZiAoIWJ1Zikge1xuIDExOTpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDEyMDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4gMTIxOlx0XHR9XG4gMTIyOlx0XG4gMTIzOlx0XHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVx1MDAzZXVkZXYsXG4gMTI0Olx0XHRcdFx0ICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi1cdTAwM2V1ZGV2LCAwKSxcbiAxMjU6XHRcdFx0XHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxuIDEyNjpcdFx0XHRcdCAgICAgIHRpbWVvdXQpO1xuIDEyNzpcdFx0aWYgKGVyciA9PSBzaXplKVxuIDEyODpcdFx0XHRtZW1jcHkoZGF0YSwgYnVmLCBzaXplKTtcbiAxMjk6XHRcdGVsc2UgaWYgKGVyciBcdTAwM2U9IDApXG4gMTMwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTMxOlx0XHRrZnJlZShidWYpO1xuIDEzMjpcdFxuIDEzMzpcdGVycl9vdXQ6XG4gMTM0Olx0XHRyZXR1cm4gZXJyO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gMTM4Olx0XHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbiAxMzk6XHRcdFx0XHQgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSwgaW50IHRpbWVvdXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjkKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMTAwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYGNvbnRyb2xfd3JpdGVgIFBhdGNoIGFuZCBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBpbiB0aGUgQ0g5MjAwIGRyaXZlci4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBgcmV0dXJuIDA7YCB0aGF0IHdhcywgZXNzZW50aWFsbHksIG1hc2tpbmcgYW55IGVycm9ycyByZXR1cm5lZCBmcm9tIGB1c2JfY29udHJvbF9tc2dgLiBXZSYjMzk7cmUgcmVtb3ZpbmcgdGhhdCwgYWxsb3dpbmcgdGhlIGZ1bmN0aW9uIHRvIGNvcnJlY3RseSByZXR1cm4gdGhlIGVycm9yIGNvZGUgKGBlcnJgKSBpZiB0aGUgVVNCIGNvbnRyb2wgbWVzc2FnZSBmYWlscywgb3IgYC1FSU5WQUxgIGlmIHRoZXJlIHdhcyBhIHNpemUgbWlzbWF0Y2guIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/CgpMZXQmIzM5O3Mgd2FsayB0aHJvdWdoIGl0LiBJbnNpZGUgYGNvbnRyb2xfd3JpdGVgLCB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciAoYGJ1ZiA9IGttZW1kdXAoLi4uKWApIGlmIGRhdGEgaXMgcHJvdmlkZWQuIFRoZW4gd2UgY2FsbCBgdXNiX2NvbnRyb2xfbXNnYC4gQWZ0ZXIgdGhhdCwgd2UgY2hlY2sgaWYgdGhlIHJldHVybmVkIGVycm9yIGBlcnJgIGluZGljYXRlcyBhIHNob3J0IHdyaXRlLiBGaW5hbGx5LCB3ZSBga2ZyZWUoYnVmKWAuIFRoZSBrZXkgY2hhbmdlIGlzIHJlbW92aW5nIHRoYXQgcHJlbWF0dXJlIGByZXR1cm4gMDtgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHRoZSBkZXZpY2Ugb3IsIGV2ZW4gd29yc2UsIHRvIHVzZXJzcGFjZS4gU28sIEkgbmVlZCB0byBjaGVjazogZG9lcyBgY29udHJvbF93cml0ZWAgd3JpdGUgYW55dGhpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBidWZmZXI/IFRoZSBhbnN3ZXIgaXMgbm87IGBjb250cm9sX3dyaXRlYCBpcyBhIFVTQiB3cml0ZSBmdW5jdGlvbi4gTmV4dCwgYXJlIGFueSBjYWxsZXJzIG9mIGBjb250cm9sX3dyaXRlYCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2Ugb2YgdGhpcyBjaGFuZ2U/CgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgY2FsbGVyczogRmlyc3QsIGBjaDkyMDBfbWRpb193cml0ZWAuIFRoZSBjb2RlIHNob3dzIHRoZSBgYnVmZmAgdmFyaWFibGUgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC4gSW1wb3J0YW50bHksIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgIGlzICppZ25vcmVkKiBoZXJlLCBzbyBldmVuIGlmIGl0IHJldHVybmVkIGFuIGVycm9yIGl0IHdvdWxkbiYjMzk7dCBiZSBoYW5kbGVkLiBOZXh0LCB3ZSBoYXZlIGBjaDkyMDBfYmluZGAuIGBkYXRhYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgKmVhY2gqIGNhbGwgdG8gYGNvbnRyb2xfd3JpdGVgLCBhbmQgdGhlIHJlc3VsdCBpcyBvdmVyd3JpdHRlbi4gU28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgY2hhbmdlIGNhdXNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkIGJ5IHRoZSBjYWxsZXIuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY2FsbGVycyBvciB1c2FnZXM/IE5vcGUuIFNvLCB0aGF0JiMzOTtzIGdvb2QuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjcml0ZXJpYSByaWdvcm91c2x5OgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vLCB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIHRvIHRoZSBVU0IgZGV2aWNlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMvYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm90IGluIHRoaXMgY2FzZS4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm8sIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLgoKU28sIHRvIHN1bW1hcml6ZSBmb3IgdGhlIHJlY29yZDogdGhpcyBwYXRjaCBzaW1wbHkgcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBgcmV0dXJuIDA7YCBmcm9tIGBjb250cm9sX3dyaXRlKClgLiBUaGlzIHdhcyBtYXNraW5nIHRoZSByZXR1cm4gY29kZSBmcm9tIGB1c2JfY29udHJvbF9tc2dgLCBhbmQgd2UmIzM5O3JlIGFsbG93aW5nIHRoZSBmdW5jdGlvbiB0byBwcm9wZXJseSByZXR1cm4gdGhlIGFjdHVhbCBlcnJvci4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGV4cG9zdXJlIG9mIGRhdGEgdG8gdXNlcnNwYWNlLCBubyByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gU3RhbmRhcmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzU2FuaXRpemVyKSBjaGVja3MgYW5kIGVycm9yIGhhbmRsaW5nIGFyZSBwZXJmZWN0bHkgc3VmZmljaWVudC4gS01TQU4gaXMgbm90IHJlcXVpcmVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXJzcGFjZS1mYWNpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIGJ1ZmZlcnMgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXJzIHByaW9yIHRvIGludm9jYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiBlcnJvbmVvdXMgYHJldHVybiAwO2AgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzpjb250cm9sX3dyaXRlKClgLCBhbGxvd2luZyBlcnJvciByZXR1cm4gdmFsdWVzIGZyb20gYHVzYl9jb250cm9sX21zZygpYCBvciBgLUVJTlZBTGAgb24gaW5jb21wbGV0ZSB3cml0ZXMgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGJhY2sgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIGJlaW5nIHVuY29uZGl0aW9uYWxseSBtYXNrZWQgYnkgYDBgLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlcnNwYWNlLWZhY2luZyBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlcnMgcHJpb3IgdG8gaW52b2NhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIGZ1bGx5IHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjAxLjE1NzUzNjAwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzM4NzYyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQ0g5MjAwXCIsXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbnRyb2xfd3JpdGVcIixcbiAgICBcImNoOTIwMF9iaW5kXCIsXG4gICAgXCJjaDkyMDBfbWRpb193cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiBlcnJvbmVvdXMgYHJldHVybiAwO2AgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzpjb250cm9sX3dyaXRlKClgLCBhbGxvd2luZyBlcnJvciByZXR1cm4gdmFsdWVzIGZyb20gYHVzYl9jb250cm9sX21zZygpYCBvciBgLUVJTlZBTGAgb24gaW5jb21wbGV0ZSB3cml0ZXMgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGJhY2sgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIGJlaW5nIHVuY29uZGl0aW9uYWxseSBtYXNrZWQgYnkgYDBgLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2Vyc3BhY2UtZmFjaW5nIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCBidWZmZXJzIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVycyBwcmlvciB0byBpbnZvY2F0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgZnVsbHkgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgc28gdGhhdCBjb250cm9sX3dyaXRlKCkgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMgZnJvbSB1c2JfY29udHJvbF9tc2coKSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuaW5nIDAuIENIOTIwMCBpcyBhIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHN5emthbGxlcidzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjAxLjE1NzU0MDg1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3MzYzNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjI3OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXFxuQEAgLTE2OCw4ICsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdGtmcmVlKGJ1Zik7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuIGVycl9vdXQ6XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MDEuNjk1OTA0NjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTcxNjcxMjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb250cm9sX3dyaXRlXCIsXG4gICAgXCJjaDkyMDBfYmluZFwiLFxuICAgIFwiY2g5MjAwX21kaW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgc28gdGhhdCBjb250cm9sX3dyaXRlKCkgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMgZnJvbSB1c2JfY29udHJvbF9tc2coKSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuaW5nIDAuIENIOTIwMCBpcyBhIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHN5emthbGxlcidzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDg6Mjc6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuQEAgLTE2OCw4ICsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJyX291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MDEuNjk1OTA2NjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgyODUxNjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGRpZmYsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpZWQgZmlsZSwgd2hpY2ggaXMgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIE5vdywgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDE2OCBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjA5LjUyNDQyNTQ3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XFxuIDE0MjpcXHRcXHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcXG4gMTQzOlxcdFxcdGludCBlcnIgPSAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxcbiAxNDY6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9PVEhFUik7XFxuIDE0ODpcXHRcXHRlbHNlXFxuIDE0OTpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxNTM6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTU2OlxcdFxcdFxcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDE1NzpcXHRcXHRcXHRpZiAoIWJ1Zikge1xcbiAxNTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTU5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0ZXJyX291dDpcXG4gMTcyOlxcdFxcdHJldHVybiBlcnI7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdHN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbiAxNzY6XFx0e1xcbiAxNzc6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMTc4OlxcdFxcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcXG4gMTc5OlxcdFxcdGludCByZXQ7XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwiJXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXFxcblxcXCIsXFxuIDE4MjpcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5X2lkLCBsb2MpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRpZiAocGh5X2lkICE9IDApXFxuIDE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbiAxODg6XFx0XFx0XFx0XFx0ICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMTg5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzowOS41MjQ1NTE1OTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDczODY1NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgY2g5MjAwLmNgIGFuZCBgY29udHJvbF93cml0ZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBgY2g5MjAwLmNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgY29udHJvbF93cml0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBleGFtaW5hdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaXRzZWxmOyB1bmRlcnN0YW5kaW5nIGl0cyBjb3JlIHB1cnBvc2UgYW5kIHRoZSBwYXJhbWV0ZXJzIGl0IGhhbmRsZXMgaXMga2V5LiBBZnRlciB0aGF0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIHRoZSBgY2g5MjAwLmNgIGZpbGUuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBjcml0aWNhbCBpbnNpZ2h0IGludG8gdGhlIHN5c3RlbSdzIG9wZXJhdGlvbmFsIGxvZ2ljLiBJdCBpcyBsaWtlbHkgdGhhdCBgY29udHJvbF93cml0ZWAgaXMgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGNoOTIwMC5jYCBtb2R1bGUsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHBvc2l0aW9uIGluIHJlbGF0aW9uIHRvIHRob3NlIG90aGVyIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQuIEZvbGxvd2luZyB0aGVzZSBpbml0aWFsIGludmVzdGlnYXRpb25zLCBsZXQgdXMgcmVhZCBtb3JlIG9mIHRoZSByZXN0IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgYGNoOTIwMC5jYCBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjExLjk5ODQxOTcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LypcXG4gICAyOlxcdCAqIFVTQiAxME0vMTAwTSBldGhlcm5ldCBhZGFwdGVyXFxuICAgMzpcXHQgKlxcbiAgIDQ6XFx0ICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcXG4gICA1OlxcdCAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIFxcXCJhcyBpc1xcXCIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55XFxuICAgNjpcXHQgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZFxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGRkZWYuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMjM6XFx0XFxuICAyNDpcXHQjZGVmaW5lIENIOTIwMF9WSURcXHRcXHQweDFBODZcXG4gIDI1OlxcdCNkZWZpbmUgQ0g5MjAwX1BJRF9FMDkyXFx0XFx0MHhFMDkyXFxuICAyNjpcXHRcXG4gIDI3OlxcdCNkZWZpbmUgQ1RSTF9USU1FT1VUX01TXFx0XFx0MTAwMFxcbiAgMjg6XFx0XFxuICAyOTpcXHQjZGVmaW5lIENPTlRST0xfVElNRU9VVF9NUyAxMDAwXFxuICAzMDpcXHRcXG4gIDMxOlxcdCNkZWZpbmUgUkVRVUVTVF9SRUFEXFx0MHgwRVxcbiAgMzI6XFx0I2RlZmluZSBSRVFVRVNUX1dSSVRFXFx0MHgwRlxcbiAgMzM6XFx0XFxuICAzNDpcXHQvKiBBZGRyZXNzIHNwYWNlOlxcbiAgMzU6XFx0ICogMDAtNjMgOiBNSUlcXG4gIDM2OlxcdCAqIDY0LTEyODogTUFDXFxuICAzNzpcXHQgKlxcbiAgMzg6XFx0ICogTm90ZTogYWxsIGFjY2Vzc2VzIG11c3QgYmUgMTYtYml0XFxuICAzOTpcXHQgKi9cXG4gIDQwOlxcdFxcbiAgNDE6XFx0I2RlZmluZSBNQUNfUkVHX0NUUkwgNjRcXG4gIDQyOlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUVVMgNjZcXG4gIDQzOlxcdCNkZWZpbmUgTUFDX1JFR19JTlRFUlJVUFRfTUFTSyA2OFxcbiAgNDQ6XFx0I2RlZmluZSBNQUNfUkVHX1BIWV9DT01NQU5EIDcwXFxuICA0NTpcXHQjZGVmaW5lIE1BQ19SRUdfUEhZX0RBVEEgNzJcXG4gIDQ2OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0wgNzRcXG4gIDQ3OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX00gNzZcXG4gIDQ4OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0ggNzhcXG4gIDQ5OlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0wgODBcXG4gIDUwOlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00xIDgyXFxuICA1MTpcXHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMiA4NFxcbiAgNTI6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfSCA4NlxcbiAgNTM6XFx0I2RlZmluZSBNQUNfUkVHX1RIUkVTSE9MRCA4OFxcbiAgNTQ6XFx0I2RlZmluZSBNQUNfUkVHX0ZJRk9fREVQVEggOTBcXG4gIDU1OlxcdCNkZWZpbmUgTUFDX1JFR19QQVVTRSA5MlxcbiAgNTY6XFx0I2RlZmluZSBNQUNfUkVHX0ZMT1dfQ09OVFJPTCA5NFxcbiAgNTc6XFx0XFxuICA1ODpcXHQvKiBDb250cm9sIHJlZ2lzdGVyIGJpdHNcXG4gIDU5OlxcdCAqXFxuICA2MDpcXHQgKiBOb3RlOiBiaXRzIDEzIGFuZCAxNSBhcmUgcmVzZXJ2ZWRcXG4gIDYxOlxcdCAqL1xcbiAgNjI6XFx0I2RlZmluZSBMT09QQkFDS1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDE0KVxcbiAgNjM6XFx0I2RlZmluZSBCQVNFMTAwWFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDEyKVxcbiAgNjQ6XFx0I2RlZmluZSBNQlBTXzEwXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuICA2NTpcXHQjZGVmaW5lIERVUExFWF9NT0RFXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTApXFxuICA2NjpcXHQjZGVmaW5lIFBBVVNFX0ZSQU1FXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgOSlcXG4gIDY3OlxcdCNkZWZpbmUgUFJPTUlTQ1VPVVNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgNjg6XFx0I2RlZmluZSBNVUxUSUNBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiAgNjk6XFx0I2RlZmluZSBCUk9BRENBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAgNzA6XFx0I2RlZmluZSBIQVNIXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gIDcxOlxcdCNkZWZpbmUgQVBQRU5EX1BBRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDQpXFxuICA3MjpcXHQjZGVmaW5lIEFQUEVORF9DUkNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgNzM6XFx0I2RlZmluZSBUUkFOU01JVFRFUl9BQ1RJT05cXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAyKVxcbiAgNzQ6XFx0I2RlZmluZSBSRUNFSVZFUl9BQ1RJT05cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiAgNzU6XFx0I2RlZmluZSBETUFfQUNUSU9OXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDc2OlxcdFxcbiAgNzc6XFx0LyogU3RhdHVzIHJlZ2lzdGVyIGJpdHNcXG4gIDc4OlxcdCAqXFxuICA3OTpcXHQgKiBOb3RlOiBiaXRzIDctMTUgYXJlIHJlc2VydmVkXFxuICA4MDpcXHQgKi9cXG4gIDgxOlxcdCNkZWZpbmUgQUxJR05NRU5UXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNilcXG4gIDgyOlxcdCNkZWZpbmUgRklGT19PVkVSX1JVTlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDUpXFxuICA4MzpcXHQjZGVmaW5lIEZJRk9fVU5ERVJfUlVOXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gIDg0OlxcdCNkZWZpbmUgUlhfRVJST1JcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgODU6XFx0I2RlZmluZSBSWF9DT01QTEVURVxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICA4NjpcXHQjZGVmaW5lIFRYX0VSUk9SXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4gIDg3OlxcdCNkZWZpbmUgVFhfQ09NUExFVEVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAgODg6XFx0XFxuICA4OTpcXHQvKiBGSUZPIGRlcHRoIHJlZ2lzdGVyIGJpdHNcXG4gIDkwOlxcdCAqXFxuICA5MTpcXHQgKiBOb3RlOiBiaXRzIDYgYW5kIDE0IGFyZSByZXNlcnZlZFxcbiAgOTI6XFx0ICovXFxuICA5MzpcXHRcXG4gIDk0OlxcdCNkZWZpbmUgRVRIX1RYQkRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gIDk1OlxcdCNkZWZpbmUgRVROX1RYX0ZJRk9fREVQVEhcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgOTY6XFx0I2RlZmluZSBFVEhfUlhCRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICA5NzpcXHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDk4OlxcdFxcbiAgOTk6XFx0c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxcbiAxMDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciByZXF1ZXN0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MTEuOTk4NjQxODEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU0MzM1ODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgZmlsZS4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgZm9yIHRoaXMgQ0g5MjAwIFVTQiBFdGhlcm5ldCBhZGFwdGVyLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgdHlwaWNhbCBVU0IgZHJpdmVyIGNoYWxsZW5nZXMg4oCTIGVuZHBvaW50IG1hbmFnZW1lbnQsIGludGVycnVwdCBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgcXVpcmtzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGNoaXBzZXQuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBhcHByb2FjaCwgbGlrZWx5IHVzaW5nIHRoZSBVU0IgY29yZSdzIGZyYW1ld29yay4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgZHJpdmVyIGVudHJ5IHBvaW50cyBsaWtlIGBwcm9iZWAsIGBkaXNjb25uZWN0YCwgYW5kIGBzdXNwZW5kL3Jlc3VtZWAgaW1wbGVtZW50YXRpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gYW5kIGNvbnRyb2wgdHJhbnNmZXIgc2VxdWVuY2VzLiBJIHdpbGwgYmUgc3VyZSB0byBzY3J1dGluaXplIHRoZWlyIGVycm9yIGhhbmRsaW5nOyBVU0IgZGV2aWNlcyBjYW4gYmUgbm90b3Jpb3VzbHkgc2Vuc2l0aXZlLiBJdCdzIGFsd2F5cyBpbnRlcmVzdGluZyB0byBzZWUgaG93IGRpZmZlcmVudCBkZXZlbG9wZXJzIGFwcHJvYWNoIHRoZSBzYW1lIHByb2JsZW0sIHdoYXQgb3B0aW1pemF0aW9ucyB0aGV5J3ZlIG1hZGUsIGFuZCBhbnkgY2xldmVyIHRlY2huaXF1ZXMgdGhleSd2ZSBlbXBsb3llZCB0byB3b3JrIGFyb3VuZCBoYXJkd2FyZSBsaW1pdGF0aW9ucyBvciBwZWN1bGlhcml0aWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MTUuNTQyMDAyNTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIiVzIHBoeV9pZDolMDJ4IGxvYzolMDJ4XFxcXG5cXFwiLFxcbiAxODI6XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKHBoeV9pZCAhPSAwKVxcbiAxODU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdHJldCA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcXG4gMTg4OlxcdFxcdFxcdFxcdCAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDE4OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTkwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHJldHVybiAoYnVmZlswXSB8IGJ1ZmZbMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdHN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIDE5NjpcXHRcXHRcXHRcXHQgICAgICBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKVxcbiAxOTc6XFx0e1xcbiAxOTg6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMTk5OlxcdFxcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCIlcygpIHBoeV9pZD0lMDJ4IGxvYzolMDJ4XFxcXG5cXFwiLFxcbiAyMDI6XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0XFx0aWYgKHBoeV9pZCAhPSAwKVxcbiAyMDU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHRidWZmWzBdID0gKHVuc2lnbmVkIGNoYXIpdmFsO1xcbiAyMDg6XFx0XFx0YnVmZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgXFx1MDAzZVxcdTAwM2UgOCk7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbiAyMTE6XFx0XFx0XFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMjEyOlxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0c3RhdGljIGludCBjaDkyMDBfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDIxNTpcXHR7XFxuIDIxNjpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0bWlpX2NoZWNrX21lZGlhKFxcdTAwMjZkZXYtXFx1MDAzZW1paSwgMSwgMSk7XFxuIDIxOTpcXHRcXHRtaWlfZXRodG9vbF9nc2V0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSwgXFx1MDAyNmVjbWQpO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiJXMoKSBzcGVlZDolZCBkdXBsZXg6JWRcXFxcblxcXCIsXFxuIDIyMjpcXHRcXHRcXHQgICBfX2Z1bmNfXywgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjI1OlxcdH1cXG4gMjI2OlxcdFxcbiAyMjc6XFx0c3RhdGljIHZvaWQgY2g5MjAwX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG4gMjI4OlxcdHtcXG4gMjI5OlxcdFxcdGludCBsaW5rO1xcbiAyMzA6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAodXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoIFxcdTAwM2MgMTYpXFxuIDIzMzpcXHRcXHRcXHRyZXR1cm47XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdGJ1ZiA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbiAyMzY6XFx0XFx0bGluayA9ICEhKGJ1ZlswXSBcXHUwMDI2IDB4MDEpO1xcbiAyMzc6XFx0XFxuIDIzODpcXHRcXHRpZiAobGluaykge1xcbiAyMzk6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXFx1MDAzZW5ldCk7XFxuIDI0MDpcXHRcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfTElOS19SRVNFVCk7XFxuIDI0MTpcXHRcXHR9IGVsc2Uge1xcbiAyNDI6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2LVxcdTAwM2VuZXQpO1xcbiAyNDM6XFx0XFx0fVxcbiAyNDQ6XFx0fVxcbiAyNDU6XFx0XFxuIDI0NjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNoOTIwMF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDI0NzpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZmxhZ3MpXFxuIDI0ODpcXHR7XFxuIDI0OTpcXHRcXHRpbnQgaSA9IDA7XFxuIDI1MDpcXHRcXHRpbnQgbGVuID0gMDtcXG4gMjUxOlxcdFxcdGludCB0eF9vdmVyaGVhZCA9IDA7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdHR4X292ZXJoZWFkID0gMHg0MDtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDI1NjpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgdHhfb3ZlcmhlYWQpKSB7XFxuIDI1NzpcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiAyNTg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI1OTpcXHRcXHR9XFxuIDI2MDpcXHRcXG4gMjYxOlxcdFxcdF9fc2tiX3B1c2goc2tiLCB0eF9vdmVyaGVhZCk7XFxuIDI2MjpcXHRcXHQvKiB1c2JuZXQgYWRkcyBwYWRkaW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHBhY2tldCBzaXplXFxuIDI2MzpcXHRcXHQgKiBpZiBzbywgYWRqdXN0IGxlbmd0aCB2YWx1ZSBpbiBoZWFkZXJcXG4gMjY0OlxcdFxcdCAqL1xcbiAyNjU6XFx0XFx0aWYgKChza2ItXFx1MDAzZWxlbiAlIGRldi1cXHUwMDNlbWF4cGFja2V0KSA9PSAwKVxcbiAyNjY6XFx0XFx0XFx0bGVuKys7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVswXSA9IGxlbjtcXG4gMjY5OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVsxXSA9IGxlbiBcXHUwMDNlXFx1MDAzZSA4O1xcbiAyNzA6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzJdID0gMHgwMDtcXG4gMjcxOlxcdFxcdHNrYi1cXHUwMDNlZGF0YVszXSA9IDB4ODA7XFxuIDI3MjpcXHRcXG4gMjczOlxcdFxcdGZvciAoaSA9IDQ7IGkgXFx1MDAzYyA0ODsgaSsrKVxcbiAyNzQ6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhW2ldID0gMHgwMDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzQ4XSA9IGxlbjtcXG4gMjc3OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVs0OV0gPSBsZW4gXFx1MDAzZVxcdTAwM2UgODtcXG4gMjc4OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVs1MF0gPSAweDAwO1xcbiAyNzk6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzUxXSA9IDB4ODA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjE1LjU0MjA4OTgxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzE4NTM1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGUgZHJpdmVyIGZvciB0aGlzIENIOTIwMCBVU0IgRXRoZXJuZXQgYWRhcHRlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHR5cGljYWwgVVNCIGRyaXZlciBjaGFsbGVuZ2VzIOKAkyBlbmRwb2ludCBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBzb21lIHF1aXJrcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGlwc2V0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2gsIGxpa2VseSB1c2luZyB0aGUgVVNCIGNvcmUncyBmcmFtZXdvcmsuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGRyaXZlciBlbnRyeSBwb2ludHMgbGlrZSBgcHJvYmVgLCBgZGlzY29ubmVjdGAsIGFuZCBgc3VzcGVuZC9yZXN1bWVgIGltcGxlbWVudGF0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBjb250cm9sIHRyYW5zZmVyIHNlcXVlbmNlcy4gSSB3aWxsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGVpciBlcnJvciBoYW5kbGluZzsgVVNCIGRldmljZXMgY2FuIGJlIG5vdG9yaW91c2x5IHNlbnNpdGl2ZS4gSXQncyBhbHdheXMgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyBkaWZmZXJlbnQgZGV2ZWxvcGVycyBhcHByb2FjaCB0aGUgc2FtZSBwcm9ibGVtLCB3aGF0IG9wdGltaXphdGlvbnMgdGhleSd2ZSBtYWRlLCBhbmQgYW55IGNsZXZlciB0ZWNobmlxdWVzIHRoZXkndmUgZW1wbG95ZWQgdG8gd29yayBhcm91bmQgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjE3LjgxMzk0NzM4NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0XFxuIDI4MTpcXHRcXHRmb3IgKGkgPSA1MjsgaSBcXHUwMDNjIDY0OyBpKyspXFxuIDI4MjpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbaV0gPSAweDAwO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAyODU6XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHRzdGF0aWMgaW50IGNoOTIwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRpbnQgbGVuID0gMDtcXG4gMjkwOlxcdFxcdGludCByeF9vdmVyaGVhZCA9IDA7XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdHJ4X292ZXJoZWFkID0gNjQ7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHJ4X292ZXJoZWFkKSkge1xcbiAyOTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYsIFxcXCJ1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXFxcblxcXCIpO1xcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDI5NzpcXHRcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGxlbiA9IChza2ItXFx1MDAzZWRhdGFbc2tiLVxcdTAwM2VsZW4gLSAxNl0gfCBza2ItXFx1MDAzZWRhdGFbc2tiLVxcdTAwM2VsZW4gLSAxNV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuIDMwMDpcXHRcXHRza2JfdHJpbShza2IsIGxlbik7XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdHJldHVybiAxO1xcbiAzMDM6XFx0fVxcbiAzMDQ6XFx0XFxuIDMwNTpcXHRzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuIDMwNjpcXHR7XFxuIDMwNzpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMzA4OlxcdFxcdHVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbMHgwNl07XFxuIDMwOTpcXHRcXHRpbnQgcmRfbWFjX2xlbiA9IDA7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlczpcXFxcblxcXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIDMxMjpcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxcbiAzMTM6XFx0XFx0XFx0ICAgbGUxNl90b19jcHUoZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO1xcbiAzMTY6XFx0XFx0cmRfbWFjX2xlbiA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCxcXG4gMzE3OlxcdFxcdFxcdFxcdFxcdCAgTUFDX1JFR19TVEFUSU9OX0wsIG1hY19hZGRyLCAweDAyLFxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0ICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMTk6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9NLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjE6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9ILFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyA0LCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjM6XFx0XFx0aWYgKHJkX21hY19sZW4gIT0gRVRIX0FMRU4pXFxuIDMyNDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRkYXRhWzBdID0gbWFjX2FkZHJbNV07XFxuIDMyNzpcXHRcXHRkYXRhWzFdID0gbWFjX2FkZHJbNF07XFxuIDMyODpcXHRcXHRkYXRhWzJdID0gbWFjX2FkZHJbM107XFxuIDMyOTpcXHRcXHRkYXRhWzNdID0gbWFjX2FkZHJbMl07XFxuIDMzMDpcXHRcXHRkYXRhWzRdID0gbWFjX2FkZHJbMV07XFxuIDMzMTpcXHRcXHRkYXRhWzVdID0gbWFjX2FkZHJbMF07XFxuIDMzMjpcXHRcXG4gMzMzOlxcdFxcdHJldHVybiBlcnI7XFxuIDMzNDpcXHR9XFxuIDMzNTpcXHRcXG4gMzM2OlxcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMzM3OlxcdHtcXG4gMzM4OlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiAzMzk6XFx0XFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xcbiAzNDA6XFx0XFx0dTggYWRkcltFVEhfQUxFTl07XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDM0MzpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNDQ6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuIDM0NzpcXHRcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xcbiAzNDg6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb193cml0ZSA9IGNoOTIwMF9tZGlvX3dyaXRlO1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRkZXYtXFx1MDAzZWhhcmRfbXR1ID0gZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuIDM1NDpcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCArIDE2O1xcbiAzNTU6XFx0XFx0bWlpX253YXlfcmVzdGFydChcXHUwMDI2ZGV2LVxcdTAwM2VtaWkpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzU4OlxcdFxcdGRhdGFbMV0gPSAweDBGO1xcbiAzNTk6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxcbiAzNjA6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdGRhdGFbMF0gPSAweEEwO1xcbiAzNjM6XFx0XFx0ZGF0YVsxXSA9IDB4OTA7XFxuIDM2NDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbiAzNjU6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGRhdGFbMF0gPSAweDMwO1xcbiAzNjg6XFx0XFx0ZGF0YVsxXSA9IDB4MDA7XFxuIDM2OTpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG4gMzcwOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRkYXRhWzBdID0gMHgxNztcXG4gMzczOlxcdFxcdGRhdGFbMV0gPSAweEQ4O1xcbiAzNzQ6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxcbiAzNzU6XFx0XFx0XFx0XFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xcbiAzNzg6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM3OTpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MTcuODE0MDc4NjQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDM3ODk1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgVVNCIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgY2g5MjAwLmNgIGZpbGUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJJ20gYWxyZWFkeSBmb3JtaW5nIHNvbWUgZXhwZWN0YXRpb25zIGJhc2VkIG9uIHRoZSBmaWxlbmFtZSBhbmQgcGF0aC4gS25vd2luZyB0aGUgYGRyaXZlcnMvbmV0L3VzYmAgbG9jYXRpb24sIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBpcyBhIG5ldHdvcmsgZHJpdmVyIGZvciBhIFVTQi1iYXNlZCBkZXZpY2UsIHByb2JhYmx5IGEgVVNCIEV0aGVybmV0IGFkYXB0ZXIgdXNpbmcgdGhlIENIOTIwMCBjaGlwc2V0LiBJJ20gbGlrZWx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBVU0IgZW51bWVyYXRpb24sIGRldmljZSBpbml0aWFsaXphdGlvbiwgZGF0YSB0cmFuc2ZlciwgYW5kIHBvdGVudGlhbGx5IHBvd2VyIG1hbmFnZW1lbnQuIFRoZSBcImNoOTIwMFwiIHBhcnQgbmFycm93cyBpdCBkb3duIGV2ZW4gZnVydGhlciwgc3VnZ2VzdGluZyB0aGlzIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgd3JpdHRlbiBmb3IgYSBkZXZpY2UgdXNpbmcgdGhhdCBwYXJ0aWN1bGFyIHNpbGljb24uIEknbSBjdXJpb3VzIGlmIHRoaXMgdXNlcyBzdGFuZGFyZCBVU0IgbmV0d29yayBkZXZpY2UgY2xhc3MgcHJvdG9jb2xzIG9yIGlmIGl0IGhhcyBhbnkgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIFVTQiBkZXNjcmlwdG9yIHBhcnNpbmcgYW5kIHRoZSBjb250cm9sIHRyYW5zZmVycy4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIFVTQiBlcnJvcnMgYW5kIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCBzZWUgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgYW5kIGhvdyB0aGUgZHJpdmVyIG1hbmFnZXMgbmV0d29yayB0cmFmZmljIGZsb3csIHBlcmhhcHMgZXhhbWluaW5nIHRoZSB1c2Ugb2YgcGFja2V0IGRlc2NyaXB0b3JzLCBETUEsIGFuZCBhbnkgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzoyMC44NTc4NzA2NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbiAzODE6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzODQ6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM4NTpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzODY6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiAzODk6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzkyOlxcdH1cXG4gMzkzOlxcdFxcbiAzOTQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gMzk1OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuIDM5NjpcXHRcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxcbiAzOTc6XFx0XFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcXG4gMzk4OlxcdFxcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcXG4gMzk5OlxcdFxcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcXG4gNDAwOlxcdFxcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxcbiA0MDE6XFx0XFx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcXG4gNDAyOlxcdFxcdC5yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbiA0MDM6XFx0fTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xcbiA0MDY6XFx0XFx0e1xcbiA0MDc6XFx0XFx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxcbiA0MDg6XFx0XFx0IC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZjaDkyMDBfaW5mbyxcXG4gNDA5OlxcdFxcdCB9LFxcbiA0MTA6XFx0XFx0e30sXFxuIDQxMTpcXHR9O1xcbiA0MTI6XFx0XFxuIDQxMzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoOTIwMF9kcml2ZXIgPSB7XFxuIDQxNjpcXHRcXHQubmFtZSA9IFxcXCJjaDkyMDBcXFwiLFxcbiA0MTc6XFx0XFx0LmlkX3RhYmxlID0gY2g5MjAwX3Byb2R1Y3RzLFxcbiA0MTg6XFx0XFx0LnByb2JlID0gdXNibmV0X3Byb2JlLFxcbiA0MTk6XFx0XFx0LmRpc2Nvbm5lY3QgPSB1c2JuZXRfZGlzY29ubmVjdCxcXG4gNDIwOlxcdFxcdC5zdXNwZW5kID0gdXNibmV0X3N1c3BlbmQsXFxuIDQyMTpcXHRcXHQucmVzdW1lID0gdXNibmV0X3Jlc3VtZSxcXG4gNDIyOlxcdH07XFxuIDQyMzpcXHRcXG4gNDI0OlxcdG1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xcbiA0MjU6XFx0XFxuIDQyNjpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlFpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVxcXCIpO1xcbiA0Mjc6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzoyMC44NTc5NTg5ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQyNzk5MDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgRHJpdmVyIEJ1Z2ZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzLCBmcmFua2x5LCBhIGJpdCBzbG9wcHkuIFRoZSBmdW5jdGlvbiwgYWZ0ZXIgY2FsbGluZyBgdXNiX2NvbnRyb2xfbXNnYCwgd291bGQgKmFsd2F5cyogcmV0dXJuIDAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIFVTQiBjb250cm9sIG1lc3NhZ2UgY2FsbC4gRXZlbiBpZiBgdXNiX2NvbnRyb2xfbXNnYCByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGxpa2UgLUVJTlZBTCwgdGhlIGNvZGUgd291bGQgcGxvdyB0aHJvdWdoIGFuZCByZXR1cm4gMCwgZWZmZWN0aXZlbHkgbWFza2luZyB0aGUgcHJvYmxlbSEgVGhlIGNvZGUgd2FzIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgYGVycmAgdmFyaWFibGUgYGVyciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGVyciBcdTAwM2Mgc2l6ZWAuIFdoZW4gdGhpcyBjb25kaXRpb24gd2FzIHRydWUgdGhlIGNvZGUgc2V0IGBlcnIgPSAtRUlOVkFMO2AgYW5kIHRoZW4gcmV0dXJuZWQgMCwgd2lwaW5nIG91dCB0aGUgZXJyb3IuIFRoZSBmaXggcmVtb3ZlcyB0aGlzIFwicmV0dXJuIDA7XCIgbWFraW5nIGBjb250cm9sX3dyaXRlYCBhY3R1YWxseSByZXR1cm4gdGhlIGVycm9yIGNvZGUuIFNvIG5vdywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcmVjZWl2ZSBhIG1lYW5pbmdmdWwgaW5kaWNhdGlvbiBvZiB3aGV0aGVyIHRoZSBjb250cm9sIHRyYW5zZmVyIHN1Y2NlZWRlZCBvciBmYWlsZWQuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIGV4cGxvaXQsIG1lYW5pbmcsIGlzIGl0IHNvbWV0aGluZyB3ZSBjYW4gdHJpZ2dlciBhbmQgZnV6ej9cblxuTGV0J3Mgc2VlLiBUaGlzIGBjaDkyMDBgIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLiBTeXprYWxsZXIgc3VwcG9ydHMgVVNCIGVtdWxhdGlvbjsgaXQgY2FuIHNpbXVsYXRlIGEgVVNCIGRldmljZSB3aXRoIFZJRCAweDFBODYgYW5kIFBJRCAweEUwOTIsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIHNob3VsZCBjYXVzZSB0aGUgYGNoOTIwMGAgZHJpdmVyIHRvIGJlIHByb2JlZCwgdWx0aW1hdGVseSBpbnZva2luZyBgY29udHJvbF93cml0ZWAgdmlhIHRoZSBwcm9iZSBwcm9jZXNzIChgdXNibmV0X3Byb2JlYCAtXHUwMDNlIGBjaDkyMDBfYmluZGApLiBUaGUga2V5IGlzIHdoZXRoZXIgYGNvbnRyb2xfd3JpdGVgIGdldHMgZXhlY3V0ZWQgaW4gdGhpcyBzZXF1ZW5jZS5cblxuWWVzLCBgY2g5MjAwX2JpbmRgIGRlZmluaXRlbHkgY2FsbHMgYGNvbnRyb2xfd3JpdGVgLCBhbmQgc28gZG9lcyBgY2g5MjAwX21kaW9fd3JpdGVgLiBTbywgdGhlIHBhdGggaXMgdGhlcmUhXG5cblN5emthbGxlciBpcyBhbHJlYWR5IHNldCB1cCB0byBmdXp6IFVTQiBkcml2ZXJzLiBTZWN0aW9uIDMgb2YgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgbWVudGlvbnMgVVNCIGdhZGdldCBzdXBwb3J0LlxuXG5TbywgaW4gc3VtbWFyeTogd2UgaGF2ZSBhIHBvdGVudGlhbCBidWcgdGhhdCwgdGhhbmtzIHRvIHRoZSBmaXgsIGNhbiBub3cgcHJvcGFnYXRlIGVycm9ycy4gVGhlIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBVU0IgZW11bGF0aW9uLCBhbmQgc3l6a2FsbGVyIGlzIGEgcGVyZmVjdCB0b29sIGZvciBmdXp6aW5nIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBLY29uZmlnIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBidXQgaXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXp6aW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MjUuMjg1OTUzOTg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5MTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDSDkyMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTMtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNTpcXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNi1cXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxOS1cXHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFVTQiBldGhlcm5ldCBhZGFwdGVyIHdpdGggYSBRaW5IZW5nXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjIwOlxcdCAgQ0g5MjAwIGNoaXBzZXQuXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjIxLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19NQklNKVxcdCs9IGNkY19tYmltLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVxcdCs9IGNoOTIwMC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19VU0JfTkVUX0FRQzExMSlcXHQrPSBhcWMxMTEub1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNDojZGVmaW5lIENIOTIwMF9WSURcXHRcXHQweDFBODZcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjU6I2RlZmluZSBDSDkyMDBfUElEX0UwOTJcXHRcXHQweEUwOTJcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9Mzk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM5NTpcXHQuZGVzY3JpcHRpb24gPSBcXFwiQ0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTYtXFx0LmZsYWdzID0gRkxBR19FVEhFUixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz00MjQ9bW9kdWxlX3VzYl9kcml2ZXIoY2g5MjAwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI2Ok1PRFVMRV9ERVNDUklQVElPTihcXFwiUWluSGVuZyBDSDkyMDAgVVNCIE5ldHdvcmsgZGV2aWNlXFxcIik7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNy1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjI1LjM0OTc0OTkwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg0NzQ3MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgVVNCX05FVF9DSDkyMDAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBVU0JfTkVUX0NIOTIwMGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQncyByZXF1aXJlZCBhbmQgd2hhdCBlbmFibGluZyB0aGlzIGRyaXZlciBlbnRhaWxzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgaGVhZGluZyB0byBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIHRvIHN0YXJ0IHRoZSBhbmFseXNpcy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgZ29pbmcgdG8gYmUgYSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaGlkZGVuIHJlcXVpcmVtZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogYmFzZSBVU0IgbmV0d29ya2luZyBzdXBwb3J0LCBhbnkgcmVsZXZhbnQgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLCBhbnkgb3RoZXIgY2hpcHNldC1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgY29tZSBpbnRvIHBsYXksIGFuZCB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGFueSBvdGhlcnMuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZW5zdXJlIGEgcm9idXN0IGFuZCB3ZWxsLWRlZmluZWQgY29uZmlndXJhdGlvbiB0aGF0IHdvbid0IGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaXNzdWVzIGRvd24gdGhlIGxpbmUgd2hlbiBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjI3LjczNDQ5ODcxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0ICA0RyBtb2RlbSBmcm9tIFZlcml6b246XFxuIDYxMTpcXHRcXG4gNjEyOlxcdFxcdCAgaHR0cDovL3VidW50dWZvcnVtcy5vcmcvc2hvd3Bvc3QucGhwP3A9MTA1ODk2NDdcXHUwMDI2cG9zdGNvdW50PTE3XFxuIDYxMzpcXHRcXG4gNjE0OlxcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbiA2MTU6XFx0XFx0dHJpc3RhdGUgXFxcIlFpbmdIZW5nIENIOTIwMCBVU0IgZXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gNjE2OlxcdFxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbiA2MTc6XFx0XFx0c2VsZWN0IE1JSVxcbiA2MTg6XFx0XFx0aGVscFxcbiA2MTk6XFx0XFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBVU0IgZXRoZXJuZXQgYWRhcHRlciB3aXRoIGEgUWluSGVuZ1xcbiA2MjA6XFx0XFx0ICBDSDkyMDAgY2hpcHNldC5cXG4gNjIxOlxcdFxcbiA2MjI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNjIzOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNoOTIwMC5cXG4gNjI0OlxcdFxcbiA2MjU6XFx0Y29uZmlnIFVTQl9ORVRfQVFDMTExXFxuIDYyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbiA2Mjc6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDYyODpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gNjI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MjcuNzM0NTc1MDY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjU4MTU4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBVU0JfVVNCTkVUIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX1VTQk5FVGAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBmb3Jnb3R0ZW4gYWJvdXQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGxpZ2h0IG9mIHRoZSByZWNlbnQgY2hhbmdlcy4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gbmV0d29ya2luZyBhY3Jvc3Mgc3VjaCBhIHdpZGUgYXJyYXkgb2YgZGV2aWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgZmVhdHVyZSBidWlsZHMgY2xlYW5seSwgbGlua3MgY29ycmVjdGx5LCBhbmQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBzZWxlY3RgIHN0YXRlbWVudHMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgYW55IGBkZWZhdWx0YCB2YWx1ZXMgdGhhdCBjb3VsZCBpbmRpcmVjdGx5IGltcGFjdCBgVVNCX1VTQk5FVGAncyBpbmNsdXNpb24gb3IgZXhjbHVzaW9uLiBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgd2VsbCwgc28gb3RoZXJzIGNhbiBmaW5kIHdoYXQgdGhleSBuZWVkLCBhbmQgZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgY29uZmxpY3RzIHdpdGggb3RoZXIgVVNCIG9yIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBldmVyeSBiYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MzAuMTAwMzkzNzI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE1OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1VTQk5FVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzEtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMzLVxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MzAuMTU5NTYxNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MTAyNTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCAtIExpbmVzIDEzMC0xNDAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEzMC0xNDAgb2YgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gSSdtIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBwZXJ0YWlucyB0byBhIHNwZWNpZmljIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIsIGdpdmVuIHRoZSBmaWxlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgcG9zc2libHkgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIncyBjb25maWd1cmFiaWxpdHkgbGllcy4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gYXNzZXNzIHRoZSBtb2R1bGFyaXR5LCBhbnkgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgbmV0d29yayBvciBVU0Igc3Vic3lzdGVtcywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBjaG9pY2VzIG1hZGUgYnkgdGhlIGRyaXZlciBtYWludGFpbmVyLiBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzIGhlbHBzIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmVoYXZlIGJ5IGRlZmF1bHQuIEkgYW0gbG9va2luZyBmb3Igd2F5cyBJIGNvdWxkIGN1c3RvbWl6ZSB0aGUgZHJpdmVyLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJ2xsIGJlIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIGZsYWdzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljIHRoYXQgbWlnaHQgaW5kaWNhdGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBvciBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LiBJIHdpbGwgYmUgY29tcGFyaW5nIHRoaXMgcGFydCB0byB0aGUgc3Vycm91bmRpbmcgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzozMy4xMzA1ODk3NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjMzLjEzMDczODEyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg2ODg1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSBmb3IgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGl0IHJlbGllcyBvbiBgVVNCX05FVF9EUklWRVJTYCwgYFVTQl9TVVBQT1JUYCwgb3IgYE5FVERFVklDRVNgLiBCZXN0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gSSdsbCBiZWdpbiBteSBhbmFseXNpcyBmcm9tIHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBsaW5lIG9uZSwgYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIGZyb20gdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MzQuODE3NjI2ODA3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbW1lbnQgXFxcIkhvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gIVVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTmV0d29yayBBZGFwdGVyc1xcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgVVNCIGlmIFVTQlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFVTQl9ORVRfRFJJVkVSU1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgVVNCX0NBVENcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XFxuICAyMDpcXHRcXHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XFxuICAyMTpcXHRcXHQgIEJlbGtpbiBGNVUwMTFcXG4gIDIyOlxcdFxcdCAgQmVsa2luIEY1VTExMVxcbiAgMjM6XFx0XFx0ICBDQVRDIE5ldE1hdGVcXG4gIDI0OlxcdFxcdCAgQ0FUQyBOZXRNYXRlIElJXFxuICAyNTpcXHRcXHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXFxuICAyODpcXHRcXHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cXG4gIDI5OlxcdFxcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Y29uZmlnIFVTQl9LQVdFVEhcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XFxuICAzODpcXHRcXHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxcbiAgMzk6XFx0XFx0ICAzQ29tIDNDMTkyNTBcXG4gIDQwOlxcdFxcdCAgQURTIFVTQi0xMEJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjM0LjgxNzc3NDgxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDYyMDA3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDSDkyMDAgVVNCIE5ldHdvcmsgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMuIGBVU0JfTkVUX0NIOTIwMGAgZGVwZW5kcyBvbiBgVVNCX1VTQk5FVGAsIHdoaWNoIGlzIGl0c2VsZiB1bmRlciBgVVNCX05FVF9EUklWRVJTYC4gQW5kIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYFVTQmAgY29uZmlnIGlzIHJlcXVpcmVkLiBTbywgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlIGBVU0JfTkVUX0NIOTIwMGAsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCBgVVNCYC5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyOiB3aGF0J3MgYmVlbiBtb2RpZmllZD8gQWhhLCBpdCdzIHRoZSBgY29udHJvbF93cml0ZWAgZnVuY3Rpb24sIHdoaWNoIGlzICpzdGF0aWMqIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gVGhpcyBpcyBpbXBvcnRhbnQuIExldCdzIHNlZSB3aG8gY2FsbHMgaXQ6IGBjaDkyMDBfbWRpb193cml0ZWAgYW5kIGBjaDkyMDBfYmluZGAuIE9rYXksIHNvIGBjaDkyMDBfYmluZGAgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAgYXJlIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGNoYW5nZXMgdG8gYGNvbnRyb2xfd3JpdGVgLlxuXG5BbHJpZ2h0LCB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMgaW4gYGNoOTIwMC5jYCBhcmUgYGNoOTIwMF9iaW5kYCwgYGNoOTIwMF9tZGlvX3dyaXRlYCBhbmQgb2YgY291cnNlIGBjb250cm9sX3dyaXRlYC4gSSBuZWVkIHRvIGNvbmZpcm0gYWdhaW4gdGhhdCBgY29udHJvbF93cml0ZWAgaXMgaW5kZWVkIHN0YXRpYy4gQWggeWVzLCBpdCBpcy4gQnV0IGBjaDkyMDBfYmluZGAgaXMgbm9uLXN0YXRpYyAoYnV0IGFsc28gc3RhdGljIGluIHRoZSBjb2RlLCBsaW5lIDMzNiBvZiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCA6IGBzdGF0aWMgaW50IGNoOTIwMF9iaW5kLi4uYCBidXQgcmVmZXJlbmNlZCBpbiBgY2g5MjAwX2luZm9gIHN0cnVjdCkuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZ2xvYmFsbHkgZXhwb3J0ZWQsIGFyZSBzdGlsbCBzeW1ib2xpY2FsbHkgcHJlc2VudCBpbiBzdGFuZGFyZCBidWlsZHMgKHdpdGggYGthbGxzeW1zYCBvciBmdW5jdGlvbiB0cmFjaW5nKSB3aXRoaW4gdGhlIGtlcm5lbCBvciB0aGUgbW9kdWxlLCB1bmxlc3MgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhlbSwgc28gdGhhdCdzIGdvb2QuXG5cbk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSB3aGF0IHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENvbnNpZGVyaW5nIG91ciBnb2FscywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4gU28sIGBjb250cm9sX3dyaXRlYCwgYGNoOTIwMF9iaW5kYCwgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAgYXJlIHRoZSB0YXJnZXRzLiBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhIHRvIG1ha2Ugc3VyZSB0aGlzIG1lZXRzIHRoZSByZXF1aXJlbWVudHM6IEl0J3MgYSByZWFjaGFibGUgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgdmlhIHZpcnR1YWwgYnVzZXMgKHJhdy1nYWRnZXQgVVNCIGZ1enppbmcpLCBzbyB0aGF0J3MgYSBjaGVjay4gQWxzbywgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBjb250cm9sX3dyaXRlYC4gSW5zdGVhZCBvZiBhbHdheXMgcmV0dXJuaW5nIDAsIGl0IHdpbGwgcmV0dXJuIGVycm9ycywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGBjaDkyMDBfYmluZGAgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAuIFRoaXMgY2hhbmdlIGNhbiBsZWFkIHRvIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBkdXJpbmcgcHJvYmUvYmluZC93cml0ZSBvcGVyYXRpb25zLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5TbywgaXMgaXQgV29ydGhGdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuXG5cbkZpbmFsbHksIGxldCdzIGNsYXJpZnkgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuXG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgdG8gdGhlIHBvaW50LiBUaGlzIFVTQiBuZXR3b3JrIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBzeXprYWxsZXIgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGBjb250cm9sX3dyaXRlYCBpcyBjaGFuZ2VkIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBVU0IgY29udHJvbCBtZXNzYWdlIGVycm9ycyBkdXJpbmcgYmluZC93cml0ZSBvcGVyYXRpb25zLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiY29udHJvbF93cml0ZVwiLCBcImNoOTIwMF9iaW5kXCIsIFwiY2g5MjAwX21kaW9fd3JpdGVcIl1gLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIlVTQl9ORVRfQ0g5MjAwXCIsIFwiVVNCX1VTQk5FVFwiLCBcIlVTQl9ORVRfRFJJVkVSU1wiLCBcIlVTQlwiXWAuXG5cbkV2ZXJ5dGhpbmcgc2VlbXMgY29ycmVjdCwgYWxsIGJhc2VzIGFyZSBjb3ZlcmVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDcsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NDMuMjc5ODA2NTU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyODA2NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb250cm9sX3dyaXRlXCIsXG4gICAgXCJjaDkyMDBfYmluZFwiLFxuICAgIFwiY2g5MjAwX21kaW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgc28gdGhhdCBjb250cm9sX3dyaXRlKCkgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMgZnJvbSB1c2JfY29udHJvbF9tc2coKSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuaW5nIDAuIENIOTIwMCBpcyBhIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHN5emthbGxlcidzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29udHJvbF93cml0ZVwiLFxuICAgIFwiY2g5MjAwX2JpbmRcIixcbiAgICBcImNoOTIwMF9tZGlvX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXIncyBVU0IgcmF3LWdhZGdldCBlbXVsYXRpb24uIEZ1enppbmcgY2FuIHZlcmlmeSBlcnJvci1oYW5kbGluZyBhbmQgYmluZGluZyBsb2dpYyB3aGVuIFVTQiBjb250cm9sIHRyYW5zZmVycyBmYWlsIG9yIHJldHVybiB1bmV4cGVjdGVkIHNpemVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo0My40MTI2MjMyNThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDgzNjYxODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NDMuNDEzNDc3MTQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI0ODI4MDI3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlcnNwYWNlLWZhY2luZyBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlcnMgcHJpb3IgdG8gaW52b2NhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDg6Mjc6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuQEAgLTE2OCw4ICsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJyX291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NDMuNDEzNDc5NDg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MzIxMzI5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjaDkyMDAgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmLiBUbyBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uLCBteSBmaXJzdCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlIGNoYW5nZXMuIFRoZW4sIEknbGwgbGV2ZXJhZ2UgbXkgZXhwZXJ0IGtub3dsZWRnZSBhbmQgZGlyZWN0bHkgdXNlIGByZWFkLWZpbGVgIHRvIHBpbnBvaW50IGxpbmUgMTY4LiBGb2N1c2luZyBpbiBvbiB0aGF0IHNwZWNpZmljIHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIHN0YXJ0IGZvcm1pbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjQ4LjE0NTYxNDk4OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDEzMTpcXHRcXHRrZnJlZShidWYpO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRlcnJfb3V0OlxcbiAxMzQ6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbiAxMzg6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4gMTM5OlxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XFxuIDE0MjpcXHRcXHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcXG4gMTQzOlxcdFxcdGludCBlcnIgPSAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxcbiAxNDY6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9PVEhFUik7XFxuIDE0ODpcXHRcXHRlbHNlXFxuIDE0OTpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxNTM6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTU2OlxcdFxcdFxcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDE1NzpcXHRcXHRcXHRpZiAoIWJ1Zikge1xcbiAxNTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTU5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0ZXJyX291dDpcXG4gMTcyOlxcdFxcdHJldHVybiBlcnI7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdHN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbiAxNzY6XFx0e1xcbiAxNzc6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMTc4OlxcdFxcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcXG4gMTc5OlxcdFxcdGludCByZXQ7XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwiJXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXFxcblxcXCIsXFxuIDE4MjpcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5X2lkLCBsb2MpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRpZiAocGh5X2lkICE9IDApXFxuIDE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbiAxODg6XFx0XFx0XFx0XFx0ICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMTg5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo0OC4xNDU2ODgyMzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkxMTkyNzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjb250cm9sX3dyaXRlYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiwgdGhlcmUgd2FzIGEgZ2xhcmluZyBpc3N1ZS4gUHJldmlvdXNseSwgZXZlbiBpZiB0aGUgYHVzYl9jb250cm9sX21zZ2AgZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3Ig4oCTIG1heWJlIGEgdGltZW91dCBvciBhIHBpcGUgZXJyb3Ig4oCTIHRoZSBjb2RlIHdhcyAqdW5jb25kaXRpb25hbGx5KiByZXR1cm5pbmcgMCEgVGhlIGByZXR1cm4gMDtgIHdhcyBlZmZlY3RpdmVseSBtYXNraW5nIGFueSBlcnJvcnMuIEl0IHdhcyBjb21wbGV0ZWx5IGlnbm9yaW5nIHRoZSB2YWx1ZSBvZiBgZXJyYCBzZXQgYnkgdGhlIGB1c2JfY29udHJvbF9tc2dgIGNhbGwuIEFuZCBldmVuIGlmIGBlcnJgIHdhcyBzZXQgdG8gYC1FSU5WQUxgIGlmIGBlcnIgXHUwMDNjIHNpemVgLCB0aGUgYHJldHVybiAwO2Agd2FzIHN0aWxsIG92ZXJyaWRpbmcgdGhlIGVycm9yLiBOb3csIHJlbW92aW5nIHRoZSBgcmV0dXJuIDA7YCB3aWxsIGNoYW5nZSB0aGUgYmVoYXZpb3IsIHNvIHRoYXQgaXQgcmV0dXJucyBgZXJyYCwgdGhlIGNvcnJlY3QgZXJyb3IgY29kZS5cblxuTm93IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGB1c2JfY29udHJvbF9tc2dgIHJldHVybnMgb24gc3VjY2Vzcy4gRm9yIGFuIE9VVCB0cmFuc2ZlciAoaG9zdCB0byBkZXZpY2UpIGxpa2UgdGhpcywgaXQgcmV0dXJucyB0aGUgKm51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCosIHRoYXQgaXMsIGBzaXplYC4gU28sIGlmIGBlcnJgIGVxdWFscyBgc2l6ZWAsIHRoYXQgbWVhbnMgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLCBhbmQgd2Ugd2FudCB0byByZXR1cm4gYHNpemVgLlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjYWxsZXJzIGFyZSBoYW5kbGluZyB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyBzZWUgaG93IGBjb250cm9sX3dyaXRlYCBpcyBiZWluZyB1c2VkIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBUaW1lIHRvIGNoZWNrIHRob3NlIGNhbGxlcnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1Mi4wNTc2MTczMjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDI3MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbnRyb2xfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz05OT1zdGF0aWMgaW50IGNvbnRyb2xfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoxMzc6c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0xOTU9c3RhdGljIHZvaWQgY2g5MjAwX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMDktXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIxMDpcXHRjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjExLVxcdFxcdCAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9MzM2PXN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNTgtXFx0ZGF0YVsxXSA9IDB4MEY7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM1OTpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2MC1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjMtXFx0ZGF0YVsxXSA9IDB4OTA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM2NDpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjUtXFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzY4LVxcdGRhdGFbMV0gPSAweDAwO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjk6XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3MC1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzMtXFx0ZGF0YVsxXSA9IDB4RDg7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NDpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3NS1cXHRcXHRcXHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzktXFx0ZGF0YVsxXSA9IDB4MDA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM4MDpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODEtXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzg0LVxcdGRhdGFbMV0gPSAweDBEO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODU6XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzg2LVxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1Mi4xMzQwNTA4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMyMDIzOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBjaDkyMDBfYmluZGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGZvY3VzIGluIG9uIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGxldCdzIHplcm8gaW4gb24gdGhlIGNvZGUgYmxvY2sgdGhhdCBydW5zIGZyb20gcm91Z2hseSBsaW5lIDMzNiB0aHJvdWdoIDM5MC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBiaW5kaW5nIGlzIGhhcHBlbmluZywgYW5kIGl0J3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHBvc3NpYmxlIGFyZWFzIHRoYXQgYXJlIGNhdXNpbmcgdGhlIGlzc3VlLiBUaW1lIHRvIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1My44NjYwNzkyMTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzYsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzY6XFx0c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiAzMzc6XFx0e1xcbiAzMzg6XFx0XFx0aW50IHJldHZhbCA9IDA7XFxuIDMzOTpcXHRcXHR1bnNpZ25lZCBjaGFyIGRhdGFbMl07XFxuIDM0MDpcXHRcXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcXG4gMzQzOlxcdFxcdGlmIChyZXR2YWwpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRkZXYtXFx1MDAzZW1paS5kZXYgPSBkZXYtXFx1MDAzZW5ldDtcXG4gMzQ3OlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XFxuIDM0ODpcXHRcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XFxuIDM0OTpcXHRcXHRkZXYtXFx1MDAzZW1paS5yZWdfbnVtX21hc2sgPSAweDFmO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRkZXYtXFx1MDAzZW1paS5waHlfaWRfbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlaGFyZF9tdHUgPSBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbXR1ICsgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4gMzU0OlxcdFxcdGRldi1cXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICsgMTY7XFxuIDM1NTpcXHRcXHRtaWlfbndheV9yZXN0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSk7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdGRhdGFbMF0gPSAweDAxO1xcbiAzNTg6XFx0XFx0ZGF0YVsxXSA9IDB4MEY7XFxuIDM1OTpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuIDM2MDpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0ZGF0YVswXSA9IDB4QTA7XFxuIDM2MzpcXHRcXHRkYXRhWzFdID0gMHg5MDtcXG4gMzY0OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuIDM2NTpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ZGF0YVswXSA9IDB4MzA7XFxuIDM2ODpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG4gMzY5OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxcbiAzNzA6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGRhdGFbMF0gPSAweDE3O1xcbiAzNzM6XFx0XFx0ZGF0YVsxXSA9IDB4RDg7XFxuIDM3NDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuIDM3NTpcXHRcXHRcXHRcXHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXFxuIDM3ODpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzc5OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzODA6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcXG4gMzgxOlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHRkYXRhWzBdID0gMHg1RjtcXG4gMzg0OlxcdFxcdGRhdGFbMV0gPSAweDBEO1xcbiAzODU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG4gMzg2OlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcXG4gMzg5OlxcdFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYWRkcik7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5MjpcXHR9XFxuIDM5MzpcXHRcXG4gMzk0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XFxuIDM5NTpcXHRcXHQuZGVzY3JpcHRpb24gPSBcXFwiQ0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1My44NjYyMDg2MzdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3NjQxMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIFVTQiBOZXR3b3JrIERyaXZlciBMb2dpYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGNvbnRyb2xfcmVhZGAgYW5kIGBjb250cm9sX3dyaXRlYCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIENIOTIwMCBVU0IgbmV0d29yayBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGNvbnRyb2xfcmVhZGAgaW4gdGhhdCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhhdCBib3RoIHJlYWQgYW5kIHdyaXRlIHJlZmVyIHRvIHRoZSBjb250cm9sIGVuZHBvaW50LCBzbyBhIGNhcmVmdWwgaW5zcGVjdGlvbiBvZiB0aGlzIHNlY3Rpb24gc2hvdWxkIHNob3cgbWUgaG93IHRoZSBkZXZpY2UncyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgaG9zdCBpbnRlcmFjdHMgd2l0aCB0aGUgQ0g5MjAwIGluIHRoZSBjb250cm9sIHRyYW5zZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NTUuNzQyNjIyNTU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHQjZGVmaW5lIEVUTl9UWF9GSUZPX0RFUFRIXFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgOClcXG4gIDk2OlxcdCNkZWZpbmUgRVRIX1JYQkRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiAgOTc6XFx0I2RlZmluZSBFVEhfUlhfRklGT19ERVBUSFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDApXFxuICA5ODpcXHRcXG4gIDk5OlxcdHN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG4gMTAwOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwgdW5zaWduZWQgc2hvcnQgdmFsdWUsXFxuIDEwMTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBpbmRleCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSxcXG4gMTAyOlxcdFxcdFxcdFxcdGludCB0aW1lb3V0KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcXG4gMTA1OlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xcbiAxMDY6XFx0XFx0aW50IGVyciA9IDA7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfUkVBRClcXG4gMTA5OlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX09USEVSKTtcXG4gMTEwOlxcdFxcdGVsc2VcXG4gMTExOlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9ERVZJQ0UpO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiJXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcXFxuXFxcIixcXG4gMTE1OlxcdFxcdFxcdCAgIF9fZnVuY19fLCBpbmRleCwgc2l6ZSk7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDExODpcXHRcXHRpZiAoIWJ1Zikge1xcbiAxMTk6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTIwOlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTI0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxMjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTI2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxMjc6XFx0XFx0aWYgKGVyciA9PSBzaXplKVxcbiAxMjg6XFx0XFx0XFx0bWVtY3B5KGRhdGEsIGJ1Ziwgc2l6ZSk7XFxuIDEyOTpcXHRcXHRlbHNlIGlmIChlcnIgXFx1MDAzZT0gMClcXG4gMTMwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDEzMTpcXHRcXHRrZnJlZShidWYpO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRlcnJfb3V0OlxcbiAxMzQ6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbiAxMzg6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4gMTM5OlxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NTUuNzQyNjkzMjA1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTUzNTYyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgY29udHJvbF93cml0ZWAgUGF0Y2ggYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjaGFuZ2luZyB0aGUgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uIGluIHRoZSBDSDkyMDAgZHJpdmVyLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGByZXR1cm4gMDtgIHRoYXQgd2FzLCBlc3NlbnRpYWxseSwgbWFza2luZyBhbnkgZXJyb3JzIHJldHVybmVkIGZyb20gYHVzYl9jb250cm9sX21zZ2AuIFdlJ3JlIHJlbW92aW5nIHRoYXQsIGFsbG93aW5nIHRoZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlIChgZXJyYCkgaWYgdGhlIFVTQiBjb250cm9sIG1lc3NhZ2UgZmFpbHMsIG9yIGAtRUlOVkFMYCBpZiB0aGVyZSB3YXMgYSBzaXplIG1pc21hdGNoLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1xuXG5MZXQncyB3YWxrIHRocm91Z2ggaXQuIEluc2lkZSBgY29udHJvbF93cml0ZWAsIHdlIGFsbG9jYXRlIGEgYnVmZmVyIChgYnVmID0ga21lbWR1cCguLi4pYCkgaWYgZGF0YSBpcyBwcm92aWRlZC4gVGhlbiB3ZSBjYWxsIGB1c2JfY29udHJvbF9tc2dgLiBBZnRlciB0aGF0LCB3ZSBjaGVjayBpZiB0aGUgcmV0dXJuZWQgZXJyb3IgYGVycmAgaW5kaWNhdGVzIGEgc2hvcnQgd3JpdGUuIEZpbmFsbHksIHdlIGBrZnJlZShidWYpYC4gVGhlIGtleSBjaGFuZ2UgaXMgcmVtb3ZpbmcgdGhhdCBwcmVtYXR1cmUgYHJldHVybiAwO2AuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UncmUgbm90IHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHRoZSBkZXZpY2Ugb3IsIGV2ZW4gd29yc2UsIHRvIHVzZXJzcGFjZS4gU28sIEkgbmVlZCB0byBjaGVjazogZG9lcyBgY29udHJvbF93cml0ZWAgd3JpdGUgYW55dGhpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBidWZmZXI/IFRoZSBhbnN3ZXIgaXMgbm87IGBjb250cm9sX3dyaXRlYCBpcyBhIFVTQiB3cml0ZSBmdW5jdGlvbi4gTmV4dCwgYXJlIGFueSBjYWxsZXJzIG9mIGBjb250cm9sX3dyaXRlYCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2Ugb2YgdGhpcyBjaGFuZ2U/XG5cbkxldCdzIGxvb2sgYXQgdGhlIGNhbGxlcnM6IEZpcnN0LCBgY2g5MjAwX21kaW9fd3JpdGVgLiBUaGUgY29kZSBzaG93cyB0aGUgYGJ1ZmZgIHZhcmlhYmxlIGlzICpmdWxseSogaW5pdGlhbGl6ZWQuIEltcG9ydGFudGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjb250cm9sX3dyaXRlYCBpcyAqaWdub3JlZCogaGVyZSwgc28gZXZlbiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciBpdCB3b3VsZG4ndCBiZSBoYW5kbGVkLiBOZXh0LCB3ZSBoYXZlIGBjaDkyMDBfYmluZGAuIGBkYXRhYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgKmVhY2gqIGNhbGwgdG8gYGNvbnRyb2xfd3JpdGVgLCBhbmQgdGhlIHJlc3VsdCBpcyBvdmVyd3JpdHRlbi4gU28gdGhlcmUncyBubyB3YXkgdGhpcyBjaGFuZ2UgY2F1c2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHJlYWQgYnkgdGhlIGNhbGxlci4gQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9yIHVzYWdlcz8gTm9wZS4gU28sIHRoYXQncyBnb29kLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNyaXRlcmlhIHJpZ29yb3VzbHk6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzL3BhZGRpbmcgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkPyBObywgdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyB0byB0aGUgVVNCIGRldmljZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYy9icmFuY2hpbmcgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm90IGluIHRoaXMgY2FzZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vLCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLlxuXG5TbywgdG8gc3VtbWFyaXplIGZvciB0aGUgcmVjb3JkOiB0aGlzIHBhdGNoIHNpbXBseSByZW1vdmVzIGFuIHVucmVhY2hhYmxlIGByZXR1cm4gMDtgIGZyb20gYGNvbnRyb2xfd3JpdGUoKWAuIFRoaXMgd2FzIG1hc2tpbmcgdGhlIHJldHVybiBjb2RlIGZyb20gYHVzYl9jb250cm9sX21zZ2AsIGFuZCB3ZSdyZSBhbGxvd2luZyB0aGUgZnVuY3Rpb24gdG8gcHJvcGVybHkgcmV0dXJuIHRoZSBhY3R1YWwgZXJyb3IuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBleHBvc3VyZSBvZiBkYXRhIHRvIHVzZXJzcGFjZSwgbm8gcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYWxsIGJ1ZmZlcnMgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzc1Nhbml0aXplcikgY2hlY2tzIGFuZCBlcnJvciBoYW5kbGluZyBhcmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQuIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY5LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyODowNS44OTYyNTg5NDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlcnNwYWNlLWZhY2luZyBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlcnMgcHJpb3IgdG8gaW52b2NhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiBlcnJvbmVvdXMgYHJldHVybiAwO2AgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzpjb250cm9sX3dyaXRlKClgLCBhbGxvd2luZyBlcnJvciByZXR1cm4gdmFsdWVzIGZyb20gYHVzYl9jb250cm9sX21zZygpYCBvciBgLUVJTlZBTGAgb24gaW5jb21wbGV0ZSB3cml0ZXMgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGJhY2sgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIGJlaW5nIHVuY29uZGl0aW9uYWxseSBtYXNrZWQgYnkgYDBgLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2Vyc3BhY2UtZmFjaW5nIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCBidWZmZXJzIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVycyBwcmlvciB0byBpbnZvY2F0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgZnVsbHkgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 06:52:49 +0000 UTC FinishedAt: 2026-09-06 08:28:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET", "USB_NET_DRIVERS", "USB" ], "series_id": "377b5ef5-ed84-4a69-adab-9d29d7eb6107" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "control_write", "ch9200_bind", "ch9200_mdio_write" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OywKICAgICYjMzQ7Y2g5MjAwX21kaW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGFuIGVycm9uZW91cyBgcmV0dXJuIDA7YCBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOmNvbnRyb2xfd3JpdGUoKWAsIGFsbG93aW5nIGVycm9yIHJldHVybiB2YWx1ZXMgZnJvbSBgdXNiX2NvbnRyb2xfbXNnKClgIG9yIGAtRUlOVkFMYCBvbiBpbmNvbXBsZXRlIHdyaXRlcyB0byBwcm9wZXJseSBwcm9wYWdhdGUgYmFjayB0byB0aGUgY2FsbGVyIGluc3RlYWQgb2YgYmVpbmcgdW5jb25kaXRpb25hbGx5IG1hc2tlZCBieSBgMGAuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2Vyc3BhY2UtZmFjaW5nIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCBidWZmZXJzIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVycyBwcmlvciB0byBpbnZvY2F0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgZnVsbHkgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLiBGdXp6aW5nIGNhbiB2ZXJpZnkgZXJyb3ItaGFuZGxpbmcgYW5kIGJpbmRpbmcgbG9naWMgd2hlbiBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZmFpbCBvciByZXR1cm4gdW5leHBlY3RlZCBzaXplcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlYjViMzhkZTgwN2ZjMjE0N2QyYjBmZWJhZTRmZjg0MzdmOGRkMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjI3OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuaW5kZXggYTIwNmZmYTc2ZjFiOS4uM2E4MWU5ZTk2ZmQzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5AQCAtMTY4LDggJiM0MzsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJyX291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OywKICAgICYjMzQ7Y2g5MjAwX21kaW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLiBGdXp6aW5nIGNhbiB2ZXJpZnkgZXJyb3ItaGFuZGxpbmcgYW5kIGJpbmRpbmcgbG9naWMgd2hlbiBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZmFpbCBvciByZXR1cm4gdW5leHBlY3RlZCBzaXplcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlYjViMzhkZTgwN2ZjMjE0N2QyYjBmZWJhZTRmZjg0MzdmOGRkMzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA4OjI3OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKQEAgLTE2OCw4ICYjNDM7MTY4LDYgQEAgc3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LAogCQllcnIgPSAtRUlOVkFMOwogCWtmcmVlKGJ1Zik7CiAKLQlyZXR1cm4gMDsKLQogZXJyX291dDoKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG1vZGlmaWVkIGZpbGUsIHdoaWNoIGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBOb3csIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgMTY4IGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0e1xuIDE0MTpcdFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcbiAxNDI6XHRcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xuIDE0MzpcdFx0aW50IGVyciA9IDA7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxuIDE0NjpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuIDE0NzpcdFx0XHRcdFx0VVNCX1JFQ0lQX09USEVSKTtcbiAxNDg6XHRcdGVsc2VcbiAxNDk6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNTA6XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UpO1xuIDE1MTpcdFxuIDE1MjpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxuXCYjMzQ7LFxuIDE1MzpcdFx0XHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xuIDE1NDpcdFxuIDE1NTpcdFx0aWYgKGRhdGEpIHtcbiAxNTY6XHRcdFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcbiAxNTc6XHRcdFx0aWYgKCFidWYpIHtcbiAxNTg6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDE1OTpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiAxNjA6XHRcdFx0fVxuIDE2MTpcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cdTAwM2V1ZGV2LFxuIDE2NDpcdFx0XHRcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXHUwMDNldWRldiwgMCksXG4gMTY1Olx0XHRcdFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcbiAxNjY6XHRcdFx0XHQgICAgICB0aW1lb3V0KTtcbiAxNjc6XHRcdGlmIChlcnIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBlcnIgXHUwMDNjIHNpemUpXG4gMTY4Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTY5Olx0XHRrZnJlZShidWYpO1xuIDE3MDpcdFxuIDE3MTpcdGVycl9vdXQ6XG4gMTcyOlx0XHRyZXR1cm4gZXJyO1xuIDE3MzpcdH1cbiAxNzQ6XHRcbiAxNzU6XHRzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcbiAxNzY6XHR7XG4gMTc3Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDE3ODpcdFx0dW5zaWduZWQgY2hhciBidWZmWzJdO1xuIDE3OTpcdFx0aW50IHJldDtcbiAxODA6XHRcbiAxODE6XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDslcyBwaHlfaWQ6JTAyeCBsb2M6JTAyeFxcblwmIzM0OyxcbiAxODI6XHRcdFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChwaHlfaWQgIT0gMClcbiAxODU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTg2Olx0XG4gMTg3Olx0XHRyZXQgPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIGxvYyAqIDIsIGJ1ZmYsIDB4MDIsXG4gMTg4Olx0XHRcdFx0ICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAxODk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBjaDkyMDAuY2AgYW5kIGBjb250cm9sX3dyaXRlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBgY2g5MjAwLmNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgY29udHJvbF93cml0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgZXhhbWluYXRpb24gb2YgYGNvbnRyb2xfd3JpdGVgIGl0c2VsZjsgdW5kZXJzdGFuZGluZyBpdHMgY29yZSBwdXJwb3NlIGFuZCB0aGUgcGFyYW1ldGVycyBpdCBoYW5kbGVzIGlzIGtleS4gQWZ0ZXIgdGhhdCwgdGhlIG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIHdpdGhpbiB0aGUgYGNoOTIwMC5jYCBmaWxlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgZ2l2ZXMgY3JpdGljYWwgaW5zaWdodCBpbnRvIHRoZSBzeXN0ZW0mIzM5O3Mgb3BlcmF0aW9uYWwgbG9naWMuIEl0IGlzIGxpa2VseSB0aGF0IGBjb250cm9sX3dyaXRlYCBpcyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBgY2g5MjAwLmNgIG1vZHVsZSwgc28gdW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb24gaW4gcmVsYXRpb24gdG8gdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGlzIGltcG9ydGFudC4gRm9sbG93aW5nIHRoZXNlIGluaXRpYWwgaW52ZXN0aWdhdGlvbnMsIGxldCB1cyByZWFkIG1vcmUgb2YgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBgY2g5MjAwLmNgIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKlxuICAgMjpcdCAqIFVTQiAxME0vMTAwTSBldGhlcm5ldCBhZGFwdGVyXG4gICAzOlx0ICpcbiAgIDQ6XHQgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgNTpcdCAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIFwmIzM0O2FzIGlzXCYjMzQ7IHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueVxuICAgNjpcdCAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkXG4gICA3Olx0ICpcbiAgIDg6XHQgKi9cbiAgIDk6XHRcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMjM6XHRcbiAgMjQ6XHQjZGVmaW5lIENIOTIwMF9WSURcdFx0MHgxQTg2XG4gIDI1Olx0I2RlZmluZSBDSDkyMDBfUElEX0UwOTJcdFx0MHhFMDkyXG4gIDI2Olx0XG4gIDI3Olx0I2RlZmluZSBDVFJMX1RJTUVPVVRfTVNcdFx0MTAwMFxuICAyODpcdFxuICAyOTpcdCNkZWZpbmUgQ09OVFJPTF9USU1FT1VUX01TIDEwMDBcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIFJFUVVFU1RfUkVBRFx0MHgwRVxuICAzMjpcdCNkZWZpbmUgUkVRVUVTVF9XUklURVx0MHgwRlxuICAzMzpcdFxuICAzNDpcdC8qIEFkZHJlc3Mgc3BhY2U6XG4gIDM1Olx0ICogMDAtNjMgOiBNSUlcbiAgMzY6XHQgKiA2NC0xMjg6IE1BQ1xuICAzNzpcdCAqXG4gIDM4Olx0ICogTm90ZTogYWxsIGFjY2Vzc2VzIG11c3QgYmUgMTYtYml0XG4gIDM5Olx0ICovXG4gIDQwOlx0XG4gIDQxOlx0I2RlZmluZSBNQUNfUkVHX0NUUkwgNjRcbiAgNDI6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVFVTIDY2XG4gIDQzOlx0I2RlZmluZSBNQUNfUkVHX0lOVEVSUlVQVF9NQVNLIDY4XG4gIDQ0Olx0I2RlZmluZSBNQUNfUkVHX1BIWV9DT01NQU5EIDcwXG4gIDQ1Olx0I2RlZmluZSBNQUNfUkVHX1BIWV9EQVRBIDcyXG4gIDQ2Olx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTCA3NFxuICA0NzpcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX00gNzZcbiAgNDg6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVElPTl9IIDc4XG4gIDQ5Olx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTCA4MFxuICA1MDpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00xIDgyXG4gIDUxOlx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTTIgODRcbiAgNTI6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9IIDg2XG4gIDUzOlx0I2RlZmluZSBNQUNfUkVHX1RIUkVTSE9MRCA4OFxuICA1NDpcdCNkZWZpbmUgTUFDX1JFR19GSUZPX0RFUFRIIDkwXG4gIDU1Olx0I2RlZmluZSBNQUNfUkVHX1BBVVNFIDkyXG4gIDU2Olx0I2RlZmluZSBNQUNfUkVHX0ZMT1dfQ09OVFJPTCA5NFxuICA1NzpcdFxuICA1ODpcdC8qIENvbnRyb2wgcmVnaXN0ZXIgYml0c1xuICA1OTpcdCAqXG4gIDYwOlx0ICogTm90ZTogYml0cyAxMyBhbmQgMTUgYXJlIHJlc2VydmVkXG4gIDYxOlx0ICovXG4gIDYyOlx0I2RlZmluZSBMT09QQkFDS1x0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTQpXG4gIDYzOlx0I2RlZmluZSBCQVNFMTAwWFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTIpXG4gIDY0Olx0I2RlZmluZSBNQlBTXzEwXHRcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDExKVxuICA2NTpcdCNkZWZpbmUgRFVQTEVYX01PREVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEwKVxuICA2NjpcdCNkZWZpbmUgUEFVU0VfRlJBTUVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDkpXG4gIDY3Olx0I2RlZmluZSBQUk9NSVNDVU9VU1x0XHQoMHgwMSBcdTAwM2NcdTAwM2MgOClcbiAgNjg6XHQjZGVmaW5lIE1VTFRJQ0FTVFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNylcbiAgNjk6XHQjZGVmaW5lIEJST0FEQ0FTVFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNilcbiAgNzA6XHQjZGVmaW5lIEhBU0hcdFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNSlcbiAgNzE6XHQjZGVmaW5lIEFQUEVORF9QQURcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDQpXG4gIDcyOlx0I2RlZmluZSBBUFBFTkRfQ1JDXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAzKVxuICA3MzpcdCNkZWZpbmUgVFJBTlNNSVRURVJfQUNUSU9OXHQoMHgwMSBcdTAwM2NcdTAwM2MgMilcbiAgNzQ6XHQjZGVmaW5lIFJFQ0VJVkVSX0FDVElPTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMSlcbiAgNzU6XHQjZGVmaW5lIERNQV9BQ1RJT05cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDApXG4gIDc2Olx0XG4gIDc3Olx0LyogU3RhdHVzIHJlZ2lzdGVyIGJpdHNcbiAgNzg6XHQgKlxuICA3OTpcdCAqIE5vdGU6IGJpdHMgNy0xNSBhcmUgcmVzZXJ2ZWRcbiAgODA6XHQgKi9cbiAgODE6XHQjZGVmaW5lIEFMSUdOTUVOVFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNilcbiAgODI6XHQjZGVmaW5lIEZJRk9fT1ZFUl9SVU5cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDUpXG4gIDgzOlx0I2RlZmluZSBGSUZPX1VOREVSX1JVTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNClcbiAgODQ6XHQjZGVmaW5lIFJYX0VSUk9SXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAzKVxuICA4NTpcdCNkZWZpbmUgUlhfQ09NUExFVEVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDIpXG4gIDg2Olx0I2RlZmluZSBUWF9FUlJPUlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMSlcbiAgODc6XHQjZGVmaW5lIFRYX0NPTVBMRVRFXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAwKVxuICA4ODpcdFxuICA4OTpcdC8qIEZJRk8gZGVwdGggcmVnaXN0ZXIgYml0c1xuICA5MDpcdCAqXG4gIDkxOlx0ICogTm90ZTogYml0cyA2IGFuZCAxNCBhcmUgcmVzZXJ2ZWRcbiAgOTI6XHQgKi9cbiAgOTM6XHRcbiAgOTQ6XHQjZGVmaW5lIEVUSF9UWEJEXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxNSlcbiAgOTU6XHQjZGVmaW5lIEVUTl9UWF9GSUZPX0RFUFRIXHQoMHgwMSBcdTAwM2NcdTAwM2MgOClcbiAgOTY6XHQjZGVmaW5lIEVUSF9SWEJEXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA3KVxuICA5NzpcdCNkZWZpbmUgRVRIX1JYX0ZJRk9fREVQVEhcdCgweDAxIFx1MDAzY1x1MDAzYyAwKVxuICA5ODpcdFxuICA5OTpcdHN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcbiAxMDA6XHRcdFx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgZm9yIHRoaXMgQ0g5MjAwIFVTQiBFdGhlcm5ldCBhZGFwdGVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHR5cGljYWwgVVNCIGRyaXZlciBjaGFsbGVuZ2VzIOKAkyBlbmRwb2ludCBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBzb21lIHF1aXJrcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGlwc2V0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYSBzdHJ1Y3R1cmVkIGFwcHJvYWNoLCBsaWtlbHkgdXNpbmcgdGhlIFVTQiBjb3JlJiMzOTtzIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGRyaXZlciBlbnRyeSBwb2ludHMgbGlrZSBgcHJvYmVgLCBgZGlzY29ubmVjdGAsIGFuZCBgc3VzcGVuZC9yZXN1bWVgIGltcGxlbWVudGF0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBjb250cm9sIHRyYW5zZmVyIHNlcXVlbmNlcy4gSSB3aWxsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGVpciBlcnJvciBoYW5kbGluZzsgVVNCIGRldmljZXMgY2FuIGJlIG5vdG9yaW91c2x5IHNlbnNpdGl2ZS4gSXQmIzM5O3MgYWx3YXlzIGludGVyZXN0aW5nIHRvIHNlZSBob3cgZGlmZmVyZW50IGRldmVsb3BlcnMgYXBwcm9hY2ggdGhlIHNhbWUgcHJvYmxlbSwgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIG1hZGUsIGFuZCBhbnkgY2xldmVyIHRlY2huaXF1ZXMgdGhleSYjMzk7dmUgZW1wbG95ZWQgdG8gd29yayBhcm91bmQgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XG4gMTgxOlx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7JXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXG5cJiMzNDssXG4gMTgyOlx0XHRcdCAgIF9fZnVuY19fLCBwaHlfaWQsIGxvYyk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAocGh5X2lkICE9IDApXG4gMTg1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDE4NjpcdFxuIDE4NzpcdFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxuIDE4ODpcdFx0XHRcdCAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMTg5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE5MDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5MTpcdFxuIDE5MjpcdFx0cmV0dXJuIChidWZmWzBdIHwgYnVmZlsxXSBcdTAwM2NcdTAwM2MgOCk7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdHN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gMTk2Olx0XHRcdFx0ICAgICAgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbClcbiAxOTc6XHR7XG4gMTk4Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDE5OTpcdFx0dW5zaWduZWQgY2hhciBidWZmWzJdO1xuIDIwMDpcdFxuIDIwMTpcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0OyVzKCkgcGh5X2lkPSUwMnggbG9jOiUwMnhcXG5cJiMzNDssXG4gMjAyOlx0XHRcdCAgIF9fZnVuY19fLCBwaHlfaWQsIGxvYyk7XG4gMjAzOlx0XG4gMjA0Olx0XHRpZiAocGh5X2lkICE9IDApXG4gMjA1Olx0XHRcdHJldHVybjtcbiAyMDY6XHRcbiAyMDc6XHRcdGJ1ZmZbMF0gPSAodW5zaWduZWQgY2hhcil2YWw7XG4gMjA4Olx0XHRidWZmWzFdID0gKHVuc2lnbmVkIGNoYXIpKHZhbCBcdTAwM2VcdTAwM2UgOCk7XG4gMjA5Olx0XG4gMjEwOlx0XHRjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcbiAyMTE6XHRcdFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAyMTI6XHR9XG4gMjEzOlx0XG4gMjE0Olx0c3RhdGljIGludCBjaDkyMDBfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gMjE1Olx0e1xuIDIxNjpcdFx0c3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7XG4gMjE3Olx0XG4gMjE4Olx0XHRtaWlfY2hlY2tfbWVkaWEoXHUwMDI2ZGV2LVx1MDAzZW1paSwgMSwgMSk7XG4gMjE5Olx0XHRtaWlfZXRodG9vbF9nc2V0KFx1MDAyNmRldi1cdTAwM2VtaWksIFx1MDAyNmVjbWQpO1xuIDIyMDpcdFxuIDIyMTpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIHNwZWVkOiVkIGR1cGxleDolZFxcblwmIzM0OyxcbiAyMjI6XHRcdFx0ICAgX19mdW5jX18sIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4KTtcbiAyMjM6XHRcbiAyMjQ6XHRcdHJldHVybiAwO1xuIDIyNTpcdH1cbiAyMjY6XHRcbiAyMjc6XHRzdGF0aWMgdm9pZCBjaDkyMDBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuIDIyODpcdHtcbiAyMjk6XHRcdGludCBsaW5rO1xuIDIzMDpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIFx1MDAzYyAxNilcbiAyMzM6XHRcdFx0cmV0dXJuO1xuIDIzNDpcdFxuIDIzNTpcdFx0YnVmID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcbiAyMzY6XHRcdGxpbmsgPSAhIShidWZbMF0gXHUwMDI2IDB4MDEpO1xuIDIzNzpcdFxuIDIzODpcdFx0aWYgKGxpbmspIHtcbiAyMzk6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXHUwMDNlbmV0KTtcbiAyNDA6XHRcdFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX0xJTktfUkVTRVQpO1xuIDI0MTpcdFx0fSBlbHNlIHtcbiAyNDI6XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2LVx1MDAzZW5ldCk7XG4gMjQzOlx0XHR9XG4gMjQ0Olx0fVxuIDI0NTpcdFxuIDI0NjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNDc6XHRcdFx0XHRcdCAgICAgICBnZnBfdCBmbGFncylcbiAyNDg6XHR7XG4gMjQ5Olx0XHRpbnQgaSA9IDA7XG4gMjUwOlx0XHRpbnQgbGVuID0gMDtcbiAyNTE6XHRcdGludCB0eF9vdmVyaGVhZCA9IDA7XG4gMjUyOlx0XG4gMjUzOlx0XHR0eF9vdmVyaGVhZCA9IDB4NDA7XG4gMjU0Olx0XG4gMjU1Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDI1NjpcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIHR4X292ZXJoZWFkKSkge1xuIDI1NzpcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDI1ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNTk6XHRcdH1cbiAyNjA6XHRcbiAyNjE6XHRcdF9fc2tiX3B1c2goc2tiLCB0eF9vdmVyaGVhZCk7XG4gMjYyOlx0XHQvKiB1c2JuZXQgYWRkcyBwYWRkaW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHBhY2tldCBzaXplXG4gMjYzOlx0XHQgKiBpZiBzbywgYWRqdXN0IGxlbmd0aCB2YWx1ZSBpbiBoZWFkZXJcbiAyNjQ6XHRcdCAqL1xuIDI2NTpcdFx0aWYgKChza2ItXHUwMDNlbGVuICUgZGV2LVx1MDAzZW1heHBhY2tldCkgPT0gMClcbiAyNjY6XHRcdFx0bGVuJiM0MzsmIzQzOztcbiAyNjc6XHRcbiAyNjg6XHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gbGVuO1xuIDI2OTpcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBsZW4gXHUwMDNlXHUwMDNlIDg7XG4gMjcwOlx0XHRza2ItXHUwMDNlZGF0YVsyXSA9IDB4MDA7XG4gMjcxOlx0XHRza2ItXHUwMDNlZGF0YVszXSA9IDB4ODA7XG4gMjcyOlx0XG4gMjczOlx0XHRmb3IgKGkgPSA0OyBpIFx1MDAzYyA0ODsgaSYjNDM7JiM0MzspXG4gMjc0Olx0XHRcdHNrYi1cdTAwM2VkYXRhW2ldID0gMHgwMDtcbiAyNzU6XHRcbiAyNzY6XHRcdHNrYi1cdTAwM2VkYXRhWzQ4XSA9IGxlbjtcbiAyNzc6XHRcdHNrYi1cdTAwM2VkYXRhWzQ5XSA9IGxlbiBcdTAwM2VcdTAwM2UgODtcbiAyNzg6XHRcdHNrYi1cdTAwM2VkYXRhWzUwXSA9IDB4MDA7XG4gMjc5Olx0XHRza2ItXHUwMDNlZGF0YVs1MV0gPSAweDgwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgZm9yIHRoaXMgQ0g5MjAwIFVTQiBFdGhlcm5ldCBhZGFwdGVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHR5cGljYWwgVVNCIGRyaXZlciBjaGFsbGVuZ2VzIOKAkyBlbmRwb2ludCBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBzb21lIHF1aXJrcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGlwc2V0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYSBzdHJ1Y3R1cmVkIGFwcHJvYWNoLCBsaWtlbHkgdXNpbmcgdGhlIFVTQiBjb3JlJiMzOTtzIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGRyaXZlciBlbnRyeSBwb2ludHMgbGlrZSBgcHJvYmVgLCBgZGlzY29ubmVjdGAsIGFuZCBgc3VzcGVuZC9yZXN1bWVgIGltcGxlbWVudGF0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBjb250cm9sIHRyYW5zZmVyIHNlcXVlbmNlcy4gSSB3aWxsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGVpciBlcnJvciBoYW5kbGluZzsgVVNCIGRldmljZXMgY2FuIGJlIG5vdG9yaW91c2x5IHNlbnNpdGl2ZS4gSXQmIzM5O3MgYWx3YXlzIGludGVyZXN0aW5nIHRvIHNlZSBob3cgZGlmZmVyZW50IGRldmVsb3BlcnMgYXBwcm9hY2ggdGhlIHNhbWUgcHJvYmxlbSwgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIG1hZGUsIGFuZCBhbnkgY2xldmVyIHRlY2huaXF1ZXMgdGhleSYjMzk7dmUgZW1wbG95ZWQgdG8gd29yayBhcm91bmQgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFxuIDI4MTpcdFx0Zm9yIChpID0gNTI7IGkgXHUwMDNjIDY0OyBpJiM0MzsmIzQzOylcbiAyODI6XHRcdFx0c2tiLVx1MDAzZWRhdGFbaV0gPSAweDAwO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0dXJuIHNrYjtcbiAyODU6XHR9XG4gMjg2Olx0XG4gMjg3Olx0c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI4ODpcdHtcbiAyODk6XHRcdGludCBsZW4gPSAwO1xuIDI5MDpcdFx0aW50IHJ4X292ZXJoZWFkID0gMDtcbiAyOTE6XHRcbiAyOTI6XHRcdHJ4X292ZXJoZWFkID0gNjQ7XG4gMjkzOlx0XG4gMjk0Olx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XG4gMjk1Olx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXG5cJiMzNDspO1xuIDI5NjpcdFx0XHRyZXR1cm4gMDtcbiAyOTc6XHRcdH1cbiAyOTg6XHRcbiAyOTk6XHRcdGxlbiA9IChza2ItXHUwMDNlZGF0YVtza2ItXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVx1MDAzZWRhdGFbc2tiLVx1MDAzZWxlbiAtIDE1XSBcdTAwM2NcdTAwM2MgOCk7XG4gMzAwOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMzAxOlx0XG4gMzAyOlx0XHRyZXR1cm4gMTtcbiAzMDM6XHR9XG4gMzA0Olx0XG4gMzA1Olx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuIDMwNjpcdHtcbiAzMDc6XHRcdGludCBlcnIgPSAwO1xuIDMwODpcdFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcbiAzMDk6XHRcdGludCByZF9tYWNfbGVuID0gMDtcbiAzMTA6XHRcbiAzMTE6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXM6XFxuXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcblwmIzM0OywgX19mdW5jX18sXG4gMzEyOlx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxuIDMxMzpcdFx0XHQgICBsZTE2X3RvX2NwdShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xuIDMxNDpcdFxuIDMxNTpcdFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcbiAzMTY6XHRcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXG4gMzE3Olx0XHRcdFx0XHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcbiAzMTg6XHRcdFx0XHRcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMTk6XHRcdHJkX21hY19sZW4gJiM0Mzs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXG4gMzIwOlx0XHRcdFx0XHQgICBtYWNfYWRkciAmIzQzOyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMTpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcbiAzMjI6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzIzOlx0XHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcbiAzMjQ6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMjU6XHRcbiAzMjY6XHRcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcbiAzMjc6XHRcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcbiAzMjg6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMjk6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzA6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzE6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzI6XHRcbiAzMzM6XHRcdHJldHVybiBlcnI7XG4gMzM0Olx0fVxuIDMzNTpcdFxuIDMzNjpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzc6XHR7XG4gMzM4Olx0XHRpbnQgcmV0dmFsID0gMDtcbiAzMzk6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDA6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MTpcdFxuIDM0MjpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDM6XHRcdGlmIChyZXR2YWwpXG4gMzQ0Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ3Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNDk6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTA6XHRcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1MjpcdFxuIDM1MzpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU0Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NTpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTY6XHRcbiAzNTc6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM1ODpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzU5Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYwOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYxOlx0XG4gMzYyOlx0XHRkYXRhWzBdID0gMHhBMDtcbiAzNjM6XHRcdGRhdGFbMV0gPSAweDkwO1xuIDM2NDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiAzNjU6XHRcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzNjY6XHRcbiAzNjc6XHRcdGRhdGFbMF0gPSAweDMwO1xuIDM2ODpcdFx0ZGF0YVsxXSA9IDB4MDA7XG4gMzY5Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbiAzNzA6XHRcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzNzE6XHRcbiAzNzI6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM3MzpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzc0Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzc1Olx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzc2Olx0XG4gMzc3Olx0XHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiAzNzg6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM3OTpcdFx0ZGF0YVsxXSA9IDB4MDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBmaWxlLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgVVNCIERyaXZlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGNoOTIwMC5jYCBmaWxlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSYjMzk7bSBhbHJlYWR5IGZvcm1pbmcgc29tZSBleHBlY3RhdGlvbnMgYmFzZWQgb24gdGhlIGZpbGVuYW1lIGFuZCBwYXRoLiBLbm93aW5nIHRoZSBgZHJpdmVycy9uZXQvdXNiYCBsb2NhdGlvbiwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBpcyBhIG5ldHdvcmsgZHJpdmVyIGZvciBhIFVTQi1iYXNlZCBkZXZpY2UsIHByb2JhYmx5IGEgVVNCIEV0aGVybmV0IGFkYXB0ZXIgdXNpbmcgdGhlIENIOTIwMCBjaGlwc2V0LiBJJiMzOTttIGxpa2VseSBnb2luZyB0byBiZSBsb29raW5nIGF0IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgVVNCIGVudW1lcmF0aW9uLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGRhdGEgdHJhbnNmZXIsIGFuZCBwb3RlbnRpYWxseSBwb3dlciBtYW5hZ2VtZW50LiBUaGUgJiMzNDtjaDkyMDAmIzM0OyBwYXJ0IG5hcnJvd3MgaXQgZG93biBldmVuIGZ1cnRoZXIsIHN1Z2dlc3RpbmcgdGhpcyBkcml2ZXIgaXMgc3BlY2lmaWNhbGx5IHdyaXR0ZW4gZm9yIGEgZGV2aWNlIHVzaW5nIHRoYXQgcGFydGljdWxhciBzaWxpY29uLiBJJiMzOTttIGN1cmlvdXMgaWYgdGhpcyB1c2VzIHN0YW5kYXJkIFVTQiBuZXR3b3JrIGRldmljZSBjbGFzcyBwcm90b2NvbHMgb3IgaWYgaXQgaGFzIGFueSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIFVTQiBkZXNjcmlwdG9yIHBhcnNpbmcgYW5kIHRoZSBjb250cm9sIHRyYW5zZmVycy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBVU0IgZXJyb3JzIGFuZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBhbmQgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBuZXR3b3JrIHRyYWZmaWMgZmxvdywgcGVyaGFwcyBleGFtaW5pbmcgdGhlIHVzZSBvZiBwYWNrZXQgZGVzY3JpcHRvcnMsIERNQSwgYW5kIGFueSBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIDM4MTpcdFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM4MjpcdFxuIDM4MzpcdFx0ZGF0YVswXSA9IDB4NUY7XG4gMzg0Olx0XHRkYXRhWzFdID0gMHgwRDtcbiAzODU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXG4gMzg2Olx0XHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg3Olx0XG4gMzg4Olx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiAzODk6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiAzOTA6XHRcbiAzOTE6XHRcdHJldHVybiByZXR2YWw7XG4gMzkyOlx0fVxuIDM5MzpcdFxuIDM5NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gMzk1Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiAzOTY6XHRcdC5mbGFncyA9IEZMQUdfRVRIRVIsXG4gMzk3Olx0XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuIDM5ODpcdFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxuIDM5OTpcdFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxuIDQwMDpcdFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG4gNDAxOlx0XHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxuIDQwMjpcdFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXG4gNDAzOlx0fTtcbiA0MDQ6XHRcbiA0MDU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XG4gNDA2Olx0XHR7XG4gNDA3Olx0XHQgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MiksXG4gNDA4Olx0XHQgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y2g5MjAwX2luZm8sXG4gNDA5Olx0XHQgfSxcbiA0MTA6XHRcdHt9LFxuIDQxMTpcdH07XG4gNDEyOlx0XG4gNDEzOlx0TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNoOTIwMF9wcm9kdWN0cyk7XG4gNDE0Olx0XG4gNDE1Olx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoOTIwMF9kcml2ZXIgPSB7XG4gNDE2Olx0XHQubmFtZSA9IFwmIzM0O2NoOTIwMFwmIzM0OyxcbiA0MTc6XHRcdC5pZF90YWJsZSA9IGNoOTIwMF9wcm9kdWN0cyxcbiA0MTg6XHRcdC5wcm9iZSA9IHVzYm5ldF9wcm9iZSxcbiA0MTk6XHRcdC5kaXNjb25uZWN0ID0gdXNibmV0X2Rpc2Nvbm5lY3QsXG4gNDIwOlx0XHQuc3VzcGVuZCA9IHVzYm5ldF9zdXNwZW5kLFxuIDQyMTpcdFx0LnJlc3VtZSA9IHVzYm5ldF9yZXN1bWUsXG4gNDIyOlx0fTtcbiA0MjM6XHRcbiA0MjQ6XHRtb2R1bGVfdXNiX2RyaXZlcihjaDkyMDBfZHJpdmVyKTtcbiA0MjU6XHRcbiA0MjY6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UWluSGVuZyBDSDkyMDAgVVNCIE5ldHdvcmsgZGV2aWNlXCYjMzQ7KTtcbiA0Mjc6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgRHJpdmVyIEJ1Z2ZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzLCBmcmFua2x5LCBhIGJpdCBzbG9wcHkuIFRoZSBmdW5jdGlvbiwgYWZ0ZXIgY2FsbGluZyBgdXNiX2NvbnRyb2xfbXNnYCwgd291bGQgKmFsd2F5cyogcmV0dXJuIDAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIFVTQiBjb250cm9sIG1lc3NhZ2UgY2FsbC4gRXZlbiBpZiBgdXNiX2NvbnRyb2xfbXNnYCByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGxpa2UgLUVJTlZBTCwgdGhlIGNvZGUgd291bGQgcGxvdyB0aHJvdWdoIGFuZCByZXR1cm4gMCwgZWZmZWN0aXZlbHkgbWFza2luZyB0aGUgcHJvYmxlbSEgVGhlIGNvZGUgd2FzIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgYGVycmAgdmFyaWFibGUgYGVyciAmZ3Q7PSAwICZhbXA7JmFtcDsgZXJyICZsdDsgc2l6ZWAuIFdoZW4gdGhpcyBjb25kaXRpb24gd2FzIHRydWUgdGhlIGNvZGUgc2V0IGBlcnIgPSAtRUlOVkFMO2AgYW5kIHRoZW4gcmV0dXJuZWQgMCwgd2lwaW5nIG91dCB0aGUgZXJyb3IuIFRoZSBmaXggcmVtb3ZlcyB0aGlzICYjMzQ7cmV0dXJuIDA7JiMzNDsgbWFraW5nIGBjb250cm9sX3dyaXRlYCBhY3R1YWxseSByZXR1cm4gdGhlIGVycm9yIGNvZGUuIFNvIG5vdywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcmVjZWl2ZSBhIG1lYW5pbmdmdWwgaW5kaWNhdGlvbiBvZiB3aGV0aGVyIHRoZSBjb250cm9sIHRyYW5zZmVyIHN1Y2NlZWRlZCBvciBmYWlsZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiBleHBsb2l0LCBtZWFuaW5nLCBpcyBpdCBzb21ldGhpbmcgd2UgY2FuIHRyaWdnZXIgYW5kIGZ1eno/CgpMZXQmIzM5O3Mgc2VlLiBUaGlzIGBjaDkyMDBgIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLiBTeXprYWxsZXIgc3VwcG9ydHMgVVNCIGVtdWxhdGlvbjsgaXQgY2FuIHNpbXVsYXRlIGEgVVNCIGRldmljZSB3aXRoIFZJRCAweDFBODYgYW5kIFBJRCAweEUwOTIsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIHNob3VsZCBjYXVzZSB0aGUgYGNoOTIwMGAgZHJpdmVyIHRvIGJlIHByb2JlZCwgdWx0aW1hdGVseSBpbnZva2luZyBgY29udHJvbF93cml0ZWAgdmlhIHRoZSBwcm9iZSBwcm9jZXNzIChgdXNibmV0X3Byb2JlYCAtJmd0OyBgY2g5MjAwX2JpbmRgKS4gVGhlIGtleSBpcyB3aGV0aGVyIGBjb250cm9sX3dyaXRlYCBnZXRzIGV4ZWN1dGVkIGluIHRoaXMgc2VxdWVuY2UuCgpZZXMsIGBjaDkyMDBfYmluZGAgZGVmaW5pdGVseSBjYWxscyBgY29udHJvbF93cml0ZWAsIGFuZCBzbyBkb2VzIGBjaDkyMDBfbWRpb193cml0ZWAuIFNvLCB0aGUgcGF0aCBpcyB0aGVyZSEKClN5emthbGxlciBpcyBhbHJlYWR5IHNldCB1cCB0byBmdXp6IFVTQiBkcml2ZXJzLiBTZWN0aW9uIDMgb2YgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgbWVudGlvbnMgVVNCIGdhZGdldCBzdXBwb3J0LgoKU28sIGluIHN1bW1hcnk6IHdlIGhhdmUgYSBwb3RlbnRpYWwgYnVnIHRoYXQsIHRoYW5rcyB0byB0aGUgZml4LCBjYW4gbm93IHByb3BhZ2F0ZSBlcnJvcnMuIFRoZSBkcml2ZXIgaXMgYWNjZXNzaWJsZSB2aWEgVVNCIGVtdWxhdGlvbiwgYW5kIHN5emthbGxlciBpcyBhIHBlcmZlY3QgdG9vbCBmb3IgZnV6emluZyBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgS2NvbmZpZyBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCwgYnV0IGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1enppbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0g5MjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjEzLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE1Olx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTYtXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTktXHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFVTQiBldGhlcm5ldCBhZGFwdGVyIHdpdGggYSBRaW5IZW5nXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo2MjA6XHQgIENIOTIwMCBjaGlwc2V0LlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjIxLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfVVNCX05FVF9DRENfTUJJTSlcdCYjNDM7PSBjZGNfbWJpbS5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVx0JiM0Mzs9IGNoOTIwMC5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVFDMTExKVx0JiM0Mzs9IGFxYzExMS5vXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjI0OiNkZWZpbmUgQ0g5MjAwX1ZJRFx0XHQweDFBODZcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNTojZGVmaW5lIENIOTIwMF9QSURfRTA5Mlx0XHQweEUwOTJcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9Mzk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzk1Olx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzk2LVx0LmZsYWdzID0gRkxBR19FVEhFUixcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9NDI0PW1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MjY6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1FpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI3LU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIFVTQl9ORVRfQ0g5MjAwIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYFVTQl9ORVRfQ0g5MjAwYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyByZXF1aXJlZCBhbmQgd2hhdCBlbmFibGluZyB0aGlzIGRyaXZlciBlbnRhaWxzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGhlYWRpbmcgdG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCB0byBzdGFydCB0aGUgYW5hbHlzaXMuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgZ29pbmcgdG8gYmUgYSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaGlkZGVuIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IGJhc2UgVVNCIG5ldHdvcmtpbmcgc3VwcG9ydCwgYW55IHJlbGV2YW50IFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywgYW55IG90aGVyIGNoaXBzZXQtc3BlY2lmaWMgb3B0aW9ucyB0aGF0IG1pZ2h0IGNvbWUgaW50byBwbGF5LCBhbmQgd2hldGhlciB0aGlzIGRyaXZlciBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBhbnkgb3RoZXJzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBlbnN1cmUgYSByb2J1c3QgYW5kIHdlbGwtZGVmaW5lZCBjb25maWd1cmF0aW9uIHRoYXQgd29uJiMzOTt0IGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaXNzdWVzIGRvd24gdGhlIGxpbmUgd2hlbiBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdCAgNEcgbW9kZW0gZnJvbSBWZXJpem9uOlxuIDYxMTpcdFxuIDYxMjpcdFx0ICBodHRwOi8vdWJ1bnR1Zm9ydW1zLm9yZy9zaG93cG9zdC5waHA/cD0xMDU4OTY0N1x1MDAyNnBvc3Rjb3VudD0xN1xuIDYxMzpcdFxuIDYxNDpcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuIDYxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gNjE2Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2MTc6XHRcdHNlbGVjdCBNSUlcbiA2MTg6XHRcdGhlbHBcbiA2MTk6XHRcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgVVNCIGV0aGVybmV0IGFkYXB0ZXIgd2l0aCBhIFFpbkhlbmdcbiA2MjA6XHRcdCAgQ0g5MjAwIGNoaXBzZXQuXG4gNjIxOlx0XG4gNjIyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDYyMzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxuIDYyNDpcdFxuIDYyNTpcdGNvbmZpZyBVU0JfTkVUX0FRQzExMVxuIDYyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XCYjMzQ7XG4gNjI3Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2Mjg6XHRcdHNlbGVjdCBDUkMzMlxuIDYyOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBVU0JfVVNCTkVUIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfVVNCTkVUYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBmb3Jnb3R0ZW4gYWJvdXQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGxpZ2h0IG9mIHRoZSByZWNlbnQgY2hhbmdlcy4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gbmV0d29ya2luZyBhY3Jvc3Mgc3VjaCBhIHdpZGUgYXJyYXkgb2YgZGV2aWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgZmVhdHVyZSBidWlsZHMgY2xlYW5seSwgbGlua3MgY29ycmVjdGx5LCBhbmQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIGFueSBgZGVmYXVsdGAgdmFsdWVzIHRoYXQgY291bGQgaW5kaXJlY3RseSBpbXBhY3QgYFVTQl9VU0JORVRgJiMzOTtzIGluY2x1c2lvbiBvciBleGNsdXNpb24uIEkgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCB3ZWxsLCBzbyBvdGhlcnMgY2FuIGZpbmQgd2hhdCB0aGV5IG5lZWQsIGFuZCBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZmxpY3RzIHdpdGggb3RoZXIgVVNCIG9yIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBldmVyeSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1VTQk5FVFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgLSBMaW5lcyAxMzAtMTQwKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDEzMC0xNDAgb2YgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHNlY3Rpb24gcGVydGFpbnMgdG8gYSBzcGVjaWZpYyBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyLCBnaXZlbiB0aGUgZmlsZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBwb3NzaWJseSBzb21lIGRlZmF1bHQgc2V0dGluZ3MuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGRyaXZlciYjMzk7cyBjb25maWd1cmFiaWxpdHkgbGllcy4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gYXNzZXNzIHRoZSBtb2R1bGFyaXR5LCBhbnkgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgbmV0d29yayBvciBVU0Igc3Vic3lzdGVtcywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBjaG9pY2VzIG1hZGUgYnkgdGhlIGRyaXZlciBtYWludGFpbmVyLiBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzIGhlbHBzIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmVoYXZlIGJ5IGRlZmF1bHQuIEkgYW0gbG9va2luZyBmb3Igd2F5cyBJIGNvdWxkIGN1c3RvbWl6ZSB0aGUgZHJpdmVyLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciBhbnkgdW51c3VhbCBmbGFncyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB0aGF0IG1pZ2h0IGluZGljYXRlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydC4gSSB3aWxsIGJlIGNvbXBhcmluZyB0aGlzIHBhcnQgdG8gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cbiAxMzE6XHRcbiAxMzI6XHRjb25maWcgVVNCX1VTQk5FVFxuIDEzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiAxMzQ6XHRcdHNlbGVjdCBNSUlcbiAxMzU6XHRcdGhlbHBcbiAxMzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxuIDEzNzpcdFx0ICB3aXRoIFwmIzM0O21pbmlkcml2ZXJzXCYjMzQ7IGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXG4gMTM4Olx0XHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xuIDEzOTpcdFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIFRoZSBVU0IgaG9zdCBydW5zIFwmIzM0O3VzYm5ldFwmIzM0OywgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XG4gMTQyOlx0XG4gMTQzOlx0XHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXCYjMzQ7bmV0d29ya1wmIzM0OyBvciBcJiMzNDtkYXRhIHRyYW5zZmVyXCYjMzQ7XG4gMTQ0Olx0XHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIGZvciB0aGUgYFVTQl9VU0JORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgaXQgcmVsaWVzIG9uIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCX1NVUFBPUlRgLCBvciBgTkVUREVWSUNFU2AuIEJlc3QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBiZWdpbiBteSBhbmFseXNpcyBmcm9tIHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBsaW5lIG9uZSwgYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIGZyb20gdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbW1lbnQgXCYjMzQ7SG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XCYjMzQ7XG4gICA2Olx0XHRkZXBlbmRzIG9uICFVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTmV0d29yayBBZGFwdGVyc1wmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCBVU0IgaWYgVVNCXG4gIDExOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gIDEyOlx0XG4gIDEzOlx0aWYgVVNCX05FVF9EUklWRVJTXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFVTQl9DQVRDXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcbiAgMjA6XHRcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcbiAgMjE6XHRcdCAgQmVsa2luIEY1VTAxMVxuICAyMjpcdFx0ICBCZWxraW4gRjVVMTExXG4gIDIzOlx0XHQgIENBVEMgTmV0TWF0ZVxuICAyNDpcdFx0ICBDQVRDIE5ldE1hdGUgSUlcbiAgMjU6XHRcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXG4gIDI2Olx0XG4gIDI3Olx0XHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXG4gIDI4Olx0XHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cbiAgMjk6XHRcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFVTQl9LQVdFVEhcbiAgMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxuICAzODpcdFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcbiAgMzk6XHRcdCAgM0NvbSAzQzE5MjUwXG4gIDQwOlx0XHQgIEFEUyBVU0ItMTBCVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwNwoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA3NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENIOTIwMCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zLiBgVVNCX05FVF9DSDkyMDBgIGRlcGVuZHMgb24gYFVTQl9VU0JORVRgLCB3aGljaCBpcyBpdHNlbGYgdW5kZXIgYFVTQl9ORVRfRFJJVkVSU2AuIEFuZCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBVU0JgIGNvbmZpZyBpcyByZXF1aXJlZC4gU28sIHRoZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgVVNCX05FVF9DSDkyMDBgLCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQgYFVTQmAuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZD8gQWhhLCBpdCYjMzk7cyB0aGUgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uLCB3aGljaCBpcyAqc3RhdGljKiB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIFRoaXMgaXMgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlIHdobyBjYWxscyBpdDogYGNoOTIwMF9tZGlvX3dyaXRlYCBhbmQgYGNoOTIwMF9iaW5kYC4gT2theSwgc28gYGNoOTIwMF9iaW5kYCBhbmQgYGNoOTIwMF9tZGlvX3dyaXRlYCBhcmUgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY2hhbmdlcyB0byBgY29udHJvbF93cml0ZWAuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMgaW4gYGNoOTIwMC5jYCBhcmUgYGNoOTIwMF9iaW5kYCwgYGNoOTIwMF9tZGlvX3dyaXRlYCBhbmQgb2YgY291cnNlIGBjb250cm9sX3dyaXRlYC4gSSBuZWVkIHRvIGNvbmZpcm0gYWdhaW4gdGhhdCBgY29udHJvbF93cml0ZWAgaXMgaW5kZWVkIHN0YXRpYy4gQWggeWVzLCBpdCBpcy4gQnV0IGBjaDkyMDBfYmluZGAgaXMgbm9uLXN0YXRpYyAoYnV0IGFsc28gc3RhdGljIGluIHRoZSBjb2RlLCBsaW5lIDMzNiBvZiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCA6IGBzdGF0aWMgaW50IGNoOTIwMF9iaW5kLi4uYCBidXQgcmVmZXJlbmNlZCBpbiBgY2g5MjAwX2luZm9gIHN0cnVjdCkuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IGdsb2JhbGx5IGV4cG9ydGVkLCBhcmUgc3RpbGwgc3ltYm9saWNhbGx5IHByZXNlbnQgaW4gc3RhbmRhcmQgYnVpbGRzICh3aXRoIGBrYWxsc3ltc2Agb3IgZnVuY3Rpb24gdHJhY2luZykgd2l0aGluIHRoZSBrZXJuZWwgb3IgdGhlIG1vZHVsZSwgdW5sZXNzIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0sIHNvIHRoYXQmIzM5O3MgZ29vZC4KCk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSB3aGF0IHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENvbnNpZGVyaW5nIG91ciBnb2FscywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4gU28sIGBjb250cm9sX3dyaXRlYCwgYGNoOTIwMF9iaW5kYCwgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAgYXJlIHRoZSB0YXJnZXRzLiBNYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIHJlcXVpcmVtZW50czogSXQmIzM5O3MgYSByZWFjaGFibGUgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgdmlhIHZpcnR1YWwgYnVzZXMgKHJhdy1nYWRnZXQgVVNCIGZ1enppbmcpLCBzbyB0aGF0JiMzOTtzIGEgY2hlY2suIEFsc28sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgY29udHJvbF93cml0ZWAuIEluc3RlYWQgb2YgYWx3YXlzIHJldHVybmluZyAwLCBpdCB3aWxsIHJldHVybiBlcnJvcnMsIHBvdGVudGlhbGx5IGltcGFjdGluZyBgY2g5MjAwX2JpbmRgIGFuZCBgY2g5MjAwX21kaW9fd3JpdGVgLiBUaGlzIGNoYW5nZSBjYW4gbGVhZCB0byBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIHByb2JlL2JpbmQvd3JpdGUgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgpTbywgaXMgaXQgV29ydGhGdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuCgpGaW5hbGx5LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYC4KCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCB0byB0aGUgcG9pbnQuIFRoaXMgVVNCIG5ldHdvcmsgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIHN5emthbGxlciBVU0IgcmF3LWdhZGdldCBlbXVsYXRpb24sIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYGNvbnRyb2xfd3JpdGVgIGlzIGNoYW5nZWQgdG8gcHJvcGVybHkgcHJvcGFnYXRlIFVTQiBjb250cm9sIG1lc3NhZ2UgZXJyb3JzIGR1cmluZyBiaW5kL3dyaXRlIG9wZXJhdGlvbnMuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywgJiMzNDtjaDkyMDBfYmluZCYjMzQ7LCAmIzM0O2NoOTIwMF9tZGlvX3dyaXRlJiMzNDtdYC4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LCAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LCAmIzM0O1VTQiYjMzQ7XWAuCgpFdmVyeXRoaW5nIHNlZW1zIGNvcnJlY3QsIGFsbCBiYXNlcyBhcmUgY292ZXJlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb250cm9sX3dyaXRlJiMzNDssCiAgICAmIzM0O2NoOTIwMF9iaW5kJiMzNDssCiAgICAmIzM0O2NoOTIwMF9tZGlvX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBzbyB0aGF0IGNvbnRyb2xfd3JpdGUoKSBjb3JyZWN0bHkgcHJvcGFnYXRlcyBlcnJvciBjb2RlcyBmcm9tIHVzYl9jb250cm9sX21zZygpIHJhdGhlciB0aGFuIHVuY29uZGl0aW9uYWxseSByZXR1cm5pbmcgMC4gQ0g5MjAwIGlzIGEgVVNCIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OywKICAgICYjMzQ7Y2g5MjAwX21kaW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLiBGdXp6aW5nIGNhbiB2ZXJpZnkgZXJyb3ItaGFuZGxpbmcgYW5kIGJpbmRpbmcgbG9naWMgd2hlbiBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZmFpbCBvciByZXR1cm4gdW5leHBlY3RlZCBzaXplcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXJzcGFjZS1mYWNpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIGJ1ZmZlcnMgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXJzIHByaW9yIHRvIGludm9jYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDg6Mjc6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKaW5kZXggYTIwNmZmYTc2ZjFiOS4uM2E4MWU5ZTk2ZmQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwpAQCAtMTY4LDggJiM0MzsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsCiAJCWVyciA9IC1FSU5WQUw7CiAJa2ZyZWUoYnVmKTsKIAotCXJldHVybiAwOwotCiBlcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjaDkyMDAgRHJpdmVyIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIFRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBteSBmaXJzdCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UsIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWFkIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJiMzOTtsbCBsZXZlcmFnZSBteSBleHBlcnQga25vd2xlZGdlIGFuZCBkaXJlY3RseSB1c2UgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgbGluZSAxNjguIEZvY3VzaW5nIGluIG9uIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gc3RhcnQgZm9ybWluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDEzMTpcdFx0a2ZyZWUoYnVmKTtcbiAxMzI6XHRcbiAxMzM6XHRlcnJfb3V0OlxuIDEzNDpcdFx0cmV0dXJuIGVycjtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxuIDEzODpcdFx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4gMTM5Olx0XHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxuIDE0MDpcdHtcbiAxNDE6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XG4gMTQyOlx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcbiAxNDM6XHRcdGludCBlcnIgPSAwO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9XUklURSlcbiAxNDY6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNDc6XHRcdFx0XHRcdFVTQl9SRUNJUF9PVEhFUik7XG4gMTQ4Olx0XHRlbHNlXG4gMTQ5Olx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTUwOlx0XHRcdFx0XHRVU0JfUkVDSVBfREVWSUNFKTtcbiAxNTE6XHRcbiAxNTI6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcblwmIzM0OyxcbiAxNTM6XHRcdFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdGlmIChkYXRhKSB7XG4gMTU2Olx0XHRcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTU3Olx0XHRcdGlmICghYnVmKSB7XG4gMTU4Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxNTk6XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gMTYwOlx0XHRcdH1cbiAxNjE6XHRcdH1cbiAxNjI6XHRcbiAxNjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxNjQ6XHRcdFx0XHQgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDE2NTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTY2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTY3Olx0XHRpZiAoZXJyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZXJyIFx1MDAzYyBzaXplKVxuIDE2ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE2OTpcdFx0a2ZyZWUoYnVmKTtcbiAxNzA6XHRcbiAxNzE6XHRlcnJfb3V0OlxuIDE3MjpcdFx0cmV0dXJuIGVycjtcbiAxNzM6XHR9XG4gMTc0Olx0XG4gMTc1Olx0c3RhdGljIGludCBjaDkyMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG4gMTc2Olx0e1xuIDE3NzpcdFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiAxNzg6XHRcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcbiAxNzk6XHRcdGludCByZXQ7XG4gMTgwOlx0XG4gMTgxOlx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7JXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXG5cJiMzNDssXG4gMTgyOlx0XHRcdCAgIF9fZnVuY19fLCBwaHlfaWQsIGxvYyk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAocGh5X2lkICE9IDApXG4gMTg1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDE4NjpcdFxuIDE4NzpcdFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxuIDE4ODpcdFx0XHRcdCAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMTg5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNvbnRyb2xfd3JpdGVgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgY29udHJvbF93cml0ZWAgZnVuY3Rpb24sIHRoZXJlIHdhcyBhIGdsYXJpbmcgaXNzdWUuIFByZXZpb3VzbHksIGV2ZW4gaWYgdGhlIGB1c2JfY29udHJvbF9tc2dgIGZ1bmN0aW9uIHJldHVybmVkIGFuIGVycm9yIOKAkyBtYXliZSBhIHRpbWVvdXQgb3IgYSBwaXBlIGVycm9yIOKAkyB0aGUgY29kZSB3YXMgKnVuY29uZGl0aW9uYWxseSogcmV0dXJuaW5nIDAhIFRoZSBgcmV0dXJuIDA7YCB3YXMgZWZmZWN0aXZlbHkgbWFza2luZyBhbnkgZXJyb3JzLiBJdCB3YXMgY29tcGxldGVseSBpZ25vcmluZyB0aGUgdmFsdWUgb2YgYGVycmAgc2V0IGJ5IHRoZSBgdXNiX2NvbnRyb2xfbXNnYCBjYWxsLiBBbmQgZXZlbiBpZiBgZXJyYCB3YXMgc2V0IHRvIGAtRUlOVkFMYCBpZiBgZXJyICZsdDsgc2l6ZWAsIHRoZSBgcmV0dXJuIDA7YCB3YXMgc3RpbGwgb3ZlcnJpZGluZyB0aGUgZXJyb3IuIE5vdywgcmVtb3ZpbmcgdGhlIGByZXR1cm4gMDtgIHdpbGwgY2hhbmdlIHRoZSBiZWhhdmlvciwgc28gdGhhdCBpdCByZXR1cm5zIGBlcnJgLCB0aGUgY29ycmVjdCBlcnJvciBjb2RlLgoKTm93IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGB1c2JfY29udHJvbF9tc2dgIHJldHVybnMgb24gc3VjY2Vzcy4gRm9yIGFuIE9VVCB0cmFuc2ZlciAoaG9zdCB0byBkZXZpY2UpIGxpa2UgdGhpcywgaXQgcmV0dXJucyB0aGUgKm51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCosIHRoYXQgaXMsIGBzaXplYC4gU28sIGlmIGBlcnJgIGVxdWFscyBgc2l6ZWAsIHRoYXQgbWVhbnMgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLCBhbmQgd2Ugd2FudCB0byByZXR1cm4gYHNpemVgLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2FsbGVycyBhcmUgaGFuZGxpbmcgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHNlZSBob3cgYGNvbnRyb2xfd3JpdGVgIGlzIGJlaW5nIHVzZWQgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIFRpbWUgdG8gY2hlY2sgdGhvc2UgY2FsbGVycyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29udHJvbF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9OTk9c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTM3OnN0YXRpYyBpbnQgY29udHJvbF93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9MTk1PXN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIwOS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyMTA6XHRjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTEtXHRcdCAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTMzNj1zdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM1OC1cdGRhdGFbMV0gPSAweDBGO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM1OTpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjAtXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2My1cdGRhdGFbMV0gPSAweDkwO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM2NDpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzY1LVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjgtXHRkYXRhWzFdID0gMHgwMDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjk6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzAtXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3My1cdGRhdGFbMV0gPSAweEQ4O1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NDpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzUtXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3OS1cdGRhdGFbMV0gPSAweDAwO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM4MDpcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgxLVx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODQtXHRkYXRhWzFdID0gMHgwRDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODU6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4Ni1cdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYGNoOTIwMF9iaW5kYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiB0aGUgYGNoOTIwMF9iaW5kYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgY29kZSBibG9jayB0aGF0IHJ1bnMgZnJvbSByb3VnaGx5IGxpbmUgMzM2IHRocm91Z2ggMzkwLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGJpbmRpbmcgaXMgaGFwcGVuaW5nLCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHBvc3NpYmxlIGFyZWFzIHRoYXQgYXJlIGNhdXNpbmcgdGhlIGlzc3VlLiBUaW1lIHRvIGFuYWx5emUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzY6XHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gMzM3Olx0e1xuIDMzODpcdFx0aW50IHJldHZhbCA9IDA7XG4gMzM5Olx0XHR1bnNpZ25lZCBjaGFyIGRhdGFbMl07XG4gMzQwOlx0XHR1OCBhZGRyW0VUSF9BTEVOXTtcbiAzNDE6XHRcbiAzNDI6XHRcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XG4gMzQzOlx0XHRpZiAocmV0dmFsKVxuIDM0NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM0NTpcdFxuIDM0NjpcdFx0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuIDM0NzpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xuIDM0ODpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XG4gMzUwOlx0XG4gMzUxOlx0XHRkZXYtXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VoYXJkX210dSA9IGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VuZXQtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIDM1NDpcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCAmIzQzOyAxNjtcbiAzNTU6XHRcdG1paV9ud2F5X3Jlc3RhcnQoXHUwMDI2ZGV2LVx1MDAzZW1paSk7XG4gMzU2Olx0XG4gMzU3Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzNTg6XHRcdGRhdGFbMV0gPSAweDBGO1xuIDM1OTpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxuIDM2MDpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM2MTpcdFxuIDM2MjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzYzOlx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjQ6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY1Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzY2Olx0XG4gMzY3Olx0XHRkYXRhWzBdID0gMHgzMDtcbiAzNjg6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM2OTpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG4gMzcwOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcxOlx0XG4gMzcyOlx0XHRkYXRhWzBdID0gMHgxNztcbiAzNzM6XHRcdGRhdGFbMV0gPSAweEQ4O1xuIDM3NDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxuIDM3NTpcdFx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NjpcdFxuIDM3NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzc4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzNzk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM4MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzODE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzODI6XHRcbiAzODM6XHRcdGRhdGFbMF0gPSAweDVGO1xuIDM4NDpcdFx0ZGF0YVsxXSA9IDB4MEQ7XG4gMzg1Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuIDM4NjpcdFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM4NzpcdFxuIDM4ODpcdFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XG4gMzg5Olx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYWRkcik7XG4gMzkwOlx0XG4gMzkxOlx0XHRyZXR1cm4gcmV0dmFsO1xuIDM5MjpcdH1cbiAzOTM6XHRcbiAzOTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xuIDM5NTpcdFx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gVVNCIE5ldHdvcmsgRHJpdmVyIExvZ2ljKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGNvbnRyb2xfcmVhZGAgYW5kIGBjb250cm9sX3dyaXRlYCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIENIOTIwMCBVU0IgbmV0d29yayBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBjb250cm9sX3JlYWRgIGluIHRoYXQgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGJvdGggcmVhZCBhbmQgd3JpdGUgcmVmZXIgdG8gdGhlIGNvbnRyb2wgZW5kcG9pbnQsIHNvIGEgY2FyZWZ1bCBpbnNwZWN0aW9uIG9mIHRoaXMgc2VjdGlvbiBzaG91bGQgc2hvdyBtZSBob3cgdGhlIGRldmljZSYjMzk7cyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgaG9zdCBpbnRlcmFjdHMgd2l0aCB0aGUgQ0g5MjAwIGluIHRoZSBjb250cm9sIHRyYW5zZmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0I2RlZmluZSBFVE5fVFhfRklGT19ERVBUSFx0KDB4MDEgXHUwMDNjXHUwMDNjIDgpXG4gIDk2Olx0I2RlZmluZSBFVEhfUlhCRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNylcbiAgOTc6XHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgOTg6XHRcbiAgOTk6XHRzdGF0aWMgaW50IGNvbnRyb2xfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsXG4gMTAwOlx0XHRcdFx0dW5zaWduZWQgY2hhciByZXF1ZXN0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSxcbiAxMDE6XHRcdFx0XHR1bnNpZ25lZCBzaG9ydCBpbmRleCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSxcbiAxMDI6XHRcdFx0XHRpbnQgdGltZW91dClcbiAxMDM6XHR7XG4gMTA0Olx0XHR1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMO1xuIDEwNTpcdFx0dW5zaWduZWQgY2hhciByZXF1ZXN0X3R5cGU7XG4gMTA2Olx0XHRpbnQgZXJyID0gMDtcbiAxMDc6XHRcbiAxMDg6XHRcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfUkVBRClcbiAxMDk6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfT1RIRVIpO1xuIDExMDpcdFx0ZWxzZVxuIDExMTpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTEyOlx0XHRcdFx0XHRVU0JfUkVDSVBfREVWSUNFKTtcbiAxMTM6XHRcbiAxMTQ6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcblwmIzM0OyxcbiAxMTU6XHRcdFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcbiAxMTY6XHRcbiAxMTc6XHRcdGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTE4Olx0XHRpZiAoIWJ1Zikge1xuIDExOTpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDEyMDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4gMTIxOlx0XHR9XG4gMTIyOlx0XG4gMTIzOlx0XHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVx1MDAzZXVkZXYsXG4gMTI0Olx0XHRcdFx0ICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi1cdTAwM2V1ZGV2LCAwKSxcbiAxMjU6XHRcdFx0XHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxuIDEyNjpcdFx0XHRcdCAgICAgIHRpbWVvdXQpO1xuIDEyNzpcdFx0aWYgKGVyciA9PSBzaXplKVxuIDEyODpcdFx0XHRtZW1jcHkoZGF0YSwgYnVmLCBzaXplKTtcbiAxMjk6XHRcdGVsc2UgaWYgKGVyciBcdTAwM2U9IDApXG4gMTMwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTMxOlx0XHRrZnJlZShidWYpO1xuIDEzMjpcdFxuIDEzMzpcdGVycl9vdXQ6XG4gMTM0Olx0XHRyZXR1cm4gZXJyO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gMTM4Olx0XHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbiAxMzk6XHRcdFx0XHQgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSwgaW50IHRpbWVvdXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjkKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMTAwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYGNvbnRyb2xfd3JpdGVgIFBhdGNoIGFuZCBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBpbiB0aGUgQ0g5MjAwIGRyaXZlci4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBgcmV0dXJuIDA7YCB0aGF0IHdhcywgZXNzZW50aWFsbHksIG1hc2tpbmcgYW55IGVycm9ycyByZXR1cm5lZCBmcm9tIGB1c2JfY29udHJvbF9tc2dgLiBXZSYjMzk7cmUgcmVtb3ZpbmcgdGhhdCwgYWxsb3dpbmcgdGhlIGZ1bmN0aW9uIHRvIGNvcnJlY3RseSByZXR1cm4gdGhlIGVycm9yIGNvZGUgKGBlcnJgKSBpZiB0aGUgVVNCIGNvbnRyb2wgbWVzc2FnZSBmYWlscywgb3IgYC1FSU5WQUxgIGlmIHRoZXJlIHdhcyBhIHNpemUgbWlzbWF0Y2guIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/CgpMZXQmIzM5O3Mgd2FsayB0aHJvdWdoIGl0LiBJbnNpZGUgYGNvbnRyb2xfd3JpdGVgLCB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciAoYGJ1ZiA9IGttZW1kdXAoLi4uKWApIGlmIGRhdGEgaXMgcHJvdmlkZWQuIFRoZW4gd2UgY2FsbCBgdXNiX2NvbnRyb2xfbXNnYC4gQWZ0ZXIgdGhhdCwgd2UgY2hlY2sgaWYgdGhlIHJldHVybmVkIGVycm9yIGBlcnJgIGluZGljYXRlcyBhIHNob3J0IHdyaXRlLiBGaW5hbGx5LCB3ZSBga2ZyZWUoYnVmKWAuIFRoZSBrZXkgY2hhbmdlIGlzIHJlbW92aW5nIHRoYXQgcHJlbWF0dXJlIGByZXR1cm4gMDtgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHRoZSBkZXZpY2Ugb3IsIGV2ZW4gd29yc2UsIHRvIHVzZXJzcGFjZS4gU28sIEkgbmVlZCB0byBjaGVjazogZG9lcyBgY29udHJvbF93cml0ZWAgd3JpdGUgYW55dGhpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBidWZmZXI/IFRoZSBhbnN3ZXIgaXMgbm87IGBjb250cm9sX3dyaXRlYCBpcyBhIFVTQiB3cml0ZSBmdW5jdGlvbi4gTmV4dCwgYXJlIGFueSBjYWxsZXJzIG9mIGBjb250cm9sX3dyaXRlYCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2Ugb2YgdGhpcyBjaGFuZ2U/CgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgY2FsbGVyczogRmlyc3QsIGBjaDkyMDBfbWRpb193cml0ZWAuIFRoZSBjb2RlIHNob3dzIHRoZSBgYnVmZmAgdmFyaWFibGUgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC4gSW1wb3J0YW50bHksIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgIGlzICppZ25vcmVkKiBoZXJlLCBzbyBldmVuIGlmIGl0IHJldHVybmVkIGFuIGVycm9yIGl0IHdvdWxkbiYjMzk7dCBiZSBoYW5kbGVkLiBOZXh0LCB3ZSBoYXZlIGBjaDkyMDBfYmluZGAuIGBkYXRhYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgKmVhY2gqIGNhbGwgdG8gYGNvbnRyb2xfd3JpdGVgLCBhbmQgdGhlIHJlc3VsdCBpcyBvdmVyd3JpdHRlbi4gU28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgY2hhbmdlIGNhdXNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkIGJ5IHRoZSBjYWxsZXIuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY2FsbGVycyBvciB1c2FnZXM/IE5vcGUuIFNvLCB0aGF0JiMzOTtzIGdvb2QuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjcml0ZXJpYSByaWdvcm91c2x5OgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vLCB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIHRvIHRoZSBVU0IgZGV2aWNlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMvYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm90IGluIHRoaXMgY2FzZS4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm8sIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLgoKU28sIHRvIHN1bW1hcml6ZSBmb3IgdGhlIHJlY29yZDogdGhpcyBwYXRjaCBzaW1wbHkgcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBgcmV0dXJuIDA7YCBmcm9tIGBjb250cm9sX3dyaXRlKClgLiBUaGlzIHdhcyBtYXNraW5nIHRoZSByZXR1cm4gY29kZSBmcm9tIGB1c2JfY29udHJvbF9tc2dgLCBhbmQgd2UmIzM5O3JlIGFsbG93aW5nIHRoZSBmdW5jdGlvbiB0byBwcm9wZXJseSByZXR1cm4gdGhlIGFjdHVhbCBlcnJvci4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGV4cG9zdXJlIG9mIGRhdGEgdG8gdXNlcnNwYWNlLCBubyByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gU3RhbmRhcmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzU2FuaXRpemVyKSBjaGVja3MgYW5kIGVycm9yIGhhbmRsaW5nIGFyZSBwZXJmZWN0bHkgc3VmZmljaWVudC4gS01TQU4gaXMgbm90IHJlcXVpcmVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXJzcGFjZS1mYWNpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIGJ1ZmZlcnMgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXJzIHByaW9yIHRvIGludm9jYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiBlcnJvbmVvdXMgYHJldHVybiAwO2AgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzpjb250cm9sX3dyaXRlKClgLCBhbGxvd2luZyBlcnJvciByZXR1cm4gdmFsdWVzIGZyb20gYHVzYl9jb250cm9sX21zZygpYCBvciBgLUVJTlZBTGAgb24gaW5jb21wbGV0ZSB3cml0ZXMgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGJhY2sgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIGJlaW5nIHVuY29uZGl0aW9uYWxseSBtYXNrZWQgYnkgYDBgLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlcnNwYWNlLWZhY2luZyBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlcnMgcHJpb3IgdG8gaW52b2NhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIGZ1bGx5IHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjAxLjE1NzUzNjAwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzM4NzYyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQ0g5MjAwXCIsXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbnRyb2xfd3JpdGVcIixcbiAgICBcImNoOTIwMF9iaW5kXCIsXG4gICAgXCJjaDkyMDBfbWRpb193cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiBlcnJvbmVvdXMgYHJldHVybiAwO2AgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzpjb250cm9sX3dyaXRlKClgLCBhbGxvd2luZyBlcnJvciByZXR1cm4gdmFsdWVzIGZyb20gYHVzYl9jb250cm9sX21zZygpYCBvciBgLUVJTlZBTGAgb24gaW5jb21wbGV0ZSB3cml0ZXMgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGJhY2sgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIGJlaW5nIHVuY29uZGl0aW9uYWxseSBtYXNrZWQgYnkgYDBgLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2Vyc3BhY2UtZmFjaW5nIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCBidWZmZXJzIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVycyBwcmlvciB0byBpbnZvY2F0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgZnVsbHkgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgc28gdGhhdCBjb250cm9sX3dyaXRlKCkgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMgZnJvbSB1c2JfY29udHJvbF9tc2coKSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuaW5nIDAuIENIOTIwMCBpcyBhIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHN5emthbGxlcidzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjAxLjE1NzU0MDg1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3MzYzNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjI3OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXFxuQEAgLTE2OCw4ICsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdGtmcmVlKGJ1Zik7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuIGVycl9vdXQ6XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MDEuNjk1OTA0NjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTcxNjcxMjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb250cm9sX3dyaXRlXCIsXG4gICAgXCJjaDkyMDBfYmluZFwiLFxuICAgIFwiY2g5MjAwX21kaW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgc28gdGhhdCBjb250cm9sX3dyaXRlKCkgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMgZnJvbSB1c2JfY29udHJvbF9tc2coKSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuaW5nIDAuIENIOTIwMCBpcyBhIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHN5emthbGxlcidzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDg6Mjc6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuQEAgLTE2OCw4ICsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJyX291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MDEuNjk1OTA2NjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgyODUxNjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGRpZmYsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpZWQgZmlsZSwgd2hpY2ggaXMgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIE5vdywgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDE2OCBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjA5LjUyNDQyNTQ3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XFxuIDE0MjpcXHRcXHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcXG4gMTQzOlxcdFxcdGludCBlcnIgPSAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxcbiAxNDY6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9PVEhFUik7XFxuIDE0ODpcXHRcXHRlbHNlXFxuIDE0OTpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxNTM6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTU2OlxcdFxcdFxcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDE1NzpcXHRcXHRcXHRpZiAoIWJ1Zikge1xcbiAxNTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTU5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0ZXJyX291dDpcXG4gMTcyOlxcdFxcdHJldHVybiBlcnI7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdHN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbiAxNzY6XFx0e1xcbiAxNzc6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMTc4OlxcdFxcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcXG4gMTc5OlxcdFxcdGludCByZXQ7XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwiJXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXFxcblxcXCIsXFxuIDE4MjpcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5X2lkLCBsb2MpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRpZiAocGh5X2lkICE9IDApXFxuIDE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbiAxODg6XFx0XFx0XFx0XFx0ICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMTg5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzowOS41MjQ1NTE1OTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDczODY1NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgY2g5MjAwLmNgIGFuZCBgY29udHJvbF93cml0ZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBgY2g5MjAwLmNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgY29udHJvbF93cml0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBleGFtaW5hdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaXRzZWxmOyB1bmRlcnN0YW5kaW5nIGl0cyBjb3JlIHB1cnBvc2UgYW5kIHRoZSBwYXJhbWV0ZXJzIGl0IGhhbmRsZXMgaXMga2V5LiBBZnRlciB0aGF0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIHRoZSBgY2g5MjAwLmNgIGZpbGUuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBjcml0aWNhbCBpbnNpZ2h0IGludG8gdGhlIHN5c3RlbSdzIG9wZXJhdGlvbmFsIGxvZ2ljLiBJdCBpcyBsaWtlbHkgdGhhdCBgY29udHJvbF93cml0ZWAgaXMgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGNoOTIwMC5jYCBtb2R1bGUsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHBvc2l0aW9uIGluIHJlbGF0aW9uIHRvIHRob3NlIG90aGVyIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQuIEZvbGxvd2luZyB0aGVzZSBpbml0aWFsIGludmVzdGlnYXRpb25zLCBsZXQgdXMgcmVhZCBtb3JlIG9mIHRoZSByZXN0IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgYGNoOTIwMC5jYCBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjExLjk5ODQxOTcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LypcXG4gICAyOlxcdCAqIFVTQiAxME0vMTAwTSBldGhlcm5ldCBhZGFwdGVyXFxuICAgMzpcXHQgKlxcbiAgIDQ6XFx0ICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcXG4gICA1OlxcdCAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIFxcXCJhcyBpc1xcXCIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55XFxuICAgNjpcXHQgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZFxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGRkZWYuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMjM6XFx0XFxuICAyNDpcXHQjZGVmaW5lIENIOTIwMF9WSURcXHRcXHQweDFBODZcXG4gIDI1OlxcdCNkZWZpbmUgQ0g5MjAwX1BJRF9FMDkyXFx0XFx0MHhFMDkyXFxuICAyNjpcXHRcXG4gIDI3OlxcdCNkZWZpbmUgQ1RSTF9USU1FT1VUX01TXFx0XFx0MTAwMFxcbiAgMjg6XFx0XFxuICAyOTpcXHQjZGVmaW5lIENPTlRST0xfVElNRU9VVF9NUyAxMDAwXFxuICAzMDpcXHRcXG4gIDMxOlxcdCNkZWZpbmUgUkVRVUVTVF9SRUFEXFx0MHgwRVxcbiAgMzI6XFx0I2RlZmluZSBSRVFVRVNUX1dSSVRFXFx0MHgwRlxcbiAgMzM6XFx0XFxuICAzNDpcXHQvKiBBZGRyZXNzIHNwYWNlOlxcbiAgMzU6XFx0ICogMDAtNjMgOiBNSUlcXG4gIDM2OlxcdCAqIDY0LTEyODogTUFDXFxuICAzNzpcXHQgKlxcbiAgMzg6XFx0ICogTm90ZTogYWxsIGFjY2Vzc2VzIG11c3QgYmUgMTYtYml0XFxuICAzOTpcXHQgKi9cXG4gIDQwOlxcdFxcbiAgNDE6XFx0I2RlZmluZSBNQUNfUkVHX0NUUkwgNjRcXG4gIDQyOlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUVVMgNjZcXG4gIDQzOlxcdCNkZWZpbmUgTUFDX1JFR19JTlRFUlJVUFRfTUFTSyA2OFxcbiAgNDQ6XFx0I2RlZmluZSBNQUNfUkVHX1BIWV9DT01NQU5EIDcwXFxuICA0NTpcXHQjZGVmaW5lIE1BQ19SRUdfUEhZX0RBVEEgNzJcXG4gIDQ2OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0wgNzRcXG4gIDQ3OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX00gNzZcXG4gIDQ4OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0ggNzhcXG4gIDQ5OlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0wgODBcXG4gIDUwOlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00xIDgyXFxuICA1MTpcXHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMiA4NFxcbiAgNTI6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfSCA4NlxcbiAgNTM6XFx0I2RlZmluZSBNQUNfUkVHX1RIUkVTSE9MRCA4OFxcbiAgNTQ6XFx0I2RlZmluZSBNQUNfUkVHX0ZJRk9fREVQVEggOTBcXG4gIDU1OlxcdCNkZWZpbmUgTUFDX1JFR19QQVVTRSA5MlxcbiAgNTY6XFx0I2RlZmluZSBNQUNfUkVHX0ZMT1dfQ09OVFJPTCA5NFxcbiAgNTc6XFx0XFxuICA1ODpcXHQvKiBDb250cm9sIHJlZ2lzdGVyIGJpdHNcXG4gIDU5OlxcdCAqXFxuICA2MDpcXHQgKiBOb3RlOiBiaXRzIDEzIGFuZCAxNSBhcmUgcmVzZXJ2ZWRcXG4gIDYxOlxcdCAqL1xcbiAgNjI6XFx0I2RlZmluZSBMT09QQkFDS1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDE0KVxcbiAgNjM6XFx0I2RlZmluZSBCQVNFMTAwWFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDEyKVxcbiAgNjQ6XFx0I2RlZmluZSBNQlBTXzEwXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuICA2NTpcXHQjZGVmaW5lIERVUExFWF9NT0RFXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTApXFxuICA2NjpcXHQjZGVmaW5lIFBBVVNFX0ZSQU1FXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgOSlcXG4gIDY3OlxcdCNkZWZpbmUgUFJPTUlTQ1VPVVNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgNjg6XFx0I2RlZmluZSBNVUxUSUNBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiAgNjk6XFx0I2RlZmluZSBCUk9BRENBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAgNzA6XFx0I2RlZmluZSBIQVNIXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gIDcxOlxcdCNkZWZpbmUgQVBQRU5EX1BBRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDQpXFxuICA3MjpcXHQjZGVmaW5lIEFQUEVORF9DUkNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgNzM6XFx0I2RlZmluZSBUUkFOU01JVFRFUl9BQ1RJT05cXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAyKVxcbiAgNzQ6XFx0I2RlZmluZSBSRUNFSVZFUl9BQ1RJT05cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiAgNzU6XFx0I2RlZmluZSBETUFfQUNUSU9OXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDc2OlxcdFxcbiAgNzc6XFx0LyogU3RhdHVzIHJlZ2lzdGVyIGJpdHNcXG4gIDc4OlxcdCAqXFxuICA3OTpcXHQgKiBOb3RlOiBiaXRzIDctMTUgYXJlIHJlc2VydmVkXFxuICA4MDpcXHQgKi9cXG4gIDgxOlxcdCNkZWZpbmUgQUxJR05NRU5UXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNilcXG4gIDgyOlxcdCNkZWZpbmUgRklGT19PVkVSX1JVTlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDUpXFxuICA4MzpcXHQjZGVmaW5lIEZJRk9fVU5ERVJfUlVOXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gIDg0OlxcdCNkZWZpbmUgUlhfRVJST1JcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgODU6XFx0I2RlZmluZSBSWF9DT01QTEVURVxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICA4NjpcXHQjZGVmaW5lIFRYX0VSUk9SXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4gIDg3OlxcdCNkZWZpbmUgVFhfQ09NUExFVEVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAgODg6XFx0XFxuICA4OTpcXHQvKiBGSUZPIGRlcHRoIHJlZ2lzdGVyIGJpdHNcXG4gIDkwOlxcdCAqXFxuICA5MTpcXHQgKiBOb3RlOiBiaXRzIDYgYW5kIDE0IGFyZSByZXNlcnZlZFxcbiAgOTI6XFx0ICovXFxuICA5MzpcXHRcXG4gIDk0OlxcdCNkZWZpbmUgRVRIX1RYQkRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gIDk1OlxcdCNkZWZpbmUgRVROX1RYX0ZJRk9fREVQVEhcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgOTY6XFx0I2RlZmluZSBFVEhfUlhCRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICA5NzpcXHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDk4OlxcdFxcbiAgOTk6XFx0c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxcbiAxMDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciByZXF1ZXN0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MTEuOTk4NjQxODEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU0MzM1ODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgZmlsZS4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgZm9yIHRoaXMgQ0g5MjAwIFVTQiBFdGhlcm5ldCBhZGFwdGVyLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgdHlwaWNhbCBVU0IgZHJpdmVyIGNoYWxsZW5nZXMg4oCTIGVuZHBvaW50IG1hbmFnZW1lbnQsIGludGVycnVwdCBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgcXVpcmtzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGNoaXBzZXQuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBhcHByb2FjaCwgbGlrZWx5IHVzaW5nIHRoZSBVU0IgY29yZSdzIGZyYW1ld29yay4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgZHJpdmVyIGVudHJ5IHBvaW50cyBsaWtlIGBwcm9iZWAsIGBkaXNjb25uZWN0YCwgYW5kIGBzdXNwZW5kL3Jlc3VtZWAgaW1wbGVtZW50YXRpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gYW5kIGNvbnRyb2wgdHJhbnNmZXIgc2VxdWVuY2VzLiBJIHdpbGwgYmUgc3VyZSB0byBzY3J1dGluaXplIHRoZWlyIGVycm9yIGhhbmRsaW5nOyBVU0IgZGV2aWNlcyBjYW4gYmUgbm90b3Jpb3VzbHkgc2Vuc2l0aXZlLiBJdCdzIGFsd2F5cyBpbnRlcmVzdGluZyB0byBzZWUgaG93IGRpZmZlcmVudCBkZXZlbG9wZXJzIGFwcHJvYWNoIHRoZSBzYW1lIHByb2JsZW0sIHdoYXQgb3B0aW1pemF0aW9ucyB0aGV5J3ZlIG1hZGUsIGFuZCBhbnkgY2xldmVyIHRlY2huaXF1ZXMgdGhleSd2ZSBlbXBsb3llZCB0byB3b3JrIGFyb3VuZCBoYXJkd2FyZSBsaW1pdGF0aW9ucyBvciBwZWN1bGlhcml0aWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MTUuNTQyMDAyNTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIiVzIHBoeV9pZDolMDJ4IGxvYzolMDJ4XFxcXG5cXFwiLFxcbiAxODI6XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKHBoeV9pZCAhPSAwKVxcbiAxODU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdHJldCA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcXG4gMTg4OlxcdFxcdFxcdFxcdCAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDE4OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTkwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHJldHVybiAoYnVmZlswXSB8IGJ1ZmZbMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdHN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIDE5NjpcXHRcXHRcXHRcXHQgICAgICBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKVxcbiAxOTc6XFx0e1xcbiAxOTg6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMTk5OlxcdFxcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCIlcygpIHBoeV9pZD0lMDJ4IGxvYzolMDJ4XFxcXG5cXFwiLFxcbiAyMDI6XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0XFx0aWYgKHBoeV9pZCAhPSAwKVxcbiAyMDU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHRidWZmWzBdID0gKHVuc2lnbmVkIGNoYXIpdmFsO1xcbiAyMDg6XFx0XFx0YnVmZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgXFx1MDAzZVxcdTAwM2UgOCk7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbiAyMTE6XFx0XFx0XFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMjEyOlxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0c3RhdGljIGludCBjaDkyMDBfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDIxNTpcXHR7XFxuIDIxNjpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0bWlpX2NoZWNrX21lZGlhKFxcdTAwMjZkZXYtXFx1MDAzZW1paSwgMSwgMSk7XFxuIDIxOTpcXHRcXHRtaWlfZXRodG9vbF9nc2V0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSwgXFx1MDAyNmVjbWQpO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiJXMoKSBzcGVlZDolZCBkdXBsZXg6JWRcXFxcblxcXCIsXFxuIDIyMjpcXHRcXHRcXHQgICBfX2Z1bmNfXywgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjI1OlxcdH1cXG4gMjI2OlxcdFxcbiAyMjc6XFx0c3RhdGljIHZvaWQgY2g5MjAwX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG4gMjI4OlxcdHtcXG4gMjI5OlxcdFxcdGludCBsaW5rO1xcbiAyMzA6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAodXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoIFxcdTAwM2MgMTYpXFxuIDIzMzpcXHRcXHRcXHRyZXR1cm47XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdGJ1ZiA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbiAyMzY6XFx0XFx0bGluayA9ICEhKGJ1ZlswXSBcXHUwMDI2IDB4MDEpO1xcbiAyMzc6XFx0XFxuIDIzODpcXHRcXHRpZiAobGluaykge1xcbiAyMzk6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXFx1MDAzZW5ldCk7XFxuIDI0MDpcXHRcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfTElOS19SRVNFVCk7XFxuIDI0MTpcXHRcXHR9IGVsc2Uge1xcbiAyNDI6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2LVxcdTAwM2VuZXQpO1xcbiAyNDM6XFx0XFx0fVxcbiAyNDQ6XFx0fVxcbiAyNDU6XFx0XFxuIDI0NjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNoOTIwMF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDI0NzpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZmxhZ3MpXFxuIDI0ODpcXHR7XFxuIDI0OTpcXHRcXHRpbnQgaSA9IDA7XFxuIDI1MDpcXHRcXHRpbnQgbGVuID0gMDtcXG4gMjUxOlxcdFxcdGludCB0eF9vdmVyaGVhZCA9IDA7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdHR4X292ZXJoZWFkID0gMHg0MDtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDI1NjpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgdHhfb3ZlcmhlYWQpKSB7XFxuIDI1NzpcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiAyNTg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI1OTpcXHRcXHR9XFxuIDI2MDpcXHRcXG4gMjYxOlxcdFxcdF9fc2tiX3B1c2goc2tiLCB0eF9vdmVyaGVhZCk7XFxuIDI2MjpcXHRcXHQvKiB1c2JuZXQgYWRkcyBwYWRkaW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHBhY2tldCBzaXplXFxuIDI2MzpcXHRcXHQgKiBpZiBzbywgYWRqdXN0IGxlbmd0aCB2YWx1ZSBpbiBoZWFkZXJcXG4gMjY0OlxcdFxcdCAqL1xcbiAyNjU6XFx0XFx0aWYgKChza2ItXFx1MDAzZWxlbiAlIGRldi1cXHUwMDNlbWF4cGFja2V0KSA9PSAwKVxcbiAyNjY6XFx0XFx0XFx0bGVuKys7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVswXSA9IGxlbjtcXG4gMjY5OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVsxXSA9IGxlbiBcXHUwMDNlXFx1MDAzZSA4O1xcbiAyNzA6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzJdID0gMHgwMDtcXG4gMjcxOlxcdFxcdHNrYi1cXHUwMDNlZGF0YVszXSA9IDB4ODA7XFxuIDI3MjpcXHRcXG4gMjczOlxcdFxcdGZvciAoaSA9IDQ7IGkgXFx1MDAzYyA0ODsgaSsrKVxcbiAyNzQ6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhW2ldID0gMHgwMDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzQ4XSA9IGxlbjtcXG4gMjc3OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVs0OV0gPSBsZW4gXFx1MDAzZVxcdTAwM2UgODtcXG4gMjc4OlxcdFxcdHNrYi1cXHUwMDNlZGF0YVs1MF0gPSAweDAwO1xcbiAyNzk6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzUxXSA9IDB4ODA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjE1LjU0MjA4OTgxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzE4NTM1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGUgZHJpdmVyIGZvciB0aGlzIENIOTIwMCBVU0IgRXRoZXJuZXQgYWRhcHRlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHR5cGljYWwgVVNCIGRyaXZlciBjaGFsbGVuZ2VzIOKAkyBlbmRwb2ludCBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBzb21lIHF1aXJrcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGlwc2V0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2gsIGxpa2VseSB1c2luZyB0aGUgVVNCIGNvcmUncyBmcmFtZXdvcmsuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGRyaXZlciBlbnRyeSBwb2ludHMgbGlrZSBgcHJvYmVgLCBgZGlzY29ubmVjdGAsIGFuZCBgc3VzcGVuZC9yZXN1bWVgIGltcGxlbWVudGF0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBjb250cm9sIHRyYW5zZmVyIHNlcXVlbmNlcy4gSSB3aWxsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGVpciBlcnJvciBoYW5kbGluZzsgVVNCIGRldmljZXMgY2FuIGJlIG5vdG9yaW91c2x5IHNlbnNpdGl2ZS4gSXQncyBhbHdheXMgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyBkaWZmZXJlbnQgZGV2ZWxvcGVycyBhcHByb2FjaCB0aGUgc2FtZSBwcm9ibGVtLCB3aGF0IG9wdGltaXphdGlvbnMgdGhleSd2ZSBtYWRlLCBhbmQgYW55IGNsZXZlciB0ZWNobmlxdWVzIHRoZXkndmUgZW1wbG95ZWQgdG8gd29yayBhcm91bmQgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjE3LjgxMzk0NzM4NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0XFxuIDI4MTpcXHRcXHRmb3IgKGkgPSA1MjsgaSBcXHUwMDNjIDY0OyBpKyspXFxuIDI4MjpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbaV0gPSAweDAwO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAyODU6XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHRzdGF0aWMgaW50IGNoOTIwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRpbnQgbGVuID0gMDtcXG4gMjkwOlxcdFxcdGludCByeF9vdmVyaGVhZCA9IDA7XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdHJ4X292ZXJoZWFkID0gNjQ7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHJ4X292ZXJoZWFkKSkge1xcbiAyOTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYsIFxcXCJ1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXFxcblxcXCIpO1xcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDI5NzpcXHRcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGxlbiA9IChza2ItXFx1MDAzZWRhdGFbc2tiLVxcdTAwM2VsZW4gLSAxNl0gfCBza2ItXFx1MDAzZWRhdGFbc2tiLVxcdTAwM2VsZW4gLSAxNV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuIDMwMDpcXHRcXHRza2JfdHJpbShza2IsIGxlbik7XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdHJldHVybiAxO1xcbiAzMDM6XFx0fVxcbiAzMDQ6XFx0XFxuIDMwNTpcXHRzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuIDMwNjpcXHR7XFxuIDMwNzpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMzA4OlxcdFxcdHVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbMHgwNl07XFxuIDMwOTpcXHRcXHRpbnQgcmRfbWFjX2xlbiA9IDA7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlczpcXFxcblxcXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIDMxMjpcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxcbiAzMTM6XFx0XFx0XFx0ICAgbGUxNl90b19jcHUoZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO1xcbiAzMTY6XFx0XFx0cmRfbWFjX2xlbiA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCxcXG4gMzE3OlxcdFxcdFxcdFxcdFxcdCAgTUFDX1JFR19TVEFUSU9OX0wsIG1hY19hZGRyLCAweDAyLFxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0ICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMTk6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9NLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjE6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9ILFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyA0LCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjM6XFx0XFx0aWYgKHJkX21hY19sZW4gIT0gRVRIX0FMRU4pXFxuIDMyNDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRkYXRhWzBdID0gbWFjX2FkZHJbNV07XFxuIDMyNzpcXHRcXHRkYXRhWzFdID0gbWFjX2FkZHJbNF07XFxuIDMyODpcXHRcXHRkYXRhWzJdID0gbWFjX2FkZHJbM107XFxuIDMyOTpcXHRcXHRkYXRhWzNdID0gbWFjX2FkZHJbMl07XFxuIDMzMDpcXHRcXHRkYXRhWzRdID0gbWFjX2FkZHJbMV07XFxuIDMzMTpcXHRcXHRkYXRhWzVdID0gbWFjX2FkZHJbMF07XFxuIDMzMjpcXHRcXG4gMzMzOlxcdFxcdHJldHVybiBlcnI7XFxuIDMzNDpcXHR9XFxuIDMzNTpcXHRcXG4gMzM2OlxcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMzM3OlxcdHtcXG4gMzM4OlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiAzMzk6XFx0XFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xcbiAzNDA6XFx0XFx0dTggYWRkcltFVEhfQUxFTl07XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDM0MzpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNDQ6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuIDM0NzpcXHRcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xcbiAzNDg6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb193cml0ZSA9IGNoOTIwMF9tZGlvX3dyaXRlO1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRkZXYtXFx1MDAzZWhhcmRfbXR1ID0gZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuIDM1NDpcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCArIDE2O1xcbiAzNTU6XFx0XFx0bWlpX253YXlfcmVzdGFydChcXHUwMDI2ZGV2LVxcdTAwM2VtaWkpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzU4OlxcdFxcdGRhdGFbMV0gPSAweDBGO1xcbiAzNTk6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxcbiAzNjA6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdGRhdGFbMF0gPSAweEEwO1xcbiAzNjM6XFx0XFx0ZGF0YVsxXSA9IDB4OTA7XFxuIDM2NDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbiAzNjU6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGRhdGFbMF0gPSAweDMwO1xcbiAzNjg6XFx0XFx0ZGF0YVsxXSA9IDB4MDA7XFxuIDM2OTpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG4gMzcwOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRkYXRhWzBdID0gMHgxNztcXG4gMzczOlxcdFxcdGRhdGFbMV0gPSAweEQ4O1xcbiAzNzQ6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxcbiAzNzU6XFx0XFx0XFx0XFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xcbiAzNzg6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM3OTpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MTcuODE0MDc4NjQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDM3ODk1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgVVNCIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgY2g5MjAwLmNgIGZpbGUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJJ20gYWxyZWFkeSBmb3JtaW5nIHNvbWUgZXhwZWN0YXRpb25zIGJhc2VkIG9uIHRoZSBmaWxlbmFtZSBhbmQgcGF0aC4gS25vd2luZyB0aGUgYGRyaXZlcnMvbmV0L3VzYmAgbG9jYXRpb24sIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBpcyBhIG5ldHdvcmsgZHJpdmVyIGZvciBhIFVTQi1iYXNlZCBkZXZpY2UsIHByb2JhYmx5IGEgVVNCIEV0aGVybmV0IGFkYXB0ZXIgdXNpbmcgdGhlIENIOTIwMCBjaGlwc2V0LiBJJ20gbGlrZWx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBVU0IgZW51bWVyYXRpb24sIGRldmljZSBpbml0aWFsaXphdGlvbiwgZGF0YSB0cmFuc2ZlciwgYW5kIHBvdGVudGlhbGx5IHBvd2VyIG1hbmFnZW1lbnQuIFRoZSBcImNoOTIwMFwiIHBhcnQgbmFycm93cyBpdCBkb3duIGV2ZW4gZnVydGhlciwgc3VnZ2VzdGluZyB0aGlzIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgd3JpdHRlbiBmb3IgYSBkZXZpY2UgdXNpbmcgdGhhdCBwYXJ0aWN1bGFyIHNpbGljb24uIEknbSBjdXJpb3VzIGlmIHRoaXMgdXNlcyBzdGFuZGFyZCBVU0IgbmV0d29yayBkZXZpY2UgY2xhc3MgcHJvdG9jb2xzIG9yIGlmIGl0IGhhcyBhbnkgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIFVTQiBkZXNjcmlwdG9yIHBhcnNpbmcgYW5kIHRoZSBjb250cm9sIHRyYW5zZmVycy4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIFVTQiBlcnJvcnMgYW5kIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCBzZWUgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgYW5kIGhvdyB0aGUgZHJpdmVyIG1hbmFnZXMgbmV0d29yayB0cmFmZmljIGZsb3csIHBlcmhhcHMgZXhhbWluaW5nIHRoZSB1c2Ugb2YgcGFja2V0IGRlc2NyaXB0b3JzLCBETUEsIGFuZCBhbnkgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzoyMC44NTc4NzA2NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbiAzODE6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzODQ6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM4NTpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzODY6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiAzODk6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzkyOlxcdH1cXG4gMzkzOlxcdFxcbiAzOTQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gMzk1OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuIDM5NjpcXHRcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxcbiAzOTc6XFx0XFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcXG4gMzk4OlxcdFxcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcXG4gMzk5OlxcdFxcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcXG4gNDAwOlxcdFxcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxcbiA0MDE6XFx0XFx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcXG4gNDAyOlxcdFxcdC5yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbiA0MDM6XFx0fTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xcbiA0MDY6XFx0XFx0e1xcbiA0MDc6XFx0XFx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxcbiA0MDg6XFx0XFx0IC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZjaDkyMDBfaW5mbyxcXG4gNDA5OlxcdFxcdCB9LFxcbiA0MTA6XFx0XFx0e30sXFxuIDQxMTpcXHR9O1xcbiA0MTI6XFx0XFxuIDQxMzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoOTIwMF9kcml2ZXIgPSB7XFxuIDQxNjpcXHRcXHQubmFtZSA9IFxcXCJjaDkyMDBcXFwiLFxcbiA0MTc6XFx0XFx0LmlkX3RhYmxlID0gY2g5MjAwX3Byb2R1Y3RzLFxcbiA0MTg6XFx0XFx0LnByb2JlID0gdXNibmV0X3Byb2JlLFxcbiA0MTk6XFx0XFx0LmRpc2Nvbm5lY3QgPSB1c2JuZXRfZGlzY29ubmVjdCxcXG4gNDIwOlxcdFxcdC5zdXNwZW5kID0gdXNibmV0X3N1c3BlbmQsXFxuIDQyMTpcXHRcXHQucmVzdW1lID0gdXNibmV0X3Jlc3VtZSxcXG4gNDIyOlxcdH07XFxuIDQyMzpcXHRcXG4gNDI0OlxcdG1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xcbiA0MjU6XFx0XFxuIDQyNjpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlFpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVxcXCIpO1xcbiA0Mjc6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzoyMC44NTc5NTg5ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQyNzk5MDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgRHJpdmVyIEJ1Z2ZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzLCBmcmFua2x5LCBhIGJpdCBzbG9wcHkuIFRoZSBmdW5jdGlvbiwgYWZ0ZXIgY2FsbGluZyBgdXNiX2NvbnRyb2xfbXNnYCwgd291bGQgKmFsd2F5cyogcmV0dXJuIDAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIFVTQiBjb250cm9sIG1lc3NhZ2UgY2FsbC4gRXZlbiBpZiBgdXNiX2NvbnRyb2xfbXNnYCByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGxpa2UgLUVJTlZBTCwgdGhlIGNvZGUgd291bGQgcGxvdyB0aHJvdWdoIGFuZCByZXR1cm4gMCwgZWZmZWN0aXZlbHkgbWFza2luZyB0aGUgcHJvYmxlbSEgVGhlIGNvZGUgd2FzIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgYGVycmAgdmFyaWFibGUgYGVyciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGVyciBcdTAwM2Mgc2l6ZWAuIFdoZW4gdGhpcyBjb25kaXRpb24gd2FzIHRydWUgdGhlIGNvZGUgc2V0IGBlcnIgPSAtRUlOVkFMO2AgYW5kIHRoZW4gcmV0dXJuZWQgMCwgd2lwaW5nIG91dCB0aGUgZXJyb3IuIFRoZSBmaXggcmVtb3ZlcyB0aGlzIFwicmV0dXJuIDA7XCIgbWFraW5nIGBjb250cm9sX3dyaXRlYCBhY3R1YWxseSByZXR1cm4gdGhlIGVycm9yIGNvZGUuIFNvIG5vdywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcmVjZWl2ZSBhIG1lYW5pbmdmdWwgaW5kaWNhdGlvbiBvZiB3aGV0aGVyIHRoZSBjb250cm9sIHRyYW5zZmVyIHN1Y2NlZWRlZCBvciBmYWlsZWQuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIGV4cGxvaXQsIG1lYW5pbmcsIGlzIGl0IHNvbWV0aGluZyB3ZSBjYW4gdHJpZ2dlciBhbmQgZnV6ej9cblxuTGV0J3Mgc2VlLiBUaGlzIGBjaDkyMDBgIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLiBTeXprYWxsZXIgc3VwcG9ydHMgVVNCIGVtdWxhdGlvbjsgaXQgY2FuIHNpbXVsYXRlIGEgVVNCIGRldmljZSB3aXRoIFZJRCAweDFBODYgYW5kIFBJRCAweEUwOTIsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIHNob3VsZCBjYXVzZSB0aGUgYGNoOTIwMGAgZHJpdmVyIHRvIGJlIHByb2JlZCwgdWx0aW1hdGVseSBpbnZva2luZyBgY29udHJvbF93cml0ZWAgdmlhIHRoZSBwcm9iZSBwcm9jZXNzIChgdXNibmV0X3Byb2JlYCAtXHUwMDNlIGBjaDkyMDBfYmluZGApLiBUaGUga2V5IGlzIHdoZXRoZXIgYGNvbnRyb2xfd3JpdGVgIGdldHMgZXhlY3V0ZWQgaW4gdGhpcyBzZXF1ZW5jZS5cblxuWWVzLCBgY2g5MjAwX2JpbmRgIGRlZmluaXRlbHkgY2FsbHMgYGNvbnRyb2xfd3JpdGVgLCBhbmQgc28gZG9lcyBgY2g5MjAwX21kaW9fd3JpdGVgLiBTbywgdGhlIHBhdGggaXMgdGhlcmUhXG5cblN5emthbGxlciBpcyBhbHJlYWR5IHNldCB1cCB0byBmdXp6IFVTQiBkcml2ZXJzLiBTZWN0aW9uIDMgb2YgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgbWVudGlvbnMgVVNCIGdhZGdldCBzdXBwb3J0LlxuXG5TbywgaW4gc3VtbWFyeTogd2UgaGF2ZSBhIHBvdGVudGlhbCBidWcgdGhhdCwgdGhhbmtzIHRvIHRoZSBmaXgsIGNhbiBub3cgcHJvcGFnYXRlIGVycm9ycy4gVGhlIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBVU0IgZW11bGF0aW9uLCBhbmQgc3l6a2FsbGVyIGlzIGEgcGVyZmVjdCB0b29sIGZvciBmdXp6aW5nIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBLY29uZmlnIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBidXQgaXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXp6aW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MjUuMjg1OTUzOTg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5MTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDSDkyMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTMtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNTpcXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNi1cXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxOS1cXHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFVTQiBldGhlcm5ldCBhZGFwdGVyIHdpdGggYSBRaW5IZW5nXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjIwOlxcdCAgQ0g5MjAwIGNoaXBzZXQuXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjIxLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19NQklNKVxcdCs9IGNkY19tYmltLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVxcdCs9IGNoOTIwMC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19VU0JfTkVUX0FRQzExMSlcXHQrPSBhcWMxMTEub1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNDojZGVmaW5lIENIOTIwMF9WSURcXHRcXHQweDFBODZcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjU6I2RlZmluZSBDSDkyMDBfUElEX0UwOTJcXHRcXHQweEUwOTJcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9Mzk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM5NTpcXHQuZGVzY3JpcHRpb24gPSBcXFwiQ0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTYtXFx0LmZsYWdzID0gRkxBR19FVEhFUixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz00MjQ9bW9kdWxlX3VzYl9kcml2ZXIoY2g5MjAwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI2Ok1PRFVMRV9ERVNDUklQVElPTihcXFwiUWluSGVuZyBDSDkyMDAgVVNCIE5ldHdvcmsgZGV2aWNlXFxcIik7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNy1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjI1LjM0OTc0OTkwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg0NzQ3MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgVVNCX05FVF9DSDkyMDAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBVU0JfTkVUX0NIOTIwMGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQncyByZXF1aXJlZCBhbmQgd2hhdCBlbmFibGluZyB0aGlzIGRyaXZlciBlbnRhaWxzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgaGVhZGluZyB0byBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIHRvIHN0YXJ0IHRoZSBhbmFseXNpcy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgZ29pbmcgdG8gYmUgYSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMsIGFuZCBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaGlkZGVuIHJlcXVpcmVtZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogYmFzZSBVU0IgbmV0d29ya2luZyBzdXBwb3J0LCBhbnkgcmVsZXZhbnQgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLCBhbnkgb3RoZXIgY2hpcHNldC1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgY29tZSBpbnRvIHBsYXksIGFuZCB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGFueSBvdGhlcnMuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZW5zdXJlIGEgcm9idXN0IGFuZCB3ZWxsLWRlZmluZWQgY29uZmlndXJhdGlvbiB0aGF0IHdvbid0IGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaXNzdWVzIGRvd24gdGhlIGxpbmUgd2hlbiBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjI3LjczNDQ5ODcxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0ICA0RyBtb2RlbSBmcm9tIFZlcml6b246XFxuIDYxMTpcXHRcXG4gNjEyOlxcdFxcdCAgaHR0cDovL3VidW50dWZvcnVtcy5vcmcvc2hvd3Bvc3QucGhwP3A9MTA1ODk2NDdcXHUwMDI2cG9zdGNvdW50PTE3XFxuIDYxMzpcXHRcXG4gNjE0OlxcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbiA2MTU6XFx0XFx0dHJpc3RhdGUgXFxcIlFpbmdIZW5nIENIOTIwMCBVU0IgZXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gNjE2OlxcdFxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbiA2MTc6XFx0XFx0c2VsZWN0IE1JSVxcbiA2MTg6XFx0XFx0aGVscFxcbiA2MTk6XFx0XFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBVU0IgZXRoZXJuZXQgYWRhcHRlciB3aXRoIGEgUWluSGVuZ1xcbiA2MjA6XFx0XFx0ICBDSDkyMDAgY2hpcHNldC5cXG4gNjIxOlxcdFxcbiA2MjI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNjIzOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNoOTIwMC5cXG4gNjI0OlxcdFxcbiA2MjU6XFx0Y29uZmlnIFVTQl9ORVRfQVFDMTExXFxuIDYyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbiA2Mjc6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDYyODpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gNjI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MjcuNzM0NTc1MDY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjU4MTU4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBVU0JfVVNCTkVUIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX1VTQk5FVGAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBmb3Jnb3R0ZW4gYWJvdXQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGxpZ2h0IG9mIHRoZSByZWNlbnQgY2hhbmdlcy4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gbmV0d29ya2luZyBhY3Jvc3Mgc3VjaCBhIHdpZGUgYXJyYXkgb2YgZGV2aWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgZmVhdHVyZSBidWlsZHMgY2xlYW5seSwgbGlua3MgY29ycmVjdGx5LCBhbmQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBzZWxlY3RgIHN0YXRlbWVudHMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgYW55IGBkZWZhdWx0YCB2YWx1ZXMgdGhhdCBjb3VsZCBpbmRpcmVjdGx5IGltcGFjdCBgVVNCX1VTQk5FVGAncyBpbmNsdXNpb24gb3IgZXhjbHVzaW9uLiBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgd2VsbCwgc28gb3RoZXJzIGNhbiBmaW5kIHdoYXQgdGhleSBuZWVkLCBhbmQgZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgY29uZmxpY3RzIHdpdGggb3RoZXIgVVNCIG9yIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBldmVyeSBiYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MzAuMTAwMzkzNzI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE1OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1VTQk5FVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzEtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMzLVxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MzAuMTU5NTYxNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MTAyNTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCAtIExpbmVzIDEzMC0xNDAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEzMC0xNDAgb2YgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gSSdtIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBwZXJ0YWlucyB0byBhIHNwZWNpZmljIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIsIGdpdmVuIHRoZSBmaWxlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgcG9zc2libHkgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIncyBjb25maWd1cmFiaWxpdHkgbGllcy4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gYXNzZXNzIHRoZSBtb2R1bGFyaXR5LCBhbnkgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgbmV0d29yayBvciBVU0Igc3Vic3lzdGVtcywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBjaG9pY2VzIG1hZGUgYnkgdGhlIGRyaXZlciBtYWludGFpbmVyLiBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzIGhlbHBzIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmVoYXZlIGJ5IGRlZmF1bHQuIEkgYW0gbG9va2luZyBmb3Igd2F5cyBJIGNvdWxkIGN1c3RvbWl6ZSB0aGUgZHJpdmVyLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJ2xsIGJlIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIGZsYWdzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljIHRoYXQgbWlnaHQgaW5kaWNhdGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBvciBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LiBJIHdpbGwgYmUgY29tcGFyaW5nIHRoaXMgcGFydCB0byB0aGUgc3Vycm91bmRpbmcgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzozMy4xMzA1ODk3NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjMzLjEzMDczODEyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg2ODg1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSBmb3IgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGl0IHJlbGllcyBvbiBgVVNCX05FVF9EUklWRVJTYCwgYFVTQl9TVVBQT1JUYCwgb3IgYE5FVERFVklDRVNgLiBCZXN0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gSSdsbCBiZWdpbiBteSBhbmFseXNpcyBmcm9tIHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBsaW5lIG9uZSwgYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIGZyb20gdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6MzQuODE3NjI2ODA3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbW1lbnQgXFxcIkhvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gIVVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTmV0d29yayBBZGFwdGVyc1xcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgVVNCIGlmIFVTQlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFVTQl9ORVRfRFJJVkVSU1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgVVNCX0NBVENcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XFxuICAyMDpcXHRcXHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XFxuICAyMTpcXHRcXHQgIEJlbGtpbiBGNVUwMTFcXG4gIDIyOlxcdFxcdCAgQmVsa2luIEY1VTExMVxcbiAgMjM6XFx0XFx0ICBDQVRDIE5ldE1hdGVcXG4gIDI0OlxcdFxcdCAgQ0FUQyBOZXRNYXRlIElJXFxuICAyNTpcXHRcXHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXFxuICAyODpcXHRcXHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cXG4gIDI5OlxcdFxcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Y29uZmlnIFVTQl9LQVdFVEhcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XFxuICAzODpcXHRcXHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxcbiAgMzk6XFx0XFx0ICAzQ29tIDNDMTkyNTBcXG4gIDQwOlxcdFxcdCAgQURTIFVTQi0xMEJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjM0LjgxNzc3NDgxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDYyMDA3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDSDkyMDAgVVNCIE5ldHdvcmsgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMuIGBVU0JfTkVUX0NIOTIwMGAgZGVwZW5kcyBvbiBgVVNCX1VTQk5FVGAsIHdoaWNoIGlzIGl0c2VsZiB1bmRlciBgVVNCX05FVF9EUklWRVJTYC4gQW5kIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYFVTQmAgY29uZmlnIGlzIHJlcXVpcmVkLiBTbywgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlIGBVU0JfTkVUX0NIOTIwMGAsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCBgVVNCYC5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyOiB3aGF0J3MgYmVlbiBtb2RpZmllZD8gQWhhLCBpdCdzIHRoZSBgY29udHJvbF93cml0ZWAgZnVuY3Rpb24sIHdoaWNoIGlzICpzdGF0aWMqIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gVGhpcyBpcyBpbXBvcnRhbnQuIExldCdzIHNlZSB3aG8gY2FsbHMgaXQ6IGBjaDkyMDBfbWRpb193cml0ZWAgYW5kIGBjaDkyMDBfYmluZGAuIE9rYXksIHNvIGBjaDkyMDBfYmluZGAgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAgYXJlIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGNoYW5nZXMgdG8gYGNvbnRyb2xfd3JpdGVgLlxuXG5BbHJpZ2h0LCB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMgaW4gYGNoOTIwMC5jYCBhcmUgYGNoOTIwMF9iaW5kYCwgYGNoOTIwMF9tZGlvX3dyaXRlYCBhbmQgb2YgY291cnNlIGBjb250cm9sX3dyaXRlYC4gSSBuZWVkIHRvIGNvbmZpcm0gYWdhaW4gdGhhdCBgY29udHJvbF93cml0ZWAgaXMgaW5kZWVkIHN0YXRpYy4gQWggeWVzLCBpdCBpcy4gQnV0IGBjaDkyMDBfYmluZGAgaXMgbm9uLXN0YXRpYyAoYnV0IGFsc28gc3RhdGljIGluIHRoZSBjb2RlLCBsaW5lIDMzNiBvZiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCA6IGBzdGF0aWMgaW50IGNoOTIwMF9iaW5kLi4uYCBidXQgcmVmZXJlbmNlZCBpbiBgY2g5MjAwX2luZm9gIHN0cnVjdCkuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZ2xvYmFsbHkgZXhwb3J0ZWQsIGFyZSBzdGlsbCBzeW1ib2xpY2FsbHkgcHJlc2VudCBpbiBzdGFuZGFyZCBidWlsZHMgKHdpdGggYGthbGxzeW1zYCBvciBmdW5jdGlvbiB0cmFjaW5nKSB3aXRoaW4gdGhlIGtlcm5lbCBvciB0aGUgbW9kdWxlLCB1bmxlc3MgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhlbSwgc28gdGhhdCdzIGdvb2QuXG5cbk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSB3aGF0IHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENvbnNpZGVyaW5nIG91ciBnb2FscywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4gU28sIGBjb250cm9sX3dyaXRlYCwgYGNoOTIwMF9iaW5kYCwgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAgYXJlIHRoZSB0YXJnZXRzLiBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhIHRvIG1ha2Ugc3VyZSB0aGlzIG1lZXRzIHRoZSByZXF1aXJlbWVudHM6IEl0J3MgYSByZWFjaGFibGUgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgdmlhIHZpcnR1YWwgYnVzZXMgKHJhdy1nYWRnZXQgVVNCIGZ1enppbmcpLCBzbyB0aGF0J3MgYSBjaGVjay4gQWxzbywgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBjb250cm9sX3dyaXRlYC4gSW5zdGVhZCBvZiBhbHdheXMgcmV0dXJuaW5nIDAsIGl0IHdpbGwgcmV0dXJuIGVycm9ycywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGBjaDkyMDBfYmluZGAgYW5kIGBjaDkyMDBfbWRpb193cml0ZWAuIFRoaXMgY2hhbmdlIGNhbiBsZWFkIHRvIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBkdXJpbmcgcHJvYmUvYmluZC93cml0ZSBvcGVyYXRpb25zLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5TbywgaXMgaXQgV29ydGhGdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuXG5cbkZpbmFsbHksIGxldCdzIGNsYXJpZnkgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuXG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgdG8gdGhlIHBvaW50LiBUaGlzIFVTQiBuZXR3b3JrIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBzeXprYWxsZXIgVVNCIHJhdy1nYWRnZXQgZW11bGF0aW9uLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGBjb250cm9sX3dyaXRlYCBpcyBjaGFuZ2VkIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBVU0IgY29udHJvbCBtZXNzYWdlIGVycm9ycyBkdXJpbmcgYmluZC93cml0ZSBvcGVyYXRpb25zLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiY29udHJvbF93cml0ZVwiLCBcImNoOTIwMF9iaW5kXCIsIFwiY2g5MjAwX21kaW9fd3JpdGVcIl1gLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIlVTQl9ORVRfQ0g5MjAwXCIsIFwiVVNCX1VTQk5FVFwiLCBcIlVTQl9ORVRfRFJJVkVSU1wiLCBcIlVTQlwiXWAuXG5cbkV2ZXJ5dGhpbmcgc2VlbXMgY29ycmVjdCwgYWxsIGJhc2VzIGFyZSBjb3ZlcmVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDcsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NDMuMjc5ODA2NTU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyODA2NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb250cm9sX3dyaXRlXCIsXG4gICAgXCJjaDkyMDBfYmluZFwiLFxuICAgIFwiY2g5MjAwX21kaW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgc28gdGhhdCBjb250cm9sX3dyaXRlKCkgY29ycmVjdGx5IHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMgZnJvbSB1c2JfY29udHJvbF9tc2coKSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuaW5nIDAuIENIOTIwMCBpcyBhIFVTQiBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHN5emthbGxlcidzIFVTQiByYXctZ2FkZ2V0IGVtdWxhdGlvbi4gRnV6emluZyBjYW4gdmVyaWZ5IGVycm9yLWhhbmRsaW5nIGFuZCBiaW5kaW5nIGxvZ2ljIHdoZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZhaWwgb3IgcmV0dXJuIHVuZXhwZWN0ZWQgc2l6ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29udHJvbF93cml0ZVwiLFxuICAgIFwiY2g5MjAwX2JpbmRcIixcbiAgICBcImNoOTIwMF9tZGlvX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIHNvIHRoYXQgY29udHJvbF93cml0ZSgpIGNvcnJlY3RseSBwcm9wYWdhdGVzIGVycm9yIGNvZGVzIGZyb20gdXNiX2NvbnRyb2xfbXNnKCkgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IHJldHVybmluZyAwLiBDSDkyMDAgaXMgYSBVU0IgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCBzeXprYWxsZXIncyBVU0IgcmF3LWdhZGdldCBlbXVsYXRpb24uIEZ1enppbmcgY2FuIHZlcmlmeSBlcnJvci1oYW5kbGluZyBhbmQgYmluZGluZyBsb2dpYyB3aGVuIFVTQiBjb250cm9sIHRyYW5zZmVycyBmYWlsIG9yIHJldHVybiB1bmV4cGVjdGVkIHNpemVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo0My40MTI2MjMyNThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDgzNjYxODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NDMuNDEzNDc3MTQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI0ODI4MDI3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlcnNwYWNlLWZhY2luZyBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlcnMgcHJpb3IgdG8gaW52b2NhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmViNWIzOGRlODA3ZmMyMTQ3ZDJiMGZlYmFlNGZmODQzN2Y4ZGQzNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDg6Mjc6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbmluZGV4IGEyMDZmZmE3NmYxYjkuLjNhODFlOWU5NmZkMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuQEAgLTE2OCw4ICsxNjgsNiBAQCBzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJyX291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NDMuNDEzNDc5NDg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MzIxMzI5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjaDkyMDAgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmLiBUbyBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uLCBteSBmaXJzdCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlIGNoYW5nZXMuIFRoZW4sIEknbGwgbGV2ZXJhZ2UgbXkgZXhwZXJ0IGtub3dsZWRnZSBhbmQgZGlyZWN0bHkgdXNlIGByZWFkLWZpbGVgIHRvIHBpbnBvaW50IGxpbmUgMTY4LiBGb2N1c2luZyBpbiBvbiB0aGF0IHNwZWNpZmljIHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIHN0YXJ0IGZvcm1pbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjI3OjQ4LjE0NTYxNDk4OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDEzMTpcXHRcXHRrZnJlZShidWYpO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRlcnJfb3V0OlxcbiAxMzQ6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbiAxMzg6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4gMTM5OlxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XFxuIDE0MjpcXHRcXHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcXG4gMTQzOlxcdFxcdGludCBlcnIgPSAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxcbiAxNDY6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9PVEhFUik7XFxuIDE0ODpcXHRcXHRlbHNlXFxuIDE0OTpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxNTM6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTU2OlxcdFxcdFxcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDE1NzpcXHRcXHRcXHRpZiAoIWJ1Zikge1xcbiAxNTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTU5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0ZXJyX291dDpcXG4gMTcyOlxcdFxcdHJldHVybiBlcnI7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdHN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbiAxNzY6XFx0e1xcbiAxNzc6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMTc4OlxcdFxcdHVuc2lnbmVkIGNoYXIgYnVmZlsyXTtcXG4gMTc5OlxcdFxcdGludCByZXQ7XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwiJXMgcGh5X2lkOiUwMnggbG9jOiUwMnhcXFxcblxcXCIsXFxuIDE4MjpcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5X2lkLCBsb2MpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRpZiAocGh5X2lkICE9IDApXFxuIDE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0cmV0ID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbiAxODg6XFx0XFx0XFx0XFx0ICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMTg5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo0OC4xNDU2ODgyMzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkxMTkyNzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjb250cm9sX3dyaXRlYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiwgdGhlcmUgd2FzIGEgZ2xhcmluZyBpc3N1ZS4gUHJldmlvdXNseSwgZXZlbiBpZiB0aGUgYHVzYl9jb250cm9sX21zZ2AgZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3Ig4oCTIG1heWJlIGEgdGltZW91dCBvciBhIHBpcGUgZXJyb3Ig4oCTIHRoZSBjb2RlIHdhcyAqdW5jb25kaXRpb25hbGx5KiByZXR1cm5pbmcgMCEgVGhlIGByZXR1cm4gMDtgIHdhcyBlZmZlY3RpdmVseSBtYXNraW5nIGFueSBlcnJvcnMuIEl0IHdhcyBjb21wbGV0ZWx5IGlnbm9yaW5nIHRoZSB2YWx1ZSBvZiBgZXJyYCBzZXQgYnkgdGhlIGB1c2JfY29udHJvbF9tc2dgIGNhbGwuIEFuZCBldmVuIGlmIGBlcnJgIHdhcyBzZXQgdG8gYC1FSU5WQUxgIGlmIGBlcnIgXHUwMDNjIHNpemVgLCB0aGUgYHJldHVybiAwO2Agd2FzIHN0aWxsIG92ZXJyaWRpbmcgdGhlIGVycm9yLiBOb3csIHJlbW92aW5nIHRoZSBgcmV0dXJuIDA7YCB3aWxsIGNoYW5nZSB0aGUgYmVoYXZpb3IsIHNvIHRoYXQgaXQgcmV0dXJucyBgZXJyYCwgdGhlIGNvcnJlY3QgZXJyb3IgY29kZS5cblxuTm93IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGB1c2JfY29udHJvbF9tc2dgIHJldHVybnMgb24gc3VjY2Vzcy4gRm9yIGFuIE9VVCB0cmFuc2ZlciAoaG9zdCB0byBkZXZpY2UpIGxpa2UgdGhpcywgaXQgcmV0dXJucyB0aGUgKm51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCosIHRoYXQgaXMsIGBzaXplYC4gU28sIGlmIGBlcnJgIGVxdWFscyBgc2l6ZWAsIHRoYXQgbWVhbnMgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLCBhbmQgd2Ugd2FudCB0byByZXR1cm4gYHNpemVgLlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjYWxsZXJzIGFyZSBoYW5kbGluZyB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyBzZWUgaG93IGBjb250cm9sX3dyaXRlYCBpcyBiZWluZyB1c2VkIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBUaW1lIHRvIGNoZWNrIHRob3NlIGNhbGxlcnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1Mi4wNTc2MTczMjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDI3MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbnRyb2xfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz05OT1zdGF0aWMgaW50IGNvbnRyb2xfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoxMzc6c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0xOTU9c3RhdGljIHZvaWQgY2g5MjAwX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMDktXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIxMDpcXHRjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgbG9jICogMiwgYnVmZiwgMHgwMixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjExLVxcdFxcdCAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9MzM2PXN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNTgtXFx0ZGF0YVsxXSA9IDB4MEY7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM1OTpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2MC1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjMtXFx0ZGF0YVsxXSA9IDB4OTA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM2NDpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjUtXFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzY4LVxcdGRhdGFbMV0gPSAweDAwO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjk6XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3MC1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzMtXFx0ZGF0YVsxXSA9IDB4RDg7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NDpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM3NS1cXHRcXHRcXHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzktXFx0ZGF0YVsxXSA9IDB4MDA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM4MDpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODEtXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzg0LVxcdGRhdGFbMV0gPSAweDBEO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODU6XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzg2LVxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1Mi4xMzQwNTA4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMyMDIzOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBjaDkyMDBfYmluZGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGZvY3VzIGluIG9uIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGxldCdzIHplcm8gaW4gb24gdGhlIGNvZGUgYmxvY2sgdGhhdCBydW5zIGZyb20gcm91Z2hseSBsaW5lIDMzNiB0aHJvdWdoIDM5MC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBiaW5kaW5nIGlzIGhhcHBlbmluZywgYW5kIGl0J3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHBvc3NpYmxlIGFyZWFzIHRoYXQgYXJlIGNhdXNpbmcgdGhlIGlzc3VlLiBUaW1lIHRvIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1My44NjYwNzkyMTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzYsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzY6XFx0c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiAzMzc6XFx0e1xcbiAzMzg6XFx0XFx0aW50IHJldHZhbCA9IDA7XFxuIDMzOTpcXHRcXHR1bnNpZ25lZCBjaGFyIGRhdGFbMl07XFxuIDM0MDpcXHRcXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcXG4gMzQzOlxcdFxcdGlmIChyZXR2YWwpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRkZXYtXFx1MDAzZW1paS5kZXYgPSBkZXYtXFx1MDAzZW5ldDtcXG4gMzQ3OlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XFxuIDM0ODpcXHRcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XFxuIDM0OTpcXHRcXHRkZXYtXFx1MDAzZW1paS5yZWdfbnVtX21hc2sgPSAweDFmO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRkZXYtXFx1MDAzZW1paS5waHlfaWRfbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlaGFyZF9tdHUgPSBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbXR1ICsgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4gMzU0OlxcdFxcdGRldi1cXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICsgMTY7XFxuIDM1NTpcXHRcXHRtaWlfbndheV9yZXN0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSk7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdGRhdGFbMF0gPSAweDAxO1xcbiAzNTg6XFx0XFx0ZGF0YVsxXSA9IDB4MEY7XFxuIDM1OTpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuIDM2MDpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0ZGF0YVswXSA9IDB4QTA7XFxuIDM2MzpcXHRcXHRkYXRhWzFdID0gMHg5MDtcXG4gMzY0OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuIDM2NTpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ZGF0YVswXSA9IDB4MzA7XFxuIDM2ODpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG4gMzY5OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxcbiAzNzA6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGRhdGFbMF0gPSAweDE3O1xcbiAzNzM6XFx0XFx0ZGF0YVsxXSA9IDB4RDg7XFxuIDM3NDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuIDM3NTpcXHRcXHRcXHRcXHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXFxuIDM3ODpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzc5OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzODA6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcXG4gMzgxOlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHRkYXRhWzBdID0gMHg1RjtcXG4gMzg0OlxcdFxcdGRhdGFbMV0gPSAweDBEO1xcbiAzODU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG4gMzg2OlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcXG4gMzg5OlxcdFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYWRkcik7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5MjpcXHR9XFxuIDM5MzpcXHRcXG4gMzk0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XFxuIDM5NTpcXHRcXHQuZGVzY3JpcHRpb24gPSBcXFwiQ0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyNzo1My44NjYyMDg2MzdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3NjQxMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIFVTQiBOZXR3b3JrIERyaXZlciBMb2dpYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGNvbnRyb2xfcmVhZGAgYW5kIGBjb250cm9sX3dyaXRlYCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIENIOTIwMCBVU0IgbmV0d29yayBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGNvbnRyb2xfcmVhZGAgaW4gdGhhdCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhhdCBib3RoIHJlYWQgYW5kIHdyaXRlIHJlZmVyIHRvIHRoZSBjb250cm9sIGVuZHBvaW50LCBzbyBhIGNhcmVmdWwgaW5zcGVjdGlvbiBvZiB0aGlzIHNlY3Rpb24gc2hvdWxkIHNob3cgbWUgaG93IHRoZSBkZXZpY2UncyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgaG9zdCBpbnRlcmFjdHMgd2l0aCB0aGUgQ0g5MjAwIGluIHRoZSBjb250cm9sIHRyYW5zZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NTUuNzQyNjIyNTU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHQjZGVmaW5lIEVUTl9UWF9GSUZPX0RFUFRIXFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgOClcXG4gIDk2OlxcdCNkZWZpbmUgRVRIX1JYQkRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiAgOTc6XFx0I2RlZmluZSBFVEhfUlhfRklGT19ERVBUSFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDApXFxuICA5ODpcXHRcXG4gIDk5OlxcdHN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG4gMTAwOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwgdW5zaWduZWQgc2hvcnQgdmFsdWUsXFxuIDEwMTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBpbmRleCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSxcXG4gMTAyOlxcdFxcdFxcdFxcdGludCB0aW1lb3V0KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcXG4gMTA1OlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xcbiAxMDY6XFx0XFx0aW50IGVyciA9IDA7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfUkVBRClcXG4gMTA5OlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX09USEVSKTtcXG4gMTEwOlxcdFxcdGVsc2VcXG4gMTExOlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9ERVZJQ0UpO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiJXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcXFxuXFxcIixcXG4gMTE1OlxcdFxcdFxcdCAgIF9fZnVuY19fLCBpbmRleCwgc2l6ZSk7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDExODpcXHRcXHRpZiAoIWJ1Zikge1xcbiAxMTk6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTIwOlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTI0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxMjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTI2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxMjc6XFx0XFx0aWYgKGVyciA9PSBzaXplKVxcbiAxMjg6XFx0XFx0XFx0bWVtY3B5KGRhdGEsIGJ1Ziwgc2l6ZSk7XFxuIDEyOTpcXHRcXHRlbHNlIGlmIChlcnIgXFx1MDAzZT0gMClcXG4gMTMwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDEzMTpcXHRcXHRrZnJlZShidWYpO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRlcnJfb3V0OlxcbiAxMzQ6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbiAxMzg6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4gMTM5OlxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6Mjc6NTUuNzQyNjkzMjA1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTUzNTYyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgY29udHJvbF93cml0ZWAgUGF0Y2ggYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjaGFuZ2luZyB0aGUgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uIGluIHRoZSBDSDkyMDAgZHJpdmVyLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGByZXR1cm4gMDtgIHRoYXQgd2FzLCBlc3NlbnRpYWxseSwgbWFza2luZyBhbnkgZXJyb3JzIHJldHVybmVkIGZyb20gYHVzYl9jb250cm9sX21zZ2AuIFdlJ3JlIHJlbW92aW5nIHRoYXQsIGFsbG93aW5nIHRoZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlIChgZXJyYCkgaWYgdGhlIFVTQiBjb250cm9sIG1lc3NhZ2UgZmFpbHMsIG9yIGAtRUlOVkFMYCBpZiB0aGVyZSB3YXMgYSBzaXplIG1pc21hdGNoLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1xuXG5MZXQncyB3YWxrIHRocm91Z2ggaXQuIEluc2lkZSBgY29udHJvbF93cml0ZWAsIHdlIGFsbG9jYXRlIGEgYnVmZmVyIChgYnVmID0ga21lbWR1cCguLi4pYCkgaWYgZGF0YSBpcyBwcm92aWRlZC4gVGhlbiB3ZSBjYWxsIGB1c2JfY29udHJvbF9tc2dgLiBBZnRlciB0aGF0LCB3ZSBjaGVjayBpZiB0aGUgcmV0dXJuZWQgZXJyb3IgYGVycmAgaW5kaWNhdGVzIGEgc2hvcnQgd3JpdGUuIEZpbmFsbHksIHdlIGBrZnJlZShidWYpYC4gVGhlIGtleSBjaGFuZ2UgaXMgcmVtb3ZpbmcgdGhhdCBwcmVtYXR1cmUgYHJldHVybiAwO2AuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UncmUgbm90IHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHRoZSBkZXZpY2Ugb3IsIGV2ZW4gd29yc2UsIHRvIHVzZXJzcGFjZS4gU28sIEkgbmVlZCB0byBjaGVjazogZG9lcyBgY29udHJvbF93cml0ZWAgd3JpdGUgYW55dGhpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBidWZmZXI/IFRoZSBhbnN3ZXIgaXMgbm87IGBjb250cm9sX3dyaXRlYCBpcyBhIFVTQiB3cml0ZSBmdW5jdGlvbi4gTmV4dCwgYXJlIGFueSBjYWxsZXJzIG9mIGBjb250cm9sX3dyaXRlYCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2Ugb2YgdGhpcyBjaGFuZ2U/XG5cbkxldCdzIGxvb2sgYXQgdGhlIGNhbGxlcnM6IEZpcnN0LCBgY2g5MjAwX21kaW9fd3JpdGVgLiBUaGUgY29kZSBzaG93cyB0aGUgYGJ1ZmZgIHZhcmlhYmxlIGlzICpmdWxseSogaW5pdGlhbGl6ZWQuIEltcG9ydGFudGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjb250cm9sX3dyaXRlYCBpcyAqaWdub3JlZCogaGVyZSwgc28gZXZlbiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciBpdCB3b3VsZG4ndCBiZSBoYW5kbGVkLiBOZXh0LCB3ZSBoYXZlIGBjaDkyMDBfYmluZGAuIGBkYXRhYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgKmVhY2gqIGNhbGwgdG8gYGNvbnRyb2xfd3JpdGVgLCBhbmQgdGhlIHJlc3VsdCBpcyBvdmVyd3JpdHRlbi4gU28gdGhlcmUncyBubyB3YXkgdGhpcyBjaGFuZ2UgY2F1c2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHJlYWQgYnkgdGhlIGNhbGxlci4gQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9yIHVzYWdlcz8gTm9wZS4gU28sIHRoYXQncyBnb29kLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNyaXRlcmlhIHJpZ29yb3VzbHk6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzL3BhZGRpbmcgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkPyBObywgdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyB0byB0aGUgVVNCIGRldmljZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYy9icmFuY2hpbmcgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm90IGluIHRoaXMgY2FzZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vLCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLlxuXG5TbywgdG8gc3VtbWFyaXplIGZvciB0aGUgcmVjb3JkOiB0aGlzIHBhdGNoIHNpbXBseSByZW1vdmVzIGFuIHVucmVhY2hhYmxlIGByZXR1cm4gMDtgIGZyb20gYGNvbnRyb2xfd3JpdGUoKWAuIFRoaXMgd2FzIG1hc2tpbmcgdGhlIHJldHVybiBjb2RlIGZyb20gYHVzYl9jb250cm9sX21zZ2AsIGFuZCB3ZSdyZSBhbGxvd2luZyB0aGUgZnVuY3Rpb24gdG8gcHJvcGVybHkgcmV0dXJuIHRoZSBhY3R1YWwgZXJyb3IuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBleHBvc3VyZSBvZiBkYXRhIHRvIHVzZXJzcGFjZSwgbm8gcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYWxsIGJ1ZmZlcnMgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzc1Nhbml0aXplcikgY2hlY2tzIGFuZCBlcnJvciBoYW5kbGluZyBhcmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQuIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY5LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODoyODowNS44OTYyNTg5NDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYW4gZXJyb25lb3VzIGByZXR1cm4gMDtgIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Y29udHJvbF93cml0ZSgpYCwgYWxsb3dpbmcgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGB1c2JfY29udHJvbF9tc2coKWAgb3IgYC1FSU5WQUxgIG9uIGluY29tcGxldGUgd3JpdGVzIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgbWFza2VkIGJ5IGAwYC5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlcnNwYWNlLWZhY2luZyBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgYnVmZmVycyBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlcnMgcHJpb3IgdG8gaW52b2NhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiBlcnJvbmVvdXMgYHJldHVybiAwO2AgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzpjb250cm9sX3dyaXRlKClgLCBhbGxvd2luZyBlcnJvciByZXR1cm4gdmFsdWVzIGZyb20gYHVzYl9jb250cm9sX21zZygpYCBvciBgLUVJTlZBTGAgb24gaW5jb21wbGV0ZSB3cml0ZXMgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGJhY2sgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIGJlaW5nIHVuY29uZGl0aW9uYWxseSBtYXNrZWQgYnkgYDBgLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2Vyc3BhY2UtZmFjaW5nIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCBidWZmZXJzIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVycyBwcmlvciB0byBpbnZvY2F0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgZnVsbHkgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[1] Phase: Succeeded StartedAt: 2026-09-06 08:28:17 +0000 UTC FinishedAt: 2026-09-06 08:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 08:28:17 +0000 UTC FinishedAt: 2026-09-06 08:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2] Phase: Succeeded StartedAt: 2026-09-06 08:28:17 +0000 UTC FinishedAt: 2026-09-06 10:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 08:28:17 +0000 UTC FinishedAt: 2026-09-06 10:03:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 08:28:17 +0000 UTC FinishedAt: 2026-09-06 08:28:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 08:28:17 +0000 UTC FinishedAt: 2026-09-06 08:28:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowltwlh/series-workflowltwlh-convert-artifact-3202798464/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 08:28:27 +0000 UTC FinishedAt: 2026-09-06 08:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 08:28:27 +0000 UTC FinishedAt: 2026-09-06 08:45:45 +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:*6006d162-3908-4d7b-a61d-a529d8b172aa,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-workflowltwlh/series-workflowltwlh-convert-artifact-3202798464/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": "07849061-1f6b-4a44-9e73-03ef5fc7a482", "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-workflowltwlh/series-workflowltwlh-build-action-2633244230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 08:28:27 +0000 UTC FinishedAt: 2026-09-06 08:45:35 +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:*6006d162-3908-4d7b-a61d-a529d8b172aa,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-workflowltwlh/series-workflowltwlh-convert-artifact-3202798464/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": "07849061-1f6b-4a44-9e73-03ef5fc7a482", "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-workflowltwlh/series-workflowltwlh-build-action-2633244230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 08:45:45 +0000 UTC FinishedAt: 2026-09-06 08:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 08:45:45 +0000 UTC FinishedAt: 2026-09-06 08:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 08:45:45 +0000 UTC FinishedAt: 2026-09-06 08:45:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 08:45:45 +0000 UTC FinishedAt: 2026-09-06 08:45:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowltwlh/series-workflowltwlh-convert-artifact-312503847/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 08:45:56 +0000 UTC FinishedAt: 2026-09-06 08:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 08:45:56 +0000 UTC FinishedAt: 2026-09-06 08:47:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07849061-1f6b-4a44-9e73-03ef5fc7a482,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-workflowltwlh/series-workflowltwlh-build-action-2633244230/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-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 08:47:48 +0000 UTC FinishedAt: 2026-09-06 08:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 08:47:48 +0000 UTC FinishedAt: 2026-09-06 08:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 08:47:48 +0000 UTC FinishedAt: 2026-09-06 09:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 08:47:48 +0000 UTC FinishedAt: 2026-09-06 09:05:02 +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:*6006d162-3908-4d7b-a61d-a529d8b172aa,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-workflowltwlh/series-workflowltwlh-convert-artifact-312503847/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": "ff0abef3-93b9-46ac-a633-20710f491190", "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-workflowltwlh/series-workflowltwlh-build-action-1659953067/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 08:47:48 +0000 UTC FinishedAt: 2026-09-06 09:04:48 +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:*6006d162-3908-4d7b-a61d-a529d8b172aa,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-workflowltwlh/series-workflowltwlh-convert-artifact-312503847/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": "ff0abef3-93b9-46ac-a633-20710f491190", "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-workflowltwlh/series-workflowltwlh-build-action-1659953067/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 09:05:02 +0000 UTC FinishedAt: 2026-09-06 09:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 09:05:02 +0000 UTC FinishedAt: 2026-09-06 09:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 09:05:02 +0000 UTC FinishedAt: 2026-09-06 09:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 09:05:02 +0000 UTC FinishedAt: 2026-09-06 09:06:45 +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:*ff0abef3-93b9-46ac-a633-20710f491190,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-workflowltwlh/series-workflowltwlh-build-action-1659953067/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-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 09:06:55 +0000 UTC FinishedAt: 2026-09-06 09:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 09:06:56 +0000 UTC FinishedAt: 2026-09-06 10:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 09:06:56 +0000 UTC FinishedAt: 2026-09-06 10:03:00 +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":["control_write","ch9200_bind","ch9200_mdio_write"],"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:*07849061-1f6b-4a44-9e73-03ef5fc7a482,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ff0abef3-93b9-46ac-a633-20710f491190,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-workflowltwlh/series-workflowltwlh-build-action-2633244230/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-workflowltwlh/series-workflowltwlh-build-action-1659953067/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 09:06:56 +0000 UTC FinishedAt: 2026-09-06 09:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 09:06:56 +0000 UTC FinishedAt: 2026-09-06 09:07:00 +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":["control_write","ch9200_bind","ch9200_mdio_write"],"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-workflowltwlh/series-workflowltwlh-convert-artifact-3034634880/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 09:06:56 +0000 UTC FinishedAt: 2026-09-06 09:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 09:06:56 +0000 UTC FinishedAt: 2026-09-06 09:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 09:07:17 +0000 UTC FinishedAt: 2026-09-06 10:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltwlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["control_write","ch9200_bind","ch9200_mdio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e7c93ad4bd51d2c38da48dcdd8ce27bfb2c3771b","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET","USB_NET_DRIVERS","USB"],"series_id":"377b5ef5-ed84-4a69-adab-9d29d7eb6107","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 09:07:17 +0000 UTC FinishedAt: 2026-09-06 10:02:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07849061-1f6b-4a44-9e73-03ef5fc7a482,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ff0abef3-93b9-46ac-a633-20710f491190,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-workflowltwlh/series-workflowltwlh-build-action-2633244230/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-workflowltwlh/series-workflowltwlh-build-action-1659953067/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-workflowltwlh/series-workflowltwlh-convert-artifact-3034634880/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,}