Name: series-workflowpmw7w Phase: Succeeded StartedAt: 2026-09-05 04:23:27 +0000 UTC FinishedAt: 2026-09-05 07:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[0] Phase: Succeeded StartedAt: 2026-09-05 04:23:27 +0000 UTC FinishedAt: 2026-09-05 05:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 04:23:27 +0000 UTC FinishedAt: 2026-09-05 05:56:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "f9b77343-c4b6-41ec-80f7-34433b3e8d4a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ch9200_bind" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyB0byBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSwgbW9kaWZ5aW5nIGVycm9yLWhhbmRsaW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGRyaXZlciBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGggVVNCIGRldmljZSBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NWM3MmI2M2Q3ZmJmNDEyYTg3YzYxYWIxZWQ0YzExN2Q3NTRiZDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbmluZGV4IGEyMDZmZmE3NmYxYjkuLmNlMmU2MmY4NWMzZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuQEAgLTM2MCwzMiAmIzQzOzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRkYXRhWzFdID0gMHgwRjtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweEEwO1xuIFx0ZGF0YVsxXSA9IDB4OTA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXR2YWwpXG4mIzQzO1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MzA7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXR2YWwpXG4mIzQzO1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MTc7XG4gXHRkYXRhWzFdID0gMHhEODtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xuIFx0ZGF0YVswXSA9IDB4MDE7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXG4gXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHg1RjtcbiBcdGRhdGFbMV0gPSAweDBEO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xuIFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIHRvIGNvbnRyb2xfd3JpdGUoKSBjYWxscyBpbiBjaDkyMDBfYmluZCgpLCBtb2RpZnlpbmcgZXJyb3ItaGFuZGxpbmcgY29udHJvbCBmbG93IGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgd2l0aCBVU0IgZGV2aWNlIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1YzcyYjYzZDdmYmY0MTJhODdjNjFhYjFlZDRjMTE3ZDc1NGJkOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjU1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCmluZGV4IGEyMDZmZmE3NmYxYjkuLmNlMmU2MmY4NWMzZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKQEAgLTM2MCwzMiAmIzQzOzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJZGF0YVsxXSA9IDB4MEY7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJZGF0YVswXSA9IDB4QTA7CiAJZGF0YVsxXSA9IDB4OTA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDMwOwogCWRhdGFbMV0gPSAweDAwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJZGF0YVswXSA9IDB4MTc7CiAJZGF0YVsxXSA9IDB4RDg7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLAogCQkJICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJLyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovCiAJZGF0YVswXSA9IDB4MDE7CiAJZGF0YVsxXSA9IDB4MDA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMiwKIAkJCSAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDVGOwogCWRhdGFbMV0gPSAweDBEOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsCiAJCQkgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTsKIAlldGhfaHdfYWRkcl9zZXQoZGV2LSZndDtuZXQsIGFkZHIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgVVNCIE5ldHdvcmsgRHJpdmVyIElzc3VlKioKClJpZ2h0LCB0aGUgZGlmZiBpcyBwb2ludGluZyBtZSBkaXJlY3RseSB0byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gVGhhdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0aG9yb3VnaGx5IGluc3BlY3QgdGhlIGRyaXZlciYjMzk7cyBjb2RlIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIOKAkyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlJiMzOTtzIHB1cnBvc2UsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uCgpOb3csIGNvbnNpZGVyaW5nIHRoaXMgaXMgYSBVU0IgbmV0d29yayBkcml2ZXIsIGl0IGJyaW5ncyB0byBtaW5kIHNldmVyYWwgcmVsZXZhbnQgYXJlYXMuIFdlIG9mdGVuIHNlZSB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGVtdWxhdGVkIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9ucywgb3IgdGhlIHVzZSBvZiBSYXcgR2FkZ2V0LCB2aGNpLCBhbmQgZXNwZWNpYWxseSBVU0IgZnV6emluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gVGhvc2UgYXJlIGFsbCB0aGluZ3MgdGhhdCBpbW1lZGlhdGVseSBqdW1wIHRvIG1pbmQuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBlbXVsYXRpb24gYW5kIGZ1enppbmcgY29udGV4dHMgaW4gbWluZCBhcyBJJiMzOTttIGNoZWNraW5nIHRoZSBkcml2ZXIuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYW5kIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2g5MjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTYxND1jb25maWcgVVNCX05FVF9DSDkyMDBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjItXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjIzOlx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjI0LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfVVNCX05FVF9DRENfTUJJTSlcdCYjNDM7PSBjZGNfbWJpbS5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVx0JiM0Mzs9IGNoOTIwMC5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVFDMTExKVx0JiM0Mzs9IGFxYzExMS5vXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTEzNz1zdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE3Ni1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoxNzc6c3RhdGljIGludCBjaDkyMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTc4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTk2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE5NzpzdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE5OC1cdFx0XHQgICAgICBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTUtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjE2OnN0YXRpYyBpbnQgY2g5MjAwX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxNy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIyOC1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyMjk6c3RhdGljIHZvaWQgY2g5MjAwX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMzAte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNDctXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjQ4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNDktXHRcdFx0XHQgICAgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI4OC1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyODk6c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI5MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTMwNz1zdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzNy1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozMzg6c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzOS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM0OC1cdGRldi1cdTAwM2VtaWkuZGV2ID0gZGV2LVx1MDAzZW5ldDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNDk6XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzUwOlx0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzUxLVx0ZGV2LVx1MDAzZW1paS5yZWdfbnVtX21hc2sgPSAweDFmO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MDctXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDA4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDA5LVx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDEwLVx0LmZsYWdzID0gRkxBR19FVEhFUixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTE6XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxMjpcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTM6XHQudHhfZml4dXAgPSBjaDkyMDBfdHhfZml4dXAsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDE0Olx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDE1Olx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTY6XHQucmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MTctfTtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MTgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjaDkyMDBfcHJvZHVjdHNbXSA9IHtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjAtXHR7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDIxLVx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyMjpcdCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZjaDkyMDBfaW5mbyxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjMtXHQgfSxcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyNzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI5OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzMDpcdC5uYW1lID0gXCYjMzQ7Y2g5MjAwXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzMTpcdC5pZF90YWJsZSA9IGNoOTIwMF9wcm9kdWN0cyxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzItXHQucHJvYmUgPSB1c2JuZXRfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQzNy1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0Mzg6bW9kdWxlX3VzYl9kcml2ZXIoY2g5MjAwX2RyaXZlcik7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IFVTQiBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIHNwZWNpZmljYWxseSBhdCBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLCByaWdodCBhcm91bmQgbGluZSA2MTQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVjaXNpb25zIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIGxpa2VseSBtYWRlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgSSYjMzk7bGwgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB2YXJpb3VzIFVTQiBuZXR3b3JrIGRldmljZXMgYW5kIHBlcmhhcHMgc29tZSBkZXBlbmRlbmNpZXMsIGxpa2Ugd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBuZWVkIHRvIGJlIGFjdGl2ZS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGRpZmZlcmVudCBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBob3cgdGhleSYjMzk7cmUgbWFuYWdlZCBmcm9tIGEgYnVpbGQtdGltZSBwZXJzcGVjdGl2ZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2Ugd2hpY2ggVVNCIG5ldHdvcmsgZGV2aWNlcyBnZXQgYnVpbHQgaW50byB0aGUga2VybmVsIHZlcnN1cyBiZWluZyBsb2FkYWJsZSBtb2R1bGVzLCBhbmQgYWxzbyBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBhc3BlY3RzIG9mIHRoZSBrZXJuZWwmIzM5O3MgVVNCIG5ldHdvcmtpbmcgc3RhY2suIEtub3dpbmcgdGhhdCB3aWxsIGhlbHAgbWUgd2l0aCBbaW5zZXJ0IHJlbGV2YW50IGV4cGVydC1sZXZlbCBhY3Rpdml0eSwgZS5nLiwgY3VzdG9taXppbmcga2VybmVsIGJ1aWxkcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUsIHRyb3VibGVzaG9vdGluZyBkZXZpY2UgY29tcGF0aWJpbGl0eSwgZXRjLl0KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdCAgNEcgbW9kZW0gZnJvbSBWZXJpem9uOlxuIDYxMTpcdFxuIDYxMjpcdFx0ICBodHRwOi8vdWJ1bnR1Zm9ydW1zLm9yZy9zaG93cG9zdC5waHA/cD0xMDU4OTY0N1x1MDAyNnBvc3Rjb3VudD0xN1xuIDYxMzpcdFxuIDYxNDpcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuIDYxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gNjE2Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2MTc6XHRcdHNlbGVjdCBNSUlcbiA2MTg6XHRcdGhlbHBcbiA2MTk6XHRcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgVVNCIGV0aGVybmV0IGFkYXB0ZXIgd2l0aCBhIFFpbkhlbmdcbiA2MjA6XHRcdCAgQ0g5MjAwIGNoaXBzZXQuXG4gNjIxOlx0XG4gNjIyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDYyMzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxuIDYyNDpcdFxuIDYyNTpcdGNvbmZpZyBVU0JfTkVUX0FRQzExMVxuIDYyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XCYjMzQ7XG4gNjI3Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2Mjg6XHRcdHNlbGVjdCBDUkMzMlxuIDYyOTpcdFx0aGVscFxuIDYzMDpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFxdWFudGlhIEFRdGlvbiBVU0JcbiA2MzE6XHRcdCAgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gQVFDMTExVS9BUUMxMTIgY2hpcHMuXG4gNjMyOlx0XG4gNjMzOlx0XHQgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOlxuIDYzNDpcdFx0ICAqIEFxdWFudGlhIEFRdGlvbiBVU0IgdG8gNUdiRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgRHJpdmVyIEJpbmQgRnVuY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgY2g5MjAwYCBVU0IgZHJpdmVyIGJpbmRzIHRvIGEgZGV2aWNlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYGJpbmRgIGZ1bmN0aW9uLCBvciBhdCBsZWFzdCB0aGF0JiMzOTtzIHdoZXJlIEkgYXNzdW1lIHRoZSBhY3Rpb24gc3RhcnRzLiBJJiMzOTtsbCBmb2N1cyBvbiBsaW5lcyAzNDAgdGhyb3VnaCA0MDUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBsb2dpYyBvZiBkZXZpY2UgYXNzb2NpYXRpb24gd2l0aGluIHRoYXQgZHJpdmVyLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyB0aGluZyBjb21lcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzM1Olx0XHRyZXR1cm4gZXJyO1xuIDMzNjpcdH1cbiAzMzc6XHRcbiAzMzg6XHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gMzM5Olx0e1xuIDM0MDpcdFx0aW50IHJldHZhbCA9IDA7XG4gMzQxOlx0XHR1bnNpZ25lZCBjaGFyIGRhdGFbMl07XG4gMzQyOlx0XHR1OCBhZGRyW0VUSF9BTEVOXTtcbiAzNDM6XHRcbiAzNDQ6XHRcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XG4gMzQ1Olx0XHRpZiAocmV0dmFsKVxuIDM0NjpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM0NzpcdFxuIDM0ODpcdFx0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuIDM0OTpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xuIDM1MDpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XG4gMzUxOlx0XHRkZXYtXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XG4gMzUyOlx0XG4gMzUzOlx0XHRkZXYtXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcbiAzNTQ6XHRcbiAzNTU6XHRcdGRldi1cdTAwM2VoYXJkX210dSA9IGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VuZXQtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIDM1NjpcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCAmIzQzOyAxNjtcbiAzNTc6XHRcdG1paV9ud2F5X3Jlc3RhcnQoXHUwMDI2ZGV2LVx1MDAzZW1paSk7XG4gMzU4Olx0XG4gMzU5Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzNjA6XHRcdGRhdGFbMV0gPSAweDBGO1xuIDM2MTpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxuIDM2MjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM2MzpcdFx0aWYgKHJldHZhbClcbiAzNjQ6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNjU6XHRcbiAzNjY6XHRcdGRhdGFbMF0gPSAweEEwO1xuIDM2NzpcdFx0ZGF0YVsxXSA9IDB4OTA7XG4gMzY4Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuIDM2OTpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3MDpcdFx0aWYgKHJldHZhbClcbiAzNzE6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzI6XHRcbiAzNzM6XHRcdGRhdGFbMF0gPSAweDMwO1xuIDM3NDpcdFx0ZGF0YVsxXSA9IDB4MDA7XG4gMzc1Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbiAzNzY6XHRcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzNzc6XHRcdGlmIChyZXR2YWwpXG4gMzc4Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzc5Olx0XG4gMzgwOlx0XHRkYXRhWzBdID0gMHgxNztcbiAzODE6XHRcdGRhdGFbMV0gPSAweEQ4O1xuIDM4MjpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxuIDM4MzpcdFx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM4NDpcdFx0aWYgKHJldHZhbClcbiAzODU6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzODY6XHRcbiAzODc6XHRcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xuIDM4ODpcdFx0ZGF0YVswXSA9IDB4MDE7XG4gMzg5Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzOTA6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXG4gMzkxOlx0XHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzkyOlx0XHRpZiAocmV0dmFsKVxuIDM5MzpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM5NDpcdFxuIDM5NTpcdFx0ZGF0YVswXSA9IDB4NUY7XG4gMzk2Olx0XHRkYXRhWzFdID0gMHgwRDtcbiAzOTc6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXG4gMzk4Olx0XHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzk5Olx0XHRpZiAocmV0dmFsKVxuIDQwMDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDQwMTpcdFxuIDQwMjpcdFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XG4gNDAzOlx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYWRkcik7XG4gNDA0Olx0XG4gNDA1Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDQwNjpcdH1cbiA0MDc6XHRcbiA0MDg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xuIDQwOTpcdFx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVVNCIE5ldHdvcmsgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gdGhlc2UgVVNCIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgVVNCX1VTQk5FVGAgYW5kIHRoZSBgVVNCX05FVF9DSDkyMDBgIG1vZHVsZS4gV2hlcmUgZG9lcyB0aGlzIGluZm9ybWF0aW9uIHJlc2lkZT8gTXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IHRoZSBgS2NvbmZpZ2AgZmlsZSwgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvdXNiL2AuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciB0aGVzZSBraW5kIG9mIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4gVGltZSB0byBjcmFjayB0aGF0IG9wZW4gYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMgYWJvdXQgYFVTQl9VU0JORVRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1VTQk5FVFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYFVTQl9VU0JORVRgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkuIE5vIHBvaW50IGluIGVuYWJsaW5nIGl0IGlmIGl0JiMzOTtzIGdvdCBzb21lIHVubWV0IHJlcXVpcmVtZW50cywgcmlnaHQ/IFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSwgYnV0LCBzdGlsbCwgaXQgaXMgdGhlIGZpcnN0IHN0ZXAgSSB0YWtlIGluIHJlc29sdmluZyBVU0IgcmVsYXRlZCBuZXR3b3JrIGRyaXZlciBwcm9ibGVtcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgYW5kIG1ha2Ugc3VyZSB0aGF0IGFueSBjb3JlIGZlYXR1cmVzIGFyZSBwcm9wZXJseSBlbmFibGVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIHByb3BlciBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxuIDEzMTpcdFxuIDEzMjpcdGNvbmZpZyBVU0JfVVNCTkVUXG4gMTMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuIDEzNDpcdFx0c2VsZWN0IE1JSVxuIDEzNTpcdFx0aGVscFxuIDEzNjpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXG4gMTM3Olx0XHQgIHdpdGggXCYjMzQ7bWluaWRyaXZlcnNcJiMzNDsgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcbiAxMzg6XHRcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXG4gMTM5Olx0XHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cbiAxNDA6XHRcbiAxNDE6XHRcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXCYjMzQ7dXNibmV0XCYjMzQ7LCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcbiAxNDI6XHRcbiAxNDM6XHRcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcJiMzNDtuZXR3b3JrXCYjMzQ7IG9yIFwmIzM0O2RhdGEgdHJhbnNmZXJcJiMzNDtcbiAxNDQ6XHRcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXG4gMTQ1Olx0XHQgICAgXCYjMzQ7TGFwbGlua1wmIzM0OyBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XG4gMTQ2Olx0XHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cbiAxNDc6XHRcbiAxNDg6XHRcdCAgLSBBbiBpbnRlbGxpZ2VudCBVU0IgZ2FkZ2V0LCBwZXJoYXBzIGVtYmVkZGluZyBhIExpbnV4IHN5c3RlbS5cbiAxNDk6XHRcdCAgICBUaGVzZSBpbmNsdWRlIFBEQXMgcnVubmluZyBMaW51eCAoaVBhcSwgWW9weSwgWmF1cnVzLCBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENIOTIwMCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBVU0JfTkVUX0NIOTIwMGAgc2l0dWF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyDigJMgaXQgcmVsaWVzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBwdWxscyBpbiBhIHdob2xlIHNsZXcgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMgbGlrZSBgTkVUREVWSUNFU2AsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYFVTQmAgc3VwcG9ydC4gSSYjMzk7bSB1c3VhbGx5IGZpbmUganVzdCBlbmFibGluZyBgVVNCX05FVF9DSDkyMDBgLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgcGFyZW50IGNvbmZpZ3MgYXJlIHN0YW5kYXJkLiBTbywgYFVTQl9ORVRfQ0g5MjAwYCBhbmQgYFVTQl9VU0JORVRgIGFyZSBteSBtYWluIGZvY3VzLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBjaDkyMDBfYmluZGAgcmVhY2hhYmxlPyBUaGUgYW5zd2VyIGFwcGVhcnMgdG8gYmUgeWVzLiBJbiBteSBzeXprYWxsZXIvdmlydHVhbCBlbnZpcm9ubWVudCwgdGhlIFVTQiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSB1c2luZyB0aGUgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBzZXR1cCwgZW11bGF0ZXMgVVNCIGRldmljZXMgbWF0Y2hpbmcgYFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpYC4gV2hlbiBvbmUgb2YgdGhlc2UgdmlydHVhbCBkZXZpY2VzIGlzICYjMzQ7cGx1Z2dlZCBpbiwmIzM0OyB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIGNhbGxzIGBpbmZvLSZndDtiaW5kKGRldiwgdWRldilgLCB3aGljaCBpcyBgY2g5MjAwX2JpbmRgLgoKUHJldmlvdXNseSwgSSBzZWUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBgY29udHJvbF93cml0ZWAgY2FsbHMgd2l0aGluIGBjaDkyMDBfYmluZGAgd2VyZSBub3QgY2hlY2tlZC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCB3ZWFrIHBvaW50LiBOb3csIGlmIGFueSBvZiB0aG9zZSBgY29udHJvbF93cml0ZWAgY2FsbHMgZmFpbCwgZHVlIHRvIGEgc2ltdWxhdGVkIFVTQiBmYXVsdCwgdGltZW91dCwgdW5wbHVnIGV2ZW50LCBvciBhbiBpc3N1ZSB3aXRoIHRoZSBkZXNjcmlwdG9yIG9yIGVuZHBvaW50cywgYGNoOTIwMF9iaW5kYCB3aWxsIGFib3J0IGVhcmx5LCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gVGhpcyBjaGFuZ2VzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgaW5pdGlhbGl6YXRpb24gZmxvdyBzaWduaWZpY2FudGx5LCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgZnV6emluZyBzdHJhdGVneS4KClRpbWUgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmchIEl0JiMzOTtzIHJlYWNoYWJsZSwgY2hlY2suIE5vdywgdGhlIGBXb3J0aEZ1enppbmdgIHBhcnQuIFVTQiBkZXZpY2VzIGFyZSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIgdmlhIHJhd19nYWRnZXQgLyBkdW1teV9oY2QgLyB2dXNiLCB0aGlzIGNoZWNrcyBvdXQuCgpNeSBtYWluIGZvY3VzIHdpbGwgYmUgdGhlIHN5bWJvbHM6IGBjaDkyMDBfYmluZGAgYW5kIGBjb250cm9sX3dyaXRlYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgY2g5MjAwX2JpbmRgIGlzIHRoZSBwcmltYXJ5IG9uZSBoZXJlLiBXYWl0LCBpcyBgY2g5MjAwX2JpbmRgIHN0YXRpYyBvciBub24tc3RhdGljPyBMb29rcyBsaWtlIGl0JiMzOTtzIHN0YXRpYy4gQnV0LCBJIHNob3VsZCBjb25maXJtIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBieSBjaGVja2luZyBzeW1ib2xzIGluIGBjaDkyMDBgLCBhbmQgYGNoOTIwMF9iaW5kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQuIE9rYXksIGxldCYjMzk7cyBhbHNvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgdG8gc2VlIGlmIGBjaDkyMDBfYmluZGAgb3Igb3RoZXIgZnVuY3Rpb25zIGluIGBjaDkyMDAuY2AgZXhpc3QuIEp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIFRoZXJlZm9yZSwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtOTgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6OTk6c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTEwMC1cdFx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTM3OnN0YXRpYyBpbnQgY29udHJvbF93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTc2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE3NzpzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xNzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xOTYtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTk3OnN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTk4LVx0XHRcdCAgICAgIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxNS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyMTY6c3RhdGljIGludCBjaDkyMDBfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjE3LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjI4LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIyOTpzdGF0aWMgdm9pZCBjaDkyMDBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzMC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI0Ny1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNDg6c3RhdGljIHN0cnVjdCBza19idWZmICpjaDkyMDBfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI0OS1cdFx0XHRcdCAgICAgICBnZnBfdCBmbGFncylcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjg4LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjI4OTpzdGF0aWMgaW50IGNoOTIwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjkwLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzA2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjMwNzpzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzA4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM3LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjMzODpzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM5LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9NDE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjaDkyMDBfcHJvZHVjdHNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyNzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9NDI5PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzctXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDM4Om1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQzOS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0NDA6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1FpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDQxOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE0CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgY2g5MjAwX2JpbmRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gTXkgYEZvY3VzU3ltYm9sc2AgbGlzdCBjb25maXJtcyB0aGlzLCBleHBsaWNpdGx5IGNhbGxpbmcgb3V0IGBjaDkyMDBfYmluZGAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgd2l0aCBgVVNCX05FVF9DSDkyMDBgIGFuZCBgVVNCX1VTQk5FVGAsIHRlbGxzIG1lIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1ha2UgdGhpcyByZWxldmFudC4gVGhpcyBsb29rcyBsaWtlIGEgVVNCIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBDSDkyMDAuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgYFdvcnRoRnV6emluZz10cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc29saWQuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGVycm9yIGNoZWNraW5nIGluIGBjaDkyMDBfYmluZGAuIENydWNpYWxseSwgdGhpcyBoYXBwZW5zIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWVzIG9mIGBjb250cm9sX3dyaXRlYC4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiB0aGUgQ0g5MjAwIFVTQiBldGhlcm5ldCBkcml2ZXIgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24g4oCTIGV4YWN0bHkgdGhlIHNvcnQgb2Ygc2V0dXAgSSB1c2UgaW4gbXkgZnV6emluZyBlbnZpcm9ubWVudHMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRldmljZSBlbnVtZXJhdGlvbiBhbmQgcHJvYmluZywgd2hpY2ggbWVhbnMgSSBjYW4gdHJpZ2dlciB0aGlzIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZzogYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoZSByZWFzb25pbmcgY2hlY2tzIG91dCBwZXJmZWN0bHksIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBsaW5raW5nIHRoaXMgdG8gdGhlIHJlbGV2YW50IGRyaXZlci4gRXZlcnl0aGluZyBhbGlnbnMuIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9DSDkyMDAmIzM0OywKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoOTIwMF9iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyB0byBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSwgbW9kaWZ5aW5nIGVycm9yLWhhbmRsaW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGRyaXZlciBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGggVVNCIGRldmljZSBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNrcyBmb3IgcmV0dmFsIGFmdGVyIGVhY2ggY29udHJvbF93cml0ZSgpIGNhbGwgaW4gY2g5MjAwX2JpbmQoKS4gU3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGRhdGFbMl0pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NWM3MmI2M2Q3ZmJmNDEyYTg3YzYxYWIxZWQ0YzExN2Q3NTRiZDhlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwppbmRleCBhMjA2ZmZhNzZmMWI5Li5jZTJlNjJmODVjM2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCkBAIC0zNjAsMzIgJiM0MzszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCWRhdGFbMV0gPSAweDBGOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweEEwOwogCWRhdGFbMV0gPSAweDkwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsCiAJCQkgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHgzMDsKIAlkYXRhWzFdID0gMHgwMDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDE3OwogCWRhdGFbMV0gPSAweEQ4OwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCwKIAkJCSAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCS8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqLwogCWRhdGFbMF0gPSAweDAxOwogCWRhdGFbMV0gPSAweDAwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsCiAJCQkgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHg1RjsKIAlkYXRhWzFdID0gMHgwRDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLAogCQkJICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7CiAJZXRoX2h3X2FkZHJfc2V0KGRldi0mZ3Q7bmV0LCBhZGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIENIOTIwMCBEcml2ZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBzbyBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdDogbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byB0aGUgYGRpZmZgIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBCdXQganVzdCB0aGUgZGlmZiBpc24mIzM5O3QgZW5vdWdoLCBJIG5lZWQgY29udGV4dC4gSSYjMzk7bGwgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gR290dGEgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSBhIGJpdCBmdXJ0aGVyLiBMZXQmIzM5O3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gYGNoOTIwMF9iaW5kYC4gSSBuZWVkIHRvIHJldmlldyBpdCBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBIb3BlZnVsbHkgdGhpcyB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhcyB0byB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRpbnQgcmV0dmFsID0gMDtcbiAzNDE6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzUwOlx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1NDpcdFxuIDM1NTpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU2Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NzpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTg6XHRcbiAzNTk6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM2MDpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzYxOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYyOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYzOlx0XHRpZiAocmV0dmFsKVxuIDM2NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM2NTpcdFxuIDM2NjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzY3Olx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjg6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY5Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcwOlx0XHRpZiAocmV0dmFsKVxuIDM3MTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZGF0YVswXSA9IDB4MzA7XG4gMzc0Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzNzU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIDM3NjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NzpcdFx0aWYgKHJldHZhbClcbiAzNzg6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzk6XHRcbiAzODA6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM4MTpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzgyOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzgzOlx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg0Olx0XHRpZiAocmV0dmFsKVxuIDM4NTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM4NjpcdFxuIDM4NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzg4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzODk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM5MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzOTE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTI6XHRcdGlmIChyZXR2YWwpXG4gMzkzOlx0XHRcdHJldHVybiByZXR2YWw7XG4gMzk0Olx0XG4gMzk1Olx0XHRkYXRhWzBdID0gMHg1RjtcbiAzOTY6XHRcdGRhdGFbMV0gPSAweDBEO1xuIDM5NzpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiAzOTg6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTk6XHRcdGlmIChyZXR2YWwpXG4gNDAwOlx0XHRcdHJldHVybiByZXR2YWw7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiA0MDM6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdHJldHVybiByZXR2YWw7XG4gNDA2Olx0fVxuIDQwNzpcdFxuIDQwODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gNDA5Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiA0MTA6XHRcdC5mbGFncyA9IEZMQUdfRVRIRVIsXG4gNDExOlx0XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuIDQxMjpcdFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxuIDQxMzpcdFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxuIDQxNDpcdFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG4gNDE1Olx0XHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxuIDQxNjpcdFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXG4gNDE3Olx0fTtcbiA0MTg6XHRcbiA0MTk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjaDkyMDBfYmluZGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBjaDkyMDBfYmluZGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIEFoLCByaWdodCwgSSBzZWUuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBhZGRpbmcgY2hlY2tzIGFmdGVyIHRob3NlIGBjb250cm9sX3dyaXRlKC4uLilgIGNhbGxzLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZTsgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBVU0IgZHJpdmVycyB3aGVyZSB0aGluZ3MgY2FuIGdvIHNpZGV3YXlzIG1vcmUgb2Z0ZW4gdGhhbiBub3QuIE5vdywgYmVmb3JlIEkgZ2l2ZSB0aGlzIHRoZSBncmVlbiBsaWdodCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBpdHNlbGYsIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYW5kIGFsc28gZG91YmxlLWNoZWNrIGhvdyBpdOKAmXMgYmVpbmcgdXNlZC4gQW5kIGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIHF1aWNrbHkgcmVmcmVzaCBteXNlbGYgb24gaG93IGBnZXRfbWFjX2FkZHJlc3NgIGlzIHVzZWQgaGVyZSB0b28uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMgZm9yIGJvdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFxuICA0MTpcdCNkZWZpbmUgTUFDX1JFR19DVFJMIDY0XG4gIDQyOlx0I2RlZmluZSBNQUNfUkVHX1NUQVRVUyA2NlxuICA0MzpcdCNkZWZpbmUgTUFDX1JFR19JTlRFUlJVUFRfTUFTSyA2OFxuICA0NDpcdCNkZWZpbmUgTUFDX1JFR19QSFlfQ09NTUFORCA3MFxuICA0NTpcdCNkZWZpbmUgTUFDX1JFR19QSFlfREFUQSA3MlxuICA0NjpcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0wgNzRcbiAgNDc6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVElPTl9NIDc2XG4gIDQ4Olx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fSCA3OFxuICA0OTpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0wgODBcbiAgNTA6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMSA4MlxuICA1MTpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00yIDg0XG4gIDUyOlx0I2RlZmluZSBNQUNfUkVHX0hBU0hfSCA4NlxuICA1MzpcdCNkZWZpbmUgTUFDX1JFR19USFJFU0hPTEQgODhcbiAgNTQ6XHQjZGVmaW5lIE1BQ19SRUdfRklGT19ERVBUSCA5MFxuICA1NTpcdCNkZWZpbmUgTUFDX1JFR19QQVVTRSA5MlxuICA1NjpcdCNkZWZpbmUgTUFDX1JFR19GTE9XX0NPTlRST0wgOTRcbiAgNTc6XHRcbiAgNTg6XHQvKiBDb250cm9sIHJlZ2lzdGVyIGJpdHNcbiAgNTk6XHQgKlxuICA2MDpcdCAqIE5vdGU6IGJpdHMgMTMgYW5kIDE1IGFyZSByZXNlcnZlZFxuICA2MTpcdCAqL1xuICA2MjpcdCNkZWZpbmUgTE9PUEJBQ0tcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDE0KVxuICA2MzpcdCNkZWZpbmUgQkFTRTEwMFhcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEyKVxuICA2NDpcdCNkZWZpbmUgTUJQU18xMFx0XHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxMSlcbiAgNjU6XHQjZGVmaW5lIERVUExFWF9NT0RFXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxMClcbiAgNjY6XHQjZGVmaW5lIFBBVVNFX0ZSQU1FXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA5KVxuICA2NzpcdCNkZWZpbmUgUFJPTUlTQ1VPVVNcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDgpXG4gIDY4Olx0I2RlZmluZSBNVUxUSUNBU1RcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDcpXG4gIDY5Olx0I2RlZmluZSBCUk9BRENBU1RcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDYpXG4gIDcwOlx0I2RlZmluZSBIQVNIXHRcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDUpXG4gIDcxOlx0I2RlZmluZSBBUFBFTkRfUEFEXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA0KVxuICA3MjpcdCNkZWZpbmUgQVBQRU5EX0NSQ1x0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMylcbiAgNzM6XHQjZGVmaW5lIFRSQU5TTUlUVEVSX0FDVElPTlx0KDB4MDEgXHUwMDNjXHUwMDNjIDIpXG4gIDc0Olx0I2RlZmluZSBSRUNFSVZFUl9BQ1RJT05cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEpXG4gIDc1Olx0I2RlZmluZSBETUFfQUNUSU9OXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAwKVxuICA3NjpcdFxuICA3NzpcdC8qIFN0YXR1cyByZWdpc3RlciBiaXRzXG4gIDc4Olx0ICpcbiAgNzk6XHQgKiBOb3RlOiBiaXRzIDctMTUgYXJlIHJlc2VydmVkXG4gIDgwOlx0ICovXG4gIDgxOlx0I2RlZmluZSBBTElHTk1FTlRcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDYpXG4gIDgyOlx0I2RlZmluZSBGSUZPX09WRVJfUlVOXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA1KVxuICA4MzpcdCNkZWZpbmUgRklGT19VTkRFUl9SVU5cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDQpXG4gIDg0Olx0I2RlZmluZSBSWF9FUlJPUlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMylcbiAgODU6XHQjZGVmaW5lIFJYX0NPTVBMRVRFXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAyKVxuICA4NjpcdCNkZWZpbmUgVFhfRVJST1JcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEpXG4gIDg3Olx0I2RlZmluZSBUWF9DT01QTEVURVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgODg6XHRcbiAgODk6XHQvKiBGSUZPIGRlcHRoIHJlZ2lzdGVyIGJpdHNcbiAgOTA6XHQgKlxuICA5MTpcdCAqIE5vdGU6IGJpdHMgNiBhbmQgMTQgYXJlIHJlc2VydmVkXG4gIDkyOlx0ICovXG4gIDkzOlx0XG4gIDk0Olx0I2RlZmluZSBFVEhfVFhCRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTUpXG4gIDk1Olx0I2RlZmluZSBFVE5fVFhfRklGT19ERVBUSFx0KDB4MDEgXHUwMDNjXHUwMDNjIDgpXG4gIDk2Olx0I2RlZmluZSBFVEhfUlhCRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNylcbiAgOTc6XHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgOTg6XHRcbiAgOTk6XHRzdGF0aWMgaW50IGNvbnRyb2xfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgY2g5MjAwLmNgIChMaW5lcyAxMDAtMjAwKSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTAwIHRocm91Z2ggMjAwLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgcGl2b3RhbCwgbWF5YmUgaW5pdGlhbGl6YXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgb3IgZW5kcG9pbnQgc2V0dXAuIEkmIzM5O20gaG9waW5nIEkgY2FuIGdldCB0aGUgY29udGV4dCBJIG5lZWQuIFRoaXMgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgVVNCIGludGVyYWN0aW9uIHdpdGggdGhlIENIOTIwMCBjaGlwc2V0IGlzIGRlZmluZWQsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bGwgbmVlZCB0byByZWNvZ25pemUgdGhpcyBhcmVhLiBJJiMzOTttIHNjYW5uaW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucywgc3RydWN0IGluaXRpYWxpemF0aW9ucywgb3IgcG90ZW50aWFsbHksIGEgc3RhdGUgbWFjaGluZSBkZWZpbml0aW9uLiBJJiMzOTtsbCBiZSB3YXRjaGluZyB0byBwaWNrIG91dCBhbnkgcG90ZW50aWFsIGJ1ZmZlciBhbGxvY2F0aW9uLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIG9yIGV2ZW4gYSBiYXNpYyBjb21tYW5kIG9yIGRhdGEgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbi4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYW50aWNpcGF0aW5nIGxvdy1sZXZlbCBVU0IgZGVzY3JpcHRvciBwYXJzaW5nLCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXF1ZW5jZSwgb3IgbWF5YmUgZXZlbiB0aGUgaW5pdGlhbCBzZXR1cCBvZiBETUEgdHJhbnNmZXJzIGlmIHRoZSBkZXZpY2UgbGV2ZXJhZ2VzIHRoZW0uIExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdFx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlLFxuIDEwMTpcdFx0XHRcdHVuc2lnbmVkIHNob3J0IGluZGV4LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLFxuIDEwMjpcdFx0XHRcdGludCB0aW1lb3V0KVxuIDEwMzpcdHtcbiAxMDQ6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XG4gMTA1Olx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcbiAxMDY6XHRcdGludCBlcnIgPSAwO1xuIDEwNzpcdFxuIDEwODpcdFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9SRUFEKVxuIDEwOTpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUik7XG4gMTEwOlx0XHRlbHNlXG4gMTExOlx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxMTI6XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UpO1xuIDExMzpcdFxuIDExNDpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxuXCYjMzQ7LFxuIDExNTpcdFx0XHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xuIDExNjpcdFxuIDExNzpcdFx0YnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiAxMTg6XHRcdGlmICghYnVmKSB7XG4gMTE5Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTIwOlx0XHRcdGdvdG8gZXJyX291dDtcbiAxMjE6XHRcdH1cbiAxMjI6XHRcbiAxMjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxMjQ6XHRcdFx0XHQgICAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDEyNTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTI2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTI3Olx0XHRpZiAoZXJyID09IHNpemUpXG4gMTI4Olx0XHRcdG1lbWNweShkYXRhLCBidWYsIHNpemUpO1xuIDEyOTpcdFx0ZWxzZSBpZiAoZXJyIFx1MDAzZT0gMClcbiAxMzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAxMzE6XHRcdGtmcmVlKGJ1Zik7XG4gMTMyOlx0XG4gMTMzOlx0ZXJyX291dDpcbiAxMzQ6XHRcdHJldHVybiBlcnI7XG4gMTM1Olx0fVxuIDEzNjpcdFxuIDEzNzpcdHN0YXRpYyBpbnQgY29udHJvbF93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCxcbiAxMzg6XHRcdFx0XHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxuIDEzOTpcdFx0XHRcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcbiAxNDA6XHR7XG4gMTQxOlx0XHR1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMO1xuIDE0MjpcdFx0dW5zaWduZWQgY2hhciByZXF1ZXN0X3R5cGU7XG4gMTQzOlx0XHRpbnQgZXJyID0gMDtcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfV1JJVEUpXG4gMTQ2Olx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTQ3Olx0XHRcdFx0XHRVU0JfUkVDSVBfT1RIRVIpO1xuIDE0ODpcdFx0ZWxzZVxuIDE0OTpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuIDE1MDpcdFx0XHRcdFx0VVNCX1JFQ0lQX0RFVklDRSk7XG4gMTUxOlx0XG4gMTUyOlx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0OyVzKCkgaW5kZXg9MHglMDJ4IHNpemU9JWRcXG5cJiMzNDssXG4gMTUzOlx0XHRcdCAgIF9fZnVuY19fLCBpbmRleCwgc2l6ZSk7XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoZGF0YSkge1xuIDE1NjpcdFx0XHRidWYgPSBrbWVtZHVwKGRhdGEsIHNpemUsIEdGUF9LRVJORUwpO1xuIDE1NzpcdFx0XHRpZiAoIWJ1Zikge1xuIDE1ODpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTU5Olx0XHRcdFx0Z290byBlcnJfb3V0O1xuIDE2MDpcdFx0XHR9XG4gMTYxOlx0XHR9XG4gMTYyOlx0XG4gMTYzOlx0XHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVx1MDAzZXVkZXYsXG4gMTY0Olx0XHRcdFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cdTAwM2V1ZGV2LCAwKSxcbiAxNjU6XHRcdFx0XHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxuIDE2NjpcdFx0XHRcdCAgICAgIHRpbWVvdXQpO1xuIDE2NzpcdFx0aWYgKGVyciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGVyciBcdTAwM2Mgc2l6ZSlcbiAxNjg6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAxNjk6XHRcdGtmcmVlKGJ1Zik7XG4gMTcwOlx0XG4gMTcxOlx0XHRyZXR1cm4gMDtcbiAxNzI6XHRcbiAxNzM6XHRlcnJfb3V0OlxuIDE3NDpcdFx0cmV0dXJuIGVycjtcbiAxNzU6XHR9XG4gMTc2Olx0XG4gMTc3Olx0c3RhdGljIGludCBjaDkyMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG4gMTc4Olx0e1xuIDE3OTpcdFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGdldF9tYWNfYWRkcmVzc2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGdldF9tYWNfYWRkcmVzc2Agbm93LCBzcGVjaWZpY2FsbHkgd2l0aGluIGxpbmVzIDI1MC0zNDAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCBhbm90aGVyIG5ldHdvcmsgZnVuY3Rpb24uJiMzNDsgR2l2ZW4gdGhlIGNvbnRleHQgSSBhc3N1bWUgaXQgaXMgbmV0d29yay9PUyByZWxhdGVkLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggcmV0cmlldmluZyBhIG1hY2hpbmUmIzM5O3MgTWVkaWEgQWNjZXNzIENvbnRyb2wgKE1BQykgYWRkcmVzcy4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgcHJldHR5IGludm9sdmVkIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiB0cnlpbmcgdG8gZW5zdXJlIGNyb3NzLXBsYXRmb3JtIGNvbXBhdGliaWxpdHkuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgbmV0d29yayBpbnRlcmZhY2UgbmFtaW5nIGNvbnZlbnRpb25zIGFjcm9zcyB2YXJpb3VzIE9TZXMuIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBgaWZjb25maWdgLCBgaXAgYWRkcmAgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gdGhlIGZyYW1ld29yaz8gSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXkmIzM5O3JlIHJlbHlpbmcgb24gZXh0ZXJuYWwgdG9vbHMgb3IgbW9yZSBuYXRpdmUgc3lzdGVtIGNhbGxzIGZvciB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIGVycm9yczsgYSBmYWlsZWQgTUFDIGFkZHJlc3MgcmV0cmlldmFsIGNhbiBjYXNjYWRlIGludG8gbGFyZ2VyIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBGaW5hbGx5LCBhcmUgdGhleSBjYWNoaW5nIGl0PyBPciBpcyBpdCByZXRyZWl2ZWQgb24gZXZlcnkgY2FsbD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0aWYgKGxpbmspIHtcbiAyNDE6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXHUwMDNlbmV0KTtcbiAyNDI6XHRcdFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX0xJTktfUkVTRVQpO1xuIDI0MzpcdFx0fSBlbHNlIHtcbiAyNDQ6XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2LVx1MDAzZW5ldCk7XG4gMjQ1Olx0XHR9XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNDk6XHRcdFx0XHRcdCAgICAgICBnZnBfdCBmbGFncylcbiAyNTA6XHR7XG4gMjUxOlx0XHRpbnQgaSA9IDA7XG4gMjUyOlx0XHRpbnQgbGVuID0gMDtcbiAyNTM6XHRcdGludCB0eF9vdmVyaGVhZCA9IDA7XG4gMjU0Olx0XG4gMjU1Olx0XHR0eF9vdmVyaGVhZCA9IDB4NDA7XG4gMjU2Olx0XG4gMjU3Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDI1ODpcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIHR4X292ZXJoZWFkKSkge1xuIDI1OTpcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDI2MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNjE6XHRcdH1cbiAyNjI6XHRcbiAyNjM6XHRcdF9fc2tiX3B1c2goc2tiLCB0eF9vdmVyaGVhZCk7XG4gMjY0Olx0XHQvKiB1c2JuZXQgYWRkcyBwYWRkaW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHBhY2tldCBzaXplXG4gMjY1Olx0XHQgKiBpZiBzbywgYWRqdXN0IGxlbmd0aCB2YWx1ZSBpbiBoZWFkZXJcbiAyNjY6XHRcdCAqL1xuIDI2NzpcdFx0aWYgKChza2ItXHUwMDNlbGVuICUgZGV2LVx1MDAzZW1heHBhY2tldCkgPT0gMClcbiAyNjg6XHRcdFx0bGVuJiM0MzsmIzQzOztcbiAyNjk6XHRcbiAyNzA6XHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gbGVuO1xuIDI3MTpcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBsZW4gXHUwMDNlXHUwMDNlIDg7XG4gMjcyOlx0XHRza2ItXHUwMDNlZGF0YVsyXSA9IDB4MDA7XG4gMjczOlx0XHRza2ItXHUwMDNlZGF0YVszXSA9IDB4ODA7XG4gMjc0Olx0XG4gMjc1Olx0XHRmb3IgKGkgPSA0OyBpIFx1MDAzYyA0ODsgaSYjNDM7JiM0MzspXG4gMjc2Olx0XHRcdHNrYi1cdTAwM2VkYXRhW2ldID0gMHgwMDtcbiAyNzc6XHRcbiAyNzg6XHRcdHNrYi1cdTAwM2VkYXRhWzQ4XSA9IGxlbjtcbiAyNzk6XHRcdHNrYi1cdTAwM2VkYXRhWzQ5XSA9IGxlbiBcdTAwM2VcdTAwM2UgODtcbiAyODA6XHRcdHNrYi1cdTAwM2VkYXRhWzUwXSA9IDB4MDA7XG4gMjgxOlx0XHRza2ItXHUwMDNlZGF0YVs1MV0gPSAweDgwO1xuIDI4MjpcdFxuIDI4MzpcdFx0Zm9yIChpID0gNTI7IGkgXHUwMDNjIDY0OyBpJiM0MzsmIzQzOylcbiAyODQ6XHRcdFx0c2tiLVx1MDAzZWRhdGFbaV0gPSAweDAwO1xuIDI4NTpcdFxuIDI4NjpcdFx0cmV0dXJuIHNrYjtcbiAyODc6XHR9XG4gMjg4Olx0XG4gMjg5Olx0c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI5MDpcdHtcbiAyOTE6XHRcdGludCBsZW4gPSAwO1xuIDI5MjpcdFx0aW50IHJ4X292ZXJoZWFkID0gMDtcbiAyOTM6XHRcbiAyOTQ6XHRcdHJ4X292ZXJoZWFkID0gNjQ7XG4gMjk1Olx0XG4gMjk2Olx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XG4gMjk3Olx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXG5cJiMzNDspO1xuIDI5ODpcdFx0XHRyZXR1cm4gMDtcbiAyOTk6XHRcdH1cbiAzMDA6XHRcbiAzMDE6XHRcdGxlbiA9IChza2ItXHUwMDNlZGF0YVtza2ItXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVx1MDAzZWRhdGFbc2tiLVx1MDAzZWxlbiAtIDE1XSBcdTAwM2NcdTAwM2MgOCk7XG4gMzAyOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMzAzOlx0XG4gMzA0Olx0XHRyZXR1cm4gMTtcbiAzMDU6XHR9XG4gMzA2Olx0XG4gMzA3Olx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuIDMwODpcdHtcbiAzMDk6XHRcdGludCBlcnIgPSAwO1xuIDMxMDpcdFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcbiAzMTE6XHRcdGludCByZF9tYWNfbGVuID0gMDtcbiAzMTI6XHRcbiAzMTM6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXM6XFxuXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcblwmIzM0OywgX19mdW5jX18sXG4gMzE0Olx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxuIDMxNTpcdFx0XHQgICBsZTE2X3RvX2NwdShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xuIDMxNjpcdFxuIDMxNzpcdFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcbiAzMTg6XHRcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXG4gMzE5Olx0XHRcdFx0XHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJpc2tzIGluIHRoZSBgY2g5MjAwX2JpbmRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgYGNvbnRyb2xfd3JpdGVgLiBJIHNlZSB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIDAgdW5sZXNzIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiBga21lbWR1cGAsIG9yIGlmIGBlcnIgJmx0OyAwYCBvY2N1cnMgaW4gYHVzYl9jb250cm9sX21zZ2Agd2hpY2ggaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3JpZ2luYWwgY29kZSBpZ25vcmVzIHRoZSBlcnJvciBjb2RlLCB1bmxlc3MgdGhlIGBrbWVtZHVwYCBmYWlscy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGEgYnVnPyBCdXQsIHRoZW4gSSBzZWUgdGhhdCwgbGF0ZXIgb24sIGluIGBjaDkyMDBfYmluZGAsIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgICppcyogY2hlY2tlZC4gU28sIHRoZXJlIGlzIHNvbWUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGNhbGwgc3RhY2ssIGF0IGxlYXN0LgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCBgY2g5MjAwX2JpbmRgLiBXZSBpbml0aWFsaXplIGBkYXRhYCBvbiB0aGUgc3RhY2suIFR3byBieXRlcyBhcmUgYXNzaWduZWQgdmFsdWVzIDB4MDEgYW5kIDB4MEYsIHdoaWNoIGFyZSB0aGVuIHdyaXR0ZW4gYnkgYGNvbnRyb2xfd3JpdGVgLiBUaGUgY3JpdGljYWwgY2hlY2sgaXMgd2hldGhlciBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciAod2hpY2ggaXQgZG9lcyBub3QsIHVubGVzcyBrbWVtZHVwIGZhaWxzIG9yIGBlcnIgJmx0OyAwYCBvY2N1cnMpLiBJZiBpdCBkb2VzLCBgY2g5MjAwX2JpbmRgIHJldHVybnMgdGhlIGVycm9yLCB3aGljaCBpcyBnb29kLiBJZiBpdCBzdWNjZWVkcywgdGhlIGNvZGUgcHJvY2VlZHMgdG8gd3JpdGUgdGhlIG5leHQgcmVnaXN0ZXJzLiBGaW5hbGx5LCBpdCBjYWxscyBgZ2V0X21hY19hZGRyZXNzYCBhbmQgdGhlbiBgZXRoX2h3X2FkZHJfc2V0YC4KCk5vdywgdGhlIGNlbnRyYWwgcXVlc3Rpb246IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBoZXJlPwoKVGhlIGtleSBoZXJlIGlzIGBhZGRyYCB3aXRoaW4gYGNoOTIwMF9iaW5kYCwgd2hpY2ggaXMgZGVjbGFyZWQgYXMgYHU4IGFkZHJbRVRIX0FMRU5dO2AuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgdG8gYGFkZHJgLiBTbyBJIHdpbGwgZXhhbWluZSB3aGF0IGhhcHBlbnMgaW4gYGdldF9tYWNfYWRkcmVzc2AuIFRoZSBNQUMgYWRkcmVzcyBpcyB0aGVuIHNldCBieSBgZXRoX2h3X2FkZHJfc2V0YC4KCk9rYXksIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZ2V0X21hY19hZGRyZXNzYCB0byBkZXRlcm1pbmUgaWYgYGFkZHJgIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZXRyaWV2ZWQuIFRoZSBwYXRjaCBsb29rcyBzYWZlIHNvIGZhciwgYnV0IEkgbXVzdCBrbm93IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0X21hY19hZGRyZXNzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwNTpcdH1cbiAzMDY6XHRcbiAzMDc6XHRzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4gMzA4Olx0e1xuIDMwOTpcdFx0aW50IGVyciA9IDA7XG4gMzEwOlx0XHR1bnNpZ25lZCBjaGFyIG1hY19hZGRyWzB4MDZdO1xuIDMxMTpcdFx0aW50IHJkX21hY19sZW4gPSAwO1xuIDMxMjpcdFxuIDMxMzpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslczpcXG5cXHR1c2JuZXQgVklEOiUweCBQSUQ6JTB4XFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiAzMTQ6XHRcdFx0ICAgbGUxNl90b19jcHUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvciksXG4gMzE1Olx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7XG4gMzE2Olx0XG4gMzE3Olx0XHRtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO1xuIDMxODpcdFx0cmRfbWFjX2xlbiA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCxcbiAzMTk6XHRcdFx0XHRcdCAgTUFDX1JFR19TVEFUSU9OX0wsIG1hY19hZGRyLCAweDAyLFxuIDMyMDpcdFx0XHRcdFx0ICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMTpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fTSxcbiAzMjI6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDIsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzIzOlx0XHRyZF9tYWNfbGVuICYjNDM7PSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9ILFxuIDMyNDpcdFx0XHRcdFx0ICAgbWFjX2FkZHIgJiM0MzsgNCwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMjU6XHRcdGlmIChyZF9tYWNfbGVuICE9IEVUSF9BTEVOKVxuIDMyNjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDMyNzpcdFxuIDMyODpcdFx0ZGF0YVswXSA9IG1hY19hZGRyWzVdO1xuIDMyOTpcdFx0ZGF0YVsxXSA9IG1hY19hZGRyWzRdO1xuIDMzMDpcdFx0ZGF0YVsyXSA9IG1hY19hZGRyWzNdO1xuIDMzMTpcdFx0ZGF0YVszXSA9IG1hY19hZGRyWzJdO1xuIDMzMjpcdFx0ZGF0YVs0XSA9IG1hY19hZGRyWzFdO1xuIDMzMzpcdFx0ZGF0YVs1XSA9IG1hY19hZGRyWzBdO1xuIDMzNDpcdFxuIDMzNTpcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHR9XG4gMzM3Olx0XG4gMzM4Olx0c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDMzOTpcdHtcbiAzNDA6XHRcdGludCByZXR2YWwgPSAwO1xuIDM0MTpcdFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xuIDM0MjpcdFx0dTggYWRkcltFVEhfQUxFTl07XG4gMzQzOlx0XG4gMzQ0Olx0XHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1MwoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiA4NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gSXNzdWVzIERldGVjdGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBnZXRfbWFjX2FkZHJlc3NgLCBJIHNlZSB0aGF0IGBtYWNfYWRkcmAgaXMgemVyb2VkIG91dCByaWdodCBhd2F5IHdpdGggYG1lbXNldGAsIHRoZW4gYGNvbnRyb2xfcmVhZGAgaXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgYnVmZmVyIGlmIGBjb250cm9sX3JlYWRgIHJldHVybnMgdGhlIGV4cGVjdGVkIHNpemUuIFNvLCB0aGUgYGRhdGFgIGJ1ZmZlciBnZXRzIGl0cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWFkLCBhbmQgaXQgaXMgYSBrbm93biBnb29kIHZhbHVlLgoKTm93LCBpbiBgY2g5MjAwX2JpbmRgLCB0aGUgYGRhdGFgIGFycmF5IGlzICpleHBsaWNpdGx5KiBpbml0aWFsaXplZCB3aXRoIHNwZWNpZmljIGJ5dGUgdmFsdWVzIGJlZm9yZSBlYWNoIGBjb250cm9sX3dyaXRlYCBjYWxsLiBUaGlzIGlzIGNydWNpYWwuIEVhY2ggZWxlbWVudCBvZiBgZGF0YWAgZ2V0cyBhIGRlZmluZWQgdmFsdWUgYmVmb3JlIGl0JiMzOTtzIHVzZWQuIFRoZSBwYXRjaCBtYWlubHkgYWRkcyBlcnJvciBjaGVja3MgYWZ0ZXIgdGhvc2UgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLCBidXQgdGhlIGRhdGEgaXRzZWxmIGlzIGFsd2F5cyBpbml0aWFsaXplZC4gVGhlIGBkYXRhYCBidWZmZXIgaXMgYWxzbyBhIHN0YWNrIHZhcmlhYmxlLCBzbyBpdCBpcyBrbm93bi4KClNpbmNlIGFsbCB2YXJpYWJsZXMsIGxpa2UgYGRhdGFgIGFuZCBgYWRkcmAsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNhZ2UsIHRoZXJlJiMzOTtzIG5vIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBtZWFucyB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5vKiBuZXcgS01TQU4tcmVsZXZhbnQgaXNzdWVzLCBhbmQgaXQgbWFrZXMgdGhlIGNvZGUgc2FmZXIuCgpUaGlzIHBhdGNoIGlzIG9ubHkgZXJyb3IgY2hlY2tpbmcgdGhlIGBjb250cm9sX3dyaXRlYCByZXR1cm4gdmFsdWVzLCBub3QgbW9kaWZ5aW5nIHRoZSBkYXRhIHVzYWdlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzLCBsaWtlIEtBU0FOLCBoYW5kbGUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuIEJlY2F1c2UgdGhlIHN0YWNrIGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55IHJpc2tzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTaW5jZSBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGFuZCB0aGUgZGF0YSBpcyByZWFkIGluIGEgY29udHJvbGxlZCB3YXksIHdlIGRvbiYjMzk7dCBoYXZlIEtNU0FOIHByb2JsZW1zLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IG1hcmsgYE5lZWRzS01TQU5gIGFzIGBmYWxzZWAuIEl0IGlzIGEgZ29vZCBleGFtcGxlIG9mICpub3QqIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MjYuMDg2Njk2OTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMTI4MzU3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja3MgZm9yIHJldHZhbCBhZnRlciBlYWNoIGNvbnRyb2xfd3JpdGUoKSBjYWxsIGluIGNoOTIwMF9iaW5kKCkuIFN0YWNrIHZhcmlhYmxlcyAoc3VjaCBhcyBkYXRhWzJdKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBjb250cm9sX3dyaXRlKCksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhY2Nlc3NlZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NToyNi4wODY3MDMxOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzEyMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ1YzcyYjYzZDdmYmY0MTJhODdjNjFhYjFlZDRjMTE3ZDc1NGJkOGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5jZTJlNjJmODVjM2Q0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGRhdGFbMV0gPSAweDBGO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4QTA7XFxuIFxcdGRhdGFbMV0gPSAweDkwO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldHZhbClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdGRhdGFbMF0gPSAweDMwO1xcbiBcXHRkYXRhWzFdID0gMHgwMDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4MTc7XFxuIFxcdGRhdGFbMV0gPSAweEQ4O1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuIFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXFxuIFxcdGRhdGFbMF0gPSAweDAxO1xcbiBcXHRkYXRhWzFdID0gMHgwMDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcXG4gXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwpXFxuK1xcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcbiBcXHRkYXRhWzBdID0gMHg1RjtcXG4gXFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXFxuIFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XFxuIFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjI2LjY5NDc4MDc0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc4MDg2NzE1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1YzcyYjYzZDdmYmY0MTJhODdjNjFhYjFlZDRjMTE3ZDc1NGJkOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjU1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5jZTJlNjJmODVjM2Q0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRkYXRhWzFdID0gMHgwRjtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHhBMDtcbiBcdGRhdGFbMV0gPSAweDkwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHgzMDtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MTc7XG4gXHRkYXRhWzFdID0gMHhEODtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiBcdGRhdGFbMF0gPSAweDAxO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDVGO1xuIFx0ZGF0YVsxXSA9IDB4MEQ7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xuIFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MjYuNjk0NzgzMDExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTcwNzg1MzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFVTQiBOZXR3b3JrIERyaXZlciBJc3N1ZSoqXG5cblJpZ2h0LCB0aGUgZGlmZiBpcyBwb2ludGluZyBtZSBkaXJlY3RseSB0byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gVGhhdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0aG9yb3VnaGx5IGluc3BlY3QgdGhlIGRyaXZlcidzIGNvZGUgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZmlsZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUg4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBtb2R1bGUncyBwdXJwb3NlLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0J3MgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhpcyBpcyBhIFVTQiBuZXR3b3JrIGRyaXZlciwgaXQgYnJpbmdzIHRvIG1pbmQgc2V2ZXJhbCByZWxldmFudCBhcmVhcy4gV2Ugb2Z0ZW4gc2VlIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMgZW11bGF0ZWQgdGhyb3VnaCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zLCBvciB0aGUgdXNlIG9mIFJhdyBHYWRnZXQsIHZoY2ksIGFuZCBlc3BlY2lhbGx5IFVTQiBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaG9zZSBhcmUgYWxsIHRoaW5ncyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgdG8gbWluZC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgZW11bGF0aW9uIGFuZCBmdXp6aW5nIGNvbnRleHRzIGluIG1pbmQgYXMgSSdtIGNoZWNraW5nIHRoZSBkcml2ZXIuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYW5kIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjM2LjQwMjY0MDIwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3NzE3MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2g5MjAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz02MTQ9Y29uZmlnIFVTQl9ORVRfQ0g5MjAwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjItXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo2MjM6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfVVNCX05FVF9DRENfTUJJTSlcXHQrPSBjZGNfbWJpbS5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19VU0JfTkVUX0NIOTIwMClcXHQrPSBjaDkyMDAub1xcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZS00My1vYmotJChDT05GSUdfVVNCX05FVF9BUUMxMTEpXFx0Kz0gYXFjMTExLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0xMzc9c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE3Ni1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTc3OnN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xNzgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE5Ni1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTk3OnN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE5OC1cXHRcXHRcXHQgICAgICBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxNS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjE2OnN0YXRpYyBpbnQgY2g5MjAwX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIyOC1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjI5OnN0YXRpYyB2b2lkIGNoOTIwMF9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjQ3LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNDg6c3RhdGljIHN0cnVjdCBza19idWZmICpjaDkyMDBfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNDktXFx0XFx0XFx0XFx0ICAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI4OC1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mjg5OnN0YXRpYyBpbnQgY2g5MjAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMDc9c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzNy1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzM4OnN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNDgtXFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM0OTpcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNTA6XFx0ZGV2LVxcdTAwM2VtaWkubWRpb193cml0ZSA9IGNoOTIwMF9tZGlvX3dyaXRlO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNTEtXFx0ZGV2LVxcdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MDctXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQwODpzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MDktXFx0LmRlc2NyaXB0aW9uID0gXFxcIkNIOTIwMCBVU0IgdG8gTmV0d29yayBBZGFwdG9yXFxcIixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDEwLVxcdC5mbGFncyA9IEZMQUdfRVRIRVIsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxMTpcXHQuYmluZCA9IGNoOTIwMF9iaW5kLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTI6XFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTM6XFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTQ6XFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxNTpcXHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTY6XFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQxNy19O1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MTgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyMC1cXHR7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyMS1cXHQgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MiksXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyMjpcXHQgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmNoOTIwMF9pbmZvLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjMtXFx0IH0sXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0Mjc6TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNoOTIwMF9wcm9kdWN0cyk7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyOC1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI5OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MzA6XFx0Lm5hbWUgPSBcXFwiY2g5MjAwXFxcIixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDMxOlxcdC5pZF90YWJsZSA9IGNoOTIwMF9wcm9kdWN0cyxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDMyLVxcdC5wcm9iZSA9IHVzYm5ldF9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzctXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzODptb2R1bGVfdXNiX2RyaXZlcihjaDkyMDBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTozNi41MDc0MTY2NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk5MDU4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgVVNCIG5ldHdvcmtpbmcgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCwgcmlnaHQgYXJvdW5kIGxpbmUgNjE0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRlY2lzaW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBVU0IgbmV0d29yayBkcml2ZXJzIGFyZSBsaWtlbHkgbWFkZS4gSSdtIGd1ZXNzaW5nIHRoYXQgSSdsbCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZhcmlvdXMgVVNCIG5ldHdvcmsgZGV2aWNlcyBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcywgbGlrZSB3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzIG5lZWQgdG8gYmUgYWN0aXZlLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgaG93IHRoZXkncmUgbWFuYWdlZCBmcm9tIGEgYnVpbGQtdGltZSBwZXJzcGVjdGl2ZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2Ugd2hpY2ggVVNCIG5ldHdvcmsgZGV2aWNlcyBnZXQgYnVpbHQgaW50byB0aGUga2VybmVsIHZlcnN1cyBiZWluZyBsb2FkYWJsZSBtb2R1bGVzLCBhbmQgYWxzbyBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBhc3BlY3RzIG9mIHRoZSBrZXJuZWwncyBVU0IgbmV0d29ya2luZyBzdGFjay4gS25vd2luZyB0aGF0IHdpbGwgaGVscCBtZSB3aXRoIFtpbnNlcnQgcmVsZXZhbnQgZXhwZXJ0LWxldmVsIGFjdGl2aXR5LCBlLmcuLCBjdXN0b21pemluZyBrZXJuZWwgYnVpbGRzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSwgdHJvdWJsZXNob290aW5nIGRldmljZSBjb21wYXRpYmlsaXR5LCBldGMuXVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MzguODA2NDc2NDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjEwOlxcdFxcdCAgNEcgbW9kZW0gZnJvbSBWZXJpem9uOlxcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHQgIGh0dHA6Ly91YnVudHVmb3J1bXMub3JnL3Nob3dwb3N0LnBocD9wPTEwNTg5NjQ3XFx1MDAyNnBvc3Rjb3VudD0xN1xcbiA2MTM6XFx0XFxuIDYxNDpcXHRjb25maWcgVVNCX05FVF9DSDkyMDBcXG4gNjE1OlxcdFxcdHRyaXN0YXRlIFxcXCJRaW5nSGVuZyBDSDkyMDAgVVNCIGV0aGVybmV0IHN1cHBvcnRcXFwiXFxuIDYxNjpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gNjE3OlxcdFxcdHNlbGVjdCBNSUlcXG4gNjE4OlxcdFxcdGhlbHBcXG4gNjE5OlxcdFxcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgVVNCIGV0aGVybmV0IGFkYXB0ZXIgd2l0aCBhIFFpbkhlbmdcXG4gNjIwOlxcdFxcdCAgQ0g5MjAwIGNoaXBzZXQuXFxuIDYyMTpcXHRcXG4gNjIyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDYyMzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjaDkyMDAuXFxuIDYyNDpcXHRcXG4gNjI1OlxcdGNvbmZpZyBVU0JfTkVUX0FRQzExMVxcbiA2MjY6XFx0XFx0dHJpc3RhdGUgXFxcIkFxdWFudGlhIEFRdGlvbiBVU0IgdG8gNS8yLjVHYkUgQ29udHJvbGxlcnMgc3VwcG9ydFxcXCJcXG4gNjI3OlxcdFxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbiA2Mjg6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDYyOTpcXHRcXHRoZWxwXFxuIDYzMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQXF1YW50aWEgQVF0aW9uIFVTQlxcbiA2MzE6XFx0XFx0ICBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiBBUUMxMTFVL0FRQzExMiBjaGlwcy5cXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0ICBUaGlzIGRyaXZlciBzaG91bGQgd29yayB3aXRoIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZGV2aWNlczpcXG4gNjM0OlxcdFxcdCAgKiBBcXVhbnRpYSBBUXRpb24gVVNCIHRvIDVHYkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MzguODA2NTU0OTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDk0OTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ0g5MjAwIERyaXZlciBCaW5kIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgY2g5MjAwYCBVU0IgZHJpdmVyIGJpbmRzIHRvIGEgZGV2aWNlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIEknbSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGBiaW5kYCBmdW5jdGlvbiwgb3IgYXQgbGVhc3QgdGhhdCdzIHdoZXJlIEkgYXNzdW1lIHRoZSBhY3Rpb24gc3RhcnRzLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDM0MCB0aHJvdWdoIDQwNS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGxvZ2ljIG9mIGRldmljZSBhc3NvY2lhdGlvbiB3aXRoaW4gdGhhdCBkcml2ZXIuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgY29tZXMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQxLjA2MTUwOTIzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNSxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDMzOTpcXHR7XFxuIDM0MDpcXHRcXHRpbnQgcmV0dmFsID0gMDtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcXG4gMzQyOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG4gMzUwOlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcXG4gMzUxOlxcdFxcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX210dSA9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiAzNTY6XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDI0ICogNjQgKyAxNjtcXG4gMzU3OlxcdFxcdG1paV9ud2F5X3Jlc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbWlpKTtcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM2MDpcXHRcXHRkYXRhWzFdID0gMHgwRjtcXG4gMzYxOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG4gMzYyOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNjM6XFx0XFx0aWYgKHJldHZhbClcXG4gMzY0OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGRhdGFbMF0gPSAweEEwO1xcbiAzNjc6XFx0XFx0ZGF0YVsxXSA9IDB4OTA7XFxuIDM2ODpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbiAzNjk6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3MDpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNzE6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0ZGF0YVswXSA9IDB4MzA7XFxuIDM3NDpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG4gMzc1OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxcbiAzNzY6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3NzpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGF0YVswXSA9IDB4MTc7XFxuIDM4MTpcXHRcXHRkYXRhWzFdID0gMHhEODtcXG4gMzgyOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG4gMzgzOlxcdFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODQ6XFx0XFx0aWYgKHJldHZhbClcXG4gMzg1OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xcbiAzODg6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM4OTpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG4gMzkwOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuIDM5MTpcXHRcXHRcXHRcXHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzkyOlxcdFxcdGlmIChyZXR2YWwpXFxuIDM5MzpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzOTQ6XFx0XFxuIDM5NTpcXHRcXHRkYXRhWzBdID0gMHg1RjtcXG4gMzk2OlxcdFxcdGRhdGFbMV0gPSAweDBEO1xcbiAzOTc6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG4gMzk4OlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzOTk6XFx0XFx0aWYgKHJldHZhbClcXG4gNDAwOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiA0MDM6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gNDA5OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQxLjA2NDMyMDcyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NDQ3ODQ1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gdGhlc2UgVVNCIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBVU0JfVVNCTkVUYCBhbmQgdGhlIGBVU0JfTkVUX0NIOTIwMGAgbW9kdWxlLiBXaGVyZSBkb2VzIHRoaXMgaW5mb3JtYXRpb24gcmVzaWRlPyBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgdGhlIGBLY29uZmlnYCBmaWxlLCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC91c2IvYC4gVGhhdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSBmb3IgdGhlc2Uga2luZCBvZiBjb25maWd1cmF0aW9uIGRldGFpbHMuIFRpbWUgdG8gY3JhY2sgdGhhdCBvcGVuIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IGBVU0JfVVNCTkVUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NDIuOTA5MTA4MjE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTcxMDM0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9VU0JORVRcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTEzPWNvbmZpZyBVU0JfTEFONzhYWFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjEzMjpjb25maWcgVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMy1cXHR0cmlzdGF0ZSBcXFwiTXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQzLjMwNjIxODk1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU0NDY0MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgVVNCX1VTQk5FVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYFVTQl9VU0JORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBwcm9wZXJseS4gTm8gcG9pbnQgaW4gZW5hYmxpbmcgaXQgaWYgaXQncyBnb3Qgc29tZSB1bm1ldCByZXF1aXJlbWVudHMsIHJpZ2h0PyBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwIHdoZW4gSSdtIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLCBidXQsIHN0aWxsLCBpdCBpcyB0aGUgZmlyc3Qgc3RlcCBJIHRha2UgaW4gcmVzb2x2aW5nIFVTQiByZWxhdGVkIG5ldHdvcmsgZHJpdmVyIHByb2JsZW1zLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgY29yZSBmZWF0dXJlcyBhcmUgcHJvcGVybHkgZW5hYmxlZCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbiBwcm9wZXIgb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTo0NS4xNjA2ODc0NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuIDE0NTpcXHRcXHQgICAgXFxcIkxhcGxpbmtcXFwiIHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcXG4gMTQ2OlxcdFxcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXFxuIDE0OTpcXHRcXHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQ1LjE2MDgxMzIzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDUwMjkxOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ0g5MjAwIFVTQiBOZXR3b3JrIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBVU0JfTkVUX0NIOTIwMGAgc2l0dWF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyDigJMgaXQgcmVsaWVzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBwdWxscyBpbiBhIHdob2xlIHNsZXcgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMgbGlrZSBgTkVUREVWSUNFU2AsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYFVTQmAgc3VwcG9ydC4gSSdtIHVzdWFsbHkgZmluZSBqdXN0IGVuYWJsaW5nIGBVU0JfTkVUX0NIOTIwMGAsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIHBhcmVudCBjb25maWdzIGFyZSBzdGFuZGFyZC4gU28sIGBVU0JfTkVUX0NIOTIwMGAgYW5kIGBVU0JfVVNCTkVUYCBhcmUgbXkgbWFpbiBmb2N1cy5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBjaDkyMDBfYmluZGAgcmVhY2hhYmxlPyBUaGUgYW5zd2VyIGFwcGVhcnMgdG8gYmUgeWVzLiBJbiBteSBzeXprYWxsZXIvdmlydHVhbCBlbnZpcm9ubWVudCwgdGhlIFVTQiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSB1c2luZyB0aGUgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBzZXR1cCwgZW11bGF0ZXMgVVNCIGRldmljZXMgbWF0Y2hpbmcgYFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpYC4gV2hlbiBvbmUgb2YgdGhlc2UgdmlydHVhbCBkZXZpY2VzIGlzIFwicGx1Z2dlZCBpbixcIiB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIGNhbGxzIGBpbmZvLVx1MDAzZWJpbmQoZGV2LCB1ZGV2KWAsIHdoaWNoIGlzIGBjaDkyMDBfYmluZGAuXG5cblByZXZpb3VzbHksIEkgc2VlIHRoYXQgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgYGNvbnRyb2xfd3JpdGVgIGNhbGxzIHdpdGhpbiBgY2g5MjAwX2JpbmRgIHdlcmUgbm90IGNoZWNrZWQuIFRoYXQncyBhIHBvdGVudGlhbCB3ZWFrIHBvaW50LiBOb3csIGlmIGFueSBvZiB0aG9zZSBgY29udHJvbF93cml0ZWAgY2FsbHMgZmFpbCwgZHVlIHRvIGEgc2ltdWxhdGVkIFVTQiBmYXVsdCwgdGltZW91dCwgdW5wbHVnIGV2ZW50LCBvciBhbiBpc3N1ZSB3aXRoIHRoZSBkZXNjcmlwdG9yIG9yIGVuZHBvaW50cywgYGNoOTIwMF9iaW5kYCB3aWxsIGFib3J0IGVhcmx5LCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gVGhpcyBjaGFuZ2VzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgaW5pdGlhbGl6YXRpb24gZmxvdyBzaWduaWZpY2FudGx5LCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgZnV6emluZyBzdHJhdGVneS5cblxuVGltZSB0byBkZXRlcm1pbmUgaWYgaXQncyB3b3J0aCBmdXp6aW5nISBJdCdzIHJlYWNoYWJsZSwgY2hlY2suIE5vdywgdGhlIGBXb3J0aEZ1enppbmdgIHBhcnQuIFVTQiBkZXZpY2VzIGFyZSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIgdmlhIHJhd19nYWRnZXQgLyBkdW1teV9oY2QgLyB2dXNiLCB0aGlzIGNoZWNrcyBvdXQuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSB0aGUgc3ltYm9sczogYGNoOTIwMF9iaW5kYCBhbmQgYGNvbnRyb2xfd3JpdGVgLiBMZXQncyBjb25maXJtIHRoYXQgYGNoOTIwMF9iaW5kYCBpcyB0aGUgcHJpbWFyeSBvbmUgaGVyZS4gV2FpdCwgaXMgYGNoOTIwMF9iaW5kYCBzdGF0aWMgb3Igbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBpdCdzIHN0YXRpYy4gQnV0LCBJIHNob3VsZCBjb25maXJtIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBieSBjaGVja2luZyBzeW1ib2xzIGluIGBjaDkyMDBgLCBhbmQgYGNoOTIwMF9iaW5kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQuIE9rYXksIGxldCdzIGFsc28gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSB0byBzZWUgaWYgYGNoOTIwMF9iaW5kYCBvciBvdGhlciBmdW5jdGlvbnMgaW4gYGNoOTIwMC5jYCBleGlzdC4gSnVzdCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBUaGVyZWZvcmUsIGxldCdzIHF1aWNrbHkgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTo1MC42MTExMDg5MDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTEzMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtOTgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjk5OnN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTAwLVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwgdW5zaWduZWQgc2hvcnQgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoxMzc6c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xNzYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE3NzpzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xOTYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE5NzpzdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xOTgtXFx0XFx0XFx0ICAgICAgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTUtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIxNjpzdGF0aWMgaW50IGNoOTIwMF9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMjgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIyOTpzdGF0aWMgdm9pZCBjaDkyMDBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI0Ny1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjQ4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjQ5LVxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yODgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjI4OTpzdGF0aWMgaW50IGNoOTIwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI5MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzA2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozMDc6c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzNy1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzM4OnN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz00MTk9c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNi1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjaDkyMDBfcHJvZHVjdHMpO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTQyOT1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2g5MjAwX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzctXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzODptb2R1bGVfdXNiX2RyaXZlcihjaDkyMDBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDM5LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0NDA6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJRaW5IZW5nIENIOTIwMCBVU0IgTmV0d29yayBkZXZpY2VcXFwiKTtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDQxOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTAuNzA0MjI2MTg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDAzOTU5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQncyBjYWxsaW5nIGBjaDkyMDBfYmluZGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgY29uZmlybXMgdGhpcywgZXhwbGljaXRseSBjYWxsaW5nIG91dCBgY2g5MjAwX2JpbmRgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdpdGggYFVTQl9ORVRfQ0g5MjAwYCBhbmQgYFVTQl9VU0JORVRgLCB0ZWxscyBtZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtYWtlIHRoaXMgcmVsZXZhbnQuIFRoaXMgbG9va3MgbGlrZSBhIFVTQiBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgQ0g5MjAwLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgaGVyZSBpcyBgV29ydGhGdXp6aW5nPXRydWVgLCBhbmQgdGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBzb2xpZC4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgZXJyb3IgY2hlY2tpbmcgaW4gYGNoOTIwMF9iaW5kYC4gQ3J1Y2lhbGx5LCB0aGlzIGhhcHBlbnMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZXMgb2YgYGNvbnRyb2xfd3JpdGVgLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBDSDkyMDAgVVNCIGV0aGVybmV0IGRyaXZlciBhbmQgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiDigJMgZXhhY3RseSB0aGUgc29ydCBvZiBzZXR1cCBJIHVzZSBpbiBteSBmdXp6aW5nIGVudmlyb25tZW50cy4gV2UncmUgdGFsa2luZyBhYm91dCBkZXZpY2UgZW51bWVyYXRpb24gYW5kIHByb2JpbmcsIHdoaWNoIG1lYW5zIEkgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldC5cblxuTGV0J3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmc6IGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGUgcmVhc29uaW5nIGNoZWNrcyBvdXQgcGVyZmVjdGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24sIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgbGlua2luZyB0aGlzIHRvIHRoZSByZWxldmFudCBkcml2ZXIuIEV2ZXJ5dGhpbmcgYWxpZ25zLiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxNCwiT3V0cHV0VG9rZW5zIjoxMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTQuMzQ0NjI0OTU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4ODIzODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoOTIwMF9iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyB0byBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSwgbW9kaWZ5aW5nIGVycm9yLWhhbmRsaW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGRyaXZlciBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGggVVNCIGRldmljZSBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTo1NC41MDM0NTY4MzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzk2MDY1OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTQuNTAzOTQ3NDg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzA3OTU1NzA2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NWM3MmI2M2Q3ZmJmNDEyYTg3YzYxYWIxZWQ0YzExN2Q3NTRiZDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuaW5kZXggYTIwNmZmYTc2ZjFiOS4uY2UyZTYyZjg1YzNkNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5AQCAtMzYwLDMyICszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0ZGF0YVsxXSA9IDB4MEY7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4QTA7XG4gXHRkYXRhWzFdID0gMHg5MDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MzA7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDE3O1xuIFx0ZGF0YVsxXSA9IDB4RDg7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gXHRkYXRhWzBdID0gMHgwMTtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHg1RjtcbiBcdGRhdGFbMV0gPSAweDBEO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiBcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjU0LjUwMzk0ODgwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjYxNDgxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgdGhlIENIOTIwMCBEcml2ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMsIHNvIGZpcnN0IHRoaW5nJ3MgZmlyc3Q6IGxldCdzIGp1bXAgcmlnaHQgaW50byB0aGUgYGRpZmZgIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIEJ1dCBqdXN0IHRoZSBkaWZmIGlzbid0IGVub3VnaCwgSSBuZWVkIGNvbnRleHQuIEknbGwgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gR290dGEgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGV4cGxvcmUgYSBiaXQgZnVydGhlci4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gYGNoOTIwMF9iaW5kYC4gSSBuZWVkIHRvIHJldmlldyBpdCBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEhvcGVmdWxseSB0aGlzIHdpbGwgZ2l2ZSBtZSBzb21lIGNsdWVzIGFzIHRvIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTguNzY1NDMzNjc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQwOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiAzNDE6XFx0XFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xcbiAzNDI6XFx0XFx0dTggYWRkcltFVEhfQUxFTl07XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDM0NTpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNDY6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuIDM0OTpcXHRcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xcbiAzNTA6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb193cml0ZSA9IGNoOTIwMF9tZGlvX3dyaXRlO1xcbiAzNTE6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRkZXYtXFx1MDAzZWhhcmRfbXR1ID0gZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuIDM1NjpcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCArIDE2O1xcbiAzNTc6XFx0XFx0bWlpX253YXlfcmVzdGFydChcXHUwMDI2ZGV2LVxcdTAwM2VtaWkpO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzYwOlxcdFxcdGRhdGFbMV0gPSAweDBGO1xcbiAzNjE6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxcbiAzNjI6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM2MzpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNjQ6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0ZGF0YVswXSA9IDB4QTA7XFxuIDM2NzpcXHRcXHRkYXRhWzFdID0gMHg5MDtcXG4gMzY4OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuIDM2OTpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzcwOlxcdFxcdGlmIChyZXR2YWwpXFxuIDM3MTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRkYXRhWzBdID0gMHgzMDtcXG4gMzc0OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzNzU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIDM3NjpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc3OlxcdFxcdGlmIChyZXR2YWwpXFxuIDM3ODpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRkYXRhWzBdID0gMHgxNztcXG4gMzgxOlxcdFxcdGRhdGFbMV0gPSAweEQ4O1xcbiAzODI6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxcbiAzODM6XFx0XFx0XFx0XFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM4NDpcXHRcXHRpZiAocmV0dmFsKVxcbiAzODU6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXFxuIDM4ODpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzg5OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzOTA6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcXG4gMzkxOlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzOTI6XFx0XFx0aWYgKHJldHZhbClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzOTY6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM5NzpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzOTg6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5OTpcXHRcXHRpZiAocmV0dmFsKVxcbiA0MDA6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XFxuIDQwMzpcXHRcXHRldGhfaHdfYWRkcl9zZXQoZGV2LVxcdTAwM2VuZXQsIGFkZHIpO1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0MDY6XFx0fVxcbiA0MDc6XFx0XFxuIDQwODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xcbiA0MDk6XFx0XFx0LmRlc2NyaXB0aW9uID0gXFxcIkNIOTIwMCBVU0IgdG8gTmV0d29yayBBZGFwdG9yXFxcIixcXG4gNDEwOlxcdFxcdC5mbGFncyA9IEZMQUdfRVRIRVIsXFxuIDQxMTpcXHRcXHQuYmluZCA9IGNoOTIwMF9iaW5kLFxcbiA0MTI6XFx0XFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxcbiA0MTM6XFx0XFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxcbiA0MTQ6XFx0XFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXFxuIDQxNTpcXHRcXHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbiA0MTY6XFx0XFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXFxuIDQxNzpcXHR9O1xcbiA0MTg6XFx0XFxuIDQxOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjU4Ljc2NTU4MzM1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzY1NTM3Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNoOTIwMF9iaW5kYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBjaDkyMDBfYmluZGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIEFoLCByaWdodCwgSSBzZWUuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGFkZGluZyBjaGVja3MgYWZ0ZXIgdGhvc2UgYGNvbnRyb2xfd3JpdGUoLi4uKWAgY2FsbHMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIFVTQiBkcml2ZXJzIHdoZXJlIHRoaW5ncyBjYW4gZ28gc2lkZXdheXMgbW9yZSBvZnRlbiB0aGFuIG5vdC4gTm93LCBiZWZvcmUgSSBnaXZlIHRoaXMgdGhlIGdyZWVuIGxpZ2h0LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uIGl0c2VsZiwganVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBhbmQgYWxzbyBkb3VibGUtY2hlY2sgaG93IGl04oCZcyBiZWluZyB1c2VkLiBBbmQgaXQgd291bGRuJ3QgaHVydCB0byBxdWlja2x5IHJlZnJlc2ggbXlzZWxmIG9uIGhvdyBgZ2V0X21hY19hZGRyZXNzYCBpcyB1c2VkIGhlcmUgdG9vLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMgZm9yIGJvdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU2OjA4LjUzMTEyNDI5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0I2RlZmluZSBNQUNfUkVHX0NUUkwgNjRcXG4gIDQyOlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUVVMgNjZcXG4gIDQzOlxcdCNkZWZpbmUgTUFDX1JFR19JTlRFUlJVUFRfTUFTSyA2OFxcbiAgNDQ6XFx0I2RlZmluZSBNQUNfUkVHX1BIWV9DT01NQU5EIDcwXFxuICA0NTpcXHQjZGVmaW5lIE1BQ19SRUdfUEhZX0RBVEEgNzJcXG4gIDQ2OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0wgNzRcXG4gIDQ3OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX00gNzZcXG4gIDQ4OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0ggNzhcXG4gIDQ5OlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0wgODBcXG4gIDUwOlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00xIDgyXFxuICA1MTpcXHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMiA4NFxcbiAgNTI6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfSCA4NlxcbiAgNTM6XFx0I2RlZmluZSBNQUNfUkVHX1RIUkVTSE9MRCA4OFxcbiAgNTQ6XFx0I2RlZmluZSBNQUNfUkVHX0ZJRk9fREVQVEggOTBcXG4gIDU1OlxcdCNkZWZpbmUgTUFDX1JFR19QQVVTRSA5MlxcbiAgNTY6XFx0I2RlZmluZSBNQUNfUkVHX0ZMT1dfQ09OVFJPTCA5NFxcbiAgNTc6XFx0XFxuICA1ODpcXHQvKiBDb250cm9sIHJlZ2lzdGVyIGJpdHNcXG4gIDU5OlxcdCAqXFxuICA2MDpcXHQgKiBOb3RlOiBiaXRzIDEzIGFuZCAxNSBhcmUgcmVzZXJ2ZWRcXG4gIDYxOlxcdCAqL1xcbiAgNjI6XFx0I2RlZmluZSBMT09QQkFDS1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDE0KVxcbiAgNjM6XFx0I2RlZmluZSBCQVNFMTAwWFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDEyKVxcbiAgNjQ6XFx0I2RlZmluZSBNQlBTXzEwXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuICA2NTpcXHQjZGVmaW5lIERVUExFWF9NT0RFXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTApXFxuICA2NjpcXHQjZGVmaW5lIFBBVVNFX0ZSQU1FXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgOSlcXG4gIDY3OlxcdCNkZWZpbmUgUFJPTUlTQ1VPVVNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgNjg6XFx0I2RlZmluZSBNVUxUSUNBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiAgNjk6XFx0I2RlZmluZSBCUk9BRENBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAgNzA6XFx0I2RlZmluZSBIQVNIXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gIDcxOlxcdCNkZWZpbmUgQVBQRU5EX1BBRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDQpXFxuICA3MjpcXHQjZGVmaW5lIEFQUEVORF9DUkNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgNzM6XFx0I2RlZmluZSBUUkFOU01JVFRFUl9BQ1RJT05cXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAyKVxcbiAgNzQ6XFx0I2RlZmluZSBSRUNFSVZFUl9BQ1RJT05cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiAgNzU6XFx0I2RlZmluZSBETUFfQUNUSU9OXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDc2OlxcdFxcbiAgNzc6XFx0LyogU3RhdHVzIHJlZ2lzdGVyIGJpdHNcXG4gIDc4OlxcdCAqXFxuICA3OTpcXHQgKiBOb3RlOiBiaXRzIDctMTUgYXJlIHJlc2VydmVkXFxuICA4MDpcXHQgKi9cXG4gIDgxOlxcdCNkZWZpbmUgQUxJR05NRU5UXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNilcXG4gIDgyOlxcdCNkZWZpbmUgRklGT19PVkVSX1JVTlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDUpXFxuICA4MzpcXHQjZGVmaW5lIEZJRk9fVU5ERVJfUlVOXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gIDg0OlxcdCNkZWZpbmUgUlhfRVJST1JcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgODU6XFx0I2RlZmluZSBSWF9DT01QTEVURVxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICA4NjpcXHQjZGVmaW5lIFRYX0VSUk9SXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4gIDg3OlxcdCNkZWZpbmUgVFhfQ09NUExFVEVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAgODg6XFx0XFxuICA4OTpcXHQvKiBGSUZPIGRlcHRoIHJlZ2lzdGVyIGJpdHNcXG4gIDkwOlxcdCAqXFxuICA5MTpcXHQgKiBOb3RlOiBiaXRzIDYgYW5kIDE0IGFyZSByZXNlcnZlZFxcbiAgOTI6XFx0ICovXFxuICA5MzpcXHRcXG4gIDk0OlxcdCNkZWZpbmUgRVRIX1RYQkRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gIDk1OlxcdCNkZWZpbmUgRVROX1RYX0ZJRk9fREVQVEhcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgOTY6XFx0I2RlZmluZSBFVEhfUlhCRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICA5NzpcXHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDk4OlxcdFxcbiAgOTk6XFx0c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NjowOC41MzEyNjAyNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA2ODM5Njg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNoOTIwMC5jYCAoTGluZXMgMTAwLTIwMCkqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTAwIHRocm91Z2ggMjAwLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgcGl2b3RhbCwgbWF5YmUgaW5pdGlhbGl6YXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgb3IgZW5kcG9pbnQgc2V0dXAuIEknbSBob3BpbmcgSSBjYW4gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC4gVGhpcyBhcmVhIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBVU0IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQ0g5MjAwIGNoaXBzZXQgaXMgZGVmaW5lZCwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgZnVuY3Rpb24gY2FsbHMuIEknbGwgbmVlZCB0byByZWNvZ25pemUgdGhpcyBhcmVhLiBJJ20gc2Nhbm5pbmcgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLCBvciBwb3RlbnRpYWxseSwgYSBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb24uIEknbGwgYmUgd2F0Y2hpbmcgdG8gcGljayBvdXQgYW55IHBvdGVudGlhbCBidWZmZXIgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBldmVuIGEgYmFzaWMgY29tbWFuZCBvciBkYXRhIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGhpbiB0aGlzIHNwZWNpZmljIHNlY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYW50aWNpcGF0aW5nIGxvdy1sZXZlbCBVU0IgZGVzY3JpcHRvciBwYXJzaW5nLCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXF1ZW5jZSwgb3IgbWF5YmUgZXZlbiB0aGUgaW5pdGlhbCBzZXR1cCBvZiBETUEgdHJhbnNmZXJzIGlmIHRoZSBkZXZpY2UgbGV2ZXJhZ2VzIHRoZW0uIExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTQ5OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTY6MTEuNTk5NjYwNDczWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciByZXF1ZXN0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSxcXG4gMTAxOlxcdFxcdFxcdFxcdHVuc2lnbmVkIHNob3J0IGluZGV4LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLFxcbiAxMDI6XFx0XFx0XFx0XFx0aW50IHRpbWVvdXQpXFxuIDEwMzpcXHR7XFxuIDEwNDpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMO1xcbiAxMDU6XFx0XFx0dW5zaWduZWQgY2hhciByZXF1ZXN0X3R5cGU7XFxuIDEwNjpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9SRUFEKVxcbiAxMDk6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfT1RIRVIpO1xcbiAxMTA6XFx0XFx0ZWxzZVxcbiAxMTE6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxMTI6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxMTU6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0YnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTE4OlxcdFxcdGlmICghYnVmKSB7XFxuIDExOTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxMjA6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAxMjE6XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVxcdTAwM2V1ZGV2LFxcbiAxMjQ6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi1cXHUwMDNldWRldiwgMCksXFxuIDEyNTpcXHRcXHRcXHRcXHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxcbiAxMjY6XFx0XFx0XFx0XFx0ICAgICAgdGltZW91dCk7XFxuIDEyNzpcXHRcXHRpZiAoZXJyID09IHNpemUpXFxuIDEyODpcXHRcXHRcXHRtZW1jcHkoZGF0YSwgYnVmLCBzaXplKTtcXG4gMTI5OlxcdFxcdGVsc2UgaWYgKGVyciBcXHUwMDNlPSAwKVxcbiAxMzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTMxOlxcdFxcdGtmcmVlKGJ1Zik7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdGVycl9vdXQ6XFxuIDEzNDpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuIDEzODpcXHRcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbiAxMzk6XFx0XFx0XFx0XFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxcbiAxNDA6XFx0e1xcbiAxNDE6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcXG4gMTQyOlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xcbiAxNDM6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfV1JJVEUpXFxuIDE0NjpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX09USEVSKTtcXG4gMTQ4OlxcdFxcdGVsc2VcXG4gMTQ5OlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuIDE1MDpcXHRcXHRcXHRcXHRcXHRVU0JfUkVDSVBfREVWSUNFKTtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIiVzKCkgaW5kZXg9MHglMDJ4IHNpemU9JWRcXFxcblxcXCIsXFxuIDE1MzpcXHRcXHRcXHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRpZiAoZGF0YSkge1xcbiAxNTY6XFx0XFx0XFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTU3OlxcdFxcdFxcdGlmICghYnVmKSB7XFxuIDE1ODpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxNTk6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAxNjA6XFx0XFx0XFx0fVxcbiAxNjE6XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVxcdTAwM2V1ZGV2LFxcbiAxNjQ6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cXHUwMDNldWRldiwgMCksXFxuIDE2NTpcXHRcXHRcXHRcXHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgICAgdGltZW91dCk7XFxuIDE2NzpcXHRcXHRpZiAoZXJyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZXJyIFxcdTAwM2Mgc2l6ZSlcXG4gMTY4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDE2OTpcXHRcXHRrZnJlZShidWYpO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0ZXJyX291dDpcXG4gMTc0OlxcdFxcdHJldHVybiBlcnI7XFxuIDE3NTpcXHR9XFxuIDE3NjpcXHRcXG4gMTc3OlxcdHN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbiAxNzg6XFx0e1xcbiAxNzk6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTY6MTEuNTk5NzU4MzAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzI3NDE5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYGdldF9tYWNfYWRkcmVzc2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBnZXRfbWFjX2FkZHJlc3NgIG5vdywgc3BlY2lmaWNhbGx5IHdpdGhpbiBsaW5lcyAyNTAtMzQwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYW5vdGhlciBuZXR3b3JrIGZ1bmN0aW9uLlwiIEdpdmVuIHRoZSBjb250ZXh0IEkgYXNzdW1lIGl0IGlzIG5ldHdvcmsvT1MgcmVsYXRlZC4gVGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHJldHJpZXZpbmcgYSBtYWNoaW5lJ3MgTWVkaWEgQWNjZXNzIENvbnRyb2wgKE1BQykgYWRkcmVzcy4gVGhhdCdzIHVzdWFsbHkgYSBwcmV0dHkgaW52b2x2ZWQgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIHRyeWluZyB0byBlbnN1cmUgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eS4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZGlmZmVyZW50IG5ldHdvcmsgaW50ZXJmYWNlIG5hbWluZyBjb252ZW50aW9ucyBhY3Jvc3MgdmFyaW91cyBPU2VzLiBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQgYGlmY29uZmlnYCwgYGlwIGFkZHJgIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIHRvIHRoZSBmcmFtZXdvcms/IEknbSBjdXJpb3VzIGlmIHRoZXkncmUgcmVseWluZyBvbiBleHRlcm5hbCB0b29scyBvciBtb3JlIG5hdGl2ZSBzeXN0ZW0gY2FsbHMgZm9yIHRoaXMuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnM7IGEgZmFpbGVkIE1BQyBhZGRyZXNzIHJldHJpZXZhbCBjYW4gY2FzY2FkZSBpbnRvIGxhcmdlciBpc3N1ZXMgZG93biB0aGUgbGluZS4gRmluYWxseSwgYXJlIHRoZXkgY2FjaGluZyBpdD8gT3IgaXMgaXQgcmV0cmVpdmVkIG9uIGV2ZXJ5IGNhbGw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU2OjE0LjE3MjUwNTQxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdGlmIChsaW5rKSB7XFxuIDI0MTpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGRldi1cXHUwMDNlbmV0KTtcXG4gMjQyOlxcdFxcdFxcdHVzYm5ldF9kZWZlcl9rZXZlbnQoZGV2LCBFVkVOVF9MSU5LX1JFU0VUKTtcXG4gMjQzOlxcdFxcdH0gZWxzZSB7XFxuIDI0NDpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihkZXYtXFx1MDAzZW5ldCk7XFxuIDI0NTpcXHRcXHR9XFxuIDI0NjpcXHR9XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMjQ5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBmbGFncylcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdGludCBpID0gMDtcXG4gMjUyOlxcdFxcdGludCBsZW4gPSAwO1xcbiAyNTM6XFx0XFx0aW50IHR4X292ZXJoZWFkID0gMDtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0dHhfb3ZlcmhlYWQgPSAweDQwO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gMjU4OlxcdFxcdGlmIChza2JfY293X2hlYWQoc2tiLCB0eF9vdmVyaGVhZCkpIHtcXG4gMjU5OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIDI2MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjYxOlxcdFxcdH1cXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0X19za2JfcHVzaChza2IsIHR4X292ZXJoZWFkKTtcXG4gMjY0OlxcdFxcdC8qIHVzYm5ldCBhZGRzIHBhZGRpbmcgaWYgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YgcGFja2V0IHNpemVcXG4gMjY1OlxcdFxcdCAqIGlmIHNvLCBhZGp1c3QgbGVuZ3RoIHZhbHVlIGluIGhlYWRlclxcbiAyNjY6XFx0XFx0ICovXFxuIDI2NzpcXHRcXHRpZiAoKHNrYi1cXHUwMDNlbGVuICUgZGV2LVxcdTAwM2VtYXhwYWNrZXQpID09IDApXFxuIDI2ODpcXHRcXHRcXHRsZW4rKztcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzBdID0gbGVuO1xcbiAyNzE6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzFdID0gbGVuIFxcdTAwM2VcXHUwMDNlIDg7XFxuIDI3MjpcXHRcXHRza2ItXFx1MDAzZWRhdGFbMl0gPSAweDAwO1xcbiAyNzM6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzNdID0gMHg4MDtcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0Zm9yIChpID0gNDsgaSBcXHUwMDNjIDQ4OyBpKyspXFxuIDI3NjpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbaV0gPSAweDAwO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRza2ItXFx1MDAzZWRhdGFbNDhdID0gbGVuO1xcbiAyNzk6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzQ5XSA9IGxlbiBcXHUwMDNlXFx1MDAzZSA4O1xcbiAyODA6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzUwXSA9IDB4MDA7XFxuIDI4MTpcXHRcXHRza2ItXFx1MDAzZWRhdGFbNTFdID0gMHg4MDtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0Zm9yIChpID0gNTI7IGkgXFx1MDAzYyA2NDsgaSsrKVxcbiAyODQ6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhW2ldID0gMHgwMDtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMjg3OlxcdH1cXG4gMjg4OlxcdFxcbiAyODk6XFx0c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0aW50IGxlbiA9IDA7XFxuIDI5MjpcXHRcXHRpbnQgcnhfb3ZlcmhlYWQgPSAwO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHRyeF9vdmVyaGVhZCA9IDY0O1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyByeF9vdmVyaGVhZCkpIHtcXG4gMjk3OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwidW5leHBlY3RlZCB0aW55IHJ4IGZyYW1lXFxcXG5cXFwiKTtcXG4gMjk4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyOTk6XFx0XFx0fVxcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRsZW4gPSAoc2tiLVxcdTAwM2VkYXRhW3NrYi1cXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVxcdTAwM2VkYXRhW3NrYi1cXHUwMDNlbGVuIC0gMTVdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbiAzMDI6XFx0XFx0c2tiX3RyaW0oc2tiLCBsZW4pO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRyZXR1cm4gMTtcXG4gMzA1OlxcdH1cXG4gMzA2OlxcdFxcbiAzMDc6XFx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbiAzMDg6XFx0e1xcbiAzMDk6XFx0XFx0aW50IGVyciA9IDA7XFxuIDMxMDpcXHRcXHR1bnNpZ25lZCBjaGFyIG1hY19hZGRyWzB4MDZdO1xcbiAzMTE6XFx0XFx0aW50IHJkX21hY19sZW4gPSAwO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiJXM6XFxcXG5cXFxcdHVzYm5ldCBWSUQ6JTB4IFBJRDolMHhcXFxcblxcXCIsIF9fZnVuY19fLFxcbiAzMTQ6XFx0XFx0XFx0ICAgbGUxNl90b19jcHUoZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSxcXG4gMzE1OlxcdFxcdFxcdCAgIGxlMTZfdG9fY3B1KGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGVzY3JpcHRvci5pZFByb2R1Y3QpKTtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcXG4gMzE4OlxcdFxcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXFxuIDMxOTpcXHRcXHRcXHRcXHRcXHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTY6MTQuMTcyNjUyNTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3ODAyNDM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJpc2tzIGluIHRoZSBgY2g5MjAwX2JpbmRgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgYGNvbnRyb2xfd3JpdGVgLiBJIHNlZSB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIDAgdW5sZXNzIHRoZXJlJ3MgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIGBrbWVtZHVwYCwgb3IgaWYgYGVyciBcdTAwM2MgMGAgb2NjdXJzIGluIGB1c2JfY29udHJvbF9tc2dgIHdoaWNoIGlzbid0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3JpZ2luYWwgY29kZSBpZ25vcmVzIHRoZSBlcnJvciBjb2RlLCB1bmxlc3MgdGhlIGBrbWVtZHVwYCBmYWlscy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgYSBidWc/IEJ1dCwgdGhlbiBJIHNlZSB0aGF0LCBsYXRlciBvbiwgaW4gYGNoOTIwMF9iaW5kYCwgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29udHJvbF93cml0ZWAgKmlzKiBjaGVja2VkLiBTbywgdGhlcmUgaXMgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgY2FsbCBzdGFjaywgYXQgbGVhc3QuXG5cbk9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCBgY2g5MjAwX2JpbmRgLiBXZSBpbml0aWFsaXplIGBkYXRhYCBvbiB0aGUgc3RhY2suIFR3byBieXRlcyBhcmUgYXNzaWduZWQgdmFsdWVzIDB4MDEgYW5kIDB4MEYsIHdoaWNoIGFyZSB0aGVuIHdyaXR0ZW4gYnkgYGNvbnRyb2xfd3JpdGVgLiBUaGUgY3JpdGljYWwgY2hlY2sgaXMgd2hldGhlciBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciAod2hpY2ggaXQgZG9lcyBub3QsIHVubGVzcyBrbWVtZHVwIGZhaWxzIG9yIGBlcnIgXHUwMDNjIDBgIG9jY3VycykuIElmIGl0IGRvZXMsIGBjaDkyMDBfYmluZGAgcmV0dXJucyB0aGUgZXJyb3IsIHdoaWNoIGlzIGdvb2QuIElmIGl0IHN1Y2NlZWRzLCB0aGUgY29kZSBwcm9jZWVkcyB0byB3cml0ZSB0aGUgbmV4dCByZWdpc3RlcnMuIEZpbmFsbHksIGl0IGNhbGxzIGBnZXRfbWFjX2FkZHJlc3NgIGFuZCB0aGVuIGBldGhfaHdfYWRkcl9zZXRgLlxuXG5Ob3csIHRoZSBjZW50cmFsIHF1ZXN0aW9uOiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgaGVyZT9cblxuVGhlIGtleSBoZXJlIGlzIGBhZGRyYCB3aXRoaW4gYGNoOTIwMF9iaW5kYCwgd2hpY2ggaXMgZGVjbGFyZWQgYXMgYHU4IGFkZHJbRVRIX0FMRU5dO2AuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgdG8gYGFkZHJgLiBTbyBJIHdpbGwgZXhhbWluZSB3aGF0IGhhcHBlbnMgaW4gYGdldF9tYWNfYWRkcmVzc2AuIFRoZSBNQUMgYWRkcmVzcyBpcyB0aGVuIHNldCBieSBgZXRoX2h3X2FkZHJfc2V0YC5cblxuT2theSwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYGdldF9tYWNfYWRkcmVzc2AgdG8gZGV0ZXJtaW5lIGlmIGBhZGRyYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmV0cmlldmVkLiBUaGUgcGF0Y2ggbG9va3Mgc2FmZSBzbyBmYXIsIGJ1dCBJIG11c3Qga25vdyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldF9tYWNfYWRkcmVzc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NjoxOS42NTA2ODEzOTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDU6XFx0fVxcbiAzMDY6XFx0XFxuIDMwNzpcXHRzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuIDMwODpcXHR7XFxuIDMwOTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMzEwOlxcdFxcdHVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbMHgwNl07XFxuIDMxMTpcXHRcXHRpbnQgcmRfbWFjX2xlbiA9IDA7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlczpcXFxcblxcXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIDMxNDpcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxcbiAzMTU6XFx0XFx0XFx0ICAgbGUxNl90b19jcHUoZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO1xcbiAzMTg6XFx0XFx0cmRfbWFjX2xlbiA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdCAgTUFDX1JFR19TVEFUSU9OX0wsIG1hY19hZGRyLCAweDAyLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0ICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjE6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9NLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjM6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9ILFxcbiAzMjQ6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyA0LCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjU6XFx0XFx0aWYgKHJkX21hY19sZW4gIT0gRVRIX0FMRU4pXFxuIDMyNjpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRkYXRhWzBdID0gbWFjX2FkZHJbNV07XFxuIDMyOTpcXHRcXHRkYXRhWzFdID0gbWFjX2FkZHJbNF07XFxuIDMzMDpcXHRcXHRkYXRhWzJdID0gbWFjX2FkZHJbM107XFxuIDMzMTpcXHRcXHRkYXRhWzNdID0gbWFjX2FkZHJbMl07XFxuIDMzMjpcXHRcXHRkYXRhWzRdID0gbWFjX2FkZHJbMV07XFxuIDMzMzpcXHRcXHRkYXRhWzVdID0gbWFjX2FkZHJbMF07XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdHJldHVybiBlcnI7XFxuIDMzNjpcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMzM5OlxcdHtcXG4gMzQwOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiAzNDE6XFx0XFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xcbiAzNDI6XFx0XFx0dTggYWRkcltFVEhfQUxFTl07XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU2OjE5LjY1MDgyMTg1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjQ4NjcwMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIElzc3VlcyBEZXRlY3RlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGdldF9tYWNfYWRkcmVzc2AsIEkgc2VlIHRoYXQgYG1hY19hZGRyYCBpcyB6ZXJvZWQgb3V0IHJpZ2h0IGF3YXkgd2l0aCBgbWVtc2V0YCwgdGhlbiBgY29udHJvbF9yZWFkYCBpcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBidWZmZXIgaWYgYGNvbnRyb2xfcmVhZGAgcmV0dXJucyB0aGUgZXhwZWN0ZWQgc2l6ZS4gU28sIHRoZSBgZGF0YWAgYnVmZmVyIGdldHMgaXRzIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlYWQsIGFuZCBpdCBpcyBhIGtub3duIGdvb2QgdmFsdWUuXG5cbk5vdywgaW4gYGNoOTIwMF9iaW5kYCwgdGhlIGBkYXRhYCBhcnJheSBpcyAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgd2l0aCBzcGVjaWZpYyBieXRlIHZhbHVlcyBiZWZvcmUgZWFjaCBgY29udHJvbF93cml0ZWAgY2FsbC4gVGhpcyBpcyBjcnVjaWFsLiBFYWNoIGVsZW1lbnQgb2YgYGRhdGFgIGdldHMgYSBkZWZpbmVkIHZhbHVlIGJlZm9yZSBpdCdzIHVzZWQuIFRoZSBwYXRjaCBtYWlubHkgYWRkcyBlcnJvciBjaGVja3MgYWZ0ZXIgdGhvc2UgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLCBidXQgdGhlIGRhdGEgaXRzZWxmIGlzIGFsd2F5cyBpbml0aWFsaXplZC4gVGhlIGBkYXRhYCBidWZmZXIgaXMgYWxzbyBhIHN0YWNrIHZhcmlhYmxlLCBzbyBpdCBpcyBrbm93bi5cblxuU2luY2UgYWxsIHZhcmlhYmxlcywgbGlrZSBgZGF0YWAgYW5kIGBhZGRyYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2FnZSwgdGhlcmUncyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgbWVhbnMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpubyogbmV3IEtNU0FOLXJlbGV2YW50IGlzc3VlcywgYW5kIGl0IG1ha2VzIHRoZSBjb2RlIHNhZmVyLlxuXG5UaGlzIHBhdGNoIGlzIG9ubHkgZXJyb3IgY2hlY2tpbmcgdGhlIGBjb250cm9sX3dyaXRlYCByZXR1cm4gdmFsdWVzLCBub3QgbW9kaWZ5aW5nIHRoZSBkYXRhIHVzYWdlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzLCBsaWtlIEtBU0FOLCBoYW5kbGUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuIEJlY2F1c2UgdGhlIHN0YWNrIGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgcmlza3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFNpbmNlIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgYW5kIHRoZSBkYXRhIGlzIHJlYWQgaW4gYSBjb250cm9sbGVkIHdheSwgd2UgZG9uJ3QgaGF2ZSBLTVNBTiBwcm9ibGVtcy4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBtYXJrIGBOZWVkc0tNU0FOYCBhcyBgZmFsc2VgLiBJdCBpcyBhIGdvb2QgZXhhbXBsZSBvZiAqbm90KiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1MywiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NjoyNS4yOTk0OTY0MThaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNrcyBmb3IgcmV0dmFsIGFmdGVyIGVhY2ggY29udHJvbF93cml0ZSgpIGNhbGwgaW4gY2g5MjAwX2JpbmQoKS4gU3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGRhdGFbMl0pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 04:23:27 +0000 UTC FinishedAt: 2026-09-05 05:56:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "f9b77343-c4b6-41ec-80f7-34433b3e8d4a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ch9200_bind" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyB0byBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSwgbW9kaWZ5aW5nIGVycm9yLWhhbmRsaW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGRyaXZlciBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGggVVNCIGRldmljZSBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NWM3MmI2M2Q3ZmJmNDEyYTg3YzYxYWIxZWQ0YzExN2Q3NTRiZDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbmluZGV4IGEyMDZmZmE3NmYxYjkuLmNlMmU2MmY4NWMzZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuQEAgLTM2MCwzMiAmIzQzOzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRkYXRhWzFdID0gMHgwRjtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweEEwO1xuIFx0ZGF0YVsxXSA9IDB4OTA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXR2YWwpXG4mIzQzO1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MzA7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXR2YWwpXG4mIzQzO1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MTc7XG4gXHRkYXRhWzFdID0gMHhEODtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xuIFx0ZGF0YVswXSA9IDB4MDE7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXG4gXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHg1RjtcbiBcdGRhdGFbMV0gPSAweDBEO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xuIFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIHRvIGNvbnRyb2xfd3JpdGUoKSBjYWxscyBpbiBjaDkyMDBfYmluZCgpLCBtb2RpZnlpbmcgZXJyb3ItaGFuZGxpbmcgY29udHJvbCBmbG93IGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgd2l0aCBVU0IgZGV2aWNlIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1YzcyYjYzZDdmYmY0MTJhODdjNjFhYjFlZDRjMTE3ZDc1NGJkOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjU1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCmluZGV4IGEyMDZmZmE3NmYxYjkuLmNlMmU2MmY4NWMzZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKQEAgLTM2MCwzMiAmIzQzOzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJZGF0YVsxXSA9IDB4MEY7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJZGF0YVswXSA9IDB4QTA7CiAJZGF0YVsxXSA9IDB4OTA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDMwOwogCWRhdGFbMV0gPSAweDAwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJZGF0YVswXSA9IDB4MTc7CiAJZGF0YVsxXSA9IDB4RDg7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLAogCQkJICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJLyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovCiAJZGF0YVswXSA9IDB4MDE7CiAJZGF0YVsxXSA9IDB4MDA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMiwKIAkJCSAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDVGOwogCWRhdGFbMV0gPSAweDBEOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsCiAJCQkgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTsKIAlldGhfaHdfYWRkcl9zZXQoZGV2LSZndDtuZXQsIGFkZHIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgVVNCIE5ldHdvcmsgRHJpdmVyIElzc3VlKioKClJpZ2h0LCB0aGUgZGlmZiBpcyBwb2ludGluZyBtZSBkaXJlY3RseSB0byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gVGhhdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0aG9yb3VnaGx5IGluc3BlY3QgdGhlIGRyaXZlciYjMzk7cyBjb2RlIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIOKAkyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlJiMzOTtzIHB1cnBvc2UsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uCgpOb3csIGNvbnNpZGVyaW5nIHRoaXMgaXMgYSBVU0IgbmV0d29yayBkcml2ZXIsIGl0IGJyaW5ncyB0byBtaW5kIHNldmVyYWwgcmVsZXZhbnQgYXJlYXMuIFdlIG9mdGVuIHNlZSB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGVtdWxhdGVkIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9ucywgb3IgdGhlIHVzZSBvZiBSYXcgR2FkZ2V0LCB2aGNpLCBhbmQgZXNwZWNpYWxseSBVU0IgZnV6emluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gVGhvc2UgYXJlIGFsbCB0aGluZ3MgdGhhdCBpbW1lZGlhdGVseSBqdW1wIHRvIG1pbmQuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBlbXVsYXRpb24gYW5kIGZ1enppbmcgY29udGV4dHMgaW4gbWluZCBhcyBJJiMzOTttIGNoZWNraW5nIHRoZSBkcml2ZXIuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYW5kIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2g5MjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTYxND1jb25maWcgVVNCX05FVF9DSDkyMDBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjItXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjIzOlx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjI0LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfVVNCX05FVF9DRENfTUJJTSlcdCYjNDM7PSBjZGNfbWJpbS5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVx0JiM0Mzs9IGNoOTIwMC5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVFDMTExKVx0JiM0Mzs9IGFxYzExMS5vXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTEzNz1zdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE3Ni1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoxNzc6c3RhdGljIGludCBjaDkyMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTc4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTk2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE5NzpzdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE5OC1cdFx0XHQgICAgICBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTUtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjE2OnN0YXRpYyBpbnQgY2g5MjAwX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxNy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIyOC1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyMjk6c3RhdGljIHZvaWQgY2g5MjAwX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMzAte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNDctXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjQ4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNDktXHRcdFx0XHQgICAgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI4OC1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyODk6c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI5MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTMwNz1zdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzNy1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozMzg6c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzOS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM0OC1cdGRldi1cdTAwM2VtaWkuZGV2ID0gZGV2LVx1MDAzZW5ldDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNDk6XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzUwOlx0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzUxLVx0ZGV2LVx1MDAzZW1paS5yZWdfbnVtX21hc2sgPSAweDFmO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MDctXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDA4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDA5LVx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDEwLVx0LmZsYWdzID0gRkxBR19FVEhFUixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTE6XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxMjpcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTM6XHQudHhfZml4dXAgPSBjaDkyMDBfdHhfZml4dXAsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDE0Olx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDE1Olx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTY6XHQucmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MTctfTtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MTgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjaDkyMDBfcHJvZHVjdHNbXSA9IHtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjAtXHR7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDIxLVx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyMjpcdCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZjaDkyMDBfaW5mbyxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjMtXHQgfSxcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyNzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI5OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzMDpcdC5uYW1lID0gXCYjMzQ7Y2g5MjAwXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzMTpcdC5pZF90YWJsZSA9IGNoOTIwMF9wcm9kdWN0cyxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzItXHQucHJvYmUgPSB1c2JuZXRfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQzNy1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0Mzg6bW9kdWxlX3VzYl9kcml2ZXIoY2g5MjAwX2RyaXZlcik7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IFVTQiBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIHNwZWNpZmljYWxseSBhdCBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLCByaWdodCBhcm91bmQgbGluZSA2MTQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVjaXNpb25zIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIGxpa2VseSBtYWRlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgSSYjMzk7bGwgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB2YXJpb3VzIFVTQiBuZXR3b3JrIGRldmljZXMgYW5kIHBlcmhhcHMgc29tZSBkZXBlbmRlbmNpZXMsIGxpa2Ugd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBuZWVkIHRvIGJlIGFjdGl2ZS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGRpZmZlcmVudCBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBob3cgdGhleSYjMzk7cmUgbWFuYWdlZCBmcm9tIGEgYnVpbGQtdGltZSBwZXJzcGVjdGl2ZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2Ugd2hpY2ggVVNCIG5ldHdvcmsgZGV2aWNlcyBnZXQgYnVpbHQgaW50byB0aGUga2VybmVsIHZlcnN1cyBiZWluZyBsb2FkYWJsZSBtb2R1bGVzLCBhbmQgYWxzbyBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBhc3BlY3RzIG9mIHRoZSBrZXJuZWwmIzM5O3MgVVNCIG5ldHdvcmtpbmcgc3RhY2suIEtub3dpbmcgdGhhdCB3aWxsIGhlbHAgbWUgd2l0aCBbaW5zZXJ0IHJlbGV2YW50IGV4cGVydC1sZXZlbCBhY3Rpdml0eSwgZS5nLiwgY3VzdG9taXppbmcga2VybmVsIGJ1aWxkcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUsIHRyb3VibGVzaG9vdGluZyBkZXZpY2UgY29tcGF0aWJpbGl0eSwgZXRjLl0KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdCAgNEcgbW9kZW0gZnJvbSBWZXJpem9uOlxuIDYxMTpcdFxuIDYxMjpcdFx0ICBodHRwOi8vdWJ1bnR1Zm9ydW1zLm9yZy9zaG93cG9zdC5waHA/cD0xMDU4OTY0N1x1MDAyNnBvc3Rjb3VudD0xN1xuIDYxMzpcdFxuIDYxNDpcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuIDYxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gNjE2Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2MTc6XHRcdHNlbGVjdCBNSUlcbiA2MTg6XHRcdGhlbHBcbiA2MTk6XHRcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgVVNCIGV0aGVybmV0IGFkYXB0ZXIgd2l0aCBhIFFpbkhlbmdcbiA2MjA6XHRcdCAgQ0g5MjAwIGNoaXBzZXQuXG4gNjIxOlx0XG4gNjIyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDYyMzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxuIDYyNDpcdFxuIDYyNTpcdGNvbmZpZyBVU0JfTkVUX0FRQzExMVxuIDYyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XCYjMzQ7XG4gNjI3Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA2Mjg6XHRcdHNlbGVjdCBDUkMzMlxuIDYyOTpcdFx0aGVscFxuIDYzMDpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFxdWFudGlhIEFRdGlvbiBVU0JcbiA2MzE6XHRcdCAgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gQVFDMTExVS9BUUMxMTIgY2hpcHMuXG4gNjMyOlx0XG4gNjMzOlx0XHQgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOlxuIDYzNDpcdFx0ICAqIEFxdWFudGlhIEFRdGlvbiBVU0IgdG8gNUdiRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgRHJpdmVyIEJpbmQgRnVuY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgY2g5MjAwYCBVU0IgZHJpdmVyIGJpbmRzIHRvIGEgZGV2aWNlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYGJpbmRgIGZ1bmN0aW9uLCBvciBhdCBsZWFzdCB0aGF0JiMzOTtzIHdoZXJlIEkgYXNzdW1lIHRoZSBhY3Rpb24gc3RhcnRzLiBJJiMzOTtsbCBmb2N1cyBvbiBsaW5lcyAzNDAgdGhyb3VnaCA0MDUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBsb2dpYyBvZiBkZXZpY2UgYXNzb2NpYXRpb24gd2l0aGluIHRoYXQgZHJpdmVyLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyB0aGluZyBjb21lcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzM1Olx0XHRyZXR1cm4gZXJyO1xuIDMzNjpcdH1cbiAzMzc6XHRcbiAzMzg6XHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gMzM5Olx0e1xuIDM0MDpcdFx0aW50IHJldHZhbCA9IDA7XG4gMzQxOlx0XHR1bnNpZ25lZCBjaGFyIGRhdGFbMl07XG4gMzQyOlx0XHR1OCBhZGRyW0VUSF9BTEVOXTtcbiAzNDM6XHRcbiAzNDQ6XHRcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XG4gMzQ1Olx0XHRpZiAocmV0dmFsKVxuIDM0NjpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM0NzpcdFxuIDM0ODpcdFx0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuIDM0OTpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xuIDM1MDpcdFx0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gY2g5MjAwX21kaW9fd3JpdGU7XG4gMzUxOlx0XHRkZXYtXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XG4gMzUyOlx0XG4gMzUzOlx0XHRkZXYtXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcbiAzNTQ6XHRcbiAzNTU6XHRcdGRldi1cdTAwM2VoYXJkX210dSA9IGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VuZXQtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIDM1NjpcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCAmIzQzOyAxNjtcbiAzNTc6XHRcdG1paV9ud2F5X3Jlc3RhcnQoXHUwMDI2ZGV2LVx1MDAzZW1paSk7XG4gMzU4Olx0XG4gMzU5Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzNjA6XHRcdGRhdGFbMV0gPSAweDBGO1xuIDM2MTpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxuIDM2MjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM2MzpcdFx0aWYgKHJldHZhbClcbiAzNjQ6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNjU6XHRcbiAzNjY6XHRcdGRhdGFbMF0gPSAweEEwO1xuIDM2NzpcdFx0ZGF0YVsxXSA9IDB4OTA7XG4gMzY4Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuIDM2OTpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3MDpcdFx0aWYgKHJldHZhbClcbiAzNzE6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzI6XHRcbiAzNzM6XHRcdGRhdGFbMF0gPSAweDMwO1xuIDM3NDpcdFx0ZGF0YVsxXSA9IDB4MDA7XG4gMzc1Olx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbiAzNzY6XHRcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzNzc6XHRcdGlmIChyZXR2YWwpXG4gMzc4Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzc5Olx0XG4gMzgwOlx0XHRkYXRhWzBdID0gMHgxNztcbiAzODE6XHRcdGRhdGFbMV0gPSAweEQ4O1xuIDM4MjpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxuIDM4MzpcdFx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM4NDpcdFx0aWYgKHJldHZhbClcbiAzODU6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzODY6XHRcbiAzODc6XHRcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xuIDM4ODpcdFx0ZGF0YVswXSA9IDB4MDE7XG4gMzg5Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzOTA6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXG4gMzkxOlx0XHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzkyOlx0XHRpZiAocmV0dmFsKVxuIDM5MzpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM5NDpcdFxuIDM5NTpcdFx0ZGF0YVswXSA9IDB4NUY7XG4gMzk2Olx0XHRkYXRhWzFdID0gMHgwRDtcbiAzOTc6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXG4gMzk4Olx0XHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzk5Olx0XHRpZiAocmV0dmFsKVxuIDQwMDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDQwMTpcdFxuIDQwMjpcdFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XG4gNDAzOlx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYWRkcik7XG4gNDA0Olx0XG4gNDA1Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDQwNjpcdH1cbiA0MDc6XHRcbiA0MDg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xuIDQwOTpcdFx0LmRlc2NyaXB0aW9uID0gXCYjMzQ7Q0g5MjAwIFVTQiB0byBOZXR3b3JrIEFkYXB0b3JcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVVNCIE5ldHdvcmsgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gdGhlc2UgVVNCIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgVVNCX1VTQk5FVGAgYW5kIHRoZSBgVVNCX05FVF9DSDkyMDBgIG1vZHVsZS4gV2hlcmUgZG9lcyB0aGlzIGluZm9ybWF0aW9uIHJlc2lkZT8gTXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IHRoZSBgS2NvbmZpZ2AgZmlsZSwgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvdXNiL2AuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciB0aGVzZSBraW5kIG9mIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4gVGltZSB0byBjcmFjayB0aGF0IG9wZW4gYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMgYWJvdXQgYFVTQl9VU0JORVRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1VTQk5FVFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYFVTQl9VU0JORVRgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkuIE5vIHBvaW50IGluIGVuYWJsaW5nIGl0IGlmIGl0JiMzOTtzIGdvdCBzb21lIHVubWV0IHJlcXVpcmVtZW50cywgcmlnaHQ/IFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSwgYnV0LCBzdGlsbCwgaXQgaXMgdGhlIGZpcnN0IHN0ZXAgSSB0YWtlIGluIHJlc29sdmluZyBVU0IgcmVsYXRlZCBuZXR3b3JrIGRyaXZlciBwcm9ibGVtcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgYW5kIG1ha2Ugc3VyZSB0aGF0IGFueSBjb3JlIGZlYXR1cmVzIGFyZSBwcm9wZXJseSBlbmFibGVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIHByb3BlciBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxuIDEzMTpcdFxuIDEzMjpcdGNvbmZpZyBVU0JfVVNCTkVUXG4gMTMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuIDEzNDpcdFx0c2VsZWN0IE1JSVxuIDEzNTpcdFx0aGVscFxuIDEzNjpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXG4gMTM3Olx0XHQgIHdpdGggXCYjMzQ7bWluaWRyaXZlcnNcJiMzNDsgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcbiAxMzg6XHRcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXG4gMTM5Olx0XHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cbiAxNDA6XHRcbiAxNDE6XHRcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXCYjMzQ7dXNibmV0XCYjMzQ7LCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcbiAxNDI6XHRcbiAxNDM6XHRcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcJiMzNDtuZXR3b3JrXCYjMzQ7IG9yIFwmIzM0O2RhdGEgdHJhbnNmZXJcJiMzNDtcbiAxNDQ6XHRcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXG4gMTQ1Olx0XHQgICAgXCYjMzQ7TGFwbGlua1wmIzM0OyBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XG4gMTQ2Olx0XHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cbiAxNDc6XHRcbiAxNDg6XHRcdCAgLSBBbiBpbnRlbGxpZ2VudCBVU0IgZ2FkZ2V0LCBwZXJoYXBzIGVtYmVkZGluZyBhIExpbnV4IHN5c3RlbS5cbiAxNDk6XHRcdCAgICBUaGVzZSBpbmNsdWRlIFBEQXMgcnVubmluZyBMaW51eCAoaVBhcSwgWW9weSwgWmF1cnVzLCBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENIOTIwMCBVU0IgTmV0d29yayBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBVU0JfTkVUX0NIOTIwMGAgc2l0dWF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyDigJMgaXQgcmVsaWVzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBwdWxscyBpbiBhIHdob2xlIHNsZXcgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMgbGlrZSBgTkVUREVWSUNFU2AsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYFVTQmAgc3VwcG9ydC4gSSYjMzk7bSB1c3VhbGx5IGZpbmUganVzdCBlbmFibGluZyBgVVNCX05FVF9DSDkyMDBgLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgcGFyZW50IGNvbmZpZ3MgYXJlIHN0YW5kYXJkLiBTbywgYFVTQl9ORVRfQ0g5MjAwYCBhbmQgYFVTQl9VU0JORVRgIGFyZSBteSBtYWluIGZvY3VzLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBjaDkyMDBfYmluZGAgcmVhY2hhYmxlPyBUaGUgYW5zd2VyIGFwcGVhcnMgdG8gYmUgeWVzLiBJbiBteSBzeXprYWxsZXIvdmlydHVhbCBlbnZpcm9ubWVudCwgdGhlIFVTQiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSB1c2luZyB0aGUgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBzZXR1cCwgZW11bGF0ZXMgVVNCIGRldmljZXMgbWF0Y2hpbmcgYFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpYC4gV2hlbiBvbmUgb2YgdGhlc2UgdmlydHVhbCBkZXZpY2VzIGlzICYjMzQ7cGx1Z2dlZCBpbiwmIzM0OyB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIGNhbGxzIGBpbmZvLSZndDtiaW5kKGRldiwgdWRldilgLCB3aGljaCBpcyBgY2g5MjAwX2JpbmRgLgoKUHJldmlvdXNseSwgSSBzZWUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBgY29udHJvbF93cml0ZWAgY2FsbHMgd2l0aGluIGBjaDkyMDBfYmluZGAgd2VyZSBub3QgY2hlY2tlZC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCB3ZWFrIHBvaW50LiBOb3csIGlmIGFueSBvZiB0aG9zZSBgY29udHJvbF93cml0ZWAgY2FsbHMgZmFpbCwgZHVlIHRvIGEgc2ltdWxhdGVkIFVTQiBmYXVsdCwgdGltZW91dCwgdW5wbHVnIGV2ZW50LCBvciBhbiBpc3N1ZSB3aXRoIHRoZSBkZXNjcmlwdG9yIG9yIGVuZHBvaW50cywgYGNoOTIwMF9iaW5kYCB3aWxsIGFib3J0IGVhcmx5LCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gVGhpcyBjaGFuZ2VzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgaW5pdGlhbGl6YXRpb24gZmxvdyBzaWduaWZpY2FudGx5LCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgZnV6emluZyBzdHJhdGVneS4KClRpbWUgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmchIEl0JiMzOTtzIHJlYWNoYWJsZSwgY2hlY2suIE5vdywgdGhlIGBXb3J0aEZ1enppbmdgIHBhcnQuIFVTQiBkZXZpY2VzIGFyZSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIgdmlhIHJhd19nYWRnZXQgLyBkdW1teV9oY2QgLyB2dXNiLCB0aGlzIGNoZWNrcyBvdXQuCgpNeSBtYWluIGZvY3VzIHdpbGwgYmUgdGhlIHN5bWJvbHM6IGBjaDkyMDBfYmluZGAgYW5kIGBjb250cm9sX3dyaXRlYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgY2g5MjAwX2JpbmRgIGlzIHRoZSBwcmltYXJ5IG9uZSBoZXJlLiBXYWl0LCBpcyBgY2g5MjAwX2JpbmRgIHN0YXRpYyBvciBub24tc3RhdGljPyBMb29rcyBsaWtlIGl0JiMzOTtzIHN0YXRpYy4gQnV0LCBJIHNob3VsZCBjb25maXJtIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBieSBjaGVja2luZyBzeW1ib2xzIGluIGBjaDkyMDBgLCBhbmQgYGNoOTIwMF9iaW5kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQuIE9rYXksIGxldCYjMzk7cyBhbHNvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgdG8gc2VlIGlmIGBjaDkyMDBfYmluZGAgb3Igb3RoZXIgZnVuY3Rpb25zIGluIGBjaDkyMDAuY2AgZXhpc3QuIEp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIFRoZXJlZm9yZSwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtOTgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6OTk6c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTEwMC1cdFx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTM3OnN0YXRpYyBpbnQgY29udHJvbF93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTc2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE3NzpzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xNzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xOTYtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTk3OnN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTk4LVx0XHRcdCAgICAgIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxNS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyMTY6c3RhdGljIGludCBjaDkyMDBfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjE3LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjI4LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIyOTpzdGF0aWMgdm9pZCBjaDkyMDBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzMC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI0Ny1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNDg6c3RhdGljIHN0cnVjdCBza19idWZmICpjaDkyMDBfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI0OS1cdFx0XHRcdCAgICAgICBnZnBfdCBmbGFncylcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjg4LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjI4OTpzdGF0aWMgaW50IGNoOTIwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjkwLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzA2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjMwNzpzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzA4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM3LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjMzODpzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM5LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9NDE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjaDkyMDBfcHJvZHVjdHNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyNzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjgtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM9NDI5PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzctXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDM4Om1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQzOS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0NDA6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1FpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDQxOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE0CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgY2g5MjAwX2JpbmRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gTXkgYEZvY3VzU3ltYm9sc2AgbGlzdCBjb25maXJtcyB0aGlzLCBleHBsaWNpdGx5IGNhbGxpbmcgb3V0IGBjaDkyMDBfYmluZGAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgd2l0aCBgVVNCX05FVF9DSDkyMDBgIGFuZCBgVVNCX1VTQk5FVGAsIHRlbGxzIG1lIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1ha2UgdGhpcyByZWxldmFudC4gVGhpcyBsb29rcyBsaWtlIGEgVVNCIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBDSDkyMDAuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgYFdvcnRoRnV6emluZz10cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc29saWQuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGVycm9yIGNoZWNraW5nIGluIGBjaDkyMDBfYmluZGAuIENydWNpYWxseSwgdGhpcyBoYXBwZW5zIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWVzIG9mIGBjb250cm9sX3dyaXRlYC4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiB0aGUgQ0g5MjAwIFVTQiBldGhlcm5ldCBkcml2ZXIgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24g4oCTIGV4YWN0bHkgdGhlIHNvcnQgb2Ygc2V0dXAgSSB1c2UgaW4gbXkgZnV6emluZyBlbnZpcm9ubWVudHMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRldmljZSBlbnVtZXJhdGlvbiBhbmQgcHJvYmluZywgd2hpY2ggbWVhbnMgSSBjYW4gdHJpZ2dlciB0aGlzIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZzogYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoZSByZWFzb25pbmcgY2hlY2tzIG91dCBwZXJmZWN0bHksIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBsaW5raW5nIHRoaXMgdG8gdGhlIHJlbGV2YW50IGRyaXZlci4gRXZlcnl0aGluZyBhbGlnbnMuIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9DSDkyMDAmIzM0OywKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoOTIwMF9iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyB0byBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSwgbW9kaWZ5aW5nIGVycm9yLWhhbmRsaW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGRyaXZlciBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGggVVNCIGRldmljZSBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNrcyBmb3IgcmV0dmFsIGFmdGVyIGVhY2ggY29udHJvbF93cml0ZSgpIGNhbGwgaW4gY2g5MjAwX2JpbmQoKS4gU3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGRhdGFbMl0pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NWM3MmI2M2Q3ZmJmNDEyYTg3YzYxYWIxZWQ0YzExN2Q3NTRiZDhlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwppbmRleCBhMjA2ZmZhNzZmMWI5Li5jZTJlNjJmODVjM2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCkBAIC0zNjAsMzIgJiM0MzszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCWRhdGFbMV0gPSAweDBGOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweEEwOwogCWRhdGFbMV0gPSAweDkwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsCiAJCQkgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHgzMDsKIAlkYXRhWzFdID0gMHgwMDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDE3OwogCWRhdGFbMV0gPSAweEQ4OwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCwKIAkJCSAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCS8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqLwogCWRhdGFbMF0gPSAweDAxOwogCWRhdGFbMV0gPSAweDAwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsCiAJCQkgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHg1RjsKIAlkYXRhWzFdID0gMHgwRDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLAogCQkJICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7CiAJZXRoX2h3X2FkZHJfc2V0KGRldi0mZ3Q7bmV0LCBhZGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIENIOTIwMCBEcml2ZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBzbyBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdDogbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byB0aGUgYGRpZmZgIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBCdXQganVzdCB0aGUgZGlmZiBpc24mIzM5O3QgZW5vdWdoLCBJIG5lZWQgY29udGV4dC4gSSYjMzk7bGwgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gR290dGEgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSBhIGJpdCBmdXJ0aGVyLiBMZXQmIzM5O3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gYGNoOTIwMF9iaW5kYC4gSSBuZWVkIHRvIHJldmlldyBpdCBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBIb3BlZnVsbHkgdGhpcyB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhcyB0byB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRpbnQgcmV0dmFsID0gMDtcbiAzNDE6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzUwOlx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1NDpcdFxuIDM1NTpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU2Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NzpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTg6XHRcbiAzNTk6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM2MDpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzYxOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYyOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYzOlx0XHRpZiAocmV0dmFsKVxuIDM2NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM2NTpcdFxuIDM2NjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzY3Olx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjg6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY5Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcwOlx0XHRpZiAocmV0dmFsKVxuIDM3MTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZGF0YVswXSA9IDB4MzA7XG4gMzc0Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzNzU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIDM3NjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NzpcdFx0aWYgKHJldHZhbClcbiAzNzg6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzk6XHRcbiAzODA6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM4MTpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzgyOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzgzOlx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg0Olx0XHRpZiAocmV0dmFsKVxuIDM4NTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM4NjpcdFxuIDM4NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzg4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzODk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM5MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzOTE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTI6XHRcdGlmIChyZXR2YWwpXG4gMzkzOlx0XHRcdHJldHVybiByZXR2YWw7XG4gMzk0Olx0XG4gMzk1Olx0XHRkYXRhWzBdID0gMHg1RjtcbiAzOTY6XHRcdGRhdGFbMV0gPSAweDBEO1xuIDM5NzpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiAzOTg6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTk6XHRcdGlmIChyZXR2YWwpXG4gNDAwOlx0XHRcdHJldHVybiByZXR2YWw7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiA0MDM6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdHJldHVybiByZXR2YWw7XG4gNDA2Olx0fVxuIDQwNzpcdFxuIDQwODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gNDA5Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiA0MTA6XHRcdC5mbGFncyA9IEZMQUdfRVRIRVIsXG4gNDExOlx0XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuIDQxMjpcdFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxuIDQxMzpcdFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxuIDQxNDpcdFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG4gNDE1Olx0XHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxuIDQxNjpcdFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXG4gNDE3Olx0fTtcbiA0MTg6XHRcbiA0MTk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjaDkyMDBfYmluZGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBjaDkyMDBfYmluZGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIEFoLCByaWdodCwgSSBzZWUuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBhZGRpbmcgY2hlY2tzIGFmdGVyIHRob3NlIGBjb250cm9sX3dyaXRlKC4uLilgIGNhbGxzLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZTsgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBVU0IgZHJpdmVycyB3aGVyZSB0aGluZ3MgY2FuIGdvIHNpZGV3YXlzIG1vcmUgb2Z0ZW4gdGhhbiBub3QuIE5vdywgYmVmb3JlIEkgZ2l2ZSB0aGlzIHRoZSBncmVlbiBsaWdodCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbiBpdHNlbGYsIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYW5kIGFsc28gZG91YmxlLWNoZWNrIGhvdyBpdOKAmXMgYmVpbmcgdXNlZC4gQW5kIGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIHF1aWNrbHkgcmVmcmVzaCBteXNlbGYgb24gaG93IGBnZXRfbWFjX2FkZHJlc3NgIGlzIHVzZWQgaGVyZSB0b28uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMgZm9yIGJvdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFxuICA0MTpcdCNkZWZpbmUgTUFDX1JFR19DVFJMIDY0XG4gIDQyOlx0I2RlZmluZSBNQUNfUkVHX1NUQVRVUyA2NlxuICA0MzpcdCNkZWZpbmUgTUFDX1JFR19JTlRFUlJVUFRfTUFTSyA2OFxuICA0NDpcdCNkZWZpbmUgTUFDX1JFR19QSFlfQ09NTUFORCA3MFxuICA0NTpcdCNkZWZpbmUgTUFDX1JFR19QSFlfREFUQSA3MlxuICA0NjpcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0wgNzRcbiAgNDc6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVElPTl9NIDc2XG4gIDQ4Olx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fSCA3OFxuICA0OTpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0wgODBcbiAgNTA6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMSA4MlxuICA1MTpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00yIDg0XG4gIDUyOlx0I2RlZmluZSBNQUNfUkVHX0hBU0hfSCA4NlxuICA1MzpcdCNkZWZpbmUgTUFDX1JFR19USFJFU0hPTEQgODhcbiAgNTQ6XHQjZGVmaW5lIE1BQ19SRUdfRklGT19ERVBUSCA5MFxuICA1NTpcdCNkZWZpbmUgTUFDX1JFR19QQVVTRSA5MlxuICA1NjpcdCNkZWZpbmUgTUFDX1JFR19GTE9XX0NPTlRST0wgOTRcbiAgNTc6XHRcbiAgNTg6XHQvKiBDb250cm9sIHJlZ2lzdGVyIGJpdHNcbiAgNTk6XHQgKlxuICA2MDpcdCAqIE5vdGU6IGJpdHMgMTMgYW5kIDE1IGFyZSByZXNlcnZlZFxuICA2MTpcdCAqL1xuICA2MjpcdCNkZWZpbmUgTE9PUEJBQ0tcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDE0KVxuICA2MzpcdCNkZWZpbmUgQkFTRTEwMFhcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEyKVxuICA2NDpcdCNkZWZpbmUgTUJQU18xMFx0XHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxMSlcbiAgNjU6XHQjZGVmaW5lIERVUExFWF9NT0RFXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxMClcbiAgNjY6XHQjZGVmaW5lIFBBVVNFX0ZSQU1FXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA5KVxuICA2NzpcdCNkZWZpbmUgUFJPTUlTQ1VPVVNcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDgpXG4gIDY4Olx0I2RlZmluZSBNVUxUSUNBU1RcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDcpXG4gIDY5Olx0I2RlZmluZSBCUk9BRENBU1RcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDYpXG4gIDcwOlx0I2RlZmluZSBIQVNIXHRcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDUpXG4gIDcxOlx0I2RlZmluZSBBUFBFTkRfUEFEXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA0KVxuICA3MjpcdCNkZWZpbmUgQVBQRU5EX0NSQ1x0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMylcbiAgNzM6XHQjZGVmaW5lIFRSQU5TTUlUVEVSX0FDVElPTlx0KDB4MDEgXHUwMDNjXHUwMDNjIDIpXG4gIDc0Olx0I2RlZmluZSBSRUNFSVZFUl9BQ1RJT05cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEpXG4gIDc1Olx0I2RlZmluZSBETUFfQUNUSU9OXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAwKVxuICA3NjpcdFxuICA3NzpcdC8qIFN0YXR1cyByZWdpc3RlciBiaXRzXG4gIDc4Olx0ICpcbiAgNzk6XHQgKiBOb3RlOiBiaXRzIDctMTUgYXJlIHJlc2VydmVkXG4gIDgwOlx0ICovXG4gIDgxOlx0I2RlZmluZSBBTElHTk1FTlRcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDYpXG4gIDgyOlx0I2RlZmluZSBGSUZPX09WRVJfUlVOXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA1KVxuICA4MzpcdCNkZWZpbmUgRklGT19VTkRFUl9SVU5cdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDQpXG4gIDg0Olx0I2RlZmluZSBSWF9FUlJPUlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMylcbiAgODU6XHQjZGVmaW5lIFJYX0NPTVBMRVRFXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAyKVxuICA4NjpcdCNkZWZpbmUgVFhfRVJST1JcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDEpXG4gIDg3Olx0I2RlZmluZSBUWF9DT01QTEVURVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgODg6XHRcbiAgODk6XHQvKiBGSUZPIGRlcHRoIHJlZ2lzdGVyIGJpdHNcbiAgOTA6XHQgKlxuICA5MTpcdCAqIE5vdGU6IGJpdHMgNiBhbmQgMTQgYXJlIHJlc2VydmVkXG4gIDkyOlx0ICovXG4gIDkzOlx0XG4gIDk0Olx0I2RlZmluZSBFVEhfVFhCRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTUpXG4gIDk1Olx0I2RlZmluZSBFVE5fVFhfRklGT19ERVBUSFx0KDB4MDEgXHUwMDNjXHUwMDNjIDgpXG4gIDk2Olx0I2RlZmluZSBFVEhfUlhCRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNylcbiAgOTc6XHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgOTg6XHRcbiAgOTk6XHRzdGF0aWMgaW50IGNvbnRyb2xfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgY2g5MjAwLmNgIChMaW5lcyAxMDAtMjAwKSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTAwIHRocm91Z2ggMjAwLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgcGl2b3RhbCwgbWF5YmUgaW5pdGlhbGl6YXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgb3IgZW5kcG9pbnQgc2V0dXAuIEkmIzM5O20gaG9waW5nIEkgY2FuIGdldCB0aGUgY29udGV4dCBJIG5lZWQuIFRoaXMgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgVVNCIGludGVyYWN0aW9uIHdpdGggdGhlIENIOTIwMCBjaGlwc2V0IGlzIGRlZmluZWQsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bGwgbmVlZCB0byByZWNvZ25pemUgdGhpcyBhcmVhLiBJJiMzOTttIHNjYW5uaW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucywgc3RydWN0IGluaXRpYWxpemF0aW9ucywgb3IgcG90ZW50aWFsbHksIGEgc3RhdGUgbWFjaGluZSBkZWZpbml0aW9uLiBJJiMzOTtsbCBiZSB3YXRjaGluZyB0byBwaWNrIG91dCBhbnkgcG90ZW50aWFsIGJ1ZmZlciBhbGxvY2F0aW9uLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIG9yIGV2ZW4gYSBiYXNpYyBjb21tYW5kIG9yIGRhdGEgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbi4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYW50aWNpcGF0aW5nIGxvdy1sZXZlbCBVU0IgZGVzY3JpcHRvciBwYXJzaW5nLCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXF1ZW5jZSwgb3IgbWF5YmUgZXZlbiB0aGUgaW5pdGlhbCBzZXR1cCBvZiBETUEgdHJhbnNmZXJzIGlmIHRoZSBkZXZpY2UgbGV2ZXJhZ2VzIHRoZW0uIExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdFx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlLFxuIDEwMTpcdFx0XHRcdHVuc2lnbmVkIHNob3J0IGluZGV4LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLFxuIDEwMjpcdFx0XHRcdGludCB0aW1lb3V0KVxuIDEwMzpcdHtcbiAxMDQ6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XG4gMTA1Olx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcbiAxMDY6XHRcdGludCBlcnIgPSAwO1xuIDEwNzpcdFxuIDEwODpcdFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9SRUFEKVxuIDEwOTpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUik7XG4gMTEwOlx0XHRlbHNlXG4gMTExOlx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxMTI6XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UpO1xuIDExMzpcdFxuIDExNDpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxuXCYjMzQ7LFxuIDExNTpcdFx0XHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xuIDExNjpcdFxuIDExNzpcdFx0YnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiAxMTg6XHRcdGlmICghYnVmKSB7XG4gMTE5Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTIwOlx0XHRcdGdvdG8gZXJyX291dDtcbiAxMjE6XHRcdH1cbiAxMjI6XHRcbiAxMjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxMjQ6XHRcdFx0XHQgICAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDEyNTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTI2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTI3Olx0XHRpZiAoZXJyID09IHNpemUpXG4gMTI4Olx0XHRcdG1lbWNweShkYXRhLCBidWYsIHNpemUpO1xuIDEyOTpcdFx0ZWxzZSBpZiAoZXJyIFx1MDAzZT0gMClcbiAxMzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAxMzE6XHRcdGtmcmVlKGJ1Zik7XG4gMTMyOlx0XG4gMTMzOlx0ZXJyX291dDpcbiAxMzQ6XHRcdHJldHVybiBlcnI7XG4gMTM1Olx0fVxuIDEzNjpcdFxuIDEzNzpcdHN0YXRpYyBpbnQgY29udHJvbF93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCxcbiAxMzg6XHRcdFx0XHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxuIDEzOTpcdFx0XHRcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcbiAxNDA6XHR7XG4gMTQxOlx0XHR1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMO1xuIDE0MjpcdFx0dW5zaWduZWQgY2hhciByZXF1ZXN0X3R5cGU7XG4gMTQzOlx0XHRpbnQgZXJyID0gMDtcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfV1JJVEUpXG4gMTQ2Olx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTQ3Olx0XHRcdFx0XHRVU0JfUkVDSVBfT1RIRVIpO1xuIDE0ODpcdFx0ZWxzZVxuIDE0OTpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuIDE1MDpcdFx0XHRcdFx0VVNCX1JFQ0lQX0RFVklDRSk7XG4gMTUxOlx0XG4gMTUyOlx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0OyVzKCkgaW5kZXg9MHglMDJ4IHNpemU9JWRcXG5cJiMzNDssXG4gMTUzOlx0XHRcdCAgIF9fZnVuY19fLCBpbmRleCwgc2l6ZSk7XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoZGF0YSkge1xuIDE1NjpcdFx0XHRidWYgPSBrbWVtZHVwKGRhdGEsIHNpemUsIEdGUF9LRVJORUwpO1xuIDE1NzpcdFx0XHRpZiAoIWJ1Zikge1xuIDE1ODpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTU5Olx0XHRcdFx0Z290byBlcnJfb3V0O1xuIDE2MDpcdFx0XHR9XG4gMTYxOlx0XHR9XG4gMTYyOlx0XG4gMTYzOlx0XHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVx1MDAzZXVkZXYsXG4gMTY0Olx0XHRcdFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cdTAwM2V1ZGV2LCAwKSxcbiAxNjU6XHRcdFx0XHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxuIDE2NjpcdFx0XHRcdCAgICAgIHRpbWVvdXQpO1xuIDE2NzpcdFx0aWYgKGVyciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGVyciBcdTAwM2Mgc2l6ZSlcbiAxNjg6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAxNjk6XHRcdGtmcmVlKGJ1Zik7XG4gMTcwOlx0XG4gMTcxOlx0XHRyZXR1cm4gMDtcbiAxNzI6XHRcbiAxNzM6XHRlcnJfb3V0OlxuIDE3NDpcdFx0cmV0dXJuIGVycjtcbiAxNzU6XHR9XG4gMTc2Olx0XG4gMTc3Olx0c3RhdGljIGludCBjaDkyMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG4gMTc4Olx0e1xuIDE3OTpcdFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGdldF9tYWNfYWRkcmVzc2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGdldF9tYWNfYWRkcmVzc2Agbm93LCBzcGVjaWZpY2FsbHkgd2l0aGluIGxpbmVzIDI1MC0zNDAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCBhbm90aGVyIG5ldHdvcmsgZnVuY3Rpb24uJiMzNDsgR2l2ZW4gdGhlIGNvbnRleHQgSSBhc3N1bWUgaXQgaXMgbmV0d29yay9PUyByZWxhdGVkLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggcmV0cmlldmluZyBhIG1hY2hpbmUmIzM5O3MgTWVkaWEgQWNjZXNzIENvbnRyb2wgKE1BQykgYWRkcmVzcy4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgcHJldHR5IGludm9sdmVkIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiB0cnlpbmcgdG8gZW5zdXJlIGNyb3NzLXBsYXRmb3JtIGNvbXBhdGliaWxpdHkuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgbmV0d29yayBpbnRlcmZhY2UgbmFtaW5nIGNvbnZlbnRpb25zIGFjcm9zcyB2YXJpb3VzIE9TZXMuIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBgaWZjb25maWdgLCBgaXAgYWRkcmAgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gdGhlIGZyYW1ld29yaz8gSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXkmIzM5O3JlIHJlbHlpbmcgb24gZXh0ZXJuYWwgdG9vbHMgb3IgbW9yZSBuYXRpdmUgc3lzdGVtIGNhbGxzIGZvciB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIGVycm9yczsgYSBmYWlsZWQgTUFDIGFkZHJlc3MgcmV0cmlldmFsIGNhbiBjYXNjYWRlIGludG8gbGFyZ2VyIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBGaW5hbGx5LCBhcmUgdGhleSBjYWNoaW5nIGl0PyBPciBpcyBpdCByZXRyZWl2ZWQgb24gZXZlcnkgY2FsbD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0aWYgKGxpbmspIHtcbiAyNDE6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXHUwMDNlbmV0KTtcbiAyNDI6XHRcdFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX0xJTktfUkVTRVQpO1xuIDI0MzpcdFx0fSBlbHNlIHtcbiAyNDQ6XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2LVx1MDAzZW5ldCk7XG4gMjQ1Olx0XHR9XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNDk6XHRcdFx0XHRcdCAgICAgICBnZnBfdCBmbGFncylcbiAyNTA6XHR7XG4gMjUxOlx0XHRpbnQgaSA9IDA7XG4gMjUyOlx0XHRpbnQgbGVuID0gMDtcbiAyNTM6XHRcdGludCB0eF9vdmVyaGVhZCA9IDA7XG4gMjU0Olx0XG4gMjU1Olx0XHR0eF9vdmVyaGVhZCA9IDB4NDA7XG4gMjU2Olx0XG4gMjU3Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDI1ODpcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIHR4X292ZXJoZWFkKSkge1xuIDI1OTpcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDI2MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNjE6XHRcdH1cbiAyNjI6XHRcbiAyNjM6XHRcdF9fc2tiX3B1c2goc2tiLCB0eF9vdmVyaGVhZCk7XG4gMjY0Olx0XHQvKiB1c2JuZXQgYWRkcyBwYWRkaW5nIGlmIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHBhY2tldCBzaXplXG4gMjY1Olx0XHQgKiBpZiBzbywgYWRqdXN0IGxlbmd0aCB2YWx1ZSBpbiBoZWFkZXJcbiAyNjY6XHRcdCAqL1xuIDI2NzpcdFx0aWYgKChza2ItXHUwMDNlbGVuICUgZGV2LVx1MDAzZW1heHBhY2tldCkgPT0gMClcbiAyNjg6XHRcdFx0bGVuJiM0MzsmIzQzOztcbiAyNjk6XHRcbiAyNzA6XHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gbGVuO1xuIDI3MTpcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBsZW4gXHUwMDNlXHUwMDNlIDg7XG4gMjcyOlx0XHRza2ItXHUwMDNlZGF0YVsyXSA9IDB4MDA7XG4gMjczOlx0XHRza2ItXHUwMDNlZGF0YVszXSA9IDB4ODA7XG4gMjc0Olx0XG4gMjc1Olx0XHRmb3IgKGkgPSA0OyBpIFx1MDAzYyA0ODsgaSYjNDM7JiM0MzspXG4gMjc2Olx0XHRcdHNrYi1cdTAwM2VkYXRhW2ldID0gMHgwMDtcbiAyNzc6XHRcbiAyNzg6XHRcdHNrYi1cdTAwM2VkYXRhWzQ4XSA9IGxlbjtcbiAyNzk6XHRcdHNrYi1cdTAwM2VkYXRhWzQ5XSA9IGxlbiBcdTAwM2VcdTAwM2UgODtcbiAyODA6XHRcdHNrYi1cdTAwM2VkYXRhWzUwXSA9IDB4MDA7XG4gMjgxOlx0XHRza2ItXHUwMDNlZGF0YVs1MV0gPSAweDgwO1xuIDI4MjpcdFxuIDI4MzpcdFx0Zm9yIChpID0gNTI7IGkgXHUwMDNjIDY0OyBpJiM0MzsmIzQzOylcbiAyODQ6XHRcdFx0c2tiLVx1MDAzZWRhdGFbaV0gPSAweDAwO1xuIDI4NTpcdFxuIDI4NjpcdFx0cmV0dXJuIHNrYjtcbiAyODc6XHR9XG4gMjg4Olx0XG4gMjg5Olx0c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI5MDpcdHtcbiAyOTE6XHRcdGludCBsZW4gPSAwO1xuIDI5MjpcdFx0aW50IHJ4X292ZXJoZWFkID0gMDtcbiAyOTM6XHRcbiAyOTQ6XHRcdHJ4X292ZXJoZWFkID0gNjQ7XG4gMjk1Olx0XG4gMjk2Olx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XG4gMjk3Olx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXG5cJiMzNDspO1xuIDI5ODpcdFx0XHRyZXR1cm4gMDtcbiAyOTk6XHRcdH1cbiAzMDA6XHRcbiAzMDE6XHRcdGxlbiA9IChza2ItXHUwMDNlZGF0YVtza2ItXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVx1MDAzZWRhdGFbc2tiLVx1MDAzZWxlbiAtIDE1XSBcdTAwM2NcdTAwM2MgOCk7XG4gMzAyOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMzAzOlx0XG4gMzA0Olx0XHRyZXR1cm4gMTtcbiAzMDU6XHR9XG4gMzA2Olx0XG4gMzA3Olx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuIDMwODpcdHtcbiAzMDk6XHRcdGludCBlcnIgPSAwO1xuIDMxMDpcdFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcbiAzMTE6XHRcdGludCByZF9tYWNfbGVuID0gMDtcbiAzMTI6XHRcbiAzMTM6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXM6XFxuXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcblwmIzM0OywgX19mdW5jX18sXG4gMzE0Olx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxuIDMxNTpcdFx0XHQgICBsZTE2X3RvX2NwdShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xuIDMxNjpcdFxuIDMxNzpcdFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcbiAzMTg6XHRcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXG4gMzE5Olx0XHRcdFx0XHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJpc2tzIGluIHRoZSBgY2g5MjAwX2JpbmRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgYGNvbnRyb2xfd3JpdGVgLiBJIHNlZSB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIDAgdW5sZXNzIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiBga21lbWR1cGAsIG9yIGlmIGBlcnIgJmx0OyAwYCBvY2N1cnMgaW4gYHVzYl9jb250cm9sX21zZ2Agd2hpY2ggaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3JpZ2luYWwgY29kZSBpZ25vcmVzIHRoZSBlcnJvciBjb2RlLCB1bmxlc3MgdGhlIGBrbWVtZHVwYCBmYWlscy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGEgYnVnPyBCdXQsIHRoZW4gSSBzZWUgdGhhdCwgbGF0ZXIgb24sIGluIGBjaDkyMDBfYmluZGAsIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgICppcyogY2hlY2tlZC4gU28sIHRoZXJlIGlzIHNvbWUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGNhbGwgc3RhY2ssIGF0IGxlYXN0LgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCBgY2g5MjAwX2JpbmRgLiBXZSBpbml0aWFsaXplIGBkYXRhYCBvbiB0aGUgc3RhY2suIFR3byBieXRlcyBhcmUgYXNzaWduZWQgdmFsdWVzIDB4MDEgYW5kIDB4MEYsIHdoaWNoIGFyZSB0aGVuIHdyaXR0ZW4gYnkgYGNvbnRyb2xfd3JpdGVgLiBUaGUgY3JpdGljYWwgY2hlY2sgaXMgd2hldGhlciBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciAod2hpY2ggaXQgZG9lcyBub3QsIHVubGVzcyBrbWVtZHVwIGZhaWxzIG9yIGBlcnIgJmx0OyAwYCBvY2N1cnMpLiBJZiBpdCBkb2VzLCBgY2g5MjAwX2JpbmRgIHJldHVybnMgdGhlIGVycm9yLCB3aGljaCBpcyBnb29kLiBJZiBpdCBzdWNjZWVkcywgdGhlIGNvZGUgcHJvY2VlZHMgdG8gd3JpdGUgdGhlIG5leHQgcmVnaXN0ZXJzLiBGaW5hbGx5LCBpdCBjYWxscyBgZ2V0X21hY19hZGRyZXNzYCBhbmQgdGhlbiBgZXRoX2h3X2FkZHJfc2V0YC4KCk5vdywgdGhlIGNlbnRyYWwgcXVlc3Rpb246IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBoZXJlPwoKVGhlIGtleSBoZXJlIGlzIGBhZGRyYCB3aXRoaW4gYGNoOTIwMF9iaW5kYCwgd2hpY2ggaXMgZGVjbGFyZWQgYXMgYHU4IGFkZHJbRVRIX0FMRU5dO2AuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgdG8gYGFkZHJgLiBTbyBJIHdpbGwgZXhhbWluZSB3aGF0IGhhcHBlbnMgaW4gYGdldF9tYWNfYWRkcmVzc2AuIFRoZSBNQUMgYWRkcmVzcyBpcyB0aGVuIHNldCBieSBgZXRoX2h3X2FkZHJfc2V0YC4KCk9rYXksIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZ2V0X21hY19hZGRyZXNzYCB0byBkZXRlcm1pbmUgaWYgYGFkZHJgIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZXRyaWV2ZWQuIFRoZSBwYXRjaCBsb29rcyBzYWZlIHNvIGZhciwgYnV0IEkgbXVzdCBrbm93IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0X21hY19hZGRyZXNzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwNTpcdH1cbiAzMDY6XHRcbiAzMDc6XHRzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4gMzA4Olx0e1xuIDMwOTpcdFx0aW50IGVyciA9IDA7XG4gMzEwOlx0XHR1bnNpZ25lZCBjaGFyIG1hY19hZGRyWzB4MDZdO1xuIDMxMTpcdFx0aW50IHJkX21hY19sZW4gPSAwO1xuIDMxMjpcdFxuIDMxMzpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslczpcXG5cXHR1c2JuZXQgVklEOiUweCBQSUQ6JTB4XFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiAzMTQ6XHRcdFx0ICAgbGUxNl90b19jcHUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvciksXG4gMzE1Olx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7XG4gMzE2Olx0XG4gMzE3Olx0XHRtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO1xuIDMxODpcdFx0cmRfbWFjX2xlbiA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCxcbiAzMTk6XHRcdFx0XHRcdCAgTUFDX1JFR19TVEFUSU9OX0wsIG1hY19hZGRyLCAweDAyLFxuIDMyMDpcdFx0XHRcdFx0ICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMTpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fTSxcbiAzMjI6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDIsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzIzOlx0XHRyZF9tYWNfbGVuICYjNDM7PSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9ILFxuIDMyNDpcdFx0XHRcdFx0ICAgbWFjX2FkZHIgJiM0MzsgNCwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMjU6XHRcdGlmIChyZF9tYWNfbGVuICE9IEVUSF9BTEVOKVxuIDMyNjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDMyNzpcdFxuIDMyODpcdFx0ZGF0YVswXSA9IG1hY19hZGRyWzVdO1xuIDMyOTpcdFx0ZGF0YVsxXSA9IG1hY19hZGRyWzRdO1xuIDMzMDpcdFx0ZGF0YVsyXSA9IG1hY19hZGRyWzNdO1xuIDMzMTpcdFx0ZGF0YVszXSA9IG1hY19hZGRyWzJdO1xuIDMzMjpcdFx0ZGF0YVs0XSA9IG1hY19hZGRyWzFdO1xuIDMzMzpcdFx0ZGF0YVs1XSA9IG1hY19hZGRyWzBdO1xuIDMzNDpcdFxuIDMzNTpcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHR9XG4gMzM3Olx0XG4gMzM4Olx0c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDMzOTpcdHtcbiAzNDA6XHRcdGludCByZXR2YWwgPSAwO1xuIDM0MTpcdFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xuIDM0MjpcdFx0dTggYWRkcltFVEhfQUxFTl07XG4gMzQzOlx0XG4gMzQ0Olx0XHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1MwoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiA4NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gSXNzdWVzIERldGVjdGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBnZXRfbWFjX2FkZHJlc3NgLCBJIHNlZSB0aGF0IGBtYWNfYWRkcmAgaXMgemVyb2VkIG91dCByaWdodCBhd2F5IHdpdGggYG1lbXNldGAsIHRoZW4gYGNvbnRyb2xfcmVhZGAgaXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgYnVmZmVyIGlmIGBjb250cm9sX3JlYWRgIHJldHVybnMgdGhlIGV4cGVjdGVkIHNpemUuIFNvLCB0aGUgYGRhdGFgIGJ1ZmZlciBnZXRzIGl0cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWFkLCBhbmQgaXQgaXMgYSBrbm93biBnb29kIHZhbHVlLgoKTm93LCBpbiBgY2g5MjAwX2JpbmRgLCB0aGUgYGRhdGFgIGFycmF5IGlzICpleHBsaWNpdGx5KiBpbml0aWFsaXplZCB3aXRoIHNwZWNpZmljIGJ5dGUgdmFsdWVzIGJlZm9yZSBlYWNoIGBjb250cm9sX3dyaXRlYCBjYWxsLiBUaGlzIGlzIGNydWNpYWwuIEVhY2ggZWxlbWVudCBvZiBgZGF0YWAgZ2V0cyBhIGRlZmluZWQgdmFsdWUgYmVmb3JlIGl0JiMzOTtzIHVzZWQuIFRoZSBwYXRjaCBtYWlubHkgYWRkcyBlcnJvciBjaGVja3MgYWZ0ZXIgdGhvc2UgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLCBidXQgdGhlIGRhdGEgaXRzZWxmIGlzIGFsd2F5cyBpbml0aWFsaXplZC4gVGhlIGBkYXRhYCBidWZmZXIgaXMgYWxzbyBhIHN0YWNrIHZhcmlhYmxlLCBzbyBpdCBpcyBrbm93bi4KClNpbmNlIGFsbCB2YXJpYWJsZXMsIGxpa2UgYGRhdGFgIGFuZCBgYWRkcmAsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNhZ2UsIHRoZXJlJiMzOTtzIG5vIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBtZWFucyB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5vKiBuZXcgS01TQU4tcmVsZXZhbnQgaXNzdWVzLCBhbmQgaXQgbWFrZXMgdGhlIGNvZGUgc2FmZXIuCgpUaGlzIHBhdGNoIGlzIG9ubHkgZXJyb3IgY2hlY2tpbmcgdGhlIGBjb250cm9sX3dyaXRlYCByZXR1cm4gdmFsdWVzLCBub3QgbW9kaWZ5aW5nIHRoZSBkYXRhIHVzYWdlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzLCBsaWtlIEtBU0FOLCBoYW5kbGUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuIEJlY2F1c2UgdGhlIHN0YWNrIGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55IHJpc2tzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTaW5jZSBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGFuZCB0aGUgZGF0YSBpcyByZWFkIGluIGEgY29udHJvbGxlZCB3YXksIHdlIGRvbiYjMzk7dCBoYXZlIEtNU0FOIHByb2JsZW1zLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IG1hcmsgYE5lZWRzS01TQU5gIGFzIGBmYWxzZWAuIEl0IGlzIGEgZ29vZCBleGFtcGxlIG9mICpub3QqIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MjYuMDg2Njk2OTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMTI4MzU3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja3MgZm9yIHJldHZhbCBhZnRlciBlYWNoIGNvbnRyb2xfd3JpdGUoKSBjYWxsIGluIGNoOTIwMF9iaW5kKCkuIFN0YWNrIHZhcmlhYmxlcyAoc3VjaCBhcyBkYXRhWzJdKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBjb250cm9sX3dyaXRlKCksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhY2Nlc3NlZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NToyNi4wODY3MDMxOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzEyMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ1YzcyYjYzZDdmYmY0MTJhODdjNjFhYjFlZDRjMTE3ZDc1NGJkOGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5jZTJlNjJmODVjM2Q0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGRhdGFbMV0gPSAweDBGO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4QTA7XFxuIFxcdGRhdGFbMV0gPSAweDkwO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldHZhbClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdGRhdGFbMF0gPSAweDMwO1xcbiBcXHRkYXRhWzFdID0gMHgwMDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4MTc7XFxuIFxcdGRhdGFbMV0gPSAweEQ4O1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuIFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXFxuIFxcdGRhdGFbMF0gPSAweDAxO1xcbiBcXHRkYXRhWzFdID0gMHgwMDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcXG4gXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwpXFxuK1xcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcbiBcXHRkYXRhWzBdID0gMHg1RjtcXG4gXFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXFxuIFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XFxuIFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjI2LjY5NDc4MDc0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc4MDg2NzE1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1YzcyYjYzZDdmYmY0MTJhODdjNjFhYjFlZDRjMTE3ZDc1NGJkOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjU1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5jZTJlNjJmODVjM2Q0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRkYXRhWzFdID0gMHgwRjtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHhBMDtcbiBcdGRhdGFbMV0gPSAweDkwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHgzMDtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MTc7XG4gXHRkYXRhWzFdID0gMHhEODtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiBcdGRhdGFbMF0gPSAweDAxO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDVGO1xuIFx0ZGF0YVsxXSA9IDB4MEQ7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xuIFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MjYuNjk0NzgzMDExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTcwNzg1MzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFVTQiBOZXR3b3JrIERyaXZlciBJc3N1ZSoqXG5cblJpZ2h0LCB0aGUgZGlmZiBpcyBwb2ludGluZyBtZSBkaXJlY3RseSB0byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYC4gVGhhdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0aG9yb3VnaGx5IGluc3BlY3QgdGhlIGRyaXZlcidzIGNvZGUgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZmlsZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUg4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBtb2R1bGUncyBwdXJwb3NlLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0J3MgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhpcyBpcyBhIFVTQiBuZXR3b3JrIGRyaXZlciwgaXQgYnJpbmdzIHRvIG1pbmQgc2V2ZXJhbCByZWxldmFudCBhcmVhcy4gV2Ugb2Z0ZW4gc2VlIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMgZW11bGF0ZWQgdGhyb3VnaCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zLCBvciB0aGUgdXNlIG9mIFJhdyBHYWRnZXQsIHZoY2ksIGFuZCBlc3BlY2lhbGx5IFVTQiBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaG9zZSBhcmUgYWxsIHRoaW5ncyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgdG8gbWluZC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgZW11bGF0aW9uIGFuZCBmdXp6aW5nIGNvbnRleHRzIGluIG1pbmQgYXMgSSdtIGNoZWNraW5nIHRoZSBkcml2ZXIuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYW5kIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjM2LjQwMjY0MDIwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3NzE3MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2g5MjAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz02MTQ9Y29uZmlnIFVTQl9ORVRfQ0g5MjAwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjItXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo2MjM6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2g5MjAwLlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfVVNCX05FVF9DRENfTUJJTSlcXHQrPSBjZGNfbWJpbS5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19VU0JfTkVUX0NIOTIwMClcXHQrPSBjaDkyMDAub1xcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZS00My1vYmotJChDT05GSUdfVVNCX05FVF9BUUMxMTEpXFx0Kz0gYXFjMTExLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0xMzc9c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE3Ni1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTc3OnN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xNzgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE5Ni1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MTk3OnN0YXRpYyB2b2lkIGNoOTIwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTE5OC1cXHRcXHRcXHQgICAgICBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxNS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjE2OnN0YXRpYyBpbnQgY2g5MjAwX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIyOC1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjI5OnN0YXRpYyB2b2lkIGNoOTIwMF9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjQ3LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoyNDg6c3RhdGljIHN0cnVjdCBza19idWZmICpjaDkyMDBfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yNDktXFx0XFx0XFx0XFx0ICAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI4OC1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mjg5OnN0YXRpYyBpbnQgY2g5MjAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMDc9c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzNy1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzM4OnN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNDgtXFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM0OTpcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNTA6XFx0ZGV2LVxcdTAwM2VtaWkubWRpb193cml0ZSA9IGNoOTIwMF9tZGlvX3dyaXRlO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNTEtXFx0ZGV2LVxcdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MDctXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQwODpzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MDktXFx0LmRlc2NyaXB0aW9uID0gXFxcIkNIOTIwMCBVU0IgdG8gTmV0d29yayBBZGFwdG9yXFxcIixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDEwLVxcdC5mbGFncyA9IEZMQUdfRVRIRVIsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxMTpcXHQuYmluZCA9IGNoOTIwMF9iaW5kLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTI6XFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTM6XFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTQ6XFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxNTpcXHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MTY6XFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQxNy19O1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MTgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyMC1cXHR7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyMS1cXHQgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MiksXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQyMjpcXHQgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmNoOTIwMF9pbmZvLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjMtXFx0IH0sXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDI2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0Mjc6TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNoOTIwMF9wcm9kdWN0cyk7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyOC1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI5OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0MzA6XFx0Lm5hbWUgPSBcXFwiY2g5MjAwXFxcIixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDMxOlxcdC5pZF90YWJsZSA9IGNoOTIwMF9wcm9kdWN0cyxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDMyLVxcdC5wcm9iZSA9IHVzYm5ldF9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzctXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzODptb2R1bGVfdXNiX2RyaXZlcihjaDkyMDBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTozNi41MDc0MTY2NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk5MDU4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgVVNCIG5ldHdvcmtpbmcgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCwgcmlnaHQgYXJvdW5kIGxpbmUgNjE0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRlY2lzaW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBVU0IgbmV0d29yayBkcml2ZXJzIGFyZSBsaWtlbHkgbWFkZS4gSSdtIGd1ZXNzaW5nIHRoYXQgSSdsbCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZhcmlvdXMgVVNCIG5ldHdvcmsgZGV2aWNlcyBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcywgbGlrZSB3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzIG5lZWQgdG8gYmUgYWN0aXZlLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgaG93IHRoZXkncmUgbWFuYWdlZCBmcm9tIGEgYnVpbGQtdGltZSBwZXJzcGVjdGl2ZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2Ugd2hpY2ggVVNCIG5ldHdvcmsgZGV2aWNlcyBnZXQgYnVpbHQgaW50byB0aGUga2VybmVsIHZlcnN1cyBiZWluZyBsb2FkYWJsZSBtb2R1bGVzLCBhbmQgYWxzbyBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBhc3BlY3RzIG9mIHRoZSBrZXJuZWwncyBVU0IgbmV0d29ya2luZyBzdGFjay4gS25vd2luZyB0aGF0IHdpbGwgaGVscCBtZSB3aXRoIFtpbnNlcnQgcmVsZXZhbnQgZXhwZXJ0LWxldmVsIGFjdGl2aXR5LCBlLmcuLCBjdXN0b21pemluZyBrZXJuZWwgYnVpbGRzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSwgdHJvdWJsZXNob290aW5nIGRldmljZSBjb21wYXRpYmlsaXR5LCBldGMuXVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MzguODA2NDc2NDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjEwOlxcdFxcdCAgNEcgbW9kZW0gZnJvbSBWZXJpem9uOlxcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHQgIGh0dHA6Ly91YnVudHVmb3J1bXMub3JnL3Nob3dwb3N0LnBocD9wPTEwNTg5NjQ3XFx1MDAyNnBvc3Rjb3VudD0xN1xcbiA2MTM6XFx0XFxuIDYxNDpcXHRjb25maWcgVVNCX05FVF9DSDkyMDBcXG4gNjE1OlxcdFxcdHRyaXN0YXRlIFxcXCJRaW5nSGVuZyBDSDkyMDAgVVNCIGV0aGVybmV0IHN1cHBvcnRcXFwiXFxuIDYxNjpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gNjE3OlxcdFxcdHNlbGVjdCBNSUlcXG4gNjE4OlxcdFxcdGhlbHBcXG4gNjE5OlxcdFxcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgVVNCIGV0aGVybmV0IGFkYXB0ZXIgd2l0aCBhIFFpbkhlbmdcXG4gNjIwOlxcdFxcdCAgQ0g5MjAwIGNoaXBzZXQuXFxuIDYyMTpcXHRcXG4gNjIyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDYyMzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjaDkyMDAuXFxuIDYyNDpcXHRcXG4gNjI1OlxcdGNvbmZpZyBVU0JfTkVUX0FRQzExMVxcbiA2MjY6XFx0XFx0dHJpc3RhdGUgXFxcIkFxdWFudGlhIEFRdGlvbiBVU0IgdG8gNS8yLjVHYkUgQ29udHJvbGxlcnMgc3VwcG9ydFxcXCJcXG4gNjI3OlxcdFxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbiA2Mjg6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDYyOTpcXHRcXHRoZWxwXFxuIDYzMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQXF1YW50aWEgQVF0aW9uIFVTQlxcbiA2MzE6XFx0XFx0ICBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiBBUUMxMTFVL0FRQzExMiBjaGlwcy5cXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0ICBUaGlzIGRyaXZlciBzaG91bGQgd29yayB3aXRoIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZGV2aWNlczpcXG4gNjM0OlxcdFxcdCAgKiBBcXVhbnRpYSBBUXRpb24gVVNCIHRvIDVHYkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6MzguODA2NTU0OTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDk0OTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ0g5MjAwIERyaXZlciBCaW5kIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgY2g5MjAwYCBVU0IgZHJpdmVyIGJpbmRzIHRvIGEgZGV2aWNlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIEknbSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGBiaW5kYCBmdW5jdGlvbiwgb3IgYXQgbGVhc3QgdGhhdCdzIHdoZXJlIEkgYXNzdW1lIHRoZSBhY3Rpb24gc3RhcnRzLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDM0MCB0aHJvdWdoIDQwNS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGxvZ2ljIG9mIGRldmljZSBhc3NvY2lhdGlvbiB3aXRoaW4gdGhhdCBkcml2ZXIuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgY29tZXMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQxLjA2MTUwOTIzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNSxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDMzOTpcXHR7XFxuIDM0MDpcXHRcXHRpbnQgcmV0dmFsID0gMDtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcXG4gMzQyOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG4gMzUwOlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcXG4gMzUxOlxcdFxcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX210dSA9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiAzNTY6XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDI0ICogNjQgKyAxNjtcXG4gMzU3OlxcdFxcdG1paV9ud2F5X3Jlc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbWlpKTtcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM2MDpcXHRcXHRkYXRhWzFdID0gMHgwRjtcXG4gMzYxOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG4gMzYyOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNjM6XFx0XFx0aWYgKHJldHZhbClcXG4gMzY0OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGRhdGFbMF0gPSAweEEwO1xcbiAzNjc6XFx0XFx0ZGF0YVsxXSA9IDB4OTA7XFxuIDM2ODpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxcbiAzNjk6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3MDpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNzE6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0ZGF0YVswXSA9IDB4MzA7XFxuIDM3NDpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG4gMzc1OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxcbiAzNzY6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM3NzpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGF0YVswXSA9IDB4MTc7XFxuIDM4MTpcXHRcXHRkYXRhWzFdID0gMHhEODtcXG4gMzgyOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG4gMzgzOlxcdFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODQ6XFx0XFx0aWYgKHJldHZhbClcXG4gMzg1OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xcbiAzODg6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM4OTpcXHRcXHRkYXRhWzFdID0gMHgwMDtcXG4gMzkwOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuIDM5MTpcXHRcXHRcXHRcXHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzkyOlxcdFxcdGlmIChyZXR2YWwpXFxuIDM5MzpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzOTQ6XFx0XFxuIDM5NTpcXHRcXHRkYXRhWzBdID0gMHg1RjtcXG4gMzk2OlxcdFxcdGRhdGFbMV0gPSAweDBEO1xcbiAzOTc6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG4gMzk4OlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzOTk6XFx0XFx0aWYgKHJldHZhbClcXG4gNDAwOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiA0MDM6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gNDA5OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQxLjA2NDMyMDcyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NDQ3ODQ1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gdGhlc2UgVVNCIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBVU0JfVVNCTkVUYCBhbmQgdGhlIGBVU0JfTkVUX0NIOTIwMGAgbW9kdWxlLiBXaGVyZSBkb2VzIHRoaXMgaW5mb3JtYXRpb24gcmVzaWRlPyBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgdGhlIGBLY29uZmlnYCBmaWxlLCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC91c2IvYC4gVGhhdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSBmb3IgdGhlc2Uga2luZCBvZiBjb25maWd1cmF0aW9uIGRldGFpbHMuIFRpbWUgdG8gY3JhY2sgdGhhdCBvcGVuIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IGBVU0JfVVNCTkVUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NDIuOTA5MTA4MjE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTcxMDM0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9VU0JORVRcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTEzPWNvbmZpZyBVU0JfTEFONzhYWFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjEzMjpjb25maWcgVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMy1cXHR0cmlzdGF0ZSBcXFwiTXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQzLjMwNjIxODk1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU0NDY0MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgVVNCX1VTQk5FVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYFVTQl9VU0JORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBwcm9wZXJseS4gTm8gcG9pbnQgaW4gZW5hYmxpbmcgaXQgaWYgaXQncyBnb3Qgc29tZSB1bm1ldCByZXF1aXJlbWVudHMsIHJpZ2h0PyBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwIHdoZW4gSSdtIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLCBidXQsIHN0aWxsLCBpdCBpcyB0aGUgZmlyc3Qgc3RlcCBJIHRha2UgaW4gcmVzb2x2aW5nIFVTQiByZWxhdGVkIG5ldHdvcmsgZHJpdmVyIHByb2JsZW1zLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgY29yZSBmZWF0dXJlcyBhcmUgcHJvcGVybHkgZW5hYmxlZCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbiBwcm9wZXIgb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTo0NS4xNjA2ODc0NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuIDE0NTpcXHRcXHQgICAgXFxcIkxhcGxpbmtcXFwiIHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcXG4gMTQ2OlxcdFxcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXFxuIDE0OTpcXHRcXHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjQ1LjE2MDgxMzIzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDUwMjkxOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ0g5MjAwIFVTQiBOZXR3b3JrIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBVU0JfTkVUX0NIOTIwMGAgc2l0dWF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyDigJMgaXQgcmVsaWVzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBwdWxscyBpbiBhIHdob2xlIHNsZXcgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMgbGlrZSBgTkVUREVWSUNFU2AsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYFVTQmAgc3VwcG9ydC4gSSdtIHVzdWFsbHkgZmluZSBqdXN0IGVuYWJsaW5nIGBVU0JfTkVUX0NIOTIwMGAsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIHBhcmVudCBjb25maWdzIGFyZSBzdGFuZGFyZC4gU28sIGBVU0JfTkVUX0NIOTIwMGAgYW5kIGBVU0JfVVNCTkVUYCBhcmUgbXkgbWFpbiBmb2N1cy5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBjaDkyMDBfYmluZGAgcmVhY2hhYmxlPyBUaGUgYW5zd2VyIGFwcGVhcnMgdG8gYmUgeWVzLiBJbiBteSBzeXprYWxsZXIvdmlydHVhbCBlbnZpcm9ubWVudCwgdGhlIFVTQiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSB1c2luZyB0aGUgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBzZXR1cCwgZW11bGF0ZXMgVVNCIGRldmljZXMgbWF0Y2hpbmcgYFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpYC4gV2hlbiBvbmUgb2YgdGhlc2UgdmlydHVhbCBkZXZpY2VzIGlzIFwicGx1Z2dlZCBpbixcIiB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIGNhbGxzIGBpbmZvLVx1MDAzZWJpbmQoZGV2LCB1ZGV2KWAsIHdoaWNoIGlzIGBjaDkyMDBfYmluZGAuXG5cblByZXZpb3VzbHksIEkgc2VlIHRoYXQgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgYGNvbnRyb2xfd3JpdGVgIGNhbGxzIHdpdGhpbiBgY2g5MjAwX2JpbmRgIHdlcmUgbm90IGNoZWNrZWQuIFRoYXQncyBhIHBvdGVudGlhbCB3ZWFrIHBvaW50LiBOb3csIGlmIGFueSBvZiB0aG9zZSBgY29udHJvbF93cml0ZWAgY2FsbHMgZmFpbCwgZHVlIHRvIGEgc2ltdWxhdGVkIFVTQiBmYXVsdCwgdGltZW91dCwgdW5wbHVnIGV2ZW50LCBvciBhbiBpc3N1ZSB3aXRoIHRoZSBkZXNjcmlwdG9yIG9yIGVuZHBvaW50cywgYGNoOTIwMF9iaW5kYCB3aWxsIGFib3J0IGVhcmx5LCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gVGhpcyBjaGFuZ2VzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgaW5pdGlhbGl6YXRpb24gZmxvdyBzaWduaWZpY2FudGx5LCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgZnV6emluZyBzdHJhdGVneS5cblxuVGltZSB0byBkZXRlcm1pbmUgaWYgaXQncyB3b3J0aCBmdXp6aW5nISBJdCdzIHJlYWNoYWJsZSwgY2hlY2suIE5vdywgdGhlIGBXb3J0aEZ1enppbmdgIHBhcnQuIFVTQiBkZXZpY2VzIGFyZSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIgdmlhIHJhd19nYWRnZXQgLyBkdW1teV9oY2QgLyB2dXNiLCB0aGlzIGNoZWNrcyBvdXQuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSB0aGUgc3ltYm9sczogYGNoOTIwMF9iaW5kYCBhbmQgYGNvbnRyb2xfd3JpdGVgLiBMZXQncyBjb25maXJtIHRoYXQgYGNoOTIwMF9iaW5kYCBpcyB0aGUgcHJpbWFyeSBvbmUgaGVyZS4gV2FpdCwgaXMgYGNoOTIwMF9iaW5kYCBzdGF0aWMgb3Igbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBpdCdzIHN0YXRpYy4gQnV0LCBJIHNob3VsZCBjb25maXJtIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBieSBjaGVja2luZyBzeW1ib2xzIGluIGBjaDkyMDBgLCBhbmQgYGNoOTIwMF9iaW5kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQuIE9rYXksIGxldCdzIGFsc28gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSB0byBzZWUgaWYgYGNoOTIwMF9iaW5kYCBvciBvdGhlciBmdW5jdGlvbnMgaW4gYGNoOTIwMC5jYCBleGlzdC4gSnVzdCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBUaGVyZWZvcmUsIGxldCdzIHF1aWNrbHkgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTo1MC42MTExMDg5MDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTEzMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtOTgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjk5OnN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTAwLVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwgdW5zaWduZWQgc2hvcnQgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzoxMzc6c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzgtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xNzYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE3NzpzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xOTYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjE5NzpzdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xOTgtXFx0XFx0XFx0ICAgICAgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTUtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIxNjpzdGF0aWMgaW50IGNoOTIwMF9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMjgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjIyOTpzdGF0aWMgdm9pZCBjaDkyMDBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI0Ny1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjQ4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjQ5LVxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yODgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjI4OTpzdGF0aWMgaW50IGNoOTIwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTI5MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzA2LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozMDc6c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTMzNy1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzM4OnN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz00MTk9c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTQyNi1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDI3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjaDkyMDBfcHJvZHVjdHMpO1xcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MjgtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTQyOT1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2g5MjAwX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy00MzctXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjQzODptb2R1bGVfdXNiX2RyaXZlcihjaDkyMDBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtNDM5LVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzo0NDA6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJRaW5IZW5nIENIOTIwMCBVU0IgTmV0d29yayBkZXZpY2VcXFwiKTtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6NDQxOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTAuNzA0MjI2MTg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDAzOTU5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQncyBjYWxsaW5nIGBjaDkyMDBfYmluZGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgY29uZmlybXMgdGhpcywgZXhwbGljaXRseSBjYWxsaW5nIG91dCBgY2g5MjAwX2JpbmRgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdpdGggYFVTQl9ORVRfQ0g5MjAwYCBhbmQgYFVTQl9VU0JORVRgLCB0ZWxscyBtZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtYWtlIHRoaXMgcmVsZXZhbnQuIFRoaXMgbG9va3MgbGlrZSBhIFVTQiBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgQ0g5MjAwLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgaGVyZSBpcyBgV29ydGhGdXp6aW5nPXRydWVgLCBhbmQgdGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBzb2xpZC4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgZXJyb3IgY2hlY2tpbmcgaW4gYGNoOTIwMF9iaW5kYC4gQ3J1Y2lhbGx5LCB0aGlzIGhhcHBlbnMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZXMgb2YgYGNvbnRyb2xfd3JpdGVgLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBDSDkyMDAgVVNCIGV0aGVybmV0IGRyaXZlciBhbmQgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiDigJMgZXhhY3RseSB0aGUgc29ydCBvZiBzZXR1cCBJIHVzZSBpbiBteSBmdXp6aW5nIGVudmlyb25tZW50cy4gV2UncmUgdGFsa2luZyBhYm91dCBkZXZpY2UgZW51bWVyYXRpb24gYW5kIHByb2JpbmcsIHdoaWNoIG1lYW5zIEkgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldC5cblxuTGV0J3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmc6IGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGUgcmVhc29uaW5nIGNoZWNrcyBvdXQgcGVyZmVjdGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24sIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgbGlua2luZyB0aGlzIHRvIHRoZSByZWxldmFudCBkcml2ZXIuIEV2ZXJ5dGhpbmcgYWxpZ25zLiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxNCwiT3V0cHV0VG9rZW5zIjoxMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTQuMzQ0NjI0OTU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4ODIzODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoOTIwMF9iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyB0byBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSwgbW9kaWZ5aW5nIGVycm9yLWhhbmRsaW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGRyaXZlciBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGggVVNCIGRldmljZSBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgdG8gY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCksIG1vZGlmeWluZyBlcnJvci1oYW5kbGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRoIFVTQiBkZXZpY2UgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NTo1NC41MDM0NTY4MzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzk2MDY1OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTQuNTAzOTQ3NDg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzA3OTU1NzA2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NWM3MmI2M2Q3ZmJmNDEyYTg3YzYxYWIxZWQ0YzExN2Q3NTRiZDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1NToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuaW5kZXggYTIwNmZmYTc2ZjFiOS4uY2UyZTYyZjg1YzNkNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5AQCAtMzYwLDMyICszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0ZGF0YVsxXSA9IDB4MEY7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4QTA7XG4gXHRkYXRhWzFdID0gMHg5MDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MzA7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDE3O1xuIFx0ZGF0YVsxXSA9IDB4RDg7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gXHRkYXRhWzBdID0gMHgwMTtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHg1RjtcbiBcdGRhdGFbMV0gPSAweDBEO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiBcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjU0LjUwMzk0ODgwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjYxNDgxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgdGhlIENIOTIwMCBEcml2ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMsIHNvIGZpcnN0IHRoaW5nJ3MgZmlyc3Q6IGxldCdzIGp1bXAgcmlnaHQgaW50byB0aGUgYGRpZmZgIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIEJ1dCBqdXN0IHRoZSBkaWZmIGlzbid0IGVub3VnaCwgSSBuZWVkIGNvbnRleHQuIEknbGwgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gR290dGEgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGV4cGxvcmUgYSBiaXQgZnVydGhlci4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gYGNoOTIwMF9iaW5kYC4gSSBuZWVkIHRvIHJldmlldyBpdCBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEhvcGVmdWxseSB0aGlzIHdpbGwgZ2l2ZSBtZSBzb21lIGNsdWVzIGFzIHRvIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTU6NTguNzY1NDMzNjc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQwOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiAzNDE6XFx0XFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xcbiAzNDI6XFx0XFx0dTggYWRkcltFVEhfQUxFTl07XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDM0NTpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNDY6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuIDM0OTpcXHRcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3JlYWQgPSBjaDkyMDBfbWRpb19yZWFkO1xcbiAzNTA6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb193cml0ZSA9IGNoOTIwMF9tZGlvX3dyaXRlO1xcbiAzNTE6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0ZGV2LVxcdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRkZXYtXFx1MDAzZWhhcmRfbXR1ID0gZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuIDM1NjpcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMjQgKiA2NCArIDE2O1xcbiAzNTc6XFx0XFx0bWlpX253YXlfcmVzdGFydChcXHUwMDI2ZGV2LVxcdTAwM2VtaWkpO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzYwOlxcdFxcdGRhdGFbMV0gPSAweDBGO1xcbiAzNjE6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfVEhSRVNIT0xELCBkYXRhLFxcbiAzNjI6XFx0XFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM2MzpcXHRcXHRpZiAocmV0dmFsKVxcbiAzNjQ6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0ZGF0YVswXSA9IDB4QTA7XFxuIDM2NzpcXHRcXHRkYXRhWzFdID0gMHg5MDtcXG4gMzY4OlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuIDM2OTpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzcwOlxcdFxcdGlmIChyZXR2YWwpXFxuIDM3MTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRkYXRhWzBdID0gMHgzMDtcXG4gMzc0OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzNzU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIDM3NjpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc3OlxcdFxcdGlmIChyZXR2YWwpXFxuIDM3ODpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRkYXRhWzBdID0gMHgxNztcXG4gMzgxOlxcdFxcdGRhdGFbMV0gPSAweEQ4O1xcbiAzODI6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRkxPV19DT05UUk9MLFxcbiAzODM6XFx0XFx0XFx0XFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM4NDpcXHRcXHRpZiAocmV0dmFsKVxcbiAzODU6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXFxuIDM4ODpcXHRcXHRkYXRhWzBdID0gMHgwMTtcXG4gMzg5OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzOTA6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcXG4gMzkxOlxcdFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzOTI6XFx0XFx0aWYgKHJldHZhbClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzOTY6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM5NzpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzOTg6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5OTpcXHRcXHRpZiAocmV0dmFsKVxcbiA0MDA6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XFxuIDQwMzpcXHRcXHRldGhfaHdfYWRkcl9zZXQoZGV2LVxcdTAwM2VuZXQsIGFkZHIpO1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0MDY6XFx0fVxcbiA0MDc6XFx0XFxuIDQwODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvID0ge1xcbiA0MDk6XFx0XFx0LmRlc2NyaXB0aW9uID0gXFxcIkNIOTIwMCBVU0IgdG8gTmV0d29yayBBZGFwdG9yXFxcIixcXG4gNDEwOlxcdFxcdC5mbGFncyA9IEZMQUdfRVRIRVIsXFxuIDQxMTpcXHRcXHQuYmluZCA9IGNoOTIwMF9iaW5kLFxcbiA0MTI6XFx0XFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxcbiA0MTM6XFx0XFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxcbiA0MTQ6XFx0XFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXFxuIDQxNTpcXHRcXHQubGlua19yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbiA0MTY6XFx0XFx0LnJlc2V0ID0gY2g5MjAwX2xpbmtfcmVzZXQsXFxuIDQxNzpcXHR9O1xcbiA0MTg6XFx0XFxuIDQxOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU1OjU4Ljc2NTU4MzM1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzY1NTM3Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNoOTIwMF9iaW5kYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBjaDkyMDBfYmluZGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgaW4gYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AuIEFoLCByaWdodCwgSSBzZWUuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGFkZGluZyBjaGVja3MgYWZ0ZXIgdGhvc2UgYGNvbnRyb2xfd3JpdGUoLi4uKWAgY2FsbHMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIFVTQiBkcml2ZXJzIHdoZXJlIHRoaW5ncyBjYW4gZ28gc2lkZXdheXMgbW9yZSBvZnRlbiB0aGFuIG5vdC4gTm93LCBiZWZvcmUgSSBnaXZlIHRoaXMgdGhlIGdyZWVuIGxpZ2h0LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uIGl0c2VsZiwganVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBhbmQgYWxzbyBkb3VibGUtY2hlY2sgaG93IGl04oCZcyBiZWluZyB1c2VkLiBBbmQgaXQgd291bGRuJ3QgaHVydCB0byBxdWlja2x5IHJlZnJlc2ggbXlzZWxmIG9uIGhvdyBgZ2V0X21hY19hZGRyZXNzYCBpcyB1c2VkIGhlcmUgdG9vLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMgZm9yIGJvdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU2OjA4LjUzMTEyNDI5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0I2RlZmluZSBNQUNfUkVHX0NUUkwgNjRcXG4gIDQyOlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUVVMgNjZcXG4gIDQzOlxcdCNkZWZpbmUgTUFDX1JFR19JTlRFUlJVUFRfTUFTSyA2OFxcbiAgNDQ6XFx0I2RlZmluZSBNQUNfUkVHX1BIWV9DT01NQU5EIDcwXFxuICA0NTpcXHQjZGVmaW5lIE1BQ19SRUdfUEhZX0RBVEEgNzJcXG4gIDQ2OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0wgNzRcXG4gIDQ3OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX00gNzZcXG4gIDQ4OlxcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0ggNzhcXG4gIDQ5OlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0wgODBcXG4gIDUwOlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00xIDgyXFxuICA1MTpcXHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMiA4NFxcbiAgNTI6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfSCA4NlxcbiAgNTM6XFx0I2RlZmluZSBNQUNfUkVHX1RIUkVTSE9MRCA4OFxcbiAgNTQ6XFx0I2RlZmluZSBNQUNfUkVHX0ZJRk9fREVQVEggOTBcXG4gIDU1OlxcdCNkZWZpbmUgTUFDX1JFR19QQVVTRSA5MlxcbiAgNTY6XFx0I2RlZmluZSBNQUNfUkVHX0ZMT1dfQ09OVFJPTCA5NFxcbiAgNTc6XFx0XFxuICA1ODpcXHQvKiBDb250cm9sIHJlZ2lzdGVyIGJpdHNcXG4gIDU5OlxcdCAqXFxuICA2MDpcXHQgKiBOb3RlOiBiaXRzIDEzIGFuZCAxNSBhcmUgcmVzZXJ2ZWRcXG4gIDYxOlxcdCAqL1xcbiAgNjI6XFx0I2RlZmluZSBMT09QQkFDS1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDE0KVxcbiAgNjM6XFx0I2RlZmluZSBCQVNFMTAwWFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDEyKVxcbiAgNjQ6XFx0I2RlZmluZSBNQlBTXzEwXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuICA2NTpcXHQjZGVmaW5lIERVUExFWF9NT0RFXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTApXFxuICA2NjpcXHQjZGVmaW5lIFBBVVNFX0ZSQU1FXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgOSlcXG4gIDY3OlxcdCNkZWZpbmUgUFJPTUlTQ1VPVVNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgNjg6XFx0I2RlZmluZSBNVUxUSUNBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiAgNjk6XFx0I2RlZmluZSBCUk9BRENBU1RcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAgNzA6XFx0I2RlZmluZSBIQVNIXFx0XFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gIDcxOlxcdCNkZWZpbmUgQVBQRU5EX1BBRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDQpXFxuICA3MjpcXHQjZGVmaW5lIEFQUEVORF9DUkNcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgNzM6XFx0I2RlZmluZSBUUkFOU01JVFRFUl9BQ1RJT05cXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAyKVxcbiAgNzQ6XFx0I2RlZmluZSBSRUNFSVZFUl9BQ1RJT05cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiAgNzU6XFx0I2RlZmluZSBETUFfQUNUSU9OXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDc2OlxcdFxcbiAgNzc6XFx0LyogU3RhdHVzIHJlZ2lzdGVyIGJpdHNcXG4gIDc4OlxcdCAqXFxuICA3OTpcXHQgKiBOb3RlOiBiaXRzIDctMTUgYXJlIHJlc2VydmVkXFxuICA4MDpcXHQgKi9cXG4gIDgxOlxcdCNkZWZpbmUgQUxJR05NRU5UXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNilcXG4gIDgyOlxcdCNkZWZpbmUgRklGT19PVkVSX1JVTlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDUpXFxuICA4MzpcXHQjZGVmaW5lIEZJRk9fVU5ERVJfUlVOXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gIDg0OlxcdCNkZWZpbmUgUlhfRVJST1JcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgODU6XFx0I2RlZmluZSBSWF9DT01QTEVURVxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICA4NjpcXHQjZGVmaW5lIFRYX0VSUk9SXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4gIDg3OlxcdCNkZWZpbmUgVFhfQ09NUExFVEVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAgODg6XFx0XFxuICA4OTpcXHQvKiBGSUZPIGRlcHRoIHJlZ2lzdGVyIGJpdHNcXG4gIDkwOlxcdCAqXFxuICA5MTpcXHQgKiBOb3RlOiBiaXRzIDYgYW5kIDE0IGFyZSByZXNlcnZlZFxcbiAgOTI6XFx0ICovXFxuICA5MzpcXHRcXG4gIDk0OlxcdCNkZWZpbmUgRVRIX1RYQkRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gIDk1OlxcdCNkZWZpbmUgRVROX1RYX0ZJRk9fREVQVEhcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA4KVxcbiAgOTY6XFx0I2RlZmluZSBFVEhfUlhCRFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICA5NzpcXHQjZGVmaW5lIEVUSF9SWF9GSUZPX0RFUFRIXFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDk4OlxcdFxcbiAgOTk6XFx0c3RhdGljIGludCBjb250cm9sX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NjowOC41MzEyNjAyNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA2ODM5Njg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNoOTIwMC5jYCAoTGluZXMgMTAwLTIwMCkqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTAwIHRocm91Z2ggMjAwLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgcGl2b3RhbCwgbWF5YmUgaW5pdGlhbGl6YXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgb3IgZW5kcG9pbnQgc2V0dXAuIEknbSBob3BpbmcgSSBjYW4gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC4gVGhpcyBhcmVhIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBVU0IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQ0g5MjAwIGNoaXBzZXQgaXMgZGVmaW5lZCwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgZnVuY3Rpb24gY2FsbHMuIEknbGwgbmVlZCB0byByZWNvZ25pemUgdGhpcyBhcmVhLiBJJ20gc2Nhbm5pbmcgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLCBvciBwb3RlbnRpYWxseSwgYSBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb24uIEknbGwgYmUgd2F0Y2hpbmcgdG8gcGljayBvdXQgYW55IHBvdGVudGlhbCBidWZmZXIgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBldmVuIGEgYmFzaWMgY29tbWFuZCBvciBkYXRhIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGhpbiB0aGlzIHNwZWNpZmljIHNlY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYW50aWNpcGF0aW5nIGxvdy1sZXZlbCBVU0IgZGVzY3JpcHRvciBwYXJzaW5nLCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXF1ZW5jZSwgb3IgbWF5YmUgZXZlbiB0aGUgaW5pdGlhbCBzZXR1cCBvZiBETUEgdHJhbnNmZXJzIGlmIHRoZSBkZXZpY2UgbGV2ZXJhZ2VzIHRoZW0uIExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTQ5OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTY6MTEuNTk5NjYwNDczWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciByZXF1ZXN0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSxcXG4gMTAxOlxcdFxcdFxcdFxcdHVuc2lnbmVkIHNob3J0IGluZGV4LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLFxcbiAxMDI6XFx0XFx0XFx0XFx0aW50IHRpbWVvdXQpXFxuIDEwMzpcXHR7XFxuIDEwNDpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMO1xcbiAxMDU6XFx0XFx0dW5zaWduZWQgY2hhciByZXF1ZXN0X3R5cGU7XFxuIDEwNjpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9SRUFEKVxcbiAxMDk6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfT1RIRVIpO1xcbiAxMTA6XFx0XFx0ZWxzZVxcbiAxMTE6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxMTI6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxMTU6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0YnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTE4OlxcdFxcdGlmICghYnVmKSB7XFxuIDExOTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxMjA6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAxMjE6XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVxcdTAwM2V1ZGV2LFxcbiAxMjQ6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi1cXHUwMDNldWRldiwgMCksXFxuIDEyNTpcXHRcXHRcXHRcXHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxcbiAxMjY6XFx0XFx0XFx0XFx0ICAgICAgdGltZW91dCk7XFxuIDEyNzpcXHRcXHRpZiAoZXJyID09IHNpemUpXFxuIDEyODpcXHRcXHRcXHRtZW1jcHkoZGF0YSwgYnVmLCBzaXplKTtcXG4gMTI5OlxcdFxcdGVsc2UgaWYgKGVyciBcXHUwMDNlPSAwKVxcbiAxMzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTMxOlxcdFxcdGtmcmVlKGJ1Zik7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdGVycl9vdXQ6XFxuIDEzNDpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuIDEzODpcXHRcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbiAxMzk6XFx0XFx0XFx0XFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxcbiAxNDA6XFx0e1xcbiAxNDE6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcXG4gMTQyOlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xcbiAxNDM6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfV1JJVEUpXFxuIDE0NjpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX09USEVSKTtcXG4gMTQ4OlxcdFxcdGVsc2VcXG4gMTQ5OlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuIDE1MDpcXHRcXHRcXHRcXHRcXHRVU0JfUkVDSVBfREVWSUNFKTtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIiVzKCkgaW5kZXg9MHglMDJ4IHNpemU9JWRcXFxcblxcXCIsXFxuIDE1MzpcXHRcXHRcXHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRpZiAoZGF0YSkge1xcbiAxNTY6XFx0XFx0XFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTU3OlxcdFxcdFxcdGlmICghYnVmKSB7XFxuIDE1ODpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxNTk6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAxNjA6XFx0XFx0XFx0fVxcbiAxNjE6XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVxcdTAwM2V1ZGV2LFxcbiAxNjQ6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cXHUwMDNldWRldiwgMCksXFxuIDE2NTpcXHRcXHRcXHRcXHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgICAgdGltZW91dCk7XFxuIDE2NzpcXHRcXHRpZiAoZXJyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZXJyIFxcdTAwM2Mgc2l6ZSlcXG4gMTY4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDE2OTpcXHRcXHRrZnJlZShidWYpO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0ZXJyX291dDpcXG4gMTc0OlxcdFxcdHJldHVybiBlcnI7XFxuIDE3NTpcXHR9XFxuIDE3NjpcXHRcXG4gMTc3OlxcdHN0YXRpYyBpbnQgY2g5MjAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxcbiAxNzg6XFx0e1xcbiAxNzk6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTY6MTEuNTk5NzU4MzAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzI3NDE5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYGdldF9tYWNfYWRkcmVzc2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBnZXRfbWFjX2FkZHJlc3NgIG5vdywgc3BlY2lmaWNhbGx5IHdpdGhpbiBsaW5lcyAyNTAtMzQwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYW5vdGhlciBuZXR3b3JrIGZ1bmN0aW9uLlwiIEdpdmVuIHRoZSBjb250ZXh0IEkgYXNzdW1lIGl0IGlzIG5ldHdvcmsvT1MgcmVsYXRlZC4gVGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHJldHJpZXZpbmcgYSBtYWNoaW5lJ3MgTWVkaWEgQWNjZXNzIENvbnRyb2wgKE1BQykgYWRkcmVzcy4gVGhhdCdzIHVzdWFsbHkgYSBwcmV0dHkgaW52b2x2ZWQgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIHRyeWluZyB0byBlbnN1cmUgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eS4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZGlmZmVyZW50IG5ldHdvcmsgaW50ZXJmYWNlIG5hbWluZyBjb252ZW50aW9ucyBhY3Jvc3MgdmFyaW91cyBPU2VzLiBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQgYGlmY29uZmlnYCwgYGlwIGFkZHJgIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIHRvIHRoZSBmcmFtZXdvcms/IEknbSBjdXJpb3VzIGlmIHRoZXkncmUgcmVseWluZyBvbiBleHRlcm5hbCB0b29scyBvciBtb3JlIG5hdGl2ZSBzeXN0ZW0gY2FsbHMgZm9yIHRoaXMuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnM7IGEgZmFpbGVkIE1BQyBhZGRyZXNzIHJldHJpZXZhbCBjYW4gY2FzY2FkZSBpbnRvIGxhcmdlciBpc3N1ZXMgZG93biB0aGUgbGluZS4gRmluYWxseSwgYXJlIHRoZXkgY2FjaGluZyBpdD8gT3IgaXMgaXQgcmV0cmVpdmVkIG9uIGV2ZXJ5IGNhbGw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU2OjE0LjE3MjUwNTQxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdGlmIChsaW5rKSB7XFxuIDI0MTpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGRldi1cXHUwMDNlbmV0KTtcXG4gMjQyOlxcdFxcdFxcdHVzYm5ldF9kZWZlcl9rZXZlbnQoZGV2LCBFVkVOVF9MSU5LX1JFU0VUKTtcXG4gMjQzOlxcdFxcdH0gZWxzZSB7XFxuIDI0NDpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihkZXYtXFx1MDAzZW5ldCk7XFxuIDI0NTpcXHRcXHR9XFxuIDI0NjpcXHR9XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2g5MjAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMjQ5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBmbGFncylcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdGludCBpID0gMDtcXG4gMjUyOlxcdFxcdGludCBsZW4gPSAwO1xcbiAyNTM6XFx0XFx0aW50IHR4X292ZXJoZWFkID0gMDtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0dHhfb3ZlcmhlYWQgPSAweDQwO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gMjU4OlxcdFxcdGlmIChza2JfY293X2hlYWQoc2tiLCB0eF9vdmVyaGVhZCkpIHtcXG4gMjU5OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIDI2MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjYxOlxcdFxcdH1cXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0X19za2JfcHVzaChza2IsIHR4X292ZXJoZWFkKTtcXG4gMjY0OlxcdFxcdC8qIHVzYm5ldCBhZGRzIHBhZGRpbmcgaWYgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YgcGFja2V0IHNpemVcXG4gMjY1OlxcdFxcdCAqIGlmIHNvLCBhZGp1c3QgbGVuZ3RoIHZhbHVlIGluIGhlYWRlclxcbiAyNjY6XFx0XFx0ICovXFxuIDI2NzpcXHRcXHRpZiAoKHNrYi1cXHUwMDNlbGVuICUgZGV2LVxcdTAwM2VtYXhwYWNrZXQpID09IDApXFxuIDI2ODpcXHRcXHRcXHRsZW4rKztcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzBdID0gbGVuO1xcbiAyNzE6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzFdID0gbGVuIFxcdTAwM2VcXHUwMDNlIDg7XFxuIDI3MjpcXHRcXHRza2ItXFx1MDAzZWRhdGFbMl0gPSAweDAwO1xcbiAyNzM6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzNdID0gMHg4MDtcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0Zm9yIChpID0gNDsgaSBcXHUwMDNjIDQ4OyBpKyspXFxuIDI3NjpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbaV0gPSAweDAwO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRza2ItXFx1MDAzZWRhdGFbNDhdID0gbGVuO1xcbiAyNzk6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzQ5XSA9IGxlbiBcXHUwMDNlXFx1MDAzZSA4O1xcbiAyODA6XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzUwXSA9IDB4MDA7XFxuIDI4MTpcXHRcXHRza2ItXFx1MDAzZWRhdGFbNTFdID0gMHg4MDtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0Zm9yIChpID0gNTI7IGkgXFx1MDAzYyA2NDsgaSsrKVxcbiAyODQ6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhW2ldID0gMHgwMDtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMjg3OlxcdH1cXG4gMjg4OlxcdFxcbiAyODk6XFx0c3RhdGljIGludCBjaDkyMDBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0aW50IGxlbiA9IDA7XFxuIDI5MjpcXHRcXHRpbnQgcnhfb3ZlcmhlYWQgPSAwO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHRyeF9vdmVyaGVhZCA9IDY0O1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyByeF9vdmVyaGVhZCkpIHtcXG4gMjk3OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwidW5leHBlY3RlZCB0aW55IHJ4IGZyYW1lXFxcXG5cXFwiKTtcXG4gMjk4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyOTk6XFx0XFx0fVxcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRsZW4gPSAoc2tiLVxcdTAwM2VkYXRhW3NrYi1cXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVxcdTAwM2VkYXRhW3NrYi1cXHUwMDNlbGVuIC0gMTVdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbiAzMDI6XFx0XFx0c2tiX3RyaW0oc2tiLCBsZW4pO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRyZXR1cm4gMTtcXG4gMzA1OlxcdH1cXG4gMzA2OlxcdFxcbiAzMDc6XFx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbiAzMDg6XFx0e1xcbiAzMDk6XFx0XFx0aW50IGVyciA9IDA7XFxuIDMxMDpcXHRcXHR1bnNpZ25lZCBjaGFyIG1hY19hZGRyWzB4MDZdO1xcbiAzMTE6XFx0XFx0aW50IHJkX21hY19sZW4gPSAwO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiJXM6XFxcXG5cXFxcdHVzYm5ldCBWSUQ6JTB4IFBJRDolMHhcXFxcblxcXCIsIF9fZnVuY19fLFxcbiAzMTQ6XFx0XFx0XFx0ICAgbGUxNl90b19jcHUoZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSxcXG4gMzE1OlxcdFxcdFxcdCAgIGxlMTZfdG9fY3B1KGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGVzY3JpcHRvci5pZFByb2R1Y3QpKTtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcXG4gMzE4OlxcdFxcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXFxuIDMxOTpcXHRcXHRcXHRcXHRcXHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTY6MTQuMTcyNjUyNTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3ODAyNDM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJpc2tzIGluIHRoZSBgY2g5MjAwX2JpbmRgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgYGNvbnRyb2xfd3JpdGVgLiBJIHNlZSB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIDAgdW5sZXNzIHRoZXJlJ3MgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIGBrbWVtZHVwYCwgb3IgaWYgYGVyciBcdTAwM2MgMGAgb2NjdXJzIGluIGB1c2JfY29udHJvbF9tc2dgIHdoaWNoIGlzbid0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3JpZ2luYWwgY29kZSBpZ25vcmVzIHRoZSBlcnJvciBjb2RlLCB1bmxlc3MgdGhlIGBrbWVtZHVwYCBmYWlscy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgYSBidWc/IEJ1dCwgdGhlbiBJIHNlZSB0aGF0LCBsYXRlciBvbiwgaW4gYGNoOTIwMF9iaW5kYCwgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29udHJvbF93cml0ZWAgKmlzKiBjaGVja2VkLiBTbywgdGhlcmUgaXMgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgY2FsbCBzdGFjaywgYXQgbGVhc3QuXG5cbk9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCBgY2g5MjAwX2JpbmRgLiBXZSBpbml0aWFsaXplIGBkYXRhYCBvbiB0aGUgc3RhY2suIFR3byBieXRlcyBhcmUgYXNzaWduZWQgdmFsdWVzIDB4MDEgYW5kIDB4MEYsIHdoaWNoIGFyZSB0aGVuIHdyaXR0ZW4gYnkgYGNvbnRyb2xfd3JpdGVgLiBUaGUgY3JpdGljYWwgY2hlY2sgaXMgd2hldGhlciBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciAod2hpY2ggaXQgZG9lcyBub3QsIHVubGVzcyBrbWVtZHVwIGZhaWxzIG9yIGBlcnIgXHUwMDNjIDBgIG9jY3VycykuIElmIGl0IGRvZXMsIGBjaDkyMDBfYmluZGAgcmV0dXJucyB0aGUgZXJyb3IsIHdoaWNoIGlzIGdvb2QuIElmIGl0IHN1Y2NlZWRzLCB0aGUgY29kZSBwcm9jZWVkcyB0byB3cml0ZSB0aGUgbmV4dCByZWdpc3RlcnMuIEZpbmFsbHksIGl0IGNhbGxzIGBnZXRfbWFjX2FkZHJlc3NgIGFuZCB0aGVuIGBldGhfaHdfYWRkcl9zZXRgLlxuXG5Ob3csIHRoZSBjZW50cmFsIHF1ZXN0aW9uOiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgaGVyZT9cblxuVGhlIGtleSBoZXJlIGlzIGBhZGRyYCB3aXRoaW4gYGNoOTIwMF9iaW5kYCwgd2hpY2ggaXMgZGVjbGFyZWQgYXMgYHU4IGFkZHJbRVRIX0FMRU5dO2AuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgdG8gYGFkZHJgLiBTbyBJIHdpbGwgZXhhbWluZSB3aGF0IGhhcHBlbnMgaW4gYGdldF9tYWNfYWRkcmVzc2AuIFRoZSBNQUMgYWRkcmVzcyBpcyB0aGVuIHNldCBieSBgZXRoX2h3X2FkZHJfc2V0YC5cblxuT2theSwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYGdldF9tYWNfYWRkcmVzc2AgdG8gZGV0ZXJtaW5lIGlmIGBhZGRyYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmV0cmlldmVkLiBUaGUgcGF0Y2ggbG9va3Mgc2FmZSBzbyBmYXIsIGJ1dCBJIG11c3Qga25vdyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldF9tYWNfYWRkcmVzc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NjoxOS42NTA2ODEzOTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDU6XFx0fVxcbiAzMDY6XFx0XFxuIDMwNzpcXHRzdGF0aWMgaW50IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuIDMwODpcXHR7XFxuIDMwOTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMzEwOlxcdFxcdHVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbMHgwNl07XFxuIDMxMTpcXHRcXHRpbnQgcmRfbWFjX2xlbiA9IDA7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlczpcXFxcblxcXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIDMxNDpcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxcbiAzMTU6XFx0XFx0XFx0ICAgbGUxNl90b19jcHUoZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO1xcbiAzMTg6XFx0XFx0cmRfbWFjX2xlbiA9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdCAgTUFDX1JFR19TVEFUSU9OX0wsIG1hY19hZGRyLCAweDAyLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0ICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjE6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9NLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjM6XFx0XFx0cmRfbWFjX2xlbiArPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsIE1BQ19SRUdfU1RBVElPTl9ILFxcbiAzMjQ6XFx0XFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIgKyA0LCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzMjU6XFx0XFx0aWYgKHJkX21hY19sZW4gIT0gRVRIX0FMRU4pXFxuIDMyNjpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRkYXRhWzBdID0gbWFjX2FkZHJbNV07XFxuIDMyOTpcXHRcXHRkYXRhWzFdID0gbWFjX2FkZHJbNF07XFxuIDMzMDpcXHRcXHRkYXRhWzJdID0gbWFjX2FkZHJbM107XFxuIDMzMTpcXHRcXHRkYXRhWzNdID0gbWFjX2FkZHJbMl07XFxuIDMzMjpcXHRcXHRkYXRhWzRdID0gbWFjX2FkZHJbMV07XFxuIDMzMzpcXHRcXHRkYXRhWzVdID0gbWFjX2FkZHJbMF07XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdHJldHVybiBlcnI7XFxuIDMzNjpcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMzM5OlxcdHtcXG4gMzQwOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiAzNDE6XFx0XFx0dW5zaWduZWQgY2hhciBkYXRhWzJdO1xcbiAzNDI6XFx0XFx0dTggYWRkcltFVEhfQUxFTl07XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHJldHZhbCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjU2OjE5LjY1MDgyMTg1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjQ4NjcwMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIElzc3VlcyBEZXRlY3RlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGdldF9tYWNfYWRkcmVzc2AsIEkgc2VlIHRoYXQgYG1hY19hZGRyYCBpcyB6ZXJvZWQgb3V0IHJpZ2h0IGF3YXkgd2l0aCBgbWVtc2V0YCwgdGhlbiBgY29udHJvbF9yZWFkYCBpcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBidWZmZXIgaWYgYGNvbnRyb2xfcmVhZGAgcmV0dXJucyB0aGUgZXhwZWN0ZWQgc2l6ZS4gU28sIHRoZSBgZGF0YWAgYnVmZmVyIGdldHMgaXRzIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlYWQsIGFuZCBpdCBpcyBhIGtub3duIGdvb2QgdmFsdWUuXG5cbk5vdywgaW4gYGNoOTIwMF9iaW5kYCwgdGhlIGBkYXRhYCBhcnJheSBpcyAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgd2l0aCBzcGVjaWZpYyBieXRlIHZhbHVlcyBiZWZvcmUgZWFjaCBgY29udHJvbF93cml0ZWAgY2FsbC4gVGhpcyBpcyBjcnVjaWFsLiBFYWNoIGVsZW1lbnQgb2YgYGRhdGFgIGdldHMgYSBkZWZpbmVkIHZhbHVlIGJlZm9yZSBpdCdzIHVzZWQuIFRoZSBwYXRjaCBtYWlubHkgYWRkcyBlcnJvciBjaGVja3MgYWZ0ZXIgdGhvc2UgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLCBidXQgdGhlIGRhdGEgaXRzZWxmIGlzIGFsd2F5cyBpbml0aWFsaXplZC4gVGhlIGBkYXRhYCBidWZmZXIgaXMgYWxzbyBhIHN0YWNrIHZhcmlhYmxlLCBzbyBpdCBpcyBrbm93bi5cblxuU2luY2UgYWxsIHZhcmlhYmxlcywgbGlrZSBgZGF0YWAgYW5kIGBhZGRyYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2FnZSwgdGhlcmUncyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgbWVhbnMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpubyogbmV3IEtNU0FOLXJlbGV2YW50IGlzc3VlcywgYW5kIGl0IG1ha2VzIHRoZSBjb2RlIHNhZmVyLlxuXG5UaGlzIHBhdGNoIGlzIG9ubHkgZXJyb3IgY2hlY2tpbmcgdGhlIGBjb250cm9sX3dyaXRlYCByZXR1cm4gdmFsdWVzLCBub3QgbW9kaWZ5aW5nIHRoZSBkYXRhIHVzYWdlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzLCBsaWtlIEtBU0FOLCBoYW5kbGUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuIEJlY2F1c2UgdGhlIHN0YWNrIGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgcmlza3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFNpbmNlIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgYW5kIHRoZSBkYXRhIGlzIHJlYWQgaW4gYSBjb250cm9sbGVkIHdheSwgd2UgZG9uJ3QgaGF2ZSBLTVNBTiBwcm9ibGVtcy4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBtYXJrIGBOZWVkc0tNU0FOYCBhcyBgZmFsc2VgLiBJdCBpcyBhIGdvb2QgZXhhbXBsZSBvZiAqbm90KiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1MywiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1NjoyNS4yOTk0OTY0MThaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tzIGZvciByZXR2YWwgYWZ0ZXIgZWFjaCBjb250cm9sX3dyaXRlKCkgY2FsbCBpbiBjaDkyMDBfYmluZCgpLiBTdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgZGF0YVsyXSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNrcyBmb3IgcmV0dmFsIGFmdGVyIGVhY2ggY29udHJvbF93cml0ZSgpIGNhbGwgaW4gY2g5MjAwX2JpbmQoKS4gU3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGRhdGFbMl0pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[1] Phase: Succeeded StartedAt: 2026-09-05 05:56:36 +0000 UTC FinishedAt: 2026-09-05 05:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 05:56:36 +0000 UTC FinishedAt: 2026-09-05 05:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2] Phase: Succeeded StartedAt: 2026-09-05 05:56:36 +0000 UTC FinishedAt: 2026-09-05 07:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 05:56:36 +0000 UTC FinishedAt: 2026-09-05 07:31:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 05:56:36 +0000 UTC FinishedAt: 2026-09-05 05:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 05:56:36 +0000 UTC FinishedAt: 2026-09-05 05:56:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpmw7w/series-workflowpmw7w-convert-artifact-3227829389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 05:56:46 +0000 UTC FinishedAt: 2026-09-05 06:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 05:56:46 +0000 UTC FinishedAt: 2026-09-05 06:14:23 +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:*de6c5049-e213-4fee-aad8-eb9c46a77636,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-workflowpmw7w/series-workflowpmw7w-convert-artifact-3227829389/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": "76841991-e338-498f-9296-4780447a12f5", "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-workflowpmw7w/series-workflowpmw7w-build-action-2971410435/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 05:56:46 +0000 UTC FinishedAt: 2026-09-05 06:14:13 +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:*de6c5049-e213-4fee-aad8-eb9c46a77636,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-workflowpmw7w/series-workflowpmw7w-convert-artifact-3227829389/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": "76841991-e338-498f-9296-4780447a12f5", "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-workflowpmw7w/series-workflowpmw7w-build-action-2971410435/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 06:14:23 +0000 UTC FinishedAt: 2026-09-05 06:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 06:14:23 +0000 UTC FinishedAt: 2026-09-05 06:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 06:14:23 +0000 UTC FinishedAt: 2026-09-05 06:14:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 06:14:23 +0000 UTC FinishedAt: 2026-09-05 06:14:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpmw7w/series-workflowpmw7w-convert-artifact-3833368040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 06:14:33 +0000 UTC FinishedAt: 2026-09-05 06:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 06:14:33 +0000 UTC FinishedAt: 2026-09-05 06:16:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76841991-e338-498f-9296-4780447a12f5,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-workflowpmw7w/series-workflowpmw7w-build-action-2971410435/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-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 06:16:28 +0000 UTC FinishedAt: 2026-09-05 06:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 06:16:28 +0000 UTC FinishedAt: 2026-09-05 06:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 06:16:28 +0000 UTC FinishedAt: 2026-09-05 06:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 06:16:28 +0000 UTC FinishedAt: 2026-09-05 06:32:42 +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:*de6c5049-e213-4fee-aad8-eb9c46a77636,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-workflowpmw7w/series-workflowpmw7w-convert-artifact-3833368040/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": "f144f013-6057-4ce8-8ba5-2e21824a9575", "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-workflowpmw7w/series-workflowpmw7w-build-action-208225684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 06:16:28 +0000 UTC FinishedAt: 2026-09-05 06:32:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*de6c5049-e213-4fee-aad8-eb9c46a77636,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-workflowpmw7w/series-workflowpmw7w-convert-artifact-3833368040/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": "f144f013-6057-4ce8-8ba5-2e21824a9575", "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-workflowpmw7w/series-workflowpmw7w-build-action-208225684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 06:32:42 +0000 UTC FinishedAt: 2026-09-05 06:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 06:32:42 +0000 UTC FinishedAt: 2026-09-05 06:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 06:32:42 +0000 UTC FinishedAt: 2026-09-05 06:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 06:32:42 +0000 UTC FinishedAt: 2026-09-05 06:34:29 +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:*f144f013-6057-4ce8-8ba5-2e21824a9575,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-workflowpmw7w/series-workflowpmw7w-build-action-208225684/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-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 06:34:39 +0000 UTC FinishedAt: 2026-09-05 07:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 06:34:39 +0000 UTC FinishedAt: 2026-09-05 07:31:38 +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":["ch9200_bind"],"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:*76841991-e338-498f-9296-4780447a12f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f144f013-6057-4ce8-8ba5-2e21824a9575,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-workflowpmw7w/series-workflowpmw7w-build-action-2971410435/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-workflowpmw7w/series-workflowpmw7w-build-action-208225684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 06:34:39 +0000 UTC FinishedAt: 2026-09-05 06:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 06:34:39 +0000 UTC FinishedAt: 2026-09-05 06:34:43 +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":["ch9200_bind"],"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-workflowpmw7w/series-workflowpmw7w-convert-artifact-3342898721/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 06:34:39 +0000 UTC FinishedAt: 2026-09-05 06:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 06:34:39 +0000 UTC FinishedAt: 2026-09-05 06:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 06:34:39 +0000 UTC FinishedAt: 2026-09-05 06:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 06:34:49 +0000 UTC FinishedAt: 2026-09-05 07:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmw7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"f9b77343-c4b6-41ec-80f7-34433b3e8d4a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 06:34:49 +0000 UTC FinishedAt: 2026-09-05 07:31:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76841991-e338-498f-9296-4780447a12f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f144f013-6057-4ce8-8ba5-2e21824a9575,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-workflowpmw7w/series-workflowpmw7w-build-action-2971410435/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-workflowpmw7w/series-workflowpmw7w-build-action-208225684/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-workflowpmw7w/series-workflowpmw7w-convert-artifact-3342898721/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,}