Name: series-workflow6ffq9 Phase: Succeeded StartedAt: 2026-09-09 21:25:12 +0000 UTC FinishedAt: 2026-09-10 01:58:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[0] Phase: Succeeded StartedAt: 2026-09-09 21:25:12 +0000 UTC FinishedAt: 2026-09-09 22:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 21:25:12 +0000 UTC FinishedAt: 2026-09-09 22:13:25 +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": "fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_TUNNEL", "IPV6_VTI", "IPV6_MROUTE" ], "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": "fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_TUNNEL", "IPV6_VTI", "IPV6_MROUTE" ], "series_id": "e1db2798-29ed-427e-ab29-7b7705653ed9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_tnl_create", "vti6_tnl_create", "ip6mr_reg_vif" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfdG5sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2dGk2X3RubF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXA2bXJfcmVnX3ZpZiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIHNwcmludGYoKSB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIG5ldC9pcHY2L2lwNl90dW5uZWwuYywgbmV0L2lwdjYvaXA2X3Z0aS5jLCBhbmQgbmV0L2lwdjYvaXA2bXIuYy4gVGhlIHN0cmluZyBsaXRlcmFscyBhcmUgc3RhdGljIGFuZCBzYWZlbHkgY29waWVkIGludG8gbG9jYWwgc3RhY2sgYnVmZmVycyB3aXRoIGJvdW5kZWQgbGVuZ3RoIChJRk5BTVNJWikgYW5kIGd1YXJhbnRlZWQgTlVMIHRlcm1pbmF0aW9uLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNwcmludGYoKSBjYWxscyB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIHJlYWNoYWJsZSBJUHY2IHR1bm5lbCwgVlRJLCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgZGV2aWNlIGNyZWF0aW9uIHJvdXRpbmVzLiBUaGVzZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzeXNjYWxscyAocnRuZXRsaW5rL2lvY3RsL3NldHNvY2tvcHQpIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTkwY2Y4ZTdkZGE1OGZmOTk1M2JmM2M2ZmNmMjQzODgzYmJkNjkxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MTI6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBkNWZmNTBhMmFjMDE3Li5lZjNhNmQ5MzFjOWVhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0yOTQsNyAmIzQzOzI5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwmIzM0O2lwNnRubCUlZFwmIzM0Oyk7XG4mIzQzO1x0XHRzdHJzY3B5KG5hbWUsIFwmIzM0O2lwNnRubCVkXCYjMzQ7LCBJRk5BTVNJWik7XG4gXHR9XG4gXHRlcnIgPSAtRU5PTUVNO1xuIFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3Z0aS5jIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXG5pbmRleCBhYjk0YjNhNGJhOWMzLi4xODJhNzk0OWQ4MzA3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3Z0aS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdnRpLmNcbkBAIC0yMTAsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwmIzM0O2lwNl92dGklJWRcJiMzNDspO1xuJiM0MztcdFx0c3Ryc2NweShuYW1lLCBcJiMzNDtpcDZfdnRpJWRcJiMzNDssIElGTkFNU0laKTtcbiBcdH1cbiBcbiBcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCB2dGk2X2Rldl9zZXR1cCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjIwYWM4Y2I4NzQ2ODQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiBcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gXG4gXHRpZiAobXJ0LVx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxuLVx0XHRzcHJpbnRmKG5hbWUsIFwmIzM0O3BpbTZyZWdcJiMzNDspO1xuJiM0MztcdFx0c3Ryc2NweShuYW1lLCBcJiMzNDtwaW02cmVnXCYjMzQ7LCBJRk5BTVNJWik7XG4gXHRlbHNlXG4gXHRcdHNwcmludGYobmFtZSwgXCYjMzQ7cGltNnJlZyV1XCYjMzQ7LCBtcnQtXHUwMDNlaWQpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfdG5sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2dGk2X3RubF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXA2bXJfcmVnX3ZpZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzcHJpbnRmKCkgY2FsbHMgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiByZWFjaGFibGUgSVB2NiB0dW5uZWwsIFZUSSwgYW5kIG11bHRpY2FzdCByb3V0aW5nIGRldmljZSBjcmVhdGlvbiByb3V0aW5lcy4gVGhlc2UgdmlydHVhbCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3lzY2FsbHMgKHJ0bmV0bGluay9pb2N0bC9zZXRzb2Nrb3B0KSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5MGNmOGU3ZGRhNThmZjk5NTNiZjNjNmZjZjI0Mzg4M2JiZDY5MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDIyOjEyOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGQ1ZmY1MGEyYWMwMTcuLmVmM2E2ZDkzMWM5ZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTI5NCw3ICYjNDM7Mjk0LDcgQEAgc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCkKIAkJCWdvdG8gZmFpbGVkOwogCQlzdHJzY3B5KG5hbWUsIHAtJmd0O25hbWUsIElGTkFNU0laKTsKIAl9IGVsc2UgewotCQlzcHJpbnRmKG5hbWUsICYjMzQ7aXA2dG5sJSVkJiMzNDspOwomIzQzOwkJc3Ryc2NweShuYW1lLCAmIzM0O2lwNnRubCVkJiMzNDssIElGTkFNU0laKTsKIAl9CiAJZXJyID0gLUVOT01FTTsKIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuYwppbmRleCBhYjk0YjNhNGJhOWMzLi4xODJhNzk0OWQ4MzA3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdnRpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3Z0aS5jCkBAIC0yMTAsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwCiAJCQlnb3RvIGZhaWxlZDsKIAkJc3Ryc2NweShuYW1lLCBwLSZndDtuYW1lLCBJRk5BTVNJWik7CiAJfSBlbHNlIHsKLQkJc3ByaW50ZihuYW1lLCAmIzM0O2lwNl92dGklJWQmIzM0Oyk7CiYjNDM7CQlzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKTsKIAl9CiAKIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggM2YyZWQ5Yjc3ZGViNS4uMjBhYzhjYjg3NDY4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC02OTIsNyAmIzQzOzY5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KQogCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKIAlpZiAobXJ0LSZndDtpZCA9PSBSVDZfVEFCTEVfREZMVCkKLQkJc3ByaW50ZihuYW1lLCAmIzM0O3BpbTZyZWcmIzM0Oyk7CiYjNDM7CQlzdHJzY3B5KG5hbWUsICYjMzQ7cGltNnJlZyYjMzQ7LCBJRk5BTVNJWik7CiAJZWxzZQogCQlzcHJpbnRmKG5hbWUsICYjMzQ7cGltNnJlZyV1JiMzNDssIG1ydC0mZ3Q7aWQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjQKCQkJCQkJCW91dHB1dDogNzkKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGRpZmYuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIHNlZWluZyBzb21lIHJlcGxhY2VtZW50cyBvZiBgc3ByaW50ZmAgd2l0aCBgc3Ryc2NweWAgaW4gYSBmZXcgSVB2Ni1yZWxhdGVkIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGlwNl90dW5uZWwuY2AsIGBpcDZfdnRpLmNgLCBhbmQgYGlwNm1yLmNgLgoKVGhlIGZpcnN0IG1vZGlmaWNhdGlvbiBpbiBgaXA2X3R1bm5lbC5jYCBjb25jZXJucyBgaXA2X3RubF9jcmVhdGVgIGFuZCBzd2FwcyBvdXQgdGhhdCBgc3ByaW50ZihuYW1lLCAmIzM0O2lwNnRubCUlZCYjMzQ7KTtgIHdpdGggYHN0cnNjcHkobmFtZSwgJiMzNDtpcDZ0bmwlZCYjMzQ7LCBJRk5BTVNJWik7YC4gU2ltaWxhcmx5LCBmb3IgYGlwNl92dGkuY2AgYW5kIGB2dGk2X3RubF9jcmVhdGVgLCB0aGUgY2hhbmdlIGlzIGBzcHJpbnRmKG5hbWUsICYjMzQ7aXA2X3Z0aSUlZCYjMzQ7KTtgIHRvIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKTtgLiBBbmQgZmluYWxseSwgaW4gYGlwNm1yLmNgIHdpdGhpbiBgaXA2bXJfcmVnX3ZpZmAsIHRoZSBlZGl0IGdvZXMgZnJvbSBgc3ByaW50ZihuYW1lLCAmIzM0O3BpbTZyZWcmIzM0Oyk7YCB0byBgc3Ryc2NweShuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OywgSUZOQU1TSVopO2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgZ29vZCBjaGFuZ2U7IGBzdHJzY3B5YCBpcyBnZW5lcmFsbHkgc2FmZXIgdGhhbiBgc3ByaW50ZmAgYmVjYXVzZSBpdCBwcmV2ZW50cyBidWZmZXIgb3ZlcmZsb3dzIGJ5IGVuc3VyaW5nIHRoZSBzdHJpbmcgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIHRvIGZpdCB3aXRoaW4gdGhlIHNwZWNpZmllZCBidWZmZXIgc2l6ZSwgYElGTkFNU0laYCBpbiB0aGVzZSBpbnN0YW5jZXMuCgpOb3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZXNlIGZ1bmN0aW9ucywgdG8gbWFrZSBjZXJ0YWluIHRoYXQgbm8gdW5leHBlY3RlZCBiZWhhdmlvcnMgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEkmIzM5O2xsIGFsc28gd2FudCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBvZiB0aGVzZSBmaWxlcyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbCB0aGVyZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gbG93LWxldmVsIG5ldHdvcmtpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfLipcXCkgXFwmIzQzO1xcJiM0Mzs9IGlwNl90dW5uZWwub3xvYmotXFwkXFwoQ09ORklHXy4qXFwpIFxcJiM0MztcXCYjNDM7PSBpcDZtci5vfG9iai1cXCRcXChDT05GSUdfLipcXCkgXFwmIzQzO1xcJiM0Mzs9IGlwNl92dGkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIElQdjYgc3R1ZmYgaXMgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgSVB2NiBjb21wb25lbnRzIHNob3VsZCBiZSBkZWZpbmVkIGhlcmUsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtsbCBpbmNsdWRlIHRoaW5ncyBsaWtlIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgY29tcGlsYXRpb24gZmxhZ3Mgc3BlY2lmaWMgdG8gSVB2NiwgcHJvYmFibHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGhvdyBkaWZmZXJlbnQgSVB2NiBtb2R1bGVzIGFyZSBsaW5rZWQgdG9nZXRoZXIuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaWRlbnRpZnkgdGhlIGtleSB0YXJnZXRzIGFuZCB2YXJpYWJsZXMgcmVsZXZhbnQgdG8gdGhlIG1vZHVsZXMgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyB3aXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLi4uIHRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90dW5uZWx8aXA2bXJ8aXA2X3Z0aSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTE1PWlwdjYtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY2Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjE2OmlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0xNy1cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkVURklMVEVSKVx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9pcHY2L01ha2VmaWxlLTM5LVxubmV0L2lwdjYvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0lQVjZfVlRJKSAmIzQzOz0gaXA2X3Z0aS5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00MS1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMyCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSVB2NiBUdW5uZWxpbmcgYW5kIFJvdXRpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24sIGxldCYjMzk7cyBxdWlja2x5IGV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIElQdjYgdHVubmVsIG9wdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcGxhY2Ugd2hlcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgYXJlIGRlZmluZWQsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIG9mIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1ZUSWAsIGFuZCBgSVBWNl9NUk9VVEVgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBvcHRpb25zIGludGVycmVsYXRlIGlzIGNyaXRpY2FsOyBrbm93aW5nIHdoYXQgb3RoZXIgZmVhdHVyZXMgdGhleSBpbXBsaWNpdGx5IGVuYWJsZSBvciByZXF1aXJlIHdpbGwgYmUgY3J1Y2lhbCB3aGVuIEkgYXNzZXNzIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLCBhbmQgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBBIHF1aWNrIHNjYW4gb2YgYEtjb25maWdgIHdpbGwgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0IGVhY2ggb3B0aW9uIGVudGFpbHMuIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9UVU5ORUx8Y29uZmlnIElQVjZfVlRJfGNvbmZpZyBJUFY2X01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOTY9Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI0Mz1jb25maWcgSVBWNl9TVUJUUkVFU1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY29uZmlndXJhdGlvbnMsIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBiaXQgbGllcyBpbiB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgbGluZXMgaW4gYG5ldC9pcHY2L0tjb25maWdgLiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgc291cmNlIGZvciBhbGwgdGhpbmdzIElQdjYgY29uZmlndXJhdGlvbiByZWxhdGVkLCBzbyBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyByZWFkIHRoZSBsaW5lcyBhcm91bmQgdGhlc2UgY29uZmlncyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuJiMzNDsgSSYjMzk7bSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGFueSBjb25kaXRpb25hbCBsb2dpYywgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJlc2VudGVkLiBXaGF0IGFyZSB0aGUgYXNzb2NpYXRlZCBmZWF0dXJlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGdyb3VwaW5ncyBvciByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBvdGhlcnM/IE9ubHkgYnkgZ2V0dGluZyB0aGUgd2lkZXIgcGVyc3BlY3RpdmUgd2lsbCBJIHRydWx5IHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcGFjdCBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlnLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgY2x1ZSByZWxhdGluZyB0byBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHNvbWUgSVB2NiBmZWF0dXJlLiBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlbiBjaXJjbGUgYmFjayB3aXRoIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQ1Olx0XG4gMTQ2Olx0Y29uZmlnIElORVQ2X1RVTk5FTFxuIDE0NzpcdFx0dHJpc3RhdGVcbiAxNDg6XHRcdGRlZmF1bHQgblxuIDE0OTpcdFxuIDE1MDpcdGNvbmZpZyBJUFY2X1ZUSVxuIDE1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbiAxNTI6XHRcdHNlbGVjdCBJUFY2X1RVTk5FTFxuIDE1MzpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAxNTQ6XHRcdHNlbGVjdCBYRlJNXG4gMTU1Olx0XHRoZWxwXG4gMTU2Olx0XHRUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE1NzpcdFx0YW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDE1ODpcdFx0ZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHhmcm0gbW9kZSB0dW5uZWwgdG8gZ2l2ZVxuIDE1OTpcdFx0dGhlIG5vdGlvbiBvZiBhIHNlY3VyZSB0dW5uZWwgZm9yIElQU0VDIGFuZCB0aGVuIHVzZSByb3V0aW5nIHByb3RvY29sXG4gMTYwOlx0XHRvbiB0b3AuXG4gMTYxOlx0XG4gMTYyOlx0Y29uZmlnIElQVjZfU0lUXG4gMTYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuIDE2NDpcdFx0c2VsZWN0IElORVRfVFVOTkVMXG4gMTY1Olx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDE2NjpcdFx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcbiAxNjc6XHRcdGRlZmF1bHQgbVxuIDE2ODpcdFx0aGVscFxuIDE2OTpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE3MDpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMTcxOlx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgZW5jYXBzdWxhdGlvbiBvZiBJUHY2XG4gMTcyOlx0XHQgIGludG8gSVB2NCBwYWNrZXRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHR3byBJUHY2XG4gMTczOlx0XHQgIG5ldHdvcmtzIG92ZXIgYW4gSVB2NC1vbmx5IHBhdGguXG4gMTc0Olx0XG4gMTc1Olx0XHQgIFNheWluZyBNIGhlcmUgd2lsbCBwcm9kdWNlIGEgbW9kdWxlIGNhbGxlZCBzaXQuIElmIHVuc3VyZSwgc2F5IE0uXG4gMTc2Olx0XG4gMTc3Olx0Y29uZmlnIElQVjZfU0lUXzZSRFxuIDE3ODpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbiAxNzk6XHRcdGRlcGVuZHMgb24gSVBWNl9TSVRcbiAxODA6XHRcdGRlZmF1bHQgblxuIDE4MTpcdFx0aGVscFxuIDE4MjpcdFx0ICBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZyZDsgZHJhZnQtaWV0Zi1zb2Z0d2lyZS1pcHY2LTZyZCkgYnVpbGRzIHVwb25cbiAxODM6XHRcdCAgbWVjaGFuaXNtcyBvZiA2dG80IChSRkMzMDU2KSB0byBlbmFibGUgYSBzZXJ2aWNlIHByb3ZpZGVyIHRvIHJhcGlkbHlcbiAxODQ6XHRcdCAgZGVwbG95IElQdjYgdW5pY2FzdCBzZXJ2aWNlIHRvIElQdjQgc2l0ZXMgdG8gd2hpY2ggaXQgcHJvdmlkZXNcbiAxODU6XHRcdCAgY3VzdG9tZXIgcHJlbWlzZSBlcXVpcG1lbnQuICBMaWtlIDZ0bzQsIGl0IHV0aWxpemVzIHN0YXRlbGVzcyBJUHY2IGluXG4gMTg2Olx0XHQgIElQdjQgZW5jYXBzdWxhdGlvbiBpbiBvcmRlciB0byB0cmFuc2l0IElQdjQtb25seSBuZXR3b3JrXG4gMTg3Olx0XHQgIGluZnJhc3RydWN0dXJlLiAgVW5saWtlIDZ0bzQsIGEgNnJkIHNlcnZpY2UgcHJvdmlkZXIgdXNlcyBhbiBJUHY2XG4gMTg4Olx0XHQgIHByZWZpeCBvZiBpdHMgb3duIGluIHBsYWNlIG9mIHRoZSBmaXhlZCA2dG80IHByZWZpeC5cbiAxODk6XHRcbiAxOTA6XHRcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgU0lUIGRyaXZlciBvZmZlcnMgNnJkIGZ1bmN0aW9uYWxpdHkgYnlcbiAxOTE6XHRcdCAgcHJvdmlkaW5nIGFkZGl0aW9uYWwgaW9jdGwgQVBJIHRvIGNvbmZpZ3VyZSB0aGUgSVB2NiBQcmVmaXggZm9yIGluXG4gMTkyOlx0XHQgIHN0ZWFkIG9mIHN0YXRpYyAyMDAyOjovMTYgZm9yIDZ0bzQuXG4gMTkzOlx0XG4gMTk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTk1Olx0XG4gMTk2Olx0Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbiAxOTc6XHRcdGJvb2xcbiAxOTg6XHRcbiAxOTk6XHRjb25maWcgSVBWNl9UVU5ORUxcbiAyMDA6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuIDIwMTpcdFx0c2VsZWN0IElORVQ2X1RVTk5FTFxuIDIwMjpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDIwMzpcdFx0c2VsZWN0IEdST19DRUxMU1xuIDIwNDpcdFx0aGVscFxuIDIwNTpcdFx0ICBTdXBwb3J0IGZvciBJUHY2LWluLUlQdjYgYW5kIElQdjQtaW4tSVB2NiB0dW5uZWxzIGRlc2NyaWJlZCBpblxuIDIwNjpcdFx0ICBSRkMgMjQ3My5cbiAyMDc6XHRcbiAyMDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUHY2IE11bHRpY2FzdCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzdGF0dXMgb2YgYElQVjZfTVJPVVRFYC4gVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IHRvIHZlcmlmeSBiZWZvcmUgbW92aW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGhhdCBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdCAgbm9ybWFsIGFuZCBzb3VyY2UgcHJlZml4IHNwZWNpZmljIHJvdXRlcyBpbiB0aGUgc2FtZSByb3V0aW5nIHRhYmxlXG4gMjUxOlx0XHQgIG1heSBzb21ldGltZXMgbGVhZCB0byB1bmludGVuZGVkIHJvdXRpbmcgYmVoYXZpb3IuICBUaGlzIGNhbiBiZVxuIDI1MjpcdFx0ICBhdm9pZGVkIGJ5IGRlZmluaW5nIGRpZmZlcmVudCByb3V0aW5nIHRhYmxlcyBmb3IgdGhlIG5vcm1hbCBhbmRcbiAyNTM6XHRcdCAgc291cmNlIHByZWZpeCBzcGVjaWZpYyByb3V0ZXMuXG4gMjU0Olx0XG4gMjU1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjU2Olx0XG4gMjU3Olx0Y29uZmlnIElQVjZfTVJPVVRFXG4gMjU4Olx0XHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjU5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyNjA6XHRcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXG4gMjYxOlx0XHRoZWxwXG4gMjYyOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcuXG4gMjYzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjY0Olx0XG4gMjY1Olx0Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xuIDI2NjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyNjc6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyNjg6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyNjk6XHRcdGhlbHBcbiAyNzA6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDI3MTpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjcyOlx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjczOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNzQ6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI3NTpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjc2Olx0XG4gMjc3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjc4Olx0XG4gMjc5Olx0Y29uZmlnIElQVjZfUElNU01fVjJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDgyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBJUHY2IE5ldHdvcmtpbmcgUGF0Y2hlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNvZGUgY2hhbmdlcyBhbmQgZmlndXJlIG91dCBpZiB0aGV5IHdhcnJhbnQgZnV6emluZy4gRmlyc3QsIEkmIzM5O20gZXhhbWluaW5nIHRoZSBkaWZmcyBpbiBkZXRhaWwuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBob3cgZGV2aWNlIG5hbWVzIGFyZSBnZW5lcmF0ZWQgZm9yIGNlcnRhaW4gSVB2Ni1yZWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBpbnRlcmZhY2VzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGludm9sdmUgcmVwbGFjaW5nIGBzcHJpbnRmYCB3aXRoIGBzdHJzY3B5YCBpbiBgaXA2X3RubF9jcmVhdGVgLCBgdnRpNl90bmxfY3JlYXRlYCwgYW5kIGBpcDZtcl9yZWdfdmlmYC4KCkluaXRpYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGZvcm1hdCBzdHJpbmcgZGlmZmVyZW5jZS4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgc3ByaW50ZmAgd2l0aCBmb3JtYXQgc3RyaW5ncyBjb250YWluaW5nIGAlZGAsIGludGVuZGluZyB0byBoYXZlIHRoZSBrZXJuZWwmIzM5O3MgbmFtaW5nIG1lY2hhbmlzbSBzdWJzdGl0dXRlIGFuIGludGVnZXIgZm9yIGAlZGAgd2hlbiBjcmVhdGluZyB0aGUgZGV2aWNlIG5hbWUuIFRoZSBuZXcgY29kZSBzaW1wbHkgY29waWVzIGxpdGVyYWwgc3RyaW5ncy4gSW4gYm90aCBjYXNlcywgdGhlIGRldmljZSBuYW1lIGVuZHMgdXAgd2l0aCBgJWRgIGluIGl0LCBhbmQgYGFsbG9jX25ldGRldmAgaXMgdGhlbiBjYWxsZWQsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGRldl9hbGxvY19uYW1lYCB3aGljaCBoYW5kbGVzIHRoZSBgJWRgIGZvcm1hdHRpbmcsIHNvIGl0IGxvb2tzIGxpa2UgZnVuY3Rpb25hbGx5IHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZS4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBjb2RlIHBhdGhzIGFyZSBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQuIEZvcnR1bmF0ZWx5LCBJIGtub3cgSVB2NiB0dW5uZWxzIChgaXA2dG5sYCksIElQdjYgVlRJIChgaXA2X3Z0aWApLCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyAoYGlwNm1yYCkgYXJlIHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGFuZCBwcm90b2NvbHMuIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgdGhyb3VnaCBjb21tb24gc3lzdGVtIGNhbGxzIGxpa2UgYHJ0bmV0bGlua2AsIGBpb2N0bGAsIGFuZCBgc2V0c29ja29wdGAgZm9yIG11bHRpY2FzdCByb3V0aW5nLiBTbywgeWVzLCB0aGlzIGNvZGUgKmlzKiBleGVjdXRhYmxlIGFuZCByZWxldmFudCBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLgoKR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSwgSSBoYXZlIHRvIGNvbnN1bHQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbiAxIHN0cmVzc2VzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudCwgYW5kIFNlY3Rpb24gMyBjbGVhcmx5IHN0YXRlcyB0aGF0IGFueSBjaGFuZ2VzIHdpdGhpbiAmIzM0O2NvcmUgbmV0d29ya2luZyYjMzQ7IGFuZCAmIzM0O3JlYWNoYWJsZSBwcm90b2NvbHMmIzM0OyAqbXVzdCogYmUgZnV6emVkLCBpbmNsdWRpbmcgcmVmYWN0b3JpbmdzLiBFdmVuIGlmIGl0ICpzZWVtcyogbGlrZSBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgZGV2aWNlIG5hbWUgZ2VuZXJhdGlvbiBtZXRob2QgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlIGNyZWF0aW9uIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzLiBTZWN0aW9uIDIsIGNvbnZlcnNlbHksIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGluZ3Mgd2hpY2ggYXJlICpub3QqIGZ1enphYmxlLCBidXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24mIzM5O3QgZmFsbCBpbnRvIGFueSBvZiB0aG9zZSBjYXRlZ29yaWVzLiBTbywgZ2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSByZWxhdGVkIHRvIGNvcmUgbmV0d29ya2luZywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBmbGFnIHRoZXNlIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGZ1enppbmc6IGBpcDZfdG5sX2NyZWF0ZWAsIGB2dGk2X3RubF9jcmVhdGVgLCBhbmQgYGlwNm1yX3JlZ192aWZgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGVpciBzb3VyY2UgbG9jYXRpb25zIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3Qgc3ltYm9scyBhbmQgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfY3JlYXRlfHZ0aTZfdG5sX2NyZWF0ZXxpcDZtcl9yZWdfdmlmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0yNDU9c3RhdGljIHZvaWQgaXA2X2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTI1Mi1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyNTM6c3RhdGljIGludCBpcDZfdG5sX2NyZWF0ZTIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yNTQte1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yNzMtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6Mjc0OiAqIGlwNl90bmxfY3JlYXRlIC0gY3JlYXRlIGEgbmV3IHR1bm5lbFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTI3NS0gKiAgIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTI4NC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyODU6c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yODYte1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0zMDktXHR0LVx1MDAzZW5ldCA9IGRldl9uZXQoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzozMTA6XHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0zMTEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0zMzc9c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTM1OS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MzYwOlx0cmV0dXJuIGlwNl90bmxfY3JlYXRlKG5ldCwgcCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMzYxLX1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2OD1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAxLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDI6XHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAzLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHRiW0lGTEFfTVRVXSlcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9MTY1PXZ0aTZfdG5sX3VubGluayhzdHJ1Y3QgdnRpNl9uZXQgKmlwNm4sIHN0cnVjdCBpcDZfdG5sICp0KVxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYy0xNzktXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTgwOnN0YXRpYyBpbnQgdnRpNl90bmxfY3JlYXRlMihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjYvaXA2X3Z0aS5jLTE4MS17XG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTIwMC1cbm5ldC9pcHY2L2lwNl92dGkuYzoyMDE6c3RhdGljIHN0cnVjdCBpcDZfdG5sICp2dGk2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjAyLXtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjI1LVxubmV0L2lwdjYvaXA2X3Z0aS5jOjIyNjpcdGVyciA9IHZ0aTZfdG5sX2NyZWF0ZTIoZGV2KTtcbm5ldC9pcHY2L2lwNl92dGkuYy0yMjctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYz0yNTI9c3RhdGljIHN0cnVjdCBpcDZfdG5sICp2dGk2X2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCxcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjczLVx0XHRyZXR1cm4gTlVMTDtcbm5ldC9pcHY2L2lwNl92dGkuYzoyNzQ6XHRyZXR1cm4gdnRpNl90bmxfY3JlYXRlKG5ldCwgcCk7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjc1LX1cbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9MTAxMD1zdGF0aWMgaW50IHZ0aTZfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYy0xMDI3LVxubmV0L2lwdjYvaXA2X3Z0aS5jOjEwMjg6XHRyZXR1cm4gdnRpNl90bmxfY3JlYXRlMihkZXYpO1xubmV0L2lwdjYvaXA2X3Z0aS5jLTEwMjktfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Njc5PXN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTY4OC1cbm5ldC9pcHY2L2lwNm1yLmM6Njg5OnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxubmV0L2lwdjYvaXA2bXIuYy02OTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9OTA2PXN0YXRpYyBpbnQgbWlmNl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTkyNy1cdFx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG5uZXQvaXB2Ni9pcDZtci5jOjkyODpcdFx0ZGV2ID0gaXA2bXJfcmVnX3ZpZihuZXQsIG1ydCk7XG5uZXQvaXB2Ni9pcDZtci5jLTkyOS1cdFx0aWYgKCFkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTgKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElQdjYgVHVubmVsaW5nIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZyBJUHY2IHR1bm5lbGluZy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgQ09ORklHX0lQVjZgLCBgQ09ORklHX0lQVjZfVFVOTkVMYCwgYENPTkZJR19JUFY2X1ZUSWAsIGFuZCBgQ09ORklHX0lQVjZfTVJPVVRFYC4gRXhjZWxsZW50LiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9yIGlmIHRoZXNlIGFyZSBpbmRlZWQgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWdzLgoKQSBxdWljayBkaXZlIGludG8gdGhlIEtjb25maWcgcmV2ZWFscyBzb21lIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcy4gYElQVjZfVFVOTkVMYCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0IGRlcGVuZHMgb24gbm90aGluZyBleHBsaWNpdGx5ICh0aG91Z2ggaXQgKnNlbGVjdHMqIGBJTkVUNl9UVU5ORUxgLCBgRFNUX0NBQ0hFYCwgYW5kIGBHUk9fQ0VMTFNgKSBidXQgaXMgZ2F0ZWQgYnkgYW4gYGlmIElQVjZgIGNsYXVzZS4gYElQVjZfVlRJYCBzZWxlY3RzIGBJUFY2X1RVTk5FTGAsIGBORVRfSVBfVFVOTkVMYCwgYW5kIGBYRlJNYCwgYW5kIGBJUFY2X01ST1VURWAgKmRvZXMqIGRlcGVuZCBvbiBgSVBWNmAuIFRoZXJlZm9yZSwgdGhlIGxpc3QgSSBvcmlnaW5hbGx5IGhhZCBpcyBhY2N1cmF0ZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMgdGFyZ2V0ZWQgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUga2VybmVsIGZ1bmN0aW9uczogYGlwNl90bmxfY3JlYXRlYCwgYHZ0aTZfdG5sX2NyZWF0ZWAsIGFuZCBgaXA2bXJfcmVnX3ZpZmAuIFRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY3JlYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBvZiB0dW5uZWxzLCB3aGljaCBpcyBleGFjdGx5IHRoZSBhcmVhIEkgd2FudCB0byBmb2N1cyBvbi4KCkV2ZXJ5dGhpbmcgc2VlbXMgdG8gYWxpZ24uIFRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3RlZCBnaXZlbiB0aGUgZm9jdXMgb24gc3BlY2lmaWMsIGxlc3MgdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3QgYW5kIG5vbi11YmlxdWl0b3VzLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGNvbXBsZXRlIChhZnRlciBzdHJpcHBpbmcgdGhlIGBDT05GSUdfYCBwcmVmaXhlcykuIFRoZSByZWFzb25pbmcgaXMgYWxzbyBjbGVhciBhbmQgY29uY2lzZS4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLCBzbyBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1ZUSSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwNl90bmxfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Z0aTZfdG5sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpcDZtcl9yZWdfdmlmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNwcmludGYoKSBjYWxscyB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIHJlYWNoYWJsZSBJUHY2IHR1bm5lbCwgVlRJLCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgZGV2aWNlIGNyZWF0aW9uIHJvdXRpbmVzLiBUaGVzZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzeXNjYWxscyAocnRuZXRsaW5rL2lvY3RsL3NldHNvY2tvcHQpIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfVlRJJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF9jcmVhdGUmIzM0OywKICAgICYjMzQ7dnRpNl90bmxfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lwNm1yX3JlZ192aWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgc3ByaW50ZigpIGNhbGxzIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gcmVhY2hhYmxlIElQdjYgdHVubmVsLCBWVEksIGFuZCBtdWx0aWNhc3Qgcm91dGluZyBkZXZpY2UgY3JlYXRpb24gcm91dGluZXMuIFRoZXNlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN5c2NhbGxzIChydG5ldGxpbmsvaW9jdGwvc2V0c29ja29wdCkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjYWxscyB0byBzcHJpbnRmKCkgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiBuZXQvaXB2Ni9pcDZfdHVubmVsLmMsIG5ldC9pcHY2L2lwNl92dGkuYywgYW5kIG5ldC9pcHY2L2lwNm1yLmMuIFRoZSBzdHJpbmcgbGl0ZXJhbHMgYXJlIHN0YXRpYyBhbmQgc2FmZWx5IGNvcGllZCBpbnRvIGxvY2FsIHN0YWNrIGJ1ZmZlcnMgd2l0aCBib3VuZGVkIGxlbmd0aCAoSUZOQU1TSVopIGFuZCBndWFyYW50ZWVkIE5VTCB0ZXJtaW5hdGlvbi4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTkwY2Y4ZTdkZGE1OGZmOTk1M2JmM2M2ZmNmMjQzODgzYmJkNjkxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMjI6MTI6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggZDVmZjUwYTJhYzAxNy4uZWYzYTZkOTMxYzllYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMjk0LDcgJiM0MzsyOTQsNyBAQCBzdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKQogCQkJZ290byBmYWlsZWQ7CiAJCXN0cnNjcHkobmFtZSwgcC0mZ3Q7bmFtZSwgSUZOQU1TSVopOwogCX0gZWxzZSB7Ci0JCXNwcmludGYobmFtZSwgJiMzNDtpcDZ0bmwlJWQmIzM0Oyk7CiYjNDM7CQlzdHJzY3B5KG5hbWUsICYjMzQ7aXA2dG5sJWQmIzM0OywgSUZOQU1TSVopOwogCX0KIAllcnIgPSAtRU5PTUVNOwogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3Z0aS5jIGIvbmV0L2lwdjYvaXA2X3Z0aS5jCmluZGV4IGFiOTRiM2E0YmE5YzMuLjE4MmE3OTQ5ZDgzMDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl92dGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdnRpLmMKQEAgLTIxMCw3ICYjNDM7MjEwLDcgQEAgc3RhdGljIHN0cnVjdCBpcDZfdG5sICp2dGk2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAKIAkJCWdvdG8gZmFpbGVkOwogCQlzdHJzY3B5KG5hbWUsIHAtJmd0O25hbWUsIElGTkFNU0laKTsKIAl9IGVsc2UgewotCQlzcHJpbnRmKG5hbWUsICYjMzQ7aXA2X3Z0aSUlZCYjMzQ7KTsKJiM0MzsJCXN0cnNjcHkobmFtZSwgJiMzNDtpcDZfdnRpJWQmIzM0OywgSUZOQU1TSVopOwogCX0KIAogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCB2dGk2X2Rldl9zZXR1cCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCAzZjJlZDliNzdkZWI1Li4yMGFjOGNiODc0Njg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTY5Miw3ICYjNDM7NjkyLDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcDZtcl9yZWdfdmlmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQpCiAJY2hhciBuYW1lW0lGTkFNU0laXTsKIAogCWlmIChtcnQtJmd0O2lkID09IFJUNl9UQUJMRV9ERkxUKQotCQlzcHJpbnRmKG5hbWUsICYjMzQ7cGltNnJlZyYjMzQ7KTsKJiM0MzsJCXN0cnNjcHkobmFtZSwgJiMzNDtwaW02cmVnJiMzNDssIElGTkFNU0laKTsKIAllbHNlCiAJCXNwcmludGYobmFtZSwgJiMzNDtwaW02cmVnJXUmIzM0OywgbXJ0LSZndDtpZCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2g6IFBvdGVudGlhbCBJc3N1ZXM/KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCwgYG5ldC9pcHY2L2lwNl92dGkuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2Ag4oCTIGFsbCBjb3JlIElQdjYgbmV0d29ya2luZyBhcmVhcy4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB3aGF0IGFjdHVhbGx5IGNoYW5nZWQuCgpBbHJpZ2h0LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd246IEl0IGxvb2tzIGxpa2UgaW4gYGlwNl90dW5uZWwuY2AsIGBzcHJpbnRmKG5hbWUsICYjMzQ7aXA2dG5sJSVkJiMzNDspO2Agd2FzIHJlcGxhY2VkIHdpdGggYHN0cnNjcHkobmFtZSwgJiMzNDtpcDZ0bmwlZCYjMzQ7LCBJRk5BTVNJWik7YC4gU2ltaWxhciBzd2FwcyBoYXBwZW5lZCBpbiBgaXA2X3Z0aS5jYDogYHNwcmludGYobmFtZSwgJiMzNDtpcDZfdnRpJSVkJiMzNDspO2AgYmVjYW1lIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKTtgLiBBbmQgZmluYWxseSwgaW4gYGlwNm1yLmNgLCB3ZSBzZWUgYHNwcmludGYobmFtZSwgJiMzNDtwaW02cmVnJiMzNDspO2AgcmVwbGFjZWQgd2l0aCBgc3Ryc2NweShuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OywgSUZOQU1TSVopO2AuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0Li4uIGxldCYjMzk7cyBjb21wYXJlIHRoZXNlIGBzcHJpbnRmYCB0byBgc3Ryc2NweWAgY2hhbmdlcy4gTG9va2luZyBhdCBgc3ByaW50ZihuYW1lLCAmIzM0O2lwNnRubCUlZCYjMzQ7KWAgdmVyc3VzIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2dG5sJWQmIzM0OywgSUZOQU1TSVopYCwgdGhlIGluaXRpYWwgdXNhZ2Ugb2YgdGhlIGBzcHJpbnRmYCB3aXRoIGAmIzM0O2lwNnRubCUlZCYjMzQ7YCBwcm9kdWNlcyB0aGUgbGl0ZXJhbCBzdHJpbmcgYCYjMzQ7aXA2dG5sJWQmIzM0O2AgYmVjYXVzZSB0aGUgZG91YmxlIHBlcmNlbnQgc2lnbnMgYXJlIGVzY2FwZWQgZm9ybWF0IHNwZWNpZmllcnMuIFdpdGggYHN0cnNjcHlgLCB3ZSYjMzk7cmUgc2ltcGx5IGNvcHlpbmcgdGhlIGxpdGVyYWwgc3RyaW5nIGAmIzM0O2lwNnRubCVkJiMzNDtgLiBCb3RoIGltcGxlbWVudGF0aW9ucyByZXN1bHQgaW4gdGhlIHNhbWUgb3V0cHV0LCBgJiMzNDtpcDZ0bmwlZCYjMzQ7YCBhbmQsIHNpbmNlIGBuYW1lYCBpcyBwcm9iYWJseSBhIGZpeGVkIHNpemUgYnVmZmVyLCB0aGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIG51bGwtdGVybWluYXRlZC4gU28sIG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIG1vdmUgZnJvbSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgLiBUaGlzIGNvdWxkIGJlIGFib3V0IHJlbW92aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBidXQgaXQmIzM5O3MgaGFyZCB0byB0ZWxsIHdpdGhvdXQgYWRkaXRpb25hbCBjb250ZXh0LgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCAqd2h5KiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGRlbGliZXJhdGUgYXR0ZW1wdCB0byBhdm9pZCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiBgc3ByaW50ZmA/IElmIHNvLCB0aGlzIGlzIGdvb2QuIEJ1dCBpdCBzZWVtcyBzdHJhbmdlIGJlY2F1c2UgdGhlIGV4aXN0aW5nIGBzcHJpbnRmYCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBiZSBzYWZlIGdpdmVuIHRoZSB1c2FnZSwgYW5kIHRoZSB1c2Ugb2YgdGhlIGRvdWJsZSBwZXJjZW50YWdlIGluIHRoZSBzdHJpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIGdyYWIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgY29kZSBzZWN0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gMjg2Olx0e1xuIDI4NzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAyODg6XHRcdHN0cnVjdCBpcDZfdG5sICp0O1xuIDI4OTpcdFx0Y2hhciBuYW1lW0lGTkFNU0laXTtcbiAyOTA6XHRcdGludCBlcnIgPSAtRTJCSUc7XG4gMjkxOlx0XG4gMjkyOlx0XHRpZiAocC1cdTAwM2VuYW1lWzBdKSB7XG4gMjkzOlx0XHRcdGlmICghZGV2X3ZhbGlkX25hbWUocC1cdTAwM2VuYW1lKSlcbiAyOTQ6XHRcdFx0XHRnb3RvIGZhaWxlZDtcbiAyOTU6XHRcdFx0c3Ryc2NweShuYW1lLCBwLVx1MDAzZW5hbWUsIElGTkFNU0laKTtcbiAyOTY6XHRcdH0gZWxzZSB7XG4gMjk3Olx0XHRcdHN0cnNjcHkobmFtZSwgXCYjMzQ7aXA2dG5sJWRcJiMzNDssIElGTkFNU0laKTtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcdGVyciA9IC1FTk9NRU07XG4gMzAwOlx0XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTixcbiAzMDE6XHRcdFx0XHQgICBpcDZfdG5sX2Rldl9zZXR1cCk7XG4gMzAyOlx0XHRpZiAoIWRldilcbiAzMDM6XHRcdFx0Z290byBmYWlsZWQ7XG4gMzA0Olx0XG4gMzA1Olx0XHRkZXZfbmV0X3NldChkZXYsIG5ldCk7XG4gMzA2Olx0XG4gMzA3Olx0XHR0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiAzMDg6XHRcdHQtXHUwMDNlcGFybXMgPSAqcDtcbiAzMDk6XHRcdHQtXHUwMDNlbmV0ID0gZGV2X25ldChkZXYpO1xuIDMxMDpcdFx0ZXJyID0gaXA2X3RubF9jcmVhdGUyKGRldik7XG4gMzExOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDMxMjpcdFx0XHRnb3RvIGZhaWxlZF9mcmVlO1xuIDMxMzpcdFxuIDMxNDpcdFx0cmV0dXJuIHQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFZpcnR1YWwgVHVubmVsIEludGVyZmFjZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBiZWhhdmlvciwgaXQmIzM5O3MgY2xlYXIgSSBjYW4mIzM5O3QganVzdCBmb2N1cyBvbiB0aGUgb2J2aW91cy4gSSYjMzk7bSB0aGlua2luZywgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIGludG8gSVB2NiB2aXJ0dWFsIHR1bm5lbCBpbnRlcmZhY2VzIG5lZWRzIHRvIGludm9sdmUgbW9yZSB0aGFuIGp1c3QgYSBzdXJmYWNlLWxldmVsIGxvb2suIFRvIGJlIHRydWx5IGNvbXByZWhlbnNpdmUsIEkgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgbmV0L2lwdjYvaXA2X3Z0aS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgVlRJIGNvZGUgaXMgY3J1Y2lhbCBoZXJlLiBHaXZlbiB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcsIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGF0IGBuZXQvaXB2Ni9pcDZtci5jYCB3aGlsZSBJJiMzOTttIGF0IGl0LiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiBtdWx0aWNhc3Qgcm91dGluZyBhcyB3ZWxsLCB0byBzZWUgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFZUSSBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdnRpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxuIDIwMjpcdHtcbiAyMDM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjA0Olx0XHRzdHJ1Y3QgaXA2X3RubCAqdDtcbiAyMDU6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gMjA2Olx0XHRpbnQgZXJyO1xuIDIwNzpcdFxuIDIwODpcdFx0aWYgKHAtXHUwMDNlbmFtZVswXSkge1xuIDIwOTpcdFx0XHRpZiAoIWRldl92YWxpZF9uYW1lKHAtXHUwMDNlbmFtZSkpXG4gMjEwOlx0XHRcdFx0Z290byBmYWlsZWQ7XG4gMjExOlx0XHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gMjEyOlx0XHR9IGVsc2Uge1xuIDIxMzpcdFx0XHRzdHJzY3B5KG5hbWUsIFwmIzM0O2lwNl92dGklZFwmIzM0OywgSUZOQU1TSVopO1xuIDIxNDpcdFx0fVxuIDIxNTpcdFxuIDIxNjpcdFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHZ0aTZfZGV2X3NldHVwKTtcbiAyMTc6XHRcdGlmICghZGV2KVxuIDIxODpcdFx0XHRnb3RvIGZhaWxlZDtcbiAyMTk6XHRcbiAyMjA6XHRcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcbiAyMjE6XHRcbiAyMjI6XHRcdHQgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDIyMzpcdFx0dC1cdTAwM2VwYXJtcyA9ICpwO1xuIDIyNDpcdFx0dC1cdTAwM2VuZXQgPSBkZXZfbmV0KGRldik7XG4gMjI1Olx0XG4gMjI2Olx0XHRlcnIgPSB2dGk2X3RubF9jcmVhdGUyKGRldik7XG4gMjI3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDIyODpcdFx0XHRnb3RvIGZhaWxlZF9mcmVlO1xuIDIyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgRGVlcGVyIGludG8gSVB2NiBNdWx0aWNhc3QgUm91dGluZyoqCgpPa2F5LCBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGEgc3VidGxlIGludGVyYWN0aW9uLCBwZXJoYXBzIGluIGEgY29ybmVyIGNhc2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLiBCZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBpdCYjMzk7cyBwcnVkZW50IHRvIGV4cGFuZCBteSBzZWFyY2ggYW5kIHJldmlzaXQgYSBmaWxlIHRoYXQmIzM5O3MgY2xvc2VseSByZWxhdGVkIHRvIHRoaXMgb25lLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgYG5ldC9pcHY2L2lwNm1yLmNgIGFzIHdlbGwuIE1pZ2h0IGJlIHNvbWV0aGluZyB3b3J0aCBsb29raW5nIGF0IGluIHRoZXJlIHRoYXQgSSYjMzk7dmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdHtcbiA2OTE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gNjkyOlx0XHRjaGFyIG5hbWVbSUZOQU1TSVpdO1xuIDY5MzpcdFxuIDY5NDpcdFx0aWYgKG1ydC1cdTAwM2VpZCA9PSBSVDZfVEFCTEVfREZMVClcbiA2OTU6XHRcdFx0c3Ryc2NweShuYW1lLCBcJiMzNDtwaW02cmVnXCYjMzQ7LCBJRk5BTVNJWik7XG4gNjk2Olx0XHRlbHNlXG4gNjk3Olx0XHRcdHNwcmludGYobmFtZSwgXCYjMzQ7cGltNnJlZyV1XCYjMzQ7LCBtcnQtXHUwMDNlaWQpO1xuIDY5ODpcdFxuIDY5OTpcdFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KDAsIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHJlZ192aWZfc2V0dXApO1xuIDcwMDpcdFx0aWYgKCFkZXYpXG4gNzAxOlx0XHRcdHJldHVybiBOVUxMO1xuIDcwMjpcdFxuIDcwMzpcdFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xuIDcwNDpcdFxuIDcwNTpcdFx0aWYgKHJlZ2lzdGVyX25ldGRldmljZShkZXYpKSB7XG4gNzA2Olx0XHRcdGZyZWVfbmV0ZGV2KGRldik7XG4gNzA3Olx0XHRcdHJldHVybiBOVUxMO1xuIDcwODpcdFx0fVxuIDcwOTpcdFxuIDcxMDpcdFx0aWYgKGRldl9vcGVuKGRldiwgTlVMTCkpXG4gNzExOlx0XHRcdGdvdG8gZmFpbHVyZTtcbiA3MTI6XHRcbiA3MTM6XHRcdGRldl9ob2xkKGRldik7XG4gNzE0Olx0XHRyZXR1cm4gZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQ1CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgIFJlcGxhY2VtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgYW5kIGV4Y2VsbGVudCBleGFtcGxlIG9mIGRlZmVuc2l2ZSBjb2RpbmcuIFRoZXkmIzM5O3JlIHJlcGxhY2luZyBpbnN0YW5jZXMgb2YgYHNwcmludGZgIHdpdGhvdXQgYW55IGZvcm1hdCBzcGVjaWZpZXJzIChvciB3aXRoIGEgY29uc3RhbnQgc3RyaW5nIHRlbXBsYXRlKSB3aXRoIGBzdHJzY3B5YC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgdGhlc2UgY2FzZXM6CgoqICAgYHNwcmludGYobmFtZSwgJiMzNDtpcDZ0bmwlJWQmIzM0OylgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYHN0cnNjcHkobmFtZSwgJiMzNDtpcDZ0bmwlZCYjMzQ7LCBJRk5BTVNJWilgCiogICBgc3ByaW50ZihuYW1lLCAmIzM0O2lwNl92dGklJWQmIzM0OylgIGlzIGJlY29taW5nIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKWAKKiAgIEFuZCBmaW5hbGx5LCBgc3ByaW50ZihuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OylgIGlzIG5vdyBgc3Ryc2NweShuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OywgSUZOQU1TSVopYC4KClRoZSBgbmFtZWAgYnVmZmVyLCBpbXBvcnRhbnRseSwgaXMgYSBzdGFjay1hbGxvY2F0ZWQgYGNoYXIgbmFtZVtJRk5BTVNJWl1gIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCB3aXRoIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBsaXRlcmFsICpib3RoKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGJ1ZmZlciB0aGF0JiMzOTtzIGFscmVhZHkgc2FmZS4gVGhlIGNydWNpYWwgYmVuZWZpdCBvZiBgc3Ryc2NweWAgaGVyZSBpcyB0aGF0IGl0IGd1YXJhbnRlZXMgbnVsbC10ZXJtaW5hdGlvbiwgd2hpY2gsIGZvciBhIGRldmljZSBuYW1lIHRlbXBsYXRlLCBpcyAqZXNzZW50aWFsKi4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBpZiB0aGUgc3RyaW5nIGdldHMgdHJ1bmNhdGVkLCB3aGljaCBpcyBjcml0aWNhbC4KClRoZSBjb2RlIHRoZW4gcGFzc2VzIHRoaXMgYG5hbWVgIHN0cmluZyB0byBgYWxsb2NfbmV0ZGV2YC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGFsbG9jX25ldGRldmAgd29ya3MsIGl0IGxpa2VseSBlaXRoZXIgY29waWVzIHRoaXMgdGVtcGxhdGUgZGlyZWN0bHkgb3IgdXNlcyBpdCBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGUgYWN0dWFsIGRldmljZSBuYW1lIChhcyBpbiBgYWxsb2NfbmV0ZGV2X21xc2ApLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkIGhlcmUuIE5vIHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBnZXR0aW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBkZXRlY3RvciBpc3N1ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzIGFuZCBydWxlIG91dCBhbnkgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zLiBJJiMzOTtsbCBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgY29tbW9uIEtNU0FOIGdvdGNoYXM6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nOioqIE5vcGUsIG5vdCBhIGZhY3RvciBoZXJlLiBgbmFtZWAgaXMgYSBjaGFyIGFycmF5LCBpdCYjMzk7cyBqdXN0IGEgc3RyaW5nLCBhbmQgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZCBjYXJlZnVsbHkuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBObywgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuCjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBObyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBKdXN0IGEgc2ltcGxlIHN0cmluZy4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCBgc3Ryc2NweWAgdGFrZXMgY2FyZSBvZiB0aGUgYm91bmRzLgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlIGNoYW5nZSBhbmQgY29uZmlybWluZyBteSBhc3N1bXB0aW9ucywgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgZmFsc2UuIFRoZSBwYXRjaCBpcyBhIHNvbGlkLCBzYWZlIGltcHJvdmVtZW50IGFuZCBJJiMzOTttIHJlYWR5IHRvIGNyYWZ0IG15IHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjYWxscyB0byBzcHJpbnRmKCkgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiBuZXQvaXB2Ni9pcDZfdHVubmVsLmMsIG5ldC9pcHY2L2lwNl92dGkuYywgYW5kIG5ldC9pcHY2L2lwNm1yLmMuIFRoZSBzdHJpbmcgbGl0ZXJhbHMgYXJlIHN0YXRpYyBhbmQgc2FmZWx5IGNvcGllZCBpbnRvIGxvY2FsIHN0YWNrIGJ1ZmZlcnMgd2l0aCBib3VuZGVkIGxlbmd0aCAoSUZOQU1TSVopIGFuZCBndWFyYW50ZWVkIE5VTCB0ZXJtaW5hdGlvbi4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgY2FsbHMgdG8gc3ByaW50ZigpIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gbmV0L2lwdjYvaXA2X3R1bm5lbC5jLCBuZXQvaXB2Ni9pcDZfdnRpLmMsIGFuZCBuZXQvaXB2Ni9pcDZtci5jLiBUaGUgc3RyaW5nIGxpdGVyYWxzIGFyZSBzdGF0aWMgYW5kIHNhZmVseSBjb3BpZWQgaW50byBsb2NhbCBzdGFjayBidWZmZXJzIHdpdGggYm91bmRlZCBsZW5ndGggKElGTkFNU0laKSBhbmQgZ3VhcmFudGVlZCBOVUwgdGVybWluYXRpb24uIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6MjkuNTYwMTQyNjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjMyNDI0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIklQVjZfVlRJXCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfY3JlYXRlXCIsXG4gICAgXCJ2dGk2X3RubF9jcmVhdGVcIixcbiAgICBcImlwNm1yX3JlZ192aWZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIHNwcmludGYoKSB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIG5ldC9pcHY2L2lwNl90dW5uZWwuYywgbmV0L2lwdjYvaXA2X3Z0aS5jLCBhbmQgbmV0L2lwdjYvaXA2bXIuYy4gVGhlIHN0cmluZyBsaXRlcmFscyBhcmUgc3RhdGljIGFuZCBzYWZlbHkgY29waWVkIGludG8gbG9jYWwgc3RhY2sgYnVmZmVycyB3aXRoIGJvdW5kZWQgbGVuZ3RoIChJRk5BTVNJWikgYW5kIGd1YXJhbnRlZWQgTlVMIHRlcm1pbmF0aW9uLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3ByaW50ZigpIGNhbGxzIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gcmVhY2hhYmxlIElQdjYgdHVubmVsLCBWVEksIGFuZCBtdWx0aWNhc3Qgcm91dGluZyBkZXZpY2UgY3JlYXRpb24gcm91dGluZXMuIFRoZXNlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN5c2NhbGxzIChydG5ldGxpbmsvaW9jdGwvc2V0c29ja29wdCkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjI5LjU2MDE3MTkyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NjIyMDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5MGNmOGU3ZGRhNThmZjk5NTNiZjNjNmZjZjI0Mzg4M2JiZDY5MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjoxMjoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBkNWZmNTBhMmFjMDE3Li5lZjNhNmQ5MzFjOWVhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0yOTQsNyArMjk0LDcgQEAgc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4gXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcdFxcdHN0cnNjcHkobmFtZSwgcC1cXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzcHJpbnRmKG5hbWUsIFxcXCJpcDZ0bmwlJWRcXFwiKTtcXG4rXFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2dG5sJWRcXFwiLCBJRk5BTVNJWik7XFxuIFxcdH1cXG4gXFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuY1xcbmluZGV4IGFiOTRiM2E0YmE5YzMuLjE4MmE3OTQ5ZDgzMDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3Z0aS5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXFxuQEAgLTIxMCw3ICsyMTAsNyBAQCBzdGF0aWMgc3RydWN0IGlwNl90bmwgKnZ0aTZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcFxcbiBcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFx0XFx0c3Ryc2NweShuYW1lLCBwLVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNwcmludGYobmFtZSwgXFxcImlwNl92dGklJWRcXFwiKTtcXG4rXFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2X3Z0aSVkXFxcIiwgSUZOQU1TSVopO1xcbiBcXHR9XFxuIFxcbiBcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuY1xcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjIwYWM4Y2I4NzQ2ODQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xcbisrKyBiL25ldC9pcHY2L2lwNm1yLmNcXG5AQCAtNjkyLDcgKzY5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxcbiBcXHRjaGFyIG5hbWVbSUZOQU1TSVpdO1xcbiBcXG4gXFx0aWYgKG1ydC1cXHUwMDNlaWQgPT0gUlQ2X1RBQkxFX0RGTFQpXFxuLVxcdFxcdHNwcmludGYobmFtZSwgXFxcInBpbTZyZWdcXFwiKTtcXG4rXFx0XFx0c3Ryc2NweShuYW1lLCBcXFwicGltNnJlZ1xcXCIsIElGTkFNU0laKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzcHJpbnRmKG5hbWUsIFxcXCJwaW02cmVnJXVcXFwiLCBtcnQtXFx1MDAzZWlkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjMxLjA0NzAxNDMyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUwNzg5NDg0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIklQVjZfVlRJXCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfY3JlYXRlXCIsXG4gICAgXCJ2dGk2X3RubF9jcmVhdGVcIixcbiAgICBcImlwNm1yX3JlZ192aWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzcHJpbnRmKCkgY2FsbHMgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiByZWFjaGFibGUgSVB2NiB0dW5uZWwsIFZUSSwgYW5kIG11bHRpY2FzdCByb3V0aW5nIGRldmljZSBjcmVhdGlvbiByb3V0aW5lcy4gVGhlc2UgdmlydHVhbCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3lzY2FsbHMgKHJ0bmV0bGluay9pb2N0bC9zZXRzb2Nrb3B0KSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTBjZjhlN2RkYTU4ZmY5OTUzYmYzYzZmY2YyNDM4ODNiYmQ2OTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjoxMjoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uZWYzYTZkOTMxYzllYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO1xuK1x0XHRzdHJzY3B5KG5hbWUsIFwiaXA2dG5sJWRcIiwgSUZOQU1TSVopO1xuIFx0fVxuIFx0ZXJyID0gLUVOT01FTTtcbiBcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuY1xuaW5kZXggYWI5NGIzYTRiYTljMy4uMTgyYTc5NDlkODMwNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl92dGkuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXG5AQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2X3Z0aSUlZFwiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcImlwNl92dGklZFwiLCBJRk5BTVNJWik7XG4gXHR9XG4gXG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li4yMGFjOGNiODc0Njg0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTY5Miw3ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiBcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gXG4gXHRpZiAobXJ0LVx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxuLVx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZ1wiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopO1xuIFx0ZWxzZVxuIFx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZyV1XCIsIG1ydC1cdTAwM2VpZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjozMS4wNDcwMTYwOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTYyNzQyMTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgZGlmZi4gTG9va3MgbGlrZSB3ZSdyZSBzZWVpbmcgc29tZSByZXBsYWNlbWVudHMgb2YgYHNwcmludGZgIHdpdGggYHN0cnNjcHlgIGluIGEgZmV3IElQdjYtcmVsYXRlZCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGlwNl90dW5uZWwuY2AsIGBpcDZfdnRpLmNgLCBhbmQgYGlwNm1yLmNgLlxuXG5UaGUgZmlyc3QgbW9kaWZpY2F0aW9uIGluIGBpcDZfdHVubmVsLmNgIGNvbmNlcm5zIGBpcDZfdG5sX2NyZWF0ZWAgYW5kIHN3YXBzIG91dCB0aGF0IGBzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO2Agd2l0aCBgc3Ryc2NweShuYW1lLCBcImlwNnRubCVkXCIsIElGTkFNU0laKTtgLiBTaW1pbGFybHksIGZvciBgaXA2X3Z0aS5jYCBhbmQgYHZ0aTZfdG5sX2NyZWF0ZWAsIHRoZSBjaGFuZ2UgaXMgYHNwcmludGYobmFtZSwgXCJpcDZfdnRpJSVkXCIpO2AgdG8gYHN0cnNjcHkobmFtZSwgXCJpcDZfdnRpJWRcIiwgSUZOQU1TSVopO2AuIEFuZCBmaW5hbGx5LCBpbiBgaXA2bXIuY2Agd2l0aGluIGBpcDZtcl9yZWdfdmlmYCwgdGhlIGVkaXQgZ29lcyBmcm9tIGBzcHJpbnRmKG5hbWUsIFwicGltNnJlZ1wiKTtgIHRvIGBzdHJzY3B5KG5hbWUsIFwicGltNnJlZ1wiLCBJRk5BTVNJWik7YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QgY2hhbmdlOyBgc3Ryc2NweWAgaXMgZ2VuZXJhbGx5IHNhZmVyIHRoYW4gYHNwcmludGZgIGJlY2F1c2UgaXQgcHJldmVudHMgYnVmZmVyIG92ZXJmbG93cyBieSBlbnN1cmluZyB0aGUgc3RyaW5nIGlzIHByb3Blcmx5IHRydW5jYXRlZCB0byBmaXQgd2l0aGluIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHNpemUsIGBJRk5BTVNJWmAgaW4gdGhlc2UgaW5zdGFuY2VzLlxuXG5Ob3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhlc2UgZnVuY3Rpb25zLCB0byBtYWtlIGNlcnRhaW4gdGhhdCBubyB1bmV4cGVjdGVkIGJlaGF2aW9ycyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gSSdsbCBhbHNvIHdhbnQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgb2YgdGhlc2UgZmlsZXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdW51c3VhbCB0aGVyZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gbG93LWxldmVsIG5ldHdvcmtpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NCwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjM2LjYwOTc2MjIwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM5MjA3MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJFxcXFwoQ09ORklHXy4qXFxcXCkgXFxcXCtcXFxcKz0gaXA2X3R1bm5lbC5vfG9iai1cXFxcJFxcXFwoQ09ORklHXy4qXFxcXCkgXFxcXCtcXFxcKz0gaXA2bXIub3xvYmotXFxcXCRcXFxcKENPTkZJR18uKlxcXFwpIFxcXFwrXFxcXCs9IGlwNl92dGkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6MzYuNzMzNjkxODk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNTg5MzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgSVB2NiBzdHVmZiBpcyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCDigJMgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIElQdjYgY29tcG9uZW50cyBzaG91bGQgYmUgZGVmaW5lZCBoZXJlLCByaWdodD8gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0J2xsIGluY2x1ZGUgdGhpbmdzIGxpa2Ugb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncyBzcGVjaWZpYyB0byBJUHY2LCBwcm9iYWJseSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgaG93IGRpZmZlcmVudCBJUHY2IG1vZHVsZXMgYXJlIGxpbmtlZCB0b2dldGhlci4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGlkZW50aWZ5IHRoZSBrZXkgdGFyZ2V0cyBhbmQgdmFyaWFibGVzIHJlbGV2YW50IHRvIHRoZSBtb2R1bGVzIEknbSBjdXJyZW50bHkgd29ya2luZyB3aXRoLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuLi4gdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjozOS4xNDk1ODczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU4NTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfdHVubmVsfGlwNm1yfGlwNl92dGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgKz0gaXA2bXIub1xcbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGU9Mzg9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIvXFxubmV0L2lwdjYvTWFrZWZpbGUtMzktXFxubmV0L2lwdjYvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0lQVjZfVlRJKSArPSBpcDZfdnRpLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00MS1vYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjozOS4yMzUxNzc5MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUwNDM5ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgVHVubmVsaW5nIGFuZCBSb3V0aW5nIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24sIGxldCdzIHF1aWNrbHkgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NiB0dW5uZWwgb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgLiBJdCdzIHRoZSBjZW50cmFsIHBsYWNlIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY2IGFyZSBkZWZpbmVkLCBzbyBpdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIG9mIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1ZUSWAsIGFuZCBgSVBWNl9NUk9VVEVgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBvcHRpb25zIGludGVycmVsYXRlIGlzIGNyaXRpY2FsOyBrbm93aW5nIHdoYXQgb3RoZXIgZmVhdHVyZXMgdGhleSBpbXBsaWNpdGx5IGVuYWJsZSBvciByZXF1aXJlIHdpbGwgYmUgY3J1Y2lhbCB3aGVuIEkgYXNzZXNzIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLCBhbmQgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBBIHF1aWNrIHNjYW4gb2YgYEtjb25maWdgIHdpbGwgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0IGVhY2ggb3B0aW9uIGVudGFpbHMuIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzMiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjQxLjI4NTYyMTg0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM2Mjc3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfVFVOTkVMfGNvbmZpZyBJUFY2X1ZUSXxjb25maWcgSVBWNl9NUk9VVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjQxLjQxOTI1MzMyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDAzNDU5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBjb25maWd1cmF0aW9ucywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXJ0aWN1bGFyIGJpdCBsaWVzIGluIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBzb3VyY2UgZm9yIGFsbCB0aGluZ3MgSVB2NiBjb25maWd1cmF0aW9uIHJlbGF0ZWQsIHNvIGl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdG8gc3RhcnQgdGhlcmUuIEknbSB0aGlua2luZywgXCJMZXQncyByZWFkIHRoZSBsaW5lcyBhcm91bmQgdGhlc2UgY29uZmlncyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuXCIgSSdtIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQuIFdoYXQgYXJlIHRoZSBhc3NvY2lhdGVkIGZlYXR1cmVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZ3JvdXBpbmdzIG9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgdGhlIG90aGVycz8gT25seSBieSBnZXR0aW5nIHRoZSB3aWRlciBwZXJzcGVjdGl2ZSB3aWxsIEkgdHJ1bHkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBjb25maWcuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGNsdWUgcmVsYXRpbmcgdG8gZW5hYmxpbmcgYW5kIGRpc2FibGluZyBzb21lIElQdjYgZmVhdHVyZS4gSSdsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlbiBjaXJjbGUgYmFjayB3aXRoIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo0My41NTk2MDIxNzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIElORVQ2X1RVTk5FTFxcbiAxNDc6XFx0XFx0dHJpc3RhdGVcXG4gMTQ4OlxcdFxcdGRlZmF1bHQgblxcbiAxNDk6XFx0XFxuIDE1MDpcXHRjb25maWcgSVBWNl9WVElcXG4gMTUxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4gMTUyOlxcdFxcdHNlbGVjdCBJUFY2X1RVTk5FTFxcbiAxNTM6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTU0OlxcdFxcdHNlbGVjdCBYRlJNXFxuIDE1NTpcXHRcXHRoZWxwXFxuIDE1NjpcXHRcXHRUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxcbiAxNTc6XFx0XFx0YW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxNTg6XFx0XFx0ZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHhmcm0gbW9kZSB0dW5uZWwgdG8gZ2l2ZVxcbiAxNTk6XFx0XFx0dGhlIG5vdGlvbiBvZiBhIHNlY3VyZSB0dW5uZWwgZm9yIElQU0VDIGFuZCB0aGVuIHVzZSByb3V0aW5nIHByb3RvY29sXFxuIDE2MDpcXHRcXHRvbiB0b3AuXFxuIDE2MTpcXHRcXG4gMTYyOlxcdGNvbmZpZyBJUFY2X1NJVFxcbiAxNjM6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbiAxNjQ6XFx0XFx0c2VsZWN0IElORVRfVFVOTkVMXFxuIDE2NTpcXHRcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbiAxNjY6XFx0XFx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcXG4gMTY3OlxcdFxcdGRlZmF1bHQgbVxcbiAxNjg6XFx0XFx0aGVscFxcbiAxNjk6XFx0XFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxcbiAxNzA6XFx0XFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXFxuIDE3MTpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgZW5jYXBzdWxhdGlvbiBvZiBJUHY2XFxuIDE3MjpcXHRcXHQgIGludG8gSVB2NCBwYWNrZXRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHR3byBJUHY2XFxuIDE3MzpcXHRcXHQgIG5ldHdvcmtzIG92ZXIgYW4gSVB2NC1vbmx5IHBhdGguXFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdCAgU2F5aW5nIE0gaGVyZSB3aWxsIHByb2R1Y2UgYSBtb2R1bGUgY2FsbGVkIHNpdC4gSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0Y29uZmlnIElQVjZfU0lUXzZSRFxcbiAxNzg6XFx0XFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbiAxNzk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1NJVFxcbiAxODA6XFx0XFx0ZGVmYXVsdCBuXFxuIDE4MTpcXHRcXHRoZWxwXFxuIDE4MjpcXHRcXHQgIElQdjYgUmFwaWQgRGVwbG95bWVudCAoNnJkOyBkcmFmdC1pZXRmLXNvZnR3aXJlLWlwdjYtNnJkKSBidWlsZHMgdXBvblxcbiAxODM6XFx0XFx0ICBtZWNoYW5pc21zIG9mIDZ0bzQgKFJGQzMwNTYpIHRvIGVuYWJsZSBhIHNlcnZpY2UgcHJvdmlkZXIgdG8gcmFwaWRseVxcbiAxODQ6XFx0XFx0ICBkZXBsb3kgSVB2NiB1bmljYXN0IHNlcnZpY2UgdG8gSVB2NCBzaXRlcyB0byB3aGljaCBpdCBwcm92aWRlc1xcbiAxODU6XFx0XFx0ICBjdXN0b21lciBwcmVtaXNlIGVxdWlwbWVudC4gIExpa2UgNnRvNCwgaXQgdXRpbGl6ZXMgc3RhdGVsZXNzIElQdjYgaW5cXG4gMTg2OlxcdFxcdCAgSVB2NCBlbmNhcHN1bGF0aW9uIGluIG9yZGVyIHRvIHRyYW5zaXQgSVB2NC1vbmx5IG5ldHdvcmtcXG4gMTg3OlxcdFxcdCAgaW5mcmFzdHJ1Y3R1cmUuICBVbmxpa2UgNnRvNCwgYSA2cmQgc2VydmljZSBwcm92aWRlciB1c2VzIGFuIElQdjZcXG4gMTg4OlxcdFxcdCAgcHJlZml4IG9mIGl0cyBvd24gaW4gcGxhY2Ugb2YgdGhlIGZpeGVkIDZ0bzQgcHJlZml4LlxcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHQgIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlIFNJVCBkcml2ZXIgb2ZmZXJzIDZyZCBmdW5jdGlvbmFsaXR5IGJ5XFxuIDE5MTpcXHRcXHQgIHByb3ZpZGluZyBhZGRpdGlvbmFsIGlvY3RsIEFQSSB0byBjb25maWd1cmUgdGhlIElQdjYgUHJlZml4IGZvciBpblxcbiAxOTI6XFx0XFx0ICBzdGVhZCBvZiBzdGF0aWMgMjAwMjo6LzE2IGZvciA2dG80LlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE5NTpcXHRcXG4gMTk2OlxcdGNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuIDE5NzpcXHRcXHRib29sXFxuIDE5ODpcXHRcXG4gMTk5OlxcdGNvbmZpZyBJUFY2X1RVTk5FTFxcbiAyMDA6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4gMjAxOlxcdFxcdHNlbGVjdCBJTkVUNl9UVU5ORUxcXG4gMjAyOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMjAzOlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gMjA0OlxcdFxcdGhlbHBcXG4gMjA1OlxcdFxcdCAgU3VwcG9ydCBmb3IgSVB2Ni1pbi1JUHY2IGFuZCBJUHY0LWluLUlQdjYgdHVubmVscyBkZXNjcmliZWQgaW5cXG4gMjA2OlxcdFxcdCAgUkZDIDI0NzMuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo0My41NTk3MjAxNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY4OTY2ODU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQdjYgTXVsdGljYXN0IFJvdXRpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3MgZGlnIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgSVBWNl9NUk9VVEVgLiBUaGlzIGlzIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCB0byB2ZXJpZnkgYmVmb3JlIG1vdmluZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjQ1LjI0OTM5MTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHQgIG5vcm1hbCBhbmQgc291cmNlIHByZWZpeCBzcGVjaWZpYyByb3V0ZXMgaW4gdGhlIHNhbWUgcm91dGluZyB0YWJsZVxcbiAyNTE6XFx0XFx0ICBtYXkgc29tZXRpbWVzIGxlYWQgdG8gdW5pbnRlbmRlZCByb3V0aW5nIGJlaGF2aW9yLiAgVGhpcyBjYW4gYmVcXG4gMjUyOlxcdFxcdCAgYXZvaWRlZCBieSBkZWZpbmluZyBkaWZmZXJlbnQgcm91dGluZyB0YWJsZXMgZm9yIHRoZSBub3JtYWwgYW5kXFxuIDI1MzpcXHRcXHQgIHNvdXJjZSBwcmVmaXggc3BlY2lmaWMgcm91dGVzLlxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI1NjpcXHRcXG4gMjU3OlxcdGNvbmZpZyBJUFY2X01ST1VURVxcbiAyNTg6XFx0XFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuIDI1OTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjYwOlxcdFxcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXFxuIDI2MTpcXHRcXHRoZWxwXFxuIDI2MjpcXHRcXHQgIFN1cHBvcnQgZm9yIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcuXFxuIDI2MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2NDpcXHRcXG4gMjY1OlxcdGNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG4gMjY2OlxcdFxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4gMjY3OlxcdFxcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcXG4gMjY4OlxcdFxcdHNlbGVjdCBGSUJfUlVMRVNcXG4gMjY5OlxcdFxcdGhlbHBcXG4gMjcwOlxcdFxcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xcbiAyNzE6XFx0XFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXFxuIDI3MjpcXHRcXHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXFxuIDI3MzpcXHRcXHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cXG4gMjc0OlxcdFxcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xcbiAyNzU6XFx0XFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjc4OlxcdFxcbiAyNzk6XFx0Y29uZmlnIElQVjZfUElNU01fVjJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NDUuMjQ5NDk3NDg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MTQxMzAxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgSVB2NiBOZXR3b3JraW5nIFBhdGNoZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgY29kZSBjaGFuZ2VzIGFuZCBmaWd1cmUgb3V0IGlmIHRoZXkgd2FycmFudCBmdXp6aW5nLiBGaXJzdCwgSSdtIGV4YW1pbmluZyB0aGUgZGlmZnMgaW4gZGV0YWlsLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBob3cgZGV2aWNlIG5hbWVzIGFyZSBnZW5lcmF0ZWQgZm9yIGNlcnRhaW4gSVB2Ni1yZWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBpbnRlcmZhY2VzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGludm9sdmUgcmVwbGFjaW5nIGBzcHJpbnRmYCB3aXRoIGBzdHJzY3B5YCBpbiBgaXA2X3RubF9jcmVhdGVgLCBgdnRpNl90bmxfY3JlYXRlYCwgYW5kIGBpcDZtcl9yZWdfdmlmYC5cblxuSW5pdGlhbGx5LCBJJ20gbm90aW5nIHRoZSBmb3JtYXQgc3RyaW5nIGRpZmZlcmVuY2UuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHNwcmludGZgIHdpdGggZm9ybWF0IHN0cmluZ3MgY29udGFpbmluZyBgJWRgLCBpbnRlbmRpbmcgdG8gaGF2ZSB0aGUga2VybmVsJ3MgbmFtaW5nIG1lY2hhbmlzbSBzdWJzdGl0dXRlIGFuIGludGVnZXIgZm9yIGAlZGAgd2hlbiBjcmVhdGluZyB0aGUgZGV2aWNlIG5hbWUuIFRoZSBuZXcgY29kZSBzaW1wbHkgY29waWVzIGxpdGVyYWwgc3RyaW5ncy4gSW4gYm90aCBjYXNlcywgdGhlIGRldmljZSBuYW1lIGVuZHMgdXAgd2l0aCBgJWRgIGluIGl0LCBhbmQgYGFsbG9jX25ldGRldmAgaXMgdGhlbiBjYWxsZWQsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGRldl9hbGxvY19uYW1lYCB3aGljaCBoYW5kbGVzIHRoZSBgJWRgIGZvcm1hdHRpbmcsIHNvIGl0IGxvb2tzIGxpa2UgZnVuY3Rpb25hbGx5IHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZS5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudC4gRm9ydHVuYXRlbHksIEkga25vdyBJUHY2IHR1bm5lbHMgKGBpcDZ0bmxgKSwgSVB2NiBWVEkgKGBpcDZfdnRpYCksIGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIChgaXA2bXJgKSBhcmUgc3RhbmRhcmQgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIHByb3RvY29scy4gVGhleSdyZSBhY2Nlc3NpYmxlIHRocm91Z2ggY29tbW9uIHN5c3RlbSBjYWxscyBsaWtlIGBydG5ldGxpbmtgLCBgaW9jdGxgLCBhbmQgYHNldHNvY2tvcHRgIGZvciBtdWx0aWNhc3Qgcm91dGluZy4gU28sIHllcywgdGhpcyBjb2RlICppcyogZXhlY3V0YWJsZSBhbmQgcmVsZXZhbnQgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSwgSSBoYXZlIHRvIGNvbnN1bHQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbiAxIHN0cmVzc2VzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudCwgYW5kIFNlY3Rpb24gMyBjbGVhcmx5IHN0YXRlcyB0aGF0IGFueSBjaGFuZ2VzIHdpdGhpbiBcImNvcmUgbmV0d29ya2luZ1wiIGFuZCBcInJlYWNoYWJsZSBwcm90b2NvbHNcIiAqbXVzdCogYmUgZnV6emVkLCBpbmNsdWRpbmcgcmVmYWN0b3JpbmdzLiBFdmVuIGlmIGl0ICpzZWVtcyogbGlrZSBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgZGV2aWNlIG5hbWUgZ2VuZXJhdGlvbiBtZXRob2QgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlIGNyZWF0aW9uIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzLiBTZWN0aW9uIDIsIGNvbnZlcnNlbHksIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGluZ3Mgd2hpY2ggYXJlICpub3QqIGZ1enphYmxlLCBidXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBmYWxsIGludG8gYW55IG9mIHRob3NlIGNhdGVnb3JpZXMuIFNvLCBnaXZlbiB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHJlbGF0ZWQgdG8gY29yZSBuZXR3b3JraW5nLCBJJ20gY29uY2x1ZGluZyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuVGhlcmVmb3JlLCBJJ2xsIGZsYWcgdGhlc2UgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMgZm9yIGZ1cnRoZXIgZnV6emluZzogYGlwNl90bmxfY3JlYXRlYCwgYHZ0aTZfdG5sX2NyZWF0ZWAsIGFuZCBgaXA2bXJfcmVnX3ZpZmAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZWlyIHNvdXJjZSBsb2NhdGlvbnMgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IHN5bWJvbHMgYW5kIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NTAuOTYzNjMxMjQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEzOTgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9jcmVhdGV8dnRpNl90bmxfY3JlYXRlfGlwNm1yX3JlZ192aWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yNDU9c3RhdGljIHZvaWQgaXA2X2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjUyLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyNTM6c3RhdGljIGludCBpcDZfdG5sX2NyZWF0ZTIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjU0LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yNzMtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjI3NDogKiBpcDZfdG5sX2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyB0dW5uZWxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjc1LSAqICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yODQtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjI4NTpzdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yODYte1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTMwOS1cXHR0LVxcdTAwM2VuZXQgPSBkZXZfbmV0KGRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjMxMDpcXHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMzExLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTMzNz1zdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0zNTktXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjM2MDpcXHRyZXR1cm4gaXA2X3RubF9jcmVhdGUobmV0LCBwKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMzYxLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yMDY4PXN0YXRpYyBpbnQgaXA2X3RubF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwMjpcXHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMy1cXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiB0YltJRkxBX01UVV0pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9MTY1PXZ0aTZfdG5sX3VubGluayhzdHJ1Y3QgdnRpNl9uZXQgKmlwNm4sIHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTE3OS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTgwOnN0YXRpYyBpbnQgdnRpNl90bmxfY3JlYXRlMihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L2lwNl92dGkuYy0xODEte1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTIwMC1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MjAxOnN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbm5ldC9pcHY2L2lwNl92dGkuYy0yMDIte1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTIyNS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MjI2OlxcdGVyciA9IHZ0aTZfdG5sX2NyZWF0ZTIoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjI3LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jPTI1Mj1zdGF0aWMgc3RydWN0IGlwNl90bmwgKnZ0aTZfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwLFxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTI3My1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvaXB2Ni9pcDZfdnRpLmM6Mjc0OlxcdHJldHVybiB2dGk2X3RubF9jcmVhdGUobmV0LCBwKTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjc1LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl92dGkuYz0xMDEwPXN0YXRpYyBpbnQgdnRpNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTAyNy1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTAyODpcXHRyZXR1cm4gdnRpNl90bmxfY3JlYXRlMihkZXYpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDI5LX1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9Njc5PXN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNjg4LVxcbm5ldC9pcHY2L2lwNm1yLmM6Njg5OnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxcbm5ldC9pcHY2L2lwNm1yLmMtNjkwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9OTA2PXN0YXRpYyBpbnQgbWlmNl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtOTI3LVxcdFxcdFxcdHJldHVybiAtRUFERFJJTlVTRTtcXG5uZXQvaXB2Ni9pcDZtci5jOjkyODpcXHRcXHRkZXYgPSBpcDZtcl9yZWdfdmlmKG5ldCwgbXJ0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTkyOS1cXHRcXHRpZiAoIWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NTEuNjI1MDMzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzc1ODI2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQdjYgVHVubmVsaW5nIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgSVB2NiB0dW5uZWxpbmcuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYENPTkZJR19JUFY2YCwgYENPTkZJR19JUFY2X1RVTk5FTGAsIGBDT05GSUdfSVBWNl9WVElgLCBhbmQgYENPTkZJR19JUFY2X01ST1VURWAuIEV4Y2VsbGVudC4gSSdsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9yIGlmIHRoZXNlIGFyZSBpbmRlZWQgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWdzLlxuXG5BIHF1aWNrIGRpdmUgaW50byB0aGUgS2NvbmZpZyByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzLiBgSVBWNl9UVU5ORUxgIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZGVwZW5kcyBvbiBub3RoaW5nIGV4cGxpY2l0bHkgKHRob3VnaCBpdCAqc2VsZWN0cyogYElORVQ2X1RVTk5FTGAsIGBEU1RfQ0FDSEVgLCBhbmQgYEdST19DRUxMU2ApIGJ1dCBpcyBnYXRlZCBieSBhbiBgaWYgSVBWNmAgY2xhdXNlLiBgSVBWNl9WVElgIHNlbGVjdHMgYElQVjZfVFVOTkVMYCwgYE5FVF9JUF9UVU5ORUxgLCBhbmQgYFhGUk1gLCBhbmQgYElQVjZfTVJPVVRFYCAqZG9lcyogZGVwZW5kIG9uIGBJUFY2YC4gVGhlcmVmb3JlLCB0aGUgbGlzdCBJIG9yaWdpbmFsbHkgaGFkIGlzIGFjY3VyYXRlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMgdGFyZ2V0ZWQgZm9yIGZ1enppbmcuIFdlJ3JlIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBrZXJuZWwgZnVuY3Rpb25zOiBgaXA2X3RubF9jcmVhdGVgLCBgdnRpNl90bmxfY3JlYXRlYCwgYW5kIGBpcDZtcl9yZWdfdmlmYC4gVGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBjcmVhdGlvbiBhbmQgcmVnaXN0cmF0aW9uIG9mIHR1bm5lbHMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uLlxuXG5FdmVyeXRoaW5nIHNlZW1zIHRvIGFsaWduLiBUaGUgaW5zdHJ1Y3Rpb25zIGluZGljYXRlIGBXb3J0aEZ1enppbmc6IHRydWVgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0ZWQgZ2l2ZW4gdGhlIGZvY3VzIG9uIHNwZWNpZmljLCBsZXNzIHViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IGFuZCBub24tdWJpcXVpdG91cywgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjb21wbGV0ZSAoYWZ0ZXIgc3RyaXBwaW5nIHRoZSBgQ09ORklHX2AgcHJlZml4ZXMpLiBUaGUgcmVhc29uaW5nIGlzIGFsc28gY2xlYXIgYW5kIGNvbmNpc2UuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg1OCwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NTYuMDAwODYzNDM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDk2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9WVElcIixcbiAgICBcIklQVjZfTVJPVVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X3RubF9jcmVhdGVcIixcbiAgICBcInZ0aTZfdG5sX2NyZWF0ZVwiLFxuICAgIFwiaXA2bXJfcmVnX3ZpZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNwcmludGYoKSBjYWxscyB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIHJlYWNoYWJsZSBJUHY2IHR1bm5lbCwgVlRJLCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgZGV2aWNlIGNyZWF0aW9uIHJvdXRpbmVzLiBUaGVzZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzeXNjYWxscyAocnRuZXRsaW5rL2lvY3RsL3NldHNvY2tvcHQpIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1ZUSVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcDZfdG5sX2NyZWF0ZVwiLFxuICAgIFwidnRpNl90bmxfY3JlYXRlXCIsXG4gICAgXCJpcDZtcl9yZWdfdmlmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3ByaW50ZigpIGNhbGxzIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gcmVhY2hhYmxlIElQdjYgdHVubmVsLCBWVEksIGFuZCBtdWx0aWNhc3Qgcm91dGluZyBkZXZpY2UgY3JlYXRpb24gcm91dGluZXMuIFRoZXNlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN5c2NhbGxzIChydG5ldGxpbmsvaW9jdGwvc2V0c29ja29wdCkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjU2LjEyNTk2NjU3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTc0MDk3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo1Ni4xMjY0MjcxMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzY5Njk0NTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY2FsbHMgdG8gc3ByaW50ZigpIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gbmV0L2lwdjYvaXA2X3R1bm5lbC5jLCBuZXQvaXB2Ni9pcDZfdnRpLmMsIGFuZCBuZXQvaXB2Ni9pcDZtci5jLiBUaGUgc3RyaW5nIGxpdGVyYWxzIGFyZSBzdGF0aWMgYW5kIHNhZmVseSBjb3BpZWQgaW50byBsb2NhbCBzdGFjayBidWZmZXJzIHdpdGggYm91bmRlZCBsZW5ndGggKElGTkFNU0laKSBhbmQgZ3VhcmFudGVlZCBOVUwgdGVybWluYXRpb24uIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTBjZjhlN2RkYTU4ZmY5OTUzYmYzYzZmY2YyNDM4ODNiYmQ2OTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjoxMjoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uZWYzYTZkOTMxYzllYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO1xuK1x0XHRzdHJzY3B5KG5hbWUsIFwiaXA2dG5sJWRcIiwgSUZOQU1TSVopO1xuIFx0fVxuIFx0ZXJyID0gLUVOT01FTTtcbiBcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuY1xuaW5kZXggYWI5NGIzYTRiYTljMy4uMTgyYTc5NDlkODMwNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl92dGkuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXG5AQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2X3Z0aSUlZFwiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcImlwNl92dGklZFwiLCBJRk5BTVNJWik7XG4gXHR9XG4gXG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li4yMGFjOGNiODc0Njg0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTY5Miw3ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiBcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gXG4gXHRpZiAobXJ0LVx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxuLVx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZ1wiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopO1xuIFx0ZWxzZVxuIFx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZyV1XCIsIG1ydC1cdTAwM2VpZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo1Ni4xMjY0MjgyODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzNDcxMzczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogUG90ZW50aWFsIElzc3Vlcz8qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgd2l0aGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLCBgbmV0L2lwdjYvaXA2X3Z0aS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYCDigJMgYWxsIGNvcmUgSVB2NiBuZXR3b3JraW5nIGFyZWFzLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHdoYXQgYWN0dWFsbHkgY2hhbmdlZC5cblxuQWxyaWdodCwgaGVyZSdzIHRoZSBicmVha2Rvd246IEl0IGxvb2tzIGxpa2UgaW4gYGlwNl90dW5uZWwuY2AsIGBzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO2Agd2FzIHJlcGxhY2VkIHdpdGggYHN0cnNjcHkobmFtZSwgXCJpcDZ0bmwlZFwiLCBJRk5BTVNJWik7YC4gU2ltaWxhciBzd2FwcyBoYXBwZW5lZCBpbiBgaXA2X3Z0aS5jYDogYHNwcmludGYobmFtZSwgXCJpcDZfdnRpJSVkXCIpO2AgYmVjYW1lIGBzdHJzY3B5KG5hbWUsIFwiaXA2X3Z0aSVkXCIsIElGTkFNU0laKTtgLiBBbmQgZmluYWxseSwgaW4gYGlwNm1yLmNgLCB3ZSBzZWUgYHNwcmludGYobmFtZSwgXCJwaW02cmVnXCIpO2AgcmVwbGFjZWQgd2l0aCBgc3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopO2AuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQuLi4gbGV0J3MgY29tcGFyZSB0aGVzZSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgIGNoYW5nZXMuIExvb2tpbmcgYXQgYHNwcmludGYobmFtZSwgXCJpcDZ0bmwlJWRcIilgIHZlcnN1cyBgc3Ryc2NweShuYW1lLCBcImlwNnRubCVkXCIsIElGTkFNU0laKWAsIHRoZSBpbml0aWFsIHVzYWdlIG9mIHRoZSBgc3ByaW50ZmAgd2l0aCBgXCJpcDZ0bmwlJWRcImAgcHJvZHVjZXMgdGhlIGxpdGVyYWwgc3RyaW5nIGBcImlwNnRubCVkXCJgIGJlY2F1c2UgdGhlIGRvdWJsZSBwZXJjZW50IHNpZ25zIGFyZSBlc2NhcGVkIGZvcm1hdCBzcGVjaWZpZXJzLiBXaXRoIGBzdHJzY3B5YCwgd2UncmUgc2ltcGx5IGNvcHlpbmcgdGhlIGxpdGVyYWwgc3RyaW5nIGBcImlwNnRubCVkXCJgLiBCb3RoIGltcGxlbWVudGF0aW9ucyByZXN1bHQgaW4gdGhlIHNhbWUgb3V0cHV0LCBgXCJpcDZ0bmwlZFwiYCBhbmQsIHNpbmNlIGBuYW1lYCBpcyBwcm9iYWJseSBhIGZpeGVkIHNpemUgYnVmZmVyLCB0aGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIG51bGwtdGVybWluYXRlZC4gU28sIG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIG1vdmUgZnJvbSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgLiBUaGlzIGNvdWxkIGJlIGFib3V0IHJlbW92aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBidXQgaXQncyBoYXJkIHRvIHRlbGwgd2l0aG91dCBhZGRpdGlvbmFsIGNvbnRleHQuXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCAqd2h5KiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGRlbGliZXJhdGUgYXR0ZW1wdCB0byBhdm9pZCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiBgc3ByaW50ZmA/IElmIHNvLCB0aGlzIGlzIGdvb2QuIEJ1dCBpdCBzZWVtcyBzdHJhbmdlIGJlY2F1c2UgdGhlIGV4aXN0aW5nIGBzcHJpbnRmYCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBiZSBzYWZlIGdpdmVuIHRoZSB1c2FnZSwgYW5kIHRoZSB1c2Ugb2YgdGhlIGRvdWJsZSBwZXJjZW50YWdlIGluIHRoZSBzdHJpbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4gSSdsbCBncmFiIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrIHRob3NlIGNvZGUgc2VjdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzowMS45NjExNDU5OTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4gMjg2OlxcdHtcXG4gMjg3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDI4ODpcXHRcXHRzdHJ1Y3QgaXA2X3RubCAqdDtcXG4gMjg5OlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl07XFxuIDI5MDpcXHRcXHRpbnQgZXJyID0gLUUyQklHO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAocC1cXHUwMDNlbmFtZVswXSkge1xcbiAyOTM6XFx0XFx0XFx0aWYgKCFkZXZfdmFsaWRfbmFtZShwLVxcdTAwM2VuYW1lKSlcXG4gMjk0OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAyOTU6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBwLVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIDI5NjpcXHRcXHR9IGVsc2Uge1xcbiAyOTc6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2dG5sJWRcXFwiLCBJRk5BTVNJWik7XFxuIDI5ODpcXHRcXHR9XFxuIDI5OTpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAzMDA6XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sXFxuIDMwMTpcXHRcXHRcXHRcXHQgICBpcDZfdG5sX2Rldl9zZXR1cCk7XFxuIDMwMjpcXHRcXHRpZiAoIWRldilcXG4gMzAzOlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAzMDQ6XFx0XFxuIDMwNTpcXHRcXHRkZXZfbmV0X3NldChkZXYsIG5ldCk7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdHQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiAzMDg6XFx0XFx0dC1cXHUwMDNlcGFybXMgPSAqcDtcXG4gMzA5OlxcdFxcdHQtXFx1MDAzZW5ldCA9IGRldl9uZXQoZGV2KTtcXG4gMzEwOlxcdFxcdGVyciA9IGlwNl90bmxfY3JlYXRlMihkZXYpO1xcbiAzMTE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDMxMjpcXHRcXHRcXHRnb3RvIGZhaWxlZF9mcmVlO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRyZXR1cm4gdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTM6MDEuOTYxMzEwODgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzc2ODc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NiBWaXJ0dWFsIFR1bm5lbCBJbnRlcmZhY2VzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBiZWhhdmlvciwgaXQncyBjbGVhciBJIGNhbid0IGp1c3QgZm9jdXMgb24gdGhlIG9idmlvdXMuIEknbSB0aGlua2luZywgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIGludG8gSVB2NiB2aXJ0dWFsIHR1bm5lbCBpbnRlcmZhY2VzIG5lZWRzIHRvIGludm9sdmUgbW9yZSB0aGFuIGp1c3QgYSBzdXJmYWNlLWxldmVsIGxvb2suIFRvIGJlIHRydWx5IGNvbXByZWhlbnNpdmUsIEkgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgbmV0L2lwdjYvaXA2X3Z0aS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgVlRJIGNvZGUgaXMgY3J1Y2lhbCBoZXJlLiBHaXZlbiB0aGF0IEknbSBkZWFsaW5nIHdpdGggcm91dGluZyBhbmQgZm9yd2FyZGluZywgSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCBgbmV0L2lwdjYvaXA2bXIuY2Agd2hpbGUgSSdtIGF0IGl0LiBJdCdzIHByb2JhYmx5IHdvcnRoIGtlZXBpbmcgYW4gZXllIG9uIG11bHRpY2FzdCByb3V0aW5nIGFzIHdlbGwsIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgVlRJIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzowNC4wMzkwMDEyNDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl92dGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFxuIDIwMTpcXHRzdGF0aWMgc3RydWN0IGlwNl90bmwgKnZ0aTZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4gMjAyOlxcdHtcXG4gMjAzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDIwNDpcXHRcXHRzdHJ1Y3QgaXA2X3RubCAqdDtcXG4gMjA1OlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl07XFxuIDIwNjpcXHRcXHRpbnQgZXJyO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRpZiAocC1cXHUwMDNlbmFtZVswXSkge1xcbiAyMDk6XFx0XFx0XFx0aWYgKCFkZXZfdmFsaWRfbmFtZShwLVxcdTAwM2VuYW1lKSlcXG4gMjEwOlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAyMTE6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBwLVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIDIxMjpcXHRcXHR9IGVsc2Uge1xcbiAyMTM6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2X3Z0aSVkXFxcIiwgSUZOQU1TSVopO1xcbiAyMTQ6XFx0XFx0fVxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xcbiAyMTc6XFx0XFx0aWYgKCFkZXYpXFxuIDIxODpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xcbiAyMjE6XFx0XFxuIDIyMjpcXHRcXHR0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gMjIzOlxcdFxcdHQtXFx1MDAzZXBhcm1zID0gKnA7XFxuIDIyNDpcXHRcXHR0LVxcdTAwM2VuZXQgPSBkZXZfbmV0KGRldik7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdFxcdGVyciA9IHZ0aTZfdG5sX2NyZWF0ZTIoZGV2KTtcXG4gMjI3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAyMjg6XFx0XFx0XFx0Z290byBmYWlsZWRfZnJlZTtcXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzowNC4wMzkxMjg4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyNjE0MDU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBJUHY2IE11bHRpY2FzdCBSb3V0aW5nKipcblxuT2theSwgSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEknbSBtaXNzaW5nIHNvbWV0aGluZywgYSBzdWJ0bGUgaW50ZXJhY3Rpb24sIHBlcmhhcHMgaW4gYSBjb3JuZXIgY2FzZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2guIEJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIGl0J3MgcHJ1ZGVudCB0byBleHBhbmQgbXkgc2VhcmNoIGFuZCByZXZpc2l0IGEgZmlsZSB0aGF0J3MgY2xvc2VseSByZWxhdGVkIHRvIHRoaXMgb25lLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgYG5ldC9pcHY2L2lwNm1yLmNgIGFzIHdlbGwuIE1pZ2h0IGJlIHNvbWV0aGluZyB3b3J0aCBsb29raW5nIGF0IGluIHRoZXJlIHRoYXQgSSd2ZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEzOjA2Ljc2NTI3MzQxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2bXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0e1xcbiA2OTE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gNjkyOlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl07XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdGlmIChtcnQtXFx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxcbiA2OTU6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBcXFwicGltNnJlZ1xcXCIsIElGTkFNU0laKTtcXG4gNjk2OlxcdFxcdGVsc2VcXG4gNjk3OlxcdFxcdFxcdHNwcmludGYobmFtZSwgXFxcInBpbTZyZWcldVxcXCIsIG1ydC1cXHUwMDNlaWQpO1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHRkZXYgPSBhbGxvY19uZXRkZXYoMCwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgcmVnX3ZpZl9zZXR1cCk7XFxuIDcwMDpcXHRcXHRpZiAoIWRldilcXG4gNzAxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRkZXZfbmV0X3NldChkZXYsIG5ldCk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGlmIChyZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KSkge1xcbiA3MDY6XFx0XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gNzA3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDg6XFx0XFx0fVxcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRpZiAoZGV2X29wZW4oZGV2LCBOVUxMKSlcXG4gNzExOlxcdFxcdFxcdGdvdG8gZmFpbHVyZTtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0ZGV2X2hvbGQoZGV2KTtcXG4gNzE0OlxcdFxcdHJldHVybiBkZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEzOjA2Ljc2NTU1MTg4MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDU3Nzk4MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzcHJpbnRmYCB0byBgc3Ryc2NweWAgUmVwbGFjZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuZCBleGNlbGxlbnQgZXhhbXBsZSBvZiBkZWZlbnNpdmUgY29kaW5nLiBUaGV5J3JlIHJlcGxhY2luZyBpbnN0YW5jZXMgb2YgYHNwcmludGZgIHdpdGhvdXQgYW55IGZvcm1hdCBzcGVjaWZpZXJzIChvciB3aXRoIGEgY29uc3RhbnQgc3RyaW5nIHRlbXBsYXRlKSB3aXRoIGBzdHJzY3B5YC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkcmVzc2luZyB0aGVzZSBjYXNlczpcblxuKiAgIGBzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpYCBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBzdHJzY3B5KG5hbWUsIFwiaXA2dG5sJWRcIiwgSUZOQU1TSVopYFxuKiAgIGBzcHJpbnRmKG5hbWUsIFwiaXA2X3Z0aSUlZFwiKWAgaXMgYmVjb21pbmcgYHN0cnNjcHkobmFtZSwgXCJpcDZfdnRpJWRcIiwgSUZOQU1TSVopYFxuKiAgIEFuZCBmaW5hbGx5LCBgc3ByaW50ZihuYW1lLCBcInBpbTZyZWdcIilgIGlzIG5vdyBgc3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopYC5cblxuVGhlIGBuYW1lYCBidWZmZXIsIGltcG9ydGFudGx5LCBpcyBhIHN0YWNrLWFsbG9jYXRlZCBgY2hhciBuYW1lW0lGTkFNU0laXWAgYW5kIGl0J3MgaW5pdGlhbGl6ZWQgd2l0aCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgbGl0ZXJhbCAqYm90aCogYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGJ1ZmZlciB0aGF0J3MgYWxyZWFkeSBzYWZlLiBUaGUgY3J1Y2lhbCBiZW5lZml0IG9mIGBzdHJzY3B5YCBoZXJlIGlzIHRoYXQgaXQgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uLCB3aGljaCwgZm9yIGEgZGV2aWNlIG5hbWUgdGVtcGxhdGUsIGlzICplc3NlbnRpYWwqLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIGlmIHRoZSBzdHJpbmcgZ2V0cyB0cnVuY2F0ZWQsIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5UaGUgY29kZSB0aGVuIHBhc3NlcyB0aGlzIGBuYW1lYCBzdHJpbmcgdG8gYGFsbG9jX25ldGRldmAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBhbGxvY19uZXRkZXZgIHdvcmtzLCBpdCBsaWtlbHkgZWl0aGVyIGNvcGllcyB0aGlzIHRlbXBsYXRlIGRpcmVjdGx5IG9yIHVzZXMgaXQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhlIGFjdHVhbCBkZXZpY2UgbmFtZSAoYXMgaW4gYGFsbG9jX25ldGRldl9tcXNgKS4gSSdtIGNvbmZpZGVudCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkIGhlcmUuIE5vIHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBnZXR0aW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGRldGVjdG9yIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgYW5kIHJ1bGUgb3V0IGFueSBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuIEknbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIGNvbW1vbiBLTVNBTiBnb3RjaGFzOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nOioqIE5vcGUsIG5vdCBhIGZhY3RvciBoZXJlLiBgbmFtZWAgaXMgYSBjaGFyIGFycmF5LCBpdCdzIGp1c3QgYSBzdHJpbmcsIGFuZCBpdCdzIGJlaW5nIGhhbmRsZWQgY2FyZWZ1bGx5LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBhbnl0aGluZyB1bmluaXRpYWxpemVkLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIE5vIGNvbXBsZXggc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQuIEp1c3QgYSBzaW1wbGUgc3RyaW5nLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCBgc3Ryc2NweWAgdGFrZXMgY2FyZSBvZiB0aGUgYm91bmRzLlxuXG5BbHJpZ2h0LCBhZnRlciByZXZpZXdpbmcgdGhlIGNvZGUgY2hhbmdlIGFuZCBjb25maXJtaW5nIG15IGFzc3VtcHRpb25zLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGVseSBmYWxzZS4gVGhlIHBhdGNoIGlzIGEgc29saWQsIHNhZmUgaW1wcm92ZW1lbnQgYW5kIEknbSByZWFkeSB0byBjcmFmdCBteSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0NSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzoxMy44MjMzNTIyMTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIHNwcmludGYoKSB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIG5ldC9pcHY2L2lwNl90dW5uZWwuYywgbmV0L2lwdjYvaXA2X3Z0aS5jLCBhbmQgbmV0L2lwdjYvaXA2bXIuYy4gVGhlIHN0cmluZyBsaXRlcmFscyBhcmUgc3RhdGljIGFuZCBzYWZlbHkgY29waWVkIGludG8gbG9jYWwgc3RhY2sgYnVmZmVycyB3aXRoIGJvdW5kZWQgbGVuZ3RoIChJRk5BTVNJWikgYW5kIGd1YXJhbnRlZWQgTlVMIHRlcm1pbmF0aW9uLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY2FsbHMgdG8gc3ByaW50ZigpIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gbmV0L2lwdjYvaXA2X3R1bm5lbC5jLCBuZXQvaXB2Ni9pcDZfdnRpLmMsIGFuZCBuZXQvaXB2Ni9pcDZtci5jLiBUaGUgc3RyaW5nIGxpdGVyYWxzIGFyZSBzdGF0aWMgYW5kIHNhZmVseSBjb3BpZWQgaW50byBsb2NhbCBzdGFjayBidWZmZXJzIHdpdGggYm91bmRlZCBsZW5ndGggKElGTkFNU0laKSBhbmQgZ3VhcmFudGVlZCBOVUwgdGVybWluYXRpb24uIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 21:25:12 +0000 UTC FinishedAt: 2026-09-09 22:13:15 +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": "fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_TUNNEL", "IPV6_VTI", "IPV6_MROUTE" ], "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": "fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_TUNNEL", "IPV6_VTI", "IPV6_MROUTE" ], "series_id": "e1db2798-29ed-427e-ab29-7b7705653ed9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_tnl_create", "vti6_tnl_create", "ip6mr_reg_vif" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfdG5sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2dGk2X3RubF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXA2bXJfcmVnX3ZpZiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIHNwcmludGYoKSB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIG5ldC9pcHY2L2lwNl90dW5uZWwuYywgbmV0L2lwdjYvaXA2X3Z0aS5jLCBhbmQgbmV0L2lwdjYvaXA2bXIuYy4gVGhlIHN0cmluZyBsaXRlcmFscyBhcmUgc3RhdGljIGFuZCBzYWZlbHkgY29waWVkIGludG8gbG9jYWwgc3RhY2sgYnVmZmVycyB3aXRoIGJvdW5kZWQgbGVuZ3RoIChJRk5BTVNJWikgYW5kIGd1YXJhbnRlZWQgTlVMIHRlcm1pbmF0aW9uLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNwcmludGYoKSBjYWxscyB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIHJlYWNoYWJsZSBJUHY2IHR1bm5lbCwgVlRJLCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgZGV2aWNlIGNyZWF0aW9uIHJvdXRpbmVzLiBUaGVzZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzeXNjYWxscyAocnRuZXRsaW5rL2lvY3RsL3NldHNvY2tvcHQpIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTkwY2Y4ZTdkZGE1OGZmOTk1M2JmM2M2ZmNmMjQzODgzYmJkNjkxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MTI6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBkNWZmNTBhMmFjMDE3Li5lZjNhNmQ5MzFjOWVhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0yOTQsNyAmIzQzOzI5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwmIzM0O2lwNnRubCUlZFwmIzM0Oyk7XG4mIzQzO1x0XHRzdHJzY3B5KG5hbWUsIFwmIzM0O2lwNnRubCVkXCYjMzQ7LCBJRk5BTVNJWik7XG4gXHR9XG4gXHRlcnIgPSAtRU5PTUVNO1xuIFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3Z0aS5jIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXG5pbmRleCBhYjk0YjNhNGJhOWMzLi4xODJhNzk0OWQ4MzA3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3Z0aS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdnRpLmNcbkBAIC0yMTAsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwmIzM0O2lwNl92dGklJWRcJiMzNDspO1xuJiM0MztcdFx0c3Ryc2NweShuYW1lLCBcJiMzNDtpcDZfdnRpJWRcJiMzNDssIElGTkFNU0laKTtcbiBcdH1cbiBcbiBcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCB2dGk2X2Rldl9zZXR1cCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjIwYWM4Y2I4NzQ2ODQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiBcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gXG4gXHRpZiAobXJ0LVx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxuLVx0XHRzcHJpbnRmKG5hbWUsIFwmIzM0O3BpbTZyZWdcJiMzNDspO1xuJiM0MztcdFx0c3Ryc2NweShuYW1lLCBcJiMzNDtwaW02cmVnXCYjMzQ7LCBJRk5BTVNJWik7XG4gXHRlbHNlXG4gXHRcdHNwcmludGYobmFtZSwgXCYjMzQ7cGltNnJlZyV1XCYjMzQ7LCBtcnQtXHUwMDNlaWQpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfdG5sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2dGk2X3RubF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXA2bXJfcmVnX3ZpZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzcHJpbnRmKCkgY2FsbHMgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiByZWFjaGFibGUgSVB2NiB0dW5uZWwsIFZUSSwgYW5kIG11bHRpY2FzdCByb3V0aW5nIGRldmljZSBjcmVhdGlvbiByb3V0aW5lcy4gVGhlc2UgdmlydHVhbCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3lzY2FsbHMgKHJ0bmV0bGluay9pb2N0bC9zZXRzb2Nrb3B0KSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5MGNmOGU3ZGRhNThmZjk5NTNiZjNjNmZjZjI0Mzg4M2JiZDY5MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDIyOjEyOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGQ1ZmY1MGEyYWMwMTcuLmVmM2E2ZDkzMWM5ZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTI5NCw3ICYjNDM7Mjk0LDcgQEAgc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCkKIAkJCWdvdG8gZmFpbGVkOwogCQlzdHJzY3B5KG5hbWUsIHAtJmd0O25hbWUsIElGTkFNU0laKTsKIAl9IGVsc2UgewotCQlzcHJpbnRmKG5hbWUsICYjMzQ7aXA2dG5sJSVkJiMzNDspOwomIzQzOwkJc3Ryc2NweShuYW1lLCAmIzM0O2lwNnRubCVkJiMzNDssIElGTkFNU0laKTsKIAl9CiAJZXJyID0gLUVOT01FTTsKIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuYwppbmRleCBhYjk0YjNhNGJhOWMzLi4xODJhNzk0OWQ4MzA3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdnRpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3Z0aS5jCkBAIC0yMTAsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwCiAJCQlnb3RvIGZhaWxlZDsKIAkJc3Ryc2NweShuYW1lLCBwLSZndDtuYW1lLCBJRk5BTVNJWik7CiAJfSBlbHNlIHsKLQkJc3ByaW50ZihuYW1lLCAmIzM0O2lwNl92dGklJWQmIzM0Oyk7CiYjNDM7CQlzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKTsKIAl9CiAKIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggM2YyZWQ5Yjc3ZGViNS4uMjBhYzhjYjg3NDY4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC02OTIsNyAmIzQzOzY5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KQogCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKIAlpZiAobXJ0LSZndDtpZCA9PSBSVDZfVEFCTEVfREZMVCkKLQkJc3ByaW50ZihuYW1lLCAmIzM0O3BpbTZyZWcmIzM0Oyk7CiYjNDM7CQlzdHJzY3B5KG5hbWUsICYjMzQ7cGltNnJlZyYjMzQ7LCBJRk5BTVNJWik7CiAJZWxzZQogCQlzcHJpbnRmKG5hbWUsICYjMzQ7cGltNnJlZyV1JiMzNDssIG1ydC0mZ3Q7aWQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjQKCQkJCQkJCW91dHB1dDogNzkKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGRpZmYuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIHNlZWluZyBzb21lIHJlcGxhY2VtZW50cyBvZiBgc3ByaW50ZmAgd2l0aCBgc3Ryc2NweWAgaW4gYSBmZXcgSVB2Ni1yZWxhdGVkIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGlwNl90dW5uZWwuY2AsIGBpcDZfdnRpLmNgLCBhbmQgYGlwNm1yLmNgLgoKVGhlIGZpcnN0IG1vZGlmaWNhdGlvbiBpbiBgaXA2X3R1bm5lbC5jYCBjb25jZXJucyBgaXA2X3RubF9jcmVhdGVgIGFuZCBzd2FwcyBvdXQgdGhhdCBgc3ByaW50ZihuYW1lLCAmIzM0O2lwNnRubCUlZCYjMzQ7KTtgIHdpdGggYHN0cnNjcHkobmFtZSwgJiMzNDtpcDZ0bmwlZCYjMzQ7LCBJRk5BTVNJWik7YC4gU2ltaWxhcmx5LCBmb3IgYGlwNl92dGkuY2AgYW5kIGB2dGk2X3RubF9jcmVhdGVgLCB0aGUgY2hhbmdlIGlzIGBzcHJpbnRmKG5hbWUsICYjMzQ7aXA2X3Z0aSUlZCYjMzQ7KTtgIHRvIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKTtgLiBBbmQgZmluYWxseSwgaW4gYGlwNm1yLmNgIHdpdGhpbiBgaXA2bXJfcmVnX3ZpZmAsIHRoZSBlZGl0IGdvZXMgZnJvbSBgc3ByaW50ZihuYW1lLCAmIzM0O3BpbTZyZWcmIzM0Oyk7YCB0byBgc3Ryc2NweShuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OywgSUZOQU1TSVopO2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgZ29vZCBjaGFuZ2U7IGBzdHJzY3B5YCBpcyBnZW5lcmFsbHkgc2FmZXIgdGhhbiBgc3ByaW50ZmAgYmVjYXVzZSBpdCBwcmV2ZW50cyBidWZmZXIgb3ZlcmZsb3dzIGJ5IGVuc3VyaW5nIHRoZSBzdHJpbmcgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIHRvIGZpdCB3aXRoaW4gdGhlIHNwZWNpZmllZCBidWZmZXIgc2l6ZSwgYElGTkFNU0laYCBpbiB0aGVzZSBpbnN0YW5jZXMuCgpOb3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZXNlIGZ1bmN0aW9ucywgdG8gbWFrZSBjZXJ0YWluIHRoYXQgbm8gdW5leHBlY3RlZCBiZWhhdmlvcnMgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEkmIzM5O2xsIGFsc28gd2FudCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBvZiB0aGVzZSBmaWxlcyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbCB0aGVyZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gbG93LWxldmVsIG5ldHdvcmtpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfLipcXCkgXFwmIzQzO1xcJiM0Mzs9IGlwNl90dW5uZWwub3xvYmotXFwkXFwoQ09ORklHXy4qXFwpIFxcJiM0MztcXCYjNDM7PSBpcDZtci5vfG9iai1cXCRcXChDT05GSUdfLipcXCkgXFwmIzQzO1xcJiM0Mzs9IGlwNl92dGkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIElQdjYgc3R1ZmYgaXMgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgSVB2NiBjb21wb25lbnRzIHNob3VsZCBiZSBkZWZpbmVkIGhlcmUsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtsbCBpbmNsdWRlIHRoaW5ncyBsaWtlIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgY29tcGlsYXRpb24gZmxhZ3Mgc3BlY2lmaWMgdG8gSVB2NiwgcHJvYmFibHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGhvdyBkaWZmZXJlbnQgSVB2NiBtb2R1bGVzIGFyZSBsaW5rZWQgdG9nZXRoZXIuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaWRlbnRpZnkgdGhlIGtleSB0YXJnZXRzIGFuZCB2YXJpYWJsZXMgcmVsZXZhbnQgdG8gdGhlIG1vZHVsZXMgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyB3aXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLi4uIHRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90dW5uZWx8aXA2bXJ8aXA2X3Z0aSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTE1PWlwdjYtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY2Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjE2OmlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0xNy1cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkVURklMVEVSKVx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9pcHY2L01ha2VmaWxlLTM5LVxubmV0L2lwdjYvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0lQVjZfVlRJKSAmIzQzOz0gaXA2X3Z0aS5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00MS1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMyCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSVB2NiBUdW5uZWxpbmcgYW5kIFJvdXRpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24sIGxldCYjMzk7cyBxdWlja2x5IGV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIElQdjYgdHVubmVsIG9wdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcGxhY2Ugd2hlcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgYXJlIGRlZmluZWQsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIG9mIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1ZUSWAsIGFuZCBgSVBWNl9NUk9VVEVgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBvcHRpb25zIGludGVycmVsYXRlIGlzIGNyaXRpY2FsOyBrbm93aW5nIHdoYXQgb3RoZXIgZmVhdHVyZXMgdGhleSBpbXBsaWNpdGx5IGVuYWJsZSBvciByZXF1aXJlIHdpbGwgYmUgY3J1Y2lhbCB3aGVuIEkgYXNzZXNzIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLCBhbmQgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBBIHF1aWNrIHNjYW4gb2YgYEtjb25maWdgIHdpbGwgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0IGVhY2ggb3B0aW9uIGVudGFpbHMuIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9UVU5ORUx8Y29uZmlnIElQVjZfVlRJfGNvbmZpZyBJUFY2X01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOTY9Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI0Mz1jb25maWcgSVBWNl9TVUJUUkVFU1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY29uZmlndXJhdGlvbnMsIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBiaXQgbGllcyBpbiB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgbGluZXMgaW4gYG5ldC9pcHY2L0tjb25maWdgLiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgc291cmNlIGZvciBhbGwgdGhpbmdzIElQdjYgY29uZmlndXJhdGlvbiByZWxhdGVkLCBzbyBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyByZWFkIHRoZSBsaW5lcyBhcm91bmQgdGhlc2UgY29uZmlncyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuJiMzNDsgSSYjMzk7bSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGFueSBjb25kaXRpb25hbCBsb2dpYywgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJlc2VudGVkLiBXaGF0IGFyZSB0aGUgYXNzb2NpYXRlZCBmZWF0dXJlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGdyb3VwaW5ncyBvciByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBvdGhlcnM/IE9ubHkgYnkgZ2V0dGluZyB0aGUgd2lkZXIgcGVyc3BlY3RpdmUgd2lsbCBJIHRydWx5IHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcGFjdCBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlnLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgY2x1ZSByZWxhdGluZyB0byBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHNvbWUgSVB2NiBmZWF0dXJlLiBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlbiBjaXJjbGUgYmFjayB3aXRoIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQ1Olx0XG4gMTQ2Olx0Y29uZmlnIElORVQ2X1RVTk5FTFxuIDE0NzpcdFx0dHJpc3RhdGVcbiAxNDg6XHRcdGRlZmF1bHQgblxuIDE0OTpcdFxuIDE1MDpcdGNvbmZpZyBJUFY2X1ZUSVxuIDE1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbiAxNTI6XHRcdHNlbGVjdCBJUFY2X1RVTk5FTFxuIDE1MzpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAxNTQ6XHRcdHNlbGVjdCBYRlJNXG4gMTU1Olx0XHRoZWxwXG4gMTU2Olx0XHRUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE1NzpcdFx0YW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDE1ODpcdFx0ZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHhmcm0gbW9kZSB0dW5uZWwgdG8gZ2l2ZVxuIDE1OTpcdFx0dGhlIG5vdGlvbiBvZiBhIHNlY3VyZSB0dW5uZWwgZm9yIElQU0VDIGFuZCB0aGVuIHVzZSByb3V0aW5nIHByb3RvY29sXG4gMTYwOlx0XHRvbiB0b3AuXG4gMTYxOlx0XG4gMTYyOlx0Y29uZmlnIElQVjZfU0lUXG4gMTYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuIDE2NDpcdFx0c2VsZWN0IElORVRfVFVOTkVMXG4gMTY1Olx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDE2NjpcdFx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcbiAxNjc6XHRcdGRlZmF1bHQgbVxuIDE2ODpcdFx0aGVscFxuIDE2OTpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE3MDpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMTcxOlx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgZW5jYXBzdWxhdGlvbiBvZiBJUHY2XG4gMTcyOlx0XHQgIGludG8gSVB2NCBwYWNrZXRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHR3byBJUHY2XG4gMTczOlx0XHQgIG5ldHdvcmtzIG92ZXIgYW4gSVB2NC1vbmx5IHBhdGguXG4gMTc0Olx0XG4gMTc1Olx0XHQgIFNheWluZyBNIGhlcmUgd2lsbCBwcm9kdWNlIGEgbW9kdWxlIGNhbGxlZCBzaXQuIElmIHVuc3VyZSwgc2F5IE0uXG4gMTc2Olx0XG4gMTc3Olx0Y29uZmlnIElQVjZfU0lUXzZSRFxuIDE3ODpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbiAxNzk6XHRcdGRlcGVuZHMgb24gSVBWNl9TSVRcbiAxODA6XHRcdGRlZmF1bHQgblxuIDE4MTpcdFx0aGVscFxuIDE4MjpcdFx0ICBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZyZDsgZHJhZnQtaWV0Zi1zb2Z0d2lyZS1pcHY2LTZyZCkgYnVpbGRzIHVwb25cbiAxODM6XHRcdCAgbWVjaGFuaXNtcyBvZiA2dG80IChSRkMzMDU2KSB0byBlbmFibGUgYSBzZXJ2aWNlIHByb3ZpZGVyIHRvIHJhcGlkbHlcbiAxODQ6XHRcdCAgZGVwbG95IElQdjYgdW5pY2FzdCBzZXJ2aWNlIHRvIElQdjQgc2l0ZXMgdG8gd2hpY2ggaXQgcHJvdmlkZXNcbiAxODU6XHRcdCAgY3VzdG9tZXIgcHJlbWlzZSBlcXVpcG1lbnQuICBMaWtlIDZ0bzQsIGl0IHV0aWxpemVzIHN0YXRlbGVzcyBJUHY2IGluXG4gMTg2Olx0XHQgIElQdjQgZW5jYXBzdWxhdGlvbiBpbiBvcmRlciB0byB0cmFuc2l0IElQdjQtb25seSBuZXR3b3JrXG4gMTg3Olx0XHQgIGluZnJhc3RydWN0dXJlLiAgVW5saWtlIDZ0bzQsIGEgNnJkIHNlcnZpY2UgcHJvdmlkZXIgdXNlcyBhbiBJUHY2XG4gMTg4Olx0XHQgIHByZWZpeCBvZiBpdHMgb3duIGluIHBsYWNlIG9mIHRoZSBmaXhlZCA2dG80IHByZWZpeC5cbiAxODk6XHRcbiAxOTA6XHRcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgU0lUIGRyaXZlciBvZmZlcnMgNnJkIGZ1bmN0aW9uYWxpdHkgYnlcbiAxOTE6XHRcdCAgcHJvdmlkaW5nIGFkZGl0aW9uYWwgaW9jdGwgQVBJIHRvIGNvbmZpZ3VyZSB0aGUgSVB2NiBQcmVmaXggZm9yIGluXG4gMTkyOlx0XHQgIHN0ZWFkIG9mIHN0YXRpYyAyMDAyOjovMTYgZm9yIDZ0bzQuXG4gMTkzOlx0XG4gMTk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTk1Olx0XG4gMTk2Olx0Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbiAxOTc6XHRcdGJvb2xcbiAxOTg6XHRcbiAxOTk6XHRjb25maWcgSVBWNl9UVU5ORUxcbiAyMDA6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuIDIwMTpcdFx0c2VsZWN0IElORVQ2X1RVTk5FTFxuIDIwMjpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDIwMzpcdFx0c2VsZWN0IEdST19DRUxMU1xuIDIwNDpcdFx0aGVscFxuIDIwNTpcdFx0ICBTdXBwb3J0IGZvciBJUHY2LWluLUlQdjYgYW5kIElQdjQtaW4tSVB2NiB0dW5uZWxzIGRlc2NyaWJlZCBpblxuIDIwNjpcdFx0ICBSRkMgMjQ3My5cbiAyMDc6XHRcbiAyMDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUHY2IE11bHRpY2FzdCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzdGF0dXMgb2YgYElQVjZfTVJPVVRFYC4gVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IHRvIHZlcmlmeSBiZWZvcmUgbW92aW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGhhdCBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdCAgbm9ybWFsIGFuZCBzb3VyY2UgcHJlZml4IHNwZWNpZmljIHJvdXRlcyBpbiB0aGUgc2FtZSByb3V0aW5nIHRhYmxlXG4gMjUxOlx0XHQgIG1heSBzb21ldGltZXMgbGVhZCB0byB1bmludGVuZGVkIHJvdXRpbmcgYmVoYXZpb3IuICBUaGlzIGNhbiBiZVxuIDI1MjpcdFx0ICBhdm9pZGVkIGJ5IGRlZmluaW5nIGRpZmZlcmVudCByb3V0aW5nIHRhYmxlcyBmb3IgdGhlIG5vcm1hbCBhbmRcbiAyNTM6XHRcdCAgc291cmNlIHByZWZpeCBzcGVjaWZpYyByb3V0ZXMuXG4gMjU0Olx0XG4gMjU1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjU2Olx0XG4gMjU3Olx0Y29uZmlnIElQVjZfTVJPVVRFXG4gMjU4Olx0XHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjU5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyNjA6XHRcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXG4gMjYxOlx0XHRoZWxwXG4gMjYyOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcuXG4gMjYzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjY0Olx0XG4gMjY1Olx0Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xuIDI2NjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyNjc6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyNjg6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyNjk6XHRcdGhlbHBcbiAyNzA6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDI3MTpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjcyOlx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjczOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNzQ6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI3NTpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjc2Olx0XG4gMjc3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjc4Olx0XG4gMjc5Olx0Y29uZmlnIElQVjZfUElNU01fVjJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDgyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBJUHY2IE5ldHdvcmtpbmcgUGF0Y2hlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNvZGUgY2hhbmdlcyBhbmQgZmlndXJlIG91dCBpZiB0aGV5IHdhcnJhbnQgZnV6emluZy4gRmlyc3QsIEkmIzM5O20gZXhhbWluaW5nIHRoZSBkaWZmcyBpbiBkZXRhaWwuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBob3cgZGV2aWNlIG5hbWVzIGFyZSBnZW5lcmF0ZWQgZm9yIGNlcnRhaW4gSVB2Ni1yZWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBpbnRlcmZhY2VzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGludm9sdmUgcmVwbGFjaW5nIGBzcHJpbnRmYCB3aXRoIGBzdHJzY3B5YCBpbiBgaXA2X3RubF9jcmVhdGVgLCBgdnRpNl90bmxfY3JlYXRlYCwgYW5kIGBpcDZtcl9yZWdfdmlmYC4KCkluaXRpYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGZvcm1hdCBzdHJpbmcgZGlmZmVyZW5jZS4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgc3ByaW50ZmAgd2l0aCBmb3JtYXQgc3RyaW5ncyBjb250YWluaW5nIGAlZGAsIGludGVuZGluZyB0byBoYXZlIHRoZSBrZXJuZWwmIzM5O3MgbmFtaW5nIG1lY2hhbmlzbSBzdWJzdGl0dXRlIGFuIGludGVnZXIgZm9yIGAlZGAgd2hlbiBjcmVhdGluZyB0aGUgZGV2aWNlIG5hbWUuIFRoZSBuZXcgY29kZSBzaW1wbHkgY29waWVzIGxpdGVyYWwgc3RyaW5ncy4gSW4gYm90aCBjYXNlcywgdGhlIGRldmljZSBuYW1lIGVuZHMgdXAgd2l0aCBgJWRgIGluIGl0LCBhbmQgYGFsbG9jX25ldGRldmAgaXMgdGhlbiBjYWxsZWQsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGRldl9hbGxvY19uYW1lYCB3aGljaCBoYW5kbGVzIHRoZSBgJWRgIGZvcm1hdHRpbmcsIHNvIGl0IGxvb2tzIGxpa2UgZnVuY3Rpb25hbGx5IHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZS4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBjb2RlIHBhdGhzIGFyZSBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQuIEZvcnR1bmF0ZWx5LCBJIGtub3cgSVB2NiB0dW5uZWxzIChgaXA2dG5sYCksIElQdjYgVlRJIChgaXA2X3Z0aWApLCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyAoYGlwNm1yYCkgYXJlIHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGFuZCBwcm90b2NvbHMuIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgdGhyb3VnaCBjb21tb24gc3lzdGVtIGNhbGxzIGxpa2UgYHJ0bmV0bGlua2AsIGBpb2N0bGAsIGFuZCBgc2V0c29ja29wdGAgZm9yIG11bHRpY2FzdCByb3V0aW5nLiBTbywgeWVzLCB0aGlzIGNvZGUgKmlzKiBleGVjdXRhYmxlIGFuZCByZWxldmFudCBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLgoKR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSwgSSBoYXZlIHRvIGNvbnN1bHQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbiAxIHN0cmVzc2VzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudCwgYW5kIFNlY3Rpb24gMyBjbGVhcmx5IHN0YXRlcyB0aGF0IGFueSBjaGFuZ2VzIHdpdGhpbiAmIzM0O2NvcmUgbmV0d29ya2luZyYjMzQ7IGFuZCAmIzM0O3JlYWNoYWJsZSBwcm90b2NvbHMmIzM0OyAqbXVzdCogYmUgZnV6emVkLCBpbmNsdWRpbmcgcmVmYWN0b3JpbmdzLiBFdmVuIGlmIGl0ICpzZWVtcyogbGlrZSBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgZGV2aWNlIG5hbWUgZ2VuZXJhdGlvbiBtZXRob2QgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlIGNyZWF0aW9uIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzLiBTZWN0aW9uIDIsIGNvbnZlcnNlbHksIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGluZ3Mgd2hpY2ggYXJlICpub3QqIGZ1enphYmxlLCBidXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24mIzM5O3QgZmFsbCBpbnRvIGFueSBvZiB0aG9zZSBjYXRlZ29yaWVzLiBTbywgZ2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSByZWxhdGVkIHRvIGNvcmUgbmV0d29ya2luZywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBmbGFnIHRoZXNlIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGZ1enppbmc6IGBpcDZfdG5sX2NyZWF0ZWAsIGB2dGk2X3RubF9jcmVhdGVgLCBhbmQgYGlwNm1yX3JlZ192aWZgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGVpciBzb3VyY2UgbG9jYXRpb25zIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3Qgc3ltYm9scyBhbmQgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfY3JlYXRlfHZ0aTZfdG5sX2NyZWF0ZXxpcDZtcl9yZWdfdmlmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0yNDU9c3RhdGljIHZvaWQgaXA2X2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTI1Mi1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyNTM6c3RhdGljIGludCBpcDZfdG5sX2NyZWF0ZTIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yNTQte1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yNzMtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6Mjc0OiAqIGlwNl90bmxfY3JlYXRlIC0gY3JlYXRlIGEgbmV3IHR1bm5lbFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTI3NS0gKiAgIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTI4NC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyODU6c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yODYte1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0zMDktXHR0LVx1MDAzZW5ldCA9IGRldl9uZXQoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzozMTA6XHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0zMTEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0zMzc9c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTM1OS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MzYwOlx0cmV0dXJuIGlwNl90bmxfY3JlYXRlKG5ldCwgcCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMzYxLX1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2OD1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAxLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDI6XHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAzLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHRiW0lGTEFfTVRVXSlcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9MTY1PXZ0aTZfdG5sX3VubGluayhzdHJ1Y3QgdnRpNl9uZXQgKmlwNm4sIHN0cnVjdCBpcDZfdG5sICp0KVxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYy0xNzktXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTgwOnN0YXRpYyBpbnQgdnRpNl90bmxfY3JlYXRlMihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjYvaXA2X3Z0aS5jLTE4MS17XG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTIwMC1cbm5ldC9pcHY2L2lwNl92dGkuYzoyMDE6c3RhdGljIHN0cnVjdCBpcDZfdG5sICp2dGk2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjAyLXtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjI1LVxubmV0L2lwdjYvaXA2X3Z0aS5jOjIyNjpcdGVyciA9IHZ0aTZfdG5sX2NyZWF0ZTIoZGV2KTtcbm5ldC9pcHY2L2lwNl92dGkuYy0yMjctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYz0yNTI9c3RhdGljIHN0cnVjdCBpcDZfdG5sICp2dGk2X2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCxcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjczLVx0XHRyZXR1cm4gTlVMTDtcbm5ldC9pcHY2L2lwNl92dGkuYzoyNzQ6XHRyZXR1cm4gdnRpNl90bmxfY3JlYXRlKG5ldCwgcCk7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjc1LX1cbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9MTAxMD1zdGF0aWMgaW50IHZ0aTZfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYy0xMDI3LVxubmV0L2lwdjYvaXA2X3Z0aS5jOjEwMjg6XHRyZXR1cm4gdnRpNl90bmxfY3JlYXRlMihkZXYpO1xubmV0L2lwdjYvaXA2X3Z0aS5jLTEwMjktfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Njc5PXN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTY4OC1cbm5ldC9pcHY2L2lwNm1yLmM6Njg5OnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxubmV0L2lwdjYvaXA2bXIuYy02OTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9OTA2PXN0YXRpYyBpbnQgbWlmNl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTkyNy1cdFx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG5uZXQvaXB2Ni9pcDZtci5jOjkyODpcdFx0ZGV2ID0gaXA2bXJfcmVnX3ZpZihuZXQsIG1ydCk7XG5uZXQvaXB2Ni9pcDZtci5jLTkyOS1cdFx0aWYgKCFkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTgKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElQdjYgVHVubmVsaW5nIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZyBJUHY2IHR1bm5lbGluZy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgQ09ORklHX0lQVjZgLCBgQ09ORklHX0lQVjZfVFVOTkVMYCwgYENPTkZJR19JUFY2X1ZUSWAsIGFuZCBgQ09ORklHX0lQVjZfTVJPVVRFYC4gRXhjZWxsZW50LiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9yIGlmIHRoZXNlIGFyZSBpbmRlZWQgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWdzLgoKQSBxdWljayBkaXZlIGludG8gdGhlIEtjb25maWcgcmV2ZWFscyBzb21lIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcy4gYElQVjZfVFVOTkVMYCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0IGRlcGVuZHMgb24gbm90aGluZyBleHBsaWNpdGx5ICh0aG91Z2ggaXQgKnNlbGVjdHMqIGBJTkVUNl9UVU5ORUxgLCBgRFNUX0NBQ0hFYCwgYW5kIGBHUk9fQ0VMTFNgKSBidXQgaXMgZ2F0ZWQgYnkgYW4gYGlmIElQVjZgIGNsYXVzZS4gYElQVjZfVlRJYCBzZWxlY3RzIGBJUFY2X1RVTk5FTGAsIGBORVRfSVBfVFVOTkVMYCwgYW5kIGBYRlJNYCwgYW5kIGBJUFY2X01ST1VURWAgKmRvZXMqIGRlcGVuZCBvbiBgSVBWNmAuIFRoZXJlZm9yZSwgdGhlIGxpc3QgSSBvcmlnaW5hbGx5IGhhZCBpcyBhY2N1cmF0ZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMgdGFyZ2V0ZWQgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUga2VybmVsIGZ1bmN0aW9uczogYGlwNl90bmxfY3JlYXRlYCwgYHZ0aTZfdG5sX2NyZWF0ZWAsIGFuZCBgaXA2bXJfcmVnX3ZpZmAuIFRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY3JlYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBvZiB0dW5uZWxzLCB3aGljaCBpcyBleGFjdGx5IHRoZSBhcmVhIEkgd2FudCB0byBmb2N1cyBvbi4KCkV2ZXJ5dGhpbmcgc2VlbXMgdG8gYWxpZ24uIFRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3RlZCBnaXZlbiB0aGUgZm9jdXMgb24gc3BlY2lmaWMsIGxlc3MgdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3QgYW5kIG5vbi11YmlxdWl0b3VzLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGNvbXBsZXRlIChhZnRlciBzdHJpcHBpbmcgdGhlIGBDT05GSUdfYCBwcmVmaXhlcykuIFRoZSByZWFzb25pbmcgaXMgYWxzbyBjbGVhciBhbmQgY29uY2lzZS4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLCBzbyBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1ZUSSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwNl90bmxfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Z0aTZfdG5sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpcDZtcl9yZWdfdmlmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNwcmludGYoKSBjYWxscyB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIHJlYWNoYWJsZSBJUHY2IHR1bm5lbCwgVlRJLCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgZGV2aWNlIGNyZWF0aW9uIHJvdXRpbmVzLiBUaGVzZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzeXNjYWxscyAocnRuZXRsaW5rL2lvY3RsL3NldHNvY2tvcHQpIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfVlRJJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF9jcmVhdGUmIzM0OywKICAgICYjMzQ7dnRpNl90bmxfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lwNm1yX3JlZ192aWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgc3ByaW50ZigpIGNhbGxzIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gcmVhY2hhYmxlIElQdjYgdHVubmVsLCBWVEksIGFuZCBtdWx0aWNhc3Qgcm91dGluZyBkZXZpY2UgY3JlYXRpb24gcm91dGluZXMuIFRoZXNlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN5c2NhbGxzIChydG5ldGxpbmsvaW9jdGwvc2V0c29ja29wdCkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjYWxscyB0byBzcHJpbnRmKCkgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiBuZXQvaXB2Ni9pcDZfdHVubmVsLmMsIG5ldC9pcHY2L2lwNl92dGkuYywgYW5kIG5ldC9pcHY2L2lwNm1yLmMuIFRoZSBzdHJpbmcgbGl0ZXJhbHMgYXJlIHN0YXRpYyBhbmQgc2FmZWx5IGNvcGllZCBpbnRvIGxvY2FsIHN0YWNrIGJ1ZmZlcnMgd2l0aCBib3VuZGVkIGxlbmd0aCAoSUZOQU1TSVopIGFuZCBndWFyYW50ZWVkIE5VTCB0ZXJtaW5hdGlvbi4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTkwY2Y4ZTdkZGE1OGZmOTk1M2JmM2M2ZmNmMjQzODgzYmJkNjkxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMjI6MTI6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggZDVmZjUwYTJhYzAxNy4uZWYzYTZkOTMxYzllYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMjk0LDcgJiM0MzsyOTQsNyBAQCBzdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKQogCQkJZ290byBmYWlsZWQ7CiAJCXN0cnNjcHkobmFtZSwgcC0mZ3Q7bmFtZSwgSUZOQU1TSVopOwogCX0gZWxzZSB7Ci0JCXNwcmludGYobmFtZSwgJiMzNDtpcDZ0bmwlJWQmIzM0Oyk7CiYjNDM7CQlzdHJzY3B5KG5hbWUsICYjMzQ7aXA2dG5sJWQmIzM0OywgSUZOQU1TSVopOwogCX0KIAllcnIgPSAtRU5PTUVNOwogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3Z0aS5jIGIvbmV0L2lwdjYvaXA2X3Z0aS5jCmluZGV4IGFiOTRiM2E0YmE5YzMuLjE4MmE3OTQ5ZDgzMDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl92dGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdnRpLmMKQEAgLTIxMCw3ICYjNDM7MjEwLDcgQEAgc3RhdGljIHN0cnVjdCBpcDZfdG5sICp2dGk2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAKIAkJCWdvdG8gZmFpbGVkOwogCQlzdHJzY3B5KG5hbWUsIHAtJmd0O25hbWUsIElGTkFNU0laKTsKIAl9IGVsc2UgewotCQlzcHJpbnRmKG5hbWUsICYjMzQ7aXA2X3Z0aSUlZCYjMzQ7KTsKJiM0MzsJCXN0cnNjcHkobmFtZSwgJiMzNDtpcDZfdnRpJWQmIzM0OywgSUZOQU1TSVopOwogCX0KIAogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCB2dGk2X2Rldl9zZXR1cCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCAzZjJlZDliNzdkZWI1Li4yMGFjOGNiODc0Njg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTY5Miw3ICYjNDM7NjkyLDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcDZtcl9yZWdfdmlmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQpCiAJY2hhciBuYW1lW0lGTkFNU0laXTsKIAogCWlmIChtcnQtJmd0O2lkID09IFJUNl9UQUJMRV9ERkxUKQotCQlzcHJpbnRmKG5hbWUsICYjMzQ7cGltNnJlZyYjMzQ7KTsKJiM0MzsJCXN0cnNjcHkobmFtZSwgJiMzNDtwaW02cmVnJiMzNDssIElGTkFNU0laKTsKIAllbHNlCiAJCXNwcmludGYobmFtZSwgJiMzNDtwaW02cmVnJXUmIzM0OywgbXJ0LSZndDtpZCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2g6IFBvdGVudGlhbCBJc3N1ZXM/KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCwgYG5ldC9pcHY2L2lwNl92dGkuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2Ag4oCTIGFsbCBjb3JlIElQdjYgbmV0d29ya2luZyBhcmVhcy4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB3aGF0IGFjdHVhbGx5IGNoYW5nZWQuCgpBbHJpZ2h0LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd246IEl0IGxvb2tzIGxpa2UgaW4gYGlwNl90dW5uZWwuY2AsIGBzcHJpbnRmKG5hbWUsICYjMzQ7aXA2dG5sJSVkJiMzNDspO2Agd2FzIHJlcGxhY2VkIHdpdGggYHN0cnNjcHkobmFtZSwgJiMzNDtpcDZ0bmwlZCYjMzQ7LCBJRk5BTVNJWik7YC4gU2ltaWxhciBzd2FwcyBoYXBwZW5lZCBpbiBgaXA2X3Z0aS5jYDogYHNwcmludGYobmFtZSwgJiMzNDtpcDZfdnRpJSVkJiMzNDspO2AgYmVjYW1lIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKTtgLiBBbmQgZmluYWxseSwgaW4gYGlwNm1yLmNgLCB3ZSBzZWUgYHNwcmludGYobmFtZSwgJiMzNDtwaW02cmVnJiMzNDspO2AgcmVwbGFjZWQgd2l0aCBgc3Ryc2NweShuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OywgSUZOQU1TSVopO2AuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0Li4uIGxldCYjMzk7cyBjb21wYXJlIHRoZXNlIGBzcHJpbnRmYCB0byBgc3Ryc2NweWAgY2hhbmdlcy4gTG9va2luZyBhdCBgc3ByaW50ZihuYW1lLCAmIzM0O2lwNnRubCUlZCYjMzQ7KWAgdmVyc3VzIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2dG5sJWQmIzM0OywgSUZOQU1TSVopYCwgdGhlIGluaXRpYWwgdXNhZ2Ugb2YgdGhlIGBzcHJpbnRmYCB3aXRoIGAmIzM0O2lwNnRubCUlZCYjMzQ7YCBwcm9kdWNlcyB0aGUgbGl0ZXJhbCBzdHJpbmcgYCYjMzQ7aXA2dG5sJWQmIzM0O2AgYmVjYXVzZSB0aGUgZG91YmxlIHBlcmNlbnQgc2lnbnMgYXJlIGVzY2FwZWQgZm9ybWF0IHNwZWNpZmllcnMuIFdpdGggYHN0cnNjcHlgLCB3ZSYjMzk7cmUgc2ltcGx5IGNvcHlpbmcgdGhlIGxpdGVyYWwgc3RyaW5nIGAmIzM0O2lwNnRubCVkJiMzNDtgLiBCb3RoIGltcGxlbWVudGF0aW9ucyByZXN1bHQgaW4gdGhlIHNhbWUgb3V0cHV0LCBgJiMzNDtpcDZ0bmwlZCYjMzQ7YCBhbmQsIHNpbmNlIGBuYW1lYCBpcyBwcm9iYWJseSBhIGZpeGVkIHNpemUgYnVmZmVyLCB0aGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIG51bGwtdGVybWluYXRlZC4gU28sIG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIG1vdmUgZnJvbSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgLiBUaGlzIGNvdWxkIGJlIGFib3V0IHJlbW92aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBidXQgaXQmIzM5O3MgaGFyZCB0byB0ZWxsIHdpdGhvdXQgYWRkaXRpb25hbCBjb250ZXh0LgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCAqd2h5KiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGRlbGliZXJhdGUgYXR0ZW1wdCB0byBhdm9pZCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiBgc3ByaW50ZmA/IElmIHNvLCB0aGlzIGlzIGdvb2QuIEJ1dCBpdCBzZWVtcyBzdHJhbmdlIGJlY2F1c2UgdGhlIGV4aXN0aW5nIGBzcHJpbnRmYCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBiZSBzYWZlIGdpdmVuIHRoZSB1c2FnZSwgYW5kIHRoZSB1c2Ugb2YgdGhlIGRvdWJsZSBwZXJjZW50YWdlIGluIHRoZSBzdHJpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIGdyYWIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgY29kZSBzZWN0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gMjg2Olx0e1xuIDI4NzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAyODg6XHRcdHN0cnVjdCBpcDZfdG5sICp0O1xuIDI4OTpcdFx0Y2hhciBuYW1lW0lGTkFNU0laXTtcbiAyOTA6XHRcdGludCBlcnIgPSAtRTJCSUc7XG4gMjkxOlx0XG4gMjkyOlx0XHRpZiAocC1cdTAwM2VuYW1lWzBdKSB7XG4gMjkzOlx0XHRcdGlmICghZGV2X3ZhbGlkX25hbWUocC1cdTAwM2VuYW1lKSlcbiAyOTQ6XHRcdFx0XHRnb3RvIGZhaWxlZDtcbiAyOTU6XHRcdFx0c3Ryc2NweShuYW1lLCBwLVx1MDAzZW5hbWUsIElGTkFNU0laKTtcbiAyOTY6XHRcdH0gZWxzZSB7XG4gMjk3Olx0XHRcdHN0cnNjcHkobmFtZSwgXCYjMzQ7aXA2dG5sJWRcJiMzNDssIElGTkFNU0laKTtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcdGVyciA9IC1FTk9NRU07XG4gMzAwOlx0XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTixcbiAzMDE6XHRcdFx0XHQgICBpcDZfdG5sX2Rldl9zZXR1cCk7XG4gMzAyOlx0XHRpZiAoIWRldilcbiAzMDM6XHRcdFx0Z290byBmYWlsZWQ7XG4gMzA0Olx0XG4gMzA1Olx0XHRkZXZfbmV0X3NldChkZXYsIG5ldCk7XG4gMzA2Olx0XG4gMzA3Olx0XHR0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiAzMDg6XHRcdHQtXHUwMDNlcGFybXMgPSAqcDtcbiAzMDk6XHRcdHQtXHUwMDNlbmV0ID0gZGV2X25ldChkZXYpO1xuIDMxMDpcdFx0ZXJyID0gaXA2X3RubF9jcmVhdGUyKGRldik7XG4gMzExOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDMxMjpcdFx0XHRnb3RvIGZhaWxlZF9mcmVlO1xuIDMxMzpcdFxuIDMxNDpcdFx0cmV0dXJuIHQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFZpcnR1YWwgVHVubmVsIEludGVyZmFjZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBiZWhhdmlvciwgaXQmIzM5O3MgY2xlYXIgSSBjYW4mIzM5O3QganVzdCBmb2N1cyBvbiB0aGUgb2J2aW91cy4gSSYjMzk7bSB0aGlua2luZywgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIGludG8gSVB2NiB2aXJ0dWFsIHR1bm5lbCBpbnRlcmZhY2VzIG5lZWRzIHRvIGludm9sdmUgbW9yZSB0aGFuIGp1c3QgYSBzdXJmYWNlLWxldmVsIGxvb2suIFRvIGJlIHRydWx5IGNvbXByZWhlbnNpdmUsIEkgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgbmV0L2lwdjYvaXA2X3Z0aS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgVlRJIGNvZGUgaXMgY3J1Y2lhbCBoZXJlLiBHaXZlbiB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcsIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGF0IGBuZXQvaXB2Ni9pcDZtci5jYCB3aGlsZSBJJiMzOTttIGF0IGl0LiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiBtdWx0aWNhc3Qgcm91dGluZyBhcyB3ZWxsLCB0byBzZWUgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFZUSSBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdnRpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxuIDIwMjpcdHtcbiAyMDM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjA0Olx0XHRzdHJ1Y3QgaXA2X3RubCAqdDtcbiAyMDU6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gMjA2Olx0XHRpbnQgZXJyO1xuIDIwNzpcdFxuIDIwODpcdFx0aWYgKHAtXHUwMDNlbmFtZVswXSkge1xuIDIwOTpcdFx0XHRpZiAoIWRldl92YWxpZF9uYW1lKHAtXHUwMDNlbmFtZSkpXG4gMjEwOlx0XHRcdFx0Z290byBmYWlsZWQ7XG4gMjExOlx0XHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gMjEyOlx0XHR9IGVsc2Uge1xuIDIxMzpcdFx0XHRzdHJzY3B5KG5hbWUsIFwmIzM0O2lwNl92dGklZFwmIzM0OywgSUZOQU1TSVopO1xuIDIxNDpcdFx0fVxuIDIxNTpcdFxuIDIxNjpcdFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHZ0aTZfZGV2X3NldHVwKTtcbiAyMTc6XHRcdGlmICghZGV2KVxuIDIxODpcdFx0XHRnb3RvIGZhaWxlZDtcbiAyMTk6XHRcbiAyMjA6XHRcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcbiAyMjE6XHRcbiAyMjI6XHRcdHQgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDIyMzpcdFx0dC1cdTAwM2VwYXJtcyA9ICpwO1xuIDIyNDpcdFx0dC1cdTAwM2VuZXQgPSBkZXZfbmV0KGRldik7XG4gMjI1Olx0XG4gMjI2Olx0XHRlcnIgPSB2dGk2X3RubF9jcmVhdGUyKGRldik7XG4gMjI3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDIyODpcdFx0XHRnb3RvIGZhaWxlZF9mcmVlO1xuIDIyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgRGVlcGVyIGludG8gSVB2NiBNdWx0aWNhc3QgUm91dGluZyoqCgpPa2F5LCBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGEgc3VidGxlIGludGVyYWN0aW9uLCBwZXJoYXBzIGluIGEgY29ybmVyIGNhc2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLiBCZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBpdCYjMzk7cyBwcnVkZW50IHRvIGV4cGFuZCBteSBzZWFyY2ggYW5kIHJldmlzaXQgYSBmaWxlIHRoYXQmIzM5O3MgY2xvc2VseSByZWxhdGVkIHRvIHRoaXMgb25lLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgYG5ldC9pcHY2L2lwNm1yLmNgIGFzIHdlbGwuIE1pZ2h0IGJlIHNvbWV0aGluZyB3b3J0aCBsb29raW5nIGF0IGluIHRoZXJlIHRoYXQgSSYjMzk7dmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdHtcbiA2OTE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gNjkyOlx0XHRjaGFyIG5hbWVbSUZOQU1TSVpdO1xuIDY5MzpcdFxuIDY5NDpcdFx0aWYgKG1ydC1cdTAwM2VpZCA9PSBSVDZfVEFCTEVfREZMVClcbiA2OTU6XHRcdFx0c3Ryc2NweShuYW1lLCBcJiMzNDtwaW02cmVnXCYjMzQ7LCBJRk5BTVNJWik7XG4gNjk2Olx0XHRlbHNlXG4gNjk3Olx0XHRcdHNwcmludGYobmFtZSwgXCYjMzQ7cGltNnJlZyV1XCYjMzQ7LCBtcnQtXHUwMDNlaWQpO1xuIDY5ODpcdFxuIDY5OTpcdFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KDAsIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHJlZ192aWZfc2V0dXApO1xuIDcwMDpcdFx0aWYgKCFkZXYpXG4gNzAxOlx0XHRcdHJldHVybiBOVUxMO1xuIDcwMjpcdFxuIDcwMzpcdFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xuIDcwNDpcdFxuIDcwNTpcdFx0aWYgKHJlZ2lzdGVyX25ldGRldmljZShkZXYpKSB7XG4gNzA2Olx0XHRcdGZyZWVfbmV0ZGV2KGRldik7XG4gNzA3Olx0XHRcdHJldHVybiBOVUxMO1xuIDcwODpcdFx0fVxuIDcwOTpcdFxuIDcxMDpcdFx0aWYgKGRldl9vcGVuKGRldiwgTlVMTCkpXG4gNzExOlx0XHRcdGdvdG8gZmFpbHVyZTtcbiA3MTI6XHRcbiA3MTM6XHRcdGRldl9ob2xkKGRldik7XG4gNzE0Olx0XHRyZXR1cm4gZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQ1CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgIFJlcGxhY2VtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgYW5kIGV4Y2VsbGVudCBleGFtcGxlIG9mIGRlZmVuc2l2ZSBjb2RpbmcuIFRoZXkmIzM5O3JlIHJlcGxhY2luZyBpbnN0YW5jZXMgb2YgYHNwcmludGZgIHdpdGhvdXQgYW55IGZvcm1hdCBzcGVjaWZpZXJzIChvciB3aXRoIGEgY29uc3RhbnQgc3RyaW5nIHRlbXBsYXRlKSB3aXRoIGBzdHJzY3B5YC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgdGhlc2UgY2FzZXM6CgoqICAgYHNwcmludGYobmFtZSwgJiMzNDtpcDZ0bmwlJWQmIzM0OylgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYHN0cnNjcHkobmFtZSwgJiMzNDtpcDZ0bmwlZCYjMzQ7LCBJRk5BTVNJWilgCiogICBgc3ByaW50ZihuYW1lLCAmIzM0O2lwNl92dGklJWQmIzM0OylgIGlzIGJlY29taW5nIGBzdHJzY3B5KG5hbWUsICYjMzQ7aXA2X3Z0aSVkJiMzNDssIElGTkFNU0laKWAKKiAgIEFuZCBmaW5hbGx5LCBgc3ByaW50ZihuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OylgIGlzIG5vdyBgc3Ryc2NweShuYW1lLCAmIzM0O3BpbTZyZWcmIzM0OywgSUZOQU1TSVopYC4KClRoZSBgbmFtZWAgYnVmZmVyLCBpbXBvcnRhbnRseSwgaXMgYSBzdGFjay1hbGxvY2F0ZWQgYGNoYXIgbmFtZVtJRk5BTVNJWl1gIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCB3aXRoIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBsaXRlcmFsICpib3RoKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGJ1ZmZlciB0aGF0JiMzOTtzIGFscmVhZHkgc2FmZS4gVGhlIGNydWNpYWwgYmVuZWZpdCBvZiBgc3Ryc2NweWAgaGVyZSBpcyB0aGF0IGl0IGd1YXJhbnRlZXMgbnVsbC10ZXJtaW5hdGlvbiwgd2hpY2gsIGZvciBhIGRldmljZSBuYW1lIHRlbXBsYXRlLCBpcyAqZXNzZW50aWFsKi4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBpZiB0aGUgc3RyaW5nIGdldHMgdHJ1bmNhdGVkLCB3aGljaCBpcyBjcml0aWNhbC4KClRoZSBjb2RlIHRoZW4gcGFzc2VzIHRoaXMgYG5hbWVgIHN0cmluZyB0byBgYWxsb2NfbmV0ZGV2YC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGFsbG9jX25ldGRldmAgd29ya3MsIGl0IGxpa2VseSBlaXRoZXIgY29waWVzIHRoaXMgdGVtcGxhdGUgZGlyZWN0bHkgb3IgdXNlcyBpdCBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGUgYWN0dWFsIGRldmljZSBuYW1lIChhcyBpbiBgYWxsb2NfbmV0ZGV2X21xc2ApLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkIGhlcmUuIE5vIHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBnZXR0aW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBkZXRlY3RvciBpc3N1ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzIGFuZCBydWxlIG91dCBhbnkgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zLiBJJiMzOTtsbCBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgY29tbW9uIEtNU0FOIGdvdGNoYXM6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nOioqIE5vcGUsIG5vdCBhIGZhY3RvciBoZXJlLiBgbmFtZWAgaXMgYSBjaGFyIGFycmF5LCBpdCYjMzk7cyBqdXN0IGEgc3RyaW5nLCBhbmQgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZCBjYXJlZnVsbHkuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBObywgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuCjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBObyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBKdXN0IGEgc2ltcGxlIHN0cmluZy4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCBgc3Ryc2NweWAgdGFrZXMgY2FyZSBvZiB0aGUgYm91bmRzLgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlIGNoYW5nZSBhbmQgY29uZmlybWluZyBteSBhc3N1bXB0aW9ucywgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgZmFsc2UuIFRoZSBwYXRjaCBpcyBhIHNvbGlkLCBzYWZlIGltcHJvdmVtZW50IGFuZCBJJiMzOTttIHJlYWR5IHRvIGNyYWZ0IG15IHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjYWxscyB0byBzcHJpbnRmKCkgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiBuZXQvaXB2Ni9pcDZfdHVubmVsLmMsIG5ldC9pcHY2L2lwNl92dGkuYywgYW5kIG5ldC9pcHY2L2lwNm1yLmMuIFRoZSBzdHJpbmcgbGl0ZXJhbHMgYXJlIHN0YXRpYyBhbmQgc2FmZWx5IGNvcGllZCBpbnRvIGxvY2FsIHN0YWNrIGJ1ZmZlcnMgd2l0aCBib3VuZGVkIGxlbmd0aCAoSUZOQU1TSVopIGFuZCBndWFyYW50ZWVkIE5VTCB0ZXJtaW5hdGlvbi4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgY2FsbHMgdG8gc3ByaW50ZigpIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gbmV0L2lwdjYvaXA2X3R1bm5lbC5jLCBuZXQvaXB2Ni9pcDZfdnRpLmMsIGFuZCBuZXQvaXB2Ni9pcDZtci5jLiBUaGUgc3RyaW5nIGxpdGVyYWxzIGFyZSBzdGF0aWMgYW5kIHNhZmVseSBjb3BpZWQgaW50byBsb2NhbCBzdGFjayBidWZmZXJzIHdpdGggYm91bmRlZCBsZW5ndGggKElGTkFNU0laKSBhbmQgZ3VhcmFudGVlZCBOVUwgdGVybWluYXRpb24uIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6MjkuNTYwMTQyNjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjMyNDI0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIklQVjZfVlRJXCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfY3JlYXRlXCIsXG4gICAgXCJ2dGk2X3RubF9jcmVhdGVcIixcbiAgICBcImlwNm1yX3JlZ192aWZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIHNwcmludGYoKSB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIG5ldC9pcHY2L2lwNl90dW5uZWwuYywgbmV0L2lwdjYvaXA2X3Z0aS5jLCBhbmQgbmV0L2lwdjYvaXA2bXIuYy4gVGhlIHN0cmluZyBsaXRlcmFscyBhcmUgc3RhdGljIGFuZCBzYWZlbHkgY29waWVkIGludG8gbG9jYWwgc3RhY2sgYnVmZmVycyB3aXRoIGJvdW5kZWQgbGVuZ3RoIChJRk5BTVNJWikgYW5kIGd1YXJhbnRlZWQgTlVMIHRlcm1pbmF0aW9uLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3ByaW50ZigpIGNhbGxzIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gcmVhY2hhYmxlIElQdjYgdHVubmVsLCBWVEksIGFuZCBtdWx0aWNhc3Qgcm91dGluZyBkZXZpY2UgY3JlYXRpb24gcm91dGluZXMuIFRoZXNlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN5c2NhbGxzIChydG5ldGxpbmsvaW9jdGwvc2V0c29ja29wdCkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjI5LjU2MDE3MTkyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NjIyMDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5MGNmOGU3ZGRhNThmZjk5NTNiZjNjNmZjZjI0Mzg4M2JiZDY5MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjoxMjoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBkNWZmNTBhMmFjMDE3Li5lZjNhNmQ5MzFjOWVhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0yOTQsNyArMjk0LDcgQEAgc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4gXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcdFxcdHN0cnNjcHkobmFtZSwgcC1cXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzcHJpbnRmKG5hbWUsIFxcXCJpcDZ0bmwlJWRcXFwiKTtcXG4rXFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2dG5sJWRcXFwiLCBJRk5BTVNJWik7XFxuIFxcdH1cXG4gXFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuY1xcbmluZGV4IGFiOTRiM2E0YmE5YzMuLjE4MmE3OTQ5ZDgzMDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3Z0aS5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXFxuQEAgLTIxMCw3ICsyMTAsNyBAQCBzdGF0aWMgc3RydWN0IGlwNl90bmwgKnZ0aTZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcFxcbiBcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFx0XFx0c3Ryc2NweShuYW1lLCBwLVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNwcmludGYobmFtZSwgXFxcImlwNl92dGklJWRcXFwiKTtcXG4rXFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2X3Z0aSVkXFxcIiwgSUZOQU1TSVopO1xcbiBcXHR9XFxuIFxcbiBcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuY1xcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjIwYWM4Y2I4NzQ2ODQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xcbisrKyBiL25ldC9pcHY2L2lwNm1yLmNcXG5AQCAtNjkyLDcgKzY5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxcbiBcXHRjaGFyIG5hbWVbSUZOQU1TSVpdO1xcbiBcXG4gXFx0aWYgKG1ydC1cXHUwMDNlaWQgPT0gUlQ2X1RBQkxFX0RGTFQpXFxuLVxcdFxcdHNwcmludGYobmFtZSwgXFxcInBpbTZyZWdcXFwiKTtcXG4rXFx0XFx0c3Ryc2NweShuYW1lLCBcXFwicGltNnJlZ1xcXCIsIElGTkFNU0laKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzcHJpbnRmKG5hbWUsIFxcXCJwaW02cmVnJXVcXFwiLCBtcnQtXFx1MDAzZWlkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjMxLjA0NzAxNDMyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUwNzg5NDg0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIklQVjZfVlRJXCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfY3JlYXRlXCIsXG4gICAgXCJ2dGk2X3RubF9jcmVhdGVcIixcbiAgICBcImlwNm1yX3JlZ192aWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzcHJpbnRmKCkgY2FsbHMgd2l0aCBzdHJzY3B5KCkgd2hlbiBwb3B1bGF0aW5nIGRldmljZSBuYW1lIHRlbXBsYXRlcyBpbiByZWFjaGFibGUgSVB2NiB0dW5uZWwsIFZUSSwgYW5kIG11bHRpY2FzdCByb3V0aW5nIGRldmljZSBjcmVhdGlvbiByb3V0aW5lcy4gVGhlc2UgdmlydHVhbCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3lzY2FsbHMgKHJ0bmV0bGluay9pb2N0bC9zZXRzb2Nrb3B0KSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTBjZjhlN2RkYTU4ZmY5OTUzYmYzYzZmY2YyNDM4ODNiYmQ2OTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjoxMjoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uZWYzYTZkOTMxYzllYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO1xuK1x0XHRzdHJzY3B5KG5hbWUsIFwiaXA2dG5sJWRcIiwgSUZOQU1TSVopO1xuIFx0fVxuIFx0ZXJyID0gLUVOT01FTTtcbiBcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuY1xuaW5kZXggYWI5NGIzYTRiYTljMy4uMTgyYTc5NDlkODMwNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl92dGkuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXG5AQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2X3Z0aSUlZFwiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcImlwNl92dGklZFwiLCBJRk5BTVNJWik7XG4gXHR9XG4gXG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li4yMGFjOGNiODc0Njg0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTY5Miw3ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiBcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gXG4gXHRpZiAobXJ0LVx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxuLVx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZ1wiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopO1xuIFx0ZWxzZVxuIFx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZyV1XCIsIG1ydC1cdTAwM2VpZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjozMS4wNDcwMTYwOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTYyNzQyMTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgZGlmZi4gTG9va3MgbGlrZSB3ZSdyZSBzZWVpbmcgc29tZSByZXBsYWNlbWVudHMgb2YgYHNwcmludGZgIHdpdGggYHN0cnNjcHlgIGluIGEgZmV3IElQdjYtcmVsYXRlZCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGlwNl90dW5uZWwuY2AsIGBpcDZfdnRpLmNgLCBhbmQgYGlwNm1yLmNgLlxuXG5UaGUgZmlyc3QgbW9kaWZpY2F0aW9uIGluIGBpcDZfdHVubmVsLmNgIGNvbmNlcm5zIGBpcDZfdG5sX2NyZWF0ZWAgYW5kIHN3YXBzIG91dCB0aGF0IGBzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO2Agd2l0aCBgc3Ryc2NweShuYW1lLCBcImlwNnRubCVkXCIsIElGTkFNU0laKTtgLiBTaW1pbGFybHksIGZvciBgaXA2X3Z0aS5jYCBhbmQgYHZ0aTZfdG5sX2NyZWF0ZWAsIHRoZSBjaGFuZ2UgaXMgYHNwcmludGYobmFtZSwgXCJpcDZfdnRpJSVkXCIpO2AgdG8gYHN0cnNjcHkobmFtZSwgXCJpcDZfdnRpJWRcIiwgSUZOQU1TSVopO2AuIEFuZCBmaW5hbGx5LCBpbiBgaXA2bXIuY2Agd2l0aGluIGBpcDZtcl9yZWdfdmlmYCwgdGhlIGVkaXQgZ29lcyBmcm9tIGBzcHJpbnRmKG5hbWUsIFwicGltNnJlZ1wiKTtgIHRvIGBzdHJzY3B5KG5hbWUsIFwicGltNnJlZ1wiLCBJRk5BTVNJWik7YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QgY2hhbmdlOyBgc3Ryc2NweWAgaXMgZ2VuZXJhbGx5IHNhZmVyIHRoYW4gYHNwcmludGZgIGJlY2F1c2UgaXQgcHJldmVudHMgYnVmZmVyIG92ZXJmbG93cyBieSBlbnN1cmluZyB0aGUgc3RyaW5nIGlzIHByb3Blcmx5IHRydW5jYXRlZCB0byBmaXQgd2l0aGluIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHNpemUsIGBJRk5BTVNJWmAgaW4gdGhlc2UgaW5zdGFuY2VzLlxuXG5Ob3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhlc2UgZnVuY3Rpb25zLCB0byBtYWtlIGNlcnRhaW4gdGhhdCBubyB1bmV4cGVjdGVkIGJlaGF2aW9ycyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gSSdsbCBhbHNvIHdhbnQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgb2YgdGhlc2UgZmlsZXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdW51c3VhbCB0aGVyZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gbG93LWxldmVsIG5ldHdvcmtpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NCwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjM2LjYwOTc2MjIwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM5MjA3MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJFxcXFwoQ09ORklHXy4qXFxcXCkgXFxcXCtcXFxcKz0gaXA2X3R1bm5lbC5vfG9iai1cXFxcJFxcXFwoQ09ORklHXy4qXFxcXCkgXFxcXCtcXFxcKz0gaXA2bXIub3xvYmotXFxcXCRcXFxcKENPTkZJR18uKlxcXFwpIFxcXFwrXFxcXCs9IGlwNl92dGkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6MzYuNzMzNjkxODk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNTg5MzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgSVB2NiBzdHVmZiBpcyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCDigJMgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIElQdjYgY29tcG9uZW50cyBzaG91bGQgYmUgZGVmaW5lZCBoZXJlLCByaWdodD8gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0J2xsIGluY2x1ZGUgdGhpbmdzIGxpa2Ugb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncyBzcGVjaWZpYyB0byBJUHY2LCBwcm9iYWJseSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgaG93IGRpZmZlcmVudCBJUHY2IG1vZHVsZXMgYXJlIGxpbmtlZCB0b2dldGhlci4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGlkZW50aWZ5IHRoZSBrZXkgdGFyZ2V0cyBhbmQgdmFyaWFibGVzIHJlbGV2YW50IHRvIHRoZSBtb2R1bGVzIEknbSBjdXJyZW50bHkgd29ya2luZyB3aXRoLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuLi4gdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjozOS4xNDk1ODczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU4NTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfdHVubmVsfGlwNm1yfGlwNl92dGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgKz0gaXA2bXIub1xcbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGU9Mzg9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIvXFxubmV0L2lwdjYvTWFrZWZpbGUtMzktXFxubmV0L2lwdjYvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0lQVjZfVlRJKSArPSBpcDZfdnRpLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00MS1vYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjozOS4yMzUxNzc5MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUwNDM5ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgVHVubmVsaW5nIGFuZCBSb3V0aW5nIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24sIGxldCdzIHF1aWNrbHkgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NiB0dW5uZWwgb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgLiBJdCdzIHRoZSBjZW50cmFsIHBsYWNlIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY2IGFyZSBkZWZpbmVkLCBzbyBpdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzIG9mIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1ZUSWAsIGFuZCBgSVBWNl9NUk9VVEVgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBvcHRpb25zIGludGVycmVsYXRlIGlzIGNyaXRpY2FsOyBrbm93aW5nIHdoYXQgb3RoZXIgZmVhdHVyZXMgdGhleSBpbXBsaWNpdGx5IGVuYWJsZSBvciByZXF1aXJlIHdpbGwgYmUgY3J1Y2lhbCB3aGVuIEkgYXNzZXNzIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLCBhbmQgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBBIHF1aWNrIHNjYW4gb2YgYEtjb25maWdgIHdpbGwgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0IGVhY2ggb3B0aW9uIGVudGFpbHMuIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzMiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjQxLjI4NTYyMTg0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM2Mjc3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfVFVOTkVMfGNvbmZpZyBJUFY2X1ZUSXxjb25maWcgSVBWNl9NUk9VVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjQxLjQxOTI1MzMyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDAzNDU5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBjb25maWd1cmF0aW9ucywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXJ0aWN1bGFyIGJpdCBsaWVzIGluIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBzb3VyY2UgZm9yIGFsbCB0aGluZ3MgSVB2NiBjb25maWd1cmF0aW9uIHJlbGF0ZWQsIHNvIGl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdG8gc3RhcnQgdGhlcmUuIEknbSB0aGlua2luZywgXCJMZXQncyByZWFkIHRoZSBsaW5lcyBhcm91bmQgdGhlc2UgY29uZmlncyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuXCIgSSdtIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQuIFdoYXQgYXJlIHRoZSBhc3NvY2lhdGVkIGZlYXR1cmVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZ3JvdXBpbmdzIG9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgdGhlIG90aGVycz8gT25seSBieSBnZXR0aW5nIHRoZSB3aWRlciBwZXJzcGVjdGl2ZSB3aWxsIEkgdHJ1bHkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBjb25maWcuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGNsdWUgcmVsYXRpbmcgdG8gZW5hYmxpbmcgYW5kIGRpc2FibGluZyBzb21lIElQdjYgZmVhdHVyZS4gSSdsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlbiBjaXJjbGUgYmFjayB3aXRoIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo0My41NTk2MDIxNzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIElORVQ2X1RVTk5FTFxcbiAxNDc6XFx0XFx0dHJpc3RhdGVcXG4gMTQ4OlxcdFxcdGRlZmF1bHQgblxcbiAxNDk6XFx0XFxuIDE1MDpcXHRjb25maWcgSVBWNl9WVElcXG4gMTUxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4gMTUyOlxcdFxcdHNlbGVjdCBJUFY2X1RVTk5FTFxcbiAxNTM6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTU0OlxcdFxcdHNlbGVjdCBYRlJNXFxuIDE1NTpcXHRcXHRoZWxwXFxuIDE1NjpcXHRcXHRUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxcbiAxNTc6XFx0XFx0YW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxNTg6XFx0XFx0ZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHhmcm0gbW9kZSB0dW5uZWwgdG8gZ2l2ZVxcbiAxNTk6XFx0XFx0dGhlIG5vdGlvbiBvZiBhIHNlY3VyZSB0dW5uZWwgZm9yIElQU0VDIGFuZCB0aGVuIHVzZSByb3V0aW5nIHByb3RvY29sXFxuIDE2MDpcXHRcXHRvbiB0b3AuXFxuIDE2MTpcXHRcXG4gMTYyOlxcdGNvbmZpZyBJUFY2X1NJVFxcbiAxNjM6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbiAxNjQ6XFx0XFx0c2VsZWN0IElORVRfVFVOTkVMXFxuIDE2NTpcXHRcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbiAxNjY6XFx0XFx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcXG4gMTY3OlxcdFxcdGRlZmF1bHQgbVxcbiAxNjg6XFx0XFx0aGVscFxcbiAxNjk6XFx0XFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxcbiAxNzA6XFx0XFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXFxuIDE3MTpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgZW5jYXBzdWxhdGlvbiBvZiBJUHY2XFxuIDE3MjpcXHRcXHQgIGludG8gSVB2NCBwYWNrZXRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHR3byBJUHY2XFxuIDE3MzpcXHRcXHQgIG5ldHdvcmtzIG92ZXIgYW4gSVB2NC1vbmx5IHBhdGguXFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdCAgU2F5aW5nIE0gaGVyZSB3aWxsIHByb2R1Y2UgYSBtb2R1bGUgY2FsbGVkIHNpdC4gSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0Y29uZmlnIElQVjZfU0lUXzZSRFxcbiAxNzg6XFx0XFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbiAxNzk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1NJVFxcbiAxODA6XFx0XFx0ZGVmYXVsdCBuXFxuIDE4MTpcXHRcXHRoZWxwXFxuIDE4MjpcXHRcXHQgIElQdjYgUmFwaWQgRGVwbG95bWVudCAoNnJkOyBkcmFmdC1pZXRmLXNvZnR3aXJlLWlwdjYtNnJkKSBidWlsZHMgdXBvblxcbiAxODM6XFx0XFx0ICBtZWNoYW5pc21zIG9mIDZ0bzQgKFJGQzMwNTYpIHRvIGVuYWJsZSBhIHNlcnZpY2UgcHJvdmlkZXIgdG8gcmFwaWRseVxcbiAxODQ6XFx0XFx0ICBkZXBsb3kgSVB2NiB1bmljYXN0IHNlcnZpY2UgdG8gSVB2NCBzaXRlcyB0byB3aGljaCBpdCBwcm92aWRlc1xcbiAxODU6XFx0XFx0ICBjdXN0b21lciBwcmVtaXNlIGVxdWlwbWVudC4gIExpa2UgNnRvNCwgaXQgdXRpbGl6ZXMgc3RhdGVsZXNzIElQdjYgaW5cXG4gMTg2OlxcdFxcdCAgSVB2NCBlbmNhcHN1bGF0aW9uIGluIG9yZGVyIHRvIHRyYW5zaXQgSVB2NC1vbmx5IG5ldHdvcmtcXG4gMTg3OlxcdFxcdCAgaW5mcmFzdHJ1Y3R1cmUuICBVbmxpa2UgNnRvNCwgYSA2cmQgc2VydmljZSBwcm92aWRlciB1c2VzIGFuIElQdjZcXG4gMTg4OlxcdFxcdCAgcHJlZml4IG9mIGl0cyBvd24gaW4gcGxhY2Ugb2YgdGhlIGZpeGVkIDZ0bzQgcHJlZml4LlxcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHQgIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlIFNJVCBkcml2ZXIgb2ZmZXJzIDZyZCBmdW5jdGlvbmFsaXR5IGJ5XFxuIDE5MTpcXHRcXHQgIHByb3ZpZGluZyBhZGRpdGlvbmFsIGlvY3RsIEFQSSB0byBjb25maWd1cmUgdGhlIElQdjYgUHJlZml4IGZvciBpblxcbiAxOTI6XFx0XFx0ICBzdGVhZCBvZiBzdGF0aWMgMjAwMjo6LzE2IGZvciA2dG80LlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE5NTpcXHRcXG4gMTk2OlxcdGNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuIDE5NzpcXHRcXHRib29sXFxuIDE5ODpcXHRcXG4gMTk5OlxcdGNvbmZpZyBJUFY2X1RVTk5FTFxcbiAyMDA6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4gMjAxOlxcdFxcdHNlbGVjdCBJTkVUNl9UVU5ORUxcXG4gMjAyOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMjAzOlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gMjA0OlxcdFxcdGhlbHBcXG4gMjA1OlxcdFxcdCAgU3VwcG9ydCBmb3IgSVB2Ni1pbi1JUHY2IGFuZCBJUHY0LWluLUlQdjYgdHVubmVscyBkZXNjcmliZWQgaW5cXG4gMjA2OlxcdFxcdCAgUkZDIDI0NzMuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo0My41NTk3MjAxNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY4OTY2ODU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQdjYgTXVsdGljYXN0IFJvdXRpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3MgZGlnIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgSVBWNl9NUk9VVEVgLiBUaGlzIGlzIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCB0byB2ZXJpZnkgYmVmb3JlIG1vdmluZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjQ1LjI0OTM5MTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHQgIG5vcm1hbCBhbmQgc291cmNlIHByZWZpeCBzcGVjaWZpYyByb3V0ZXMgaW4gdGhlIHNhbWUgcm91dGluZyB0YWJsZVxcbiAyNTE6XFx0XFx0ICBtYXkgc29tZXRpbWVzIGxlYWQgdG8gdW5pbnRlbmRlZCByb3V0aW5nIGJlaGF2aW9yLiAgVGhpcyBjYW4gYmVcXG4gMjUyOlxcdFxcdCAgYXZvaWRlZCBieSBkZWZpbmluZyBkaWZmZXJlbnQgcm91dGluZyB0YWJsZXMgZm9yIHRoZSBub3JtYWwgYW5kXFxuIDI1MzpcXHRcXHQgIHNvdXJjZSBwcmVmaXggc3BlY2lmaWMgcm91dGVzLlxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI1NjpcXHRcXG4gMjU3OlxcdGNvbmZpZyBJUFY2X01ST1VURVxcbiAyNTg6XFx0XFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuIDI1OTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjYwOlxcdFxcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXFxuIDI2MTpcXHRcXHRoZWxwXFxuIDI2MjpcXHRcXHQgIFN1cHBvcnQgZm9yIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcuXFxuIDI2MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2NDpcXHRcXG4gMjY1OlxcdGNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG4gMjY2OlxcdFxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4gMjY3OlxcdFxcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcXG4gMjY4OlxcdFxcdHNlbGVjdCBGSUJfUlVMRVNcXG4gMjY5OlxcdFxcdGhlbHBcXG4gMjcwOlxcdFxcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xcbiAyNzE6XFx0XFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXFxuIDI3MjpcXHRcXHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXFxuIDI3MzpcXHRcXHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cXG4gMjc0OlxcdFxcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xcbiAyNzU6XFx0XFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjc4OlxcdFxcbiAyNzk6XFx0Y29uZmlnIElQVjZfUElNU01fVjJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NDUuMjQ5NDk3NDg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MTQxMzAxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgSVB2NiBOZXR3b3JraW5nIFBhdGNoZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgY29kZSBjaGFuZ2VzIGFuZCBmaWd1cmUgb3V0IGlmIHRoZXkgd2FycmFudCBmdXp6aW5nLiBGaXJzdCwgSSdtIGV4YW1pbmluZyB0aGUgZGlmZnMgaW4gZGV0YWlsLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBob3cgZGV2aWNlIG5hbWVzIGFyZSBnZW5lcmF0ZWQgZm9yIGNlcnRhaW4gSVB2Ni1yZWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBpbnRlcmZhY2VzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGludm9sdmUgcmVwbGFjaW5nIGBzcHJpbnRmYCB3aXRoIGBzdHJzY3B5YCBpbiBgaXA2X3RubF9jcmVhdGVgLCBgdnRpNl90bmxfY3JlYXRlYCwgYW5kIGBpcDZtcl9yZWdfdmlmYC5cblxuSW5pdGlhbGx5LCBJJ20gbm90aW5nIHRoZSBmb3JtYXQgc3RyaW5nIGRpZmZlcmVuY2UuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHNwcmludGZgIHdpdGggZm9ybWF0IHN0cmluZ3MgY29udGFpbmluZyBgJWRgLCBpbnRlbmRpbmcgdG8gaGF2ZSB0aGUga2VybmVsJ3MgbmFtaW5nIG1lY2hhbmlzbSBzdWJzdGl0dXRlIGFuIGludGVnZXIgZm9yIGAlZGAgd2hlbiBjcmVhdGluZyB0aGUgZGV2aWNlIG5hbWUuIFRoZSBuZXcgY29kZSBzaW1wbHkgY29waWVzIGxpdGVyYWwgc3RyaW5ncy4gSW4gYm90aCBjYXNlcywgdGhlIGRldmljZSBuYW1lIGVuZHMgdXAgd2l0aCBgJWRgIGluIGl0LCBhbmQgYGFsbG9jX25ldGRldmAgaXMgdGhlbiBjYWxsZWQsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGRldl9hbGxvY19uYW1lYCB3aGljaCBoYW5kbGVzIHRoZSBgJWRgIGZvcm1hdHRpbmcsIHNvIGl0IGxvb2tzIGxpa2UgZnVuY3Rpb25hbGx5IHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZS5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudC4gRm9ydHVuYXRlbHksIEkga25vdyBJUHY2IHR1bm5lbHMgKGBpcDZ0bmxgKSwgSVB2NiBWVEkgKGBpcDZfdnRpYCksIGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIChgaXA2bXJgKSBhcmUgc3RhbmRhcmQgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIHByb3RvY29scy4gVGhleSdyZSBhY2Nlc3NpYmxlIHRocm91Z2ggY29tbW9uIHN5c3RlbSBjYWxscyBsaWtlIGBydG5ldGxpbmtgLCBgaW9jdGxgLCBhbmQgYHNldHNvY2tvcHRgIGZvciBtdWx0aWNhc3Qgcm91dGluZy4gU28sIHllcywgdGhpcyBjb2RlICppcyogZXhlY3V0YWJsZSBhbmQgcmVsZXZhbnQgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSwgSSBoYXZlIHRvIGNvbnN1bHQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbiAxIHN0cmVzc2VzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudCwgYW5kIFNlY3Rpb24gMyBjbGVhcmx5IHN0YXRlcyB0aGF0IGFueSBjaGFuZ2VzIHdpdGhpbiBcImNvcmUgbmV0d29ya2luZ1wiIGFuZCBcInJlYWNoYWJsZSBwcm90b2NvbHNcIiAqbXVzdCogYmUgZnV6emVkLCBpbmNsdWRpbmcgcmVmYWN0b3JpbmdzLiBFdmVuIGlmIGl0ICpzZWVtcyogbGlrZSBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgZGV2aWNlIG5hbWUgZ2VuZXJhdGlvbiBtZXRob2QgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlIGNyZWF0aW9uIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzLiBTZWN0aW9uIDIsIGNvbnZlcnNlbHksIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGluZ3Mgd2hpY2ggYXJlICpub3QqIGZ1enphYmxlLCBidXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBmYWxsIGludG8gYW55IG9mIHRob3NlIGNhdGVnb3JpZXMuIFNvLCBnaXZlbiB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHJlbGF0ZWQgdG8gY29yZSBuZXR3b3JraW5nLCBJJ20gY29uY2x1ZGluZyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuVGhlcmVmb3JlLCBJJ2xsIGZsYWcgdGhlc2UgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMgZm9yIGZ1cnRoZXIgZnV6emluZzogYGlwNl90bmxfY3JlYXRlYCwgYHZ0aTZfdG5sX2NyZWF0ZWAsIGFuZCBgaXA2bXJfcmVnX3ZpZmAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZWlyIHNvdXJjZSBsb2NhdGlvbnMgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IHN5bWJvbHMgYW5kIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NTAuOTYzNjMxMjQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEzOTgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9jcmVhdGV8dnRpNl90bmxfY3JlYXRlfGlwNm1yX3JlZ192aWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yNDU9c3RhdGljIHZvaWQgaXA2X2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjUyLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyNTM6c3RhdGljIGludCBpcDZfdG5sX2NyZWF0ZTIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjU0LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yNzMtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjI3NDogKiBpcDZfdG5sX2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyB0dW5uZWxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjc1LSAqICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yODQtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjI4NTpzdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yODYte1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTMwOS1cXHR0LVxcdTAwM2VuZXQgPSBkZXZfbmV0KGRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjMxMDpcXHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMzExLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTMzNz1zdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0zNTktXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjM2MDpcXHRyZXR1cm4gaXA2X3RubF9jcmVhdGUobmV0LCBwKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMzYxLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yMDY4PXN0YXRpYyBpbnQgaXA2X3RubF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwMjpcXHRlcnIgPSBpcDZfdG5sX2NyZWF0ZTIoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMy1cXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiB0YltJRkxBX01UVV0pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9MTY1PXZ0aTZfdG5sX3VubGluayhzdHJ1Y3QgdnRpNl9uZXQgKmlwNm4sIHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTE3OS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTgwOnN0YXRpYyBpbnQgdnRpNl90bmxfY3JlYXRlMihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L2lwNl92dGkuYy0xODEte1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTIwMC1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MjAxOnN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbm5ldC9pcHY2L2lwNl92dGkuYy0yMDIte1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTIyNS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MjI2OlxcdGVyciA9IHZ0aTZfdG5sX2NyZWF0ZTIoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjI3LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jPTI1Mj1zdGF0aWMgc3RydWN0IGlwNl90bmwgKnZ0aTZfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwLFxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTI3My1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvaXB2Ni9pcDZfdnRpLmM6Mjc0OlxcdHJldHVybiB2dGk2X3RubF9jcmVhdGUobmV0LCBwKTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMjc1LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl92dGkuYz0xMDEwPXN0YXRpYyBpbnQgdnRpNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTAyNy1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTAyODpcXHRyZXR1cm4gdnRpNl90bmxfY3JlYXRlMihkZXYpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDI5LX1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9Njc5PXN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNjg4LVxcbm5ldC9pcHY2L2lwNm1yLmM6Njg5OnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxcbm5ldC9pcHY2L2lwNm1yLmMtNjkwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9OTA2PXN0YXRpYyBpbnQgbWlmNl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtOTI3LVxcdFxcdFxcdHJldHVybiAtRUFERFJJTlVTRTtcXG5uZXQvaXB2Ni9pcDZtci5jOjkyODpcXHRcXHRkZXYgPSBpcDZtcl9yZWdfdmlmKG5ldCwgbXJ0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTkyOS1cXHRcXHRpZiAoIWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NTEuNjI1MDMzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzc1ODI2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQdjYgVHVubmVsaW5nIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgSVB2NiB0dW5uZWxpbmcuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYENPTkZJR19JUFY2YCwgYENPTkZJR19JUFY2X1RVTk5FTGAsIGBDT05GSUdfSVBWNl9WVElgLCBhbmQgYENPTkZJR19JUFY2X01ST1VURWAuIEV4Y2VsbGVudC4gSSdsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9yIGlmIHRoZXNlIGFyZSBpbmRlZWQgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWdzLlxuXG5BIHF1aWNrIGRpdmUgaW50byB0aGUgS2NvbmZpZyByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzLiBgSVBWNl9UVU5ORUxgIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZGVwZW5kcyBvbiBub3RoaW5nIGV4cGxpY2l0bHkgKHRob3VnaCBpdCAqc2VsZWN0cyogYElORVQ2X1RVTk5FTGAsIGBEU1RfQ0FDSEVgLCBhbmQgYEdST19DRUxMU2ApIGJ1dCBpcyBnYXRlZCBieSBhbiBgaWYgSVBWNmAgY2xhdXNlLiBgSVBWNl9WVElgIHNlbGVjdHMgYElQVjZfVFVOTkVMYCwgYE5FVF9JUF9UVU5ORUxgLCBhbmQgYFhGUk1gLCBhbmQgYElQVjZfTVJPVVRFYCAqZG9lcyogZGVwZW5kIG9uIGBJUFY2YC4gVGhlcmVmb3JlLCB0aGUgbGlzdCBJIG9yaWdpbmFsbHkgaGFkIGlzIGFjY3VyYXRlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMgdGFyZ2V0ZWQgZm9yIGZ1enppbmcuIFdlJ3JlIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBrZXJuZWwgZnVuY3Rpb25zOiBgaXA2X3RubF9jcmVhdGVgLCBgdnRpNl90bmxfY3JlYXRlYCwgYW5kIGBpcDZtcl9yZWdfdmlmYC4gVGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBjcmVhdGlvbiBhbmQgcmVnaXN0cmF0aW9uIG9mIHR1bm5lbHMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uLlxuXG5FdmVyeXRoaW5nIHNlZW1zIHRvIGFsaWduLiBUaGUgaW5zdHJ1Y3Rpb25zIGluZGljYXRlIGBXb3J0aEZ1enppbmc6IHRydWVgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0ZWQgZ2l2ZW4gdGhlIGZvY3VzIG9uIHNwZWNpZmljLCBsZXNzIHViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IGFuZCBub24tdWJpcXVpdG91cywgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjb21wbGV0ZSAoYWZ0ZXIgc3RyaXBwaW5nIHRoZSBgQ09ORklHX2AgcHJlZml4ZXMpLiBUaGUgcmVhc29uaW5nIGlzIGFsc28gY2xlYXIgYW5kIGNvbmNpc2UuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg1OCwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTI6NTYuMDAwODYzNDM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDk2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9WVElcIixcbiAgICBcIklQVjZfTVJPVVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X3RubF9jcmVhdGVcIixcbiAgICBcInZ0aTZfdG5sX2NyZWF0ZVwiLFxuICAgIFwiaXA2bXJfcmVnX3ZpZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNwcmludGYoKSBjYWxscyB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIHJlYWNoYWJsZSBJUHY2IHR1bm5lbCwgVlRJLCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgZGV2aWNlIGNyZWF0aW9uIHJvdXRpbmVzLiBUaGVzZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzeXNjYWxscyAocnRuZXRsaW5rL2lvY3RsL3NldHNvY2tvcHQpIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1ZUSVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcDZfdG5sX2NyZWF0ZVwiLFxuICAgIFwidnRpNl90bmxfY3JlYXRlXCIsXG4gICAgXCJpcDZtcl9yZWdfdmlmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3ByaW50ZigpIGNhbGxzIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gcmVhY2hhYmxlIElQdjYgdHVubmVsLCBWVEksIGFuZCBtdWx0aWNhc3Qgcm91dGluZyBkZXZpY2UgY3JlYXRpb24gcm91dGluZXMuIFRoZXNlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN5c2NhbGxzIChydG5ldGxpbmsvaW9jdGwvc2V0c29ja29wdCkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEyOjU2LjEyNTk2NjU3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTc0MDk3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo1Ni4xMjY0MjcxMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzY5Njk0NTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY2FsbHMgdG8gc3ByaW50ZigpIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gbmV0L2lwdjYvaXA2X3R1bm5lbC5jLCBuZXQvaXB2Ni9pcDZfdnRpLmMsIGFuZCBuZXQvaXB2Ni9pcDZtci5jLiBUaGUgc3RyaW5nIGxpdGVyYWxzIGFyZSBzdGF0aWMgYW5kIHNhZmVseSBjb3BpZWQgaW50byBsb2NhbCBzdGFjayBidWZmZXJzIHdpdGggYm91bmRlZCBsZW5ndGggKElGTkFNU0laKSBhbmQgZ3VhcmFudGVlZCBOVUwgdGVybWluYXRpb24uIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTBjZjhlN2RkYTU4ZmY5OTUzYmYzYzZmY2YyNDM4ODNiYmQ2OTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjoxMjoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uZWYzYTZkOTMxYzllYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2X3RubF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO1xuK1x0XHRzdHJzY3B5KG5hbWUsIFwiaXA2dG5sJWRcIiwgSUZOQU1TSVopO1xuIFx0fVxuIFx0ZXJyID0gLUVOT01FTTtcbiBcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl92dGkuYyBiL25ldC9pcHY2L2lwNl92dGkuY1xuaW5kZXggYWI5NGIzYTRiYTljMy4uMTgyYTc5NDlkODMwNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl92dGkuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3Z0aS5jXG5AQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqdnRpNl90bmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwXG4gXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdHN0cnNjcHkobmFtZSwgcC1cdTAwM2VuYW1lLCBJRk5BTVNJWik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzcHJpbnRmKG5hbWUsIFwiaXA2X3Z0aSUlZFwiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcImlwNl92dGklZFwiLCBJRk5BTVNJWik7XG4gXHR9XG4gXG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li4yMGFjOGNiODc0Njg0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTY5Miw3ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiBcdGNoYXIgbmFtZVtJRk5BTVNJWl07XG4gXG4gXHRpZiAobXJ0LVx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxuLVx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZ1wiKTtcbitcdFx0c3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopO1xuIFx0ZWxzZVxuIFx0XHRzcHJpbnRmKG5hbWUsIFwicGltNnJlZyV1XCIsIG1ydC1cdTAwM2VpZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMjo1Ni4xMjY0MjgyODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzNDcxMzczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogUG90ZW50aWFsIElzc3Vlcz8qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgd2l0aGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLCBgbmV0L2lwdjYvaXA2X3Z0aS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYCDigJMgYWxsIGNvcmUgSVB2NiBuZXR3b3JraW5nIGFyZWFzLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHdoYXQgYWN0dWFsbHkgY2hhbmdlZC5cblxuQWxyaWdodCwgaGVyZSdzIHRoZSBicmVha2Rvd246IEl0IGxvb2tzIGxpa2UgaW4gYGlwNl90dW5uZWwuY2AsIGBzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpO2Agd2FzIHJlcGxhY2VkIHdpdGggYHN0cnNjcHkobmFtZSwgXCJpcDZ0bmwlZFwiLCBJRk5BTVNJWik7YC4gU2ltaWxhciBzd2FwcyBoYXBwZW5lZCBpbiBgaXA2X3Z0aS5jYDogYHNwcmludGYobmFtZSwgXCJpcDZfdnRpJSVkXCIpO2AgYmVjYW1lIGBzdHJzY3B5KG5hbWUsIFwiaXA2X3Z0aSVkXCIsIElGTkFNU0laKTtgLiBBbmQgZmluYWxseSwgaW4gYGlwNm1yLmNgLCB3ZSBzZWUgYHNwcmludGYobmFtZSwgXCJwaW02cmVnXCIpO2AgcmVwbGFjZWQgd2l0aCBgc3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopO2AuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQuLi4gbGV0J3MgY29tcGFyZSB0aGVzZSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgIGNoYW5nZXMuIExvb2tpbmcgYXQgYHNwcmludGYobmFtZSwgXCJpcDZ0bmwlJWRcIilgIHZlcnN1cyBgc3Ryc2NweShuYW1lLCBcImlwNnRubCVkXCIsIElGTkFNU0laKWAsIHRoZSBpbml0aWFsIHVzYWdlIG9mIHRoZSBgc3ByaW50ZmAgd2l0aCBgXCJpcDZ0bmwlJWRcImAgcHJvZHVjZXMgdGhlIGxpdGVyYWwgc3RyaW5nIGBcImlwNnRubCVkXCJgIGJlY2F1c2UgdGhlIGRvdWJsZSBwZXJjZW50IHNpZ25zIGFyZSBlc2NhcGVkIGZvcm1hdCBzcGVjaWZpZXJzLiBXaXRoIGBzdHJzY3B5YCwgd2UncmUgc2ltcGx5IGNvcHlpbmcgdGhlIGxpdGVyYWwgc3RyaW5nIGBcImlwNnRubCVkXCJgLiBCb3RoIGltcGxlbWVudGF0aW9ucyByZXN1bHQgaW4gdGhlIHNhbWUgb3V0cHV0LCBgXCJpcDZ0bmwlZFwiYCBhbmQsIHNpbmNlIGBuYW1lYCBpcyBwcm9iYWJseSBhIGZpeGVkIHNpemUgYnVmZmVyLCB0aGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIG51bGwtdGVybWluYXRlZC4gU28sIG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIG1vdmUgZnJvbSBgc3ByaW50ZmAgdG8gYHN0cnNjcHlgLiBUaGlzIGNvdWxkIGJlIGFib3V0IHJlbW92aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBidXQgaXQncyBoYXJkIHRvIHRlbGwgd2l0aG91dCBhZGRpdGlvbmFsIGNvbnRleHQuXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCAqd2h5KiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGRlbGliZXJhdGUgYXR0ZW1wdCB0byBhdm9pZCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiBgc3ByaW50ZmA/IElmIHNvLCB0aGlzIGlzIGdvb2QuIEJ1dCBpdCBzZWVtcyBzdHJhbmdlIGJlY2F1c2UgdGhlIGV4aXN0aW5nIGBzcHJpbnRmYCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBiZSBzYWZlIGdpdmVuIHRoZSB1c2FnZSwgYW5kIHRoZSB1c2Ugb2YgdGhlIGRvdWJsZSBwZXJjZW50YWdlIGluIHRoZSBzdHJpbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4gSSdsbCBncmFiIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrIHRob3NlIGNvZGUgc2VjdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzowMS45NjExNDU5OTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4gMjg2OlxcdHtcXG4gMjg3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDI4ODpcXHRcXHRzdHJ1Y3QgaXA2X3RubCAqdDtcXG4gMjg5OlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl07XFxuIDI5MDpcXHRcXHRpbnQgZXJyID0gLUUyQklHO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAocC1cXHUwMDNlbmFtZVswXSkge1xcbiAyOTM6XFx0XFx0XFx0aWYgKCFkZXZfdmFsaWRfbmFtZShwLVxcdTAwM2VuYW1lKSlcXG4gMjk0OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAyOTU6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBwLVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIDI5NjpcXHRcXHR9IGVsc2Uge1xcbiAyOTc6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2dG5sJWRcXFwiLCBJRk5BTVNJWik7XFxuIDI5ODpcXHRcXHR9XFxuIDI5OTpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAzMDA6XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sXFxuIDMwMTpcXHRcXHRcXHRcXHQgICBpcDZfdG5sX2Rldl9zZXR1cCk7XFxuIDMwMjpcXHRcXHRpZiAoIWRldilcXG4gMzAzOlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAzMDQ6XFx0XFxuIDMwNTpcXHRcXHRkZXZfbmV0X3NldChkZXYsIG5ldCk7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdHQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiAzMDg6XFx0XFx0dC1cXHUwMDNlcGFybXMgPSAqcDtcXG4gMzA5OlxcdFxcdHQtXFx1MDAzZW5ldCA9IGRldl9uZXQoZGV2KTtcXG4gMzEwOlxcdFxcdGVyciA9IGlwNl90bmxfY3JlYXRlMihkZXYpO1xcbiAzMTE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDMxMjpcXHRcXHRcXHRnb3RvIGZhaWxlZF9mcmVlO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRyZXR1cm4gdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MTM6MDEuOTYxMzEwODgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzc2ODc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NiBWaXJ0dWFsIFR1bm5lbCBJbnRlcmZhY2VzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBiZWhhdmlvciwgaXQncyBjbGVhciBJIGNhbid0IGp1c3QgZm9jdXMgb24gdGhlIG9idmlvdXMuIEknbSB0aGlua2luZywgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIGludG8gSVB2NiB2aXJ0dWFsIHR1bm5lbCBpbnRlcmZhY2VzIG5lZWRzIHRvIGludm9sdmUgbW9yZSB0aGFuIGp1c3QgYSBzdXJmYWNlLWxldmVsIGxvb2suIFRvIGJlIHRydWx5IGNvbXByZWhlbnNpdmUsIEkgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgbmV0L2lwdjYvaXA2X3Z0aS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgVlRJIGNvZGUgaXMgY3J1Y2lhbCBoZXJlLiBHaXZlbiB0aGF0IEknbSBkZWFsaW5nIHdpdGggcm91dGluZyBhbmQgZm9yd2FyZGluZywgSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCBgbmV0L2lwdjYvaXA2bXIuY2Agd2hpbGUgSSdtIGF0IGl0LiBJdCdzIHByb2JhYmx5IHdvcnRoIGtlZXBpbmcgYW4gZXllIG9uIG11bHRpY2FzdCByb3V0aW5nIGFzIHdlbGwsIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgVlRJIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzowNC4wMzkwMDEyNDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl92dGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFxuIDIwMTpcXHRzdGF0aWMgc3RydWN0IGlwNl90bmwgKnZ0aTZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4gMjAyOlxcdHtcXG4gMjAzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDIwNDpcXHRcXHRzdHJ1Y3QgaXA2X3RubCAqdDtcXG4gMjA1OlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl07XFxuIDIwNjpcXHRcXHRpbnQgZXJyO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRpZiAocC1cXHUwMDNlbmFtZVswXSkge1xcbiAyMDk6XFx0XFx0XFx0aWYgKCFkZXZfdmFsaWRfbmFtZShwLVxcdTAwM2VuYW1lKSlcXG4gMjEwOlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAyMTE6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBwLVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIDIxMjpcXHRcXHR9IGVsc2Uge1xcbiAyMTM6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBcXFwiaXA2X3Z0aSVkXFxcIiwgSUZOQU1TSVopO1xcbiAyMTQ6XFx0XFx0fVxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCp0KSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgdnRpNl9kZXZfc2V0dXApO1xcbiAyMTc6XFx0XFx0aWYgKCFkZXYpXFxuIDIxODpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xcbiAyMjE6XFx0XFxuIDIyMjpcXHRcXHR0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gMjIzOlxcdFxcdHQtXFx1MDAzZXBhcm1zID0gKnA7XFxuIDIyNDpcXHRcXHR0LVxcdTAwM2VuZXQgPSBkZXZfbmV0KGRldik7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdFxcdGVyciA9IHZ0aTZfdG5sX2NyZWF0ZTIoZGV2KTtcXG4gMjI3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAyMjg6XFx0XFx0XFx0Z290byBmYWlsZWRfZnJlZTtcXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzowNC4wMzkxMjg4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyNjE0MDU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBJUHY2IE11bHRpY2FzdCBSb3V0aW5nKipcblxuT2theSwgSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEknbSBtaXNzaW5nIHNvbWV0aGluZywgYSBzdWJ0bGUgaW50ZXJhY3Rpb24sIHBlcmhhcHMgaW4gYSBjb3JuZXIgY2FzZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2guIEJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIGl0J3MgcHJ1ZGVudCB0byBleHBhbmQgbXkgc2VhcmNoIGFuZCByZXZpc2l0IGEgZmlsZSB0aGF0J3MgY2xvc2VseSByZWxhdGVkIHRvIHRoaXMgb25lLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgYG5ldC9pcHY2L2lwNm1yLmNgIGFzIHdlbGwuIE1pZ2h0IGJlIHNvbWV0aGluZyB3b3J0aCBsb29raW5nIGF0IGluIHRoZXJlIHRoYXQgSSd2ZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEzOjA2Ljc2NTI3MzQxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2bXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0e1xcbiA2OTE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gNjkyOlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl07XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdGlmIChtcnQtXFx1MDAzZWlkID09IFJUNl9UQUJMRV9ERkxUKVxcbiA2OTU6XFx0XFx0XFx0c3Ryc2NweShuYW1lLCBcXFwicGltNnJlZ1xcXCIsIElGTkFNU0laKTtcXG4gNjk2OlxcdFxcdGVsc2VcXG4gNjk3OlxcdFxcdFxcdHNwcmludGYobmFtZSwgXFxcInBpbTZyZWcldVxcXCIsIG1ydC1cXHUwMDNlaWQpO1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHRkZXYgPSBhbGxvY19uZXRkZXYoMCwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgcmVnX3ZpZl9zZXR1cCk7XFxuIDcwMDpcXHRcXHRpZiAoIWRldilcXG4gNzAxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRkZXZfbmV0X3NldChkZXYsIG5ldCk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGlmIChyZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KSkge1xcbiA3MDY6XFx0XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gNzA3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDg6XFx0XFx0fVxcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRpZiAoZGV2X29wZW4oZGV2LCBOVUxMKSlcXG4gNzExOlxcdFxcdFxcdGdvdG8gZmFpbHVyZTtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0ZGV2X2hvbGQoZGV2KTtcXG4gNzE0OlxcdFxcdHJldHVybiBkZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjEzOjA2Ljc2NTU1MTg4MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDU3Nzk4MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzcHJpbnRmYCB0byBgc3Ryc2NweWAgUmVwbGFjZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuZCBleGNlbGxlbnQgZXhhbXBsZSBvZiBkZWZlbnNpdmUgY29kaW5nLiBUaGV5J3JlIHJlcGxhY2luZyBpbnN0YW5jZXMgb2YgYHNwcmludGZgIHdpdGhvdXQgYW55IGZvcm1hdCBzcGVjaWZpZXJzIChvciB3aXRoIGEgY29uc3RhbnQgc3RyaW5nIHRlbXBsYXRlKSB3aXRoIGBzdHJzY3B5YC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkcmVzc2luZyB0aGVzZSBjYXNlczpcblxuKiAgIGBzcHJpbnRmKG5hbWUsIFwiaXA2dG5sJSVkXCIpYCBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBzdHJzY3B5KG5hbWUsIFwiaXA2dG5sJWRcIiwgSUZOQU1TSVopYFxuKiAgIGBzcHJpbnRmKG5hbWUsIFwiaXA2X3Z0aSUlZFwiKWAgaXMgYmVjb21pbmcgYHN0cnNjcHkobmFtZSwgXCJpcDZfdnRpJWRcIiwgSUZOQU1TSVopYFxuKiAgIEFuZCBmaW5hbGx5LCBgc3ByaW50ZihuYW1lLCBcInBpbTZyZWdcIilgIGlzIG5vdyBgc3Ryc2NweShuYW1lLCBcInBpbTZyZWdcIiwgSUZOQU1TSVopYC5cblxuVGhlIGBuYW1lYCBidWZmZXIsIGltcG9ydGFudGx5LCBpcyBhIHN0YWNrLWFsbG9jYXRlZCBgY2hhciBuYW1lW0lGTkFNU0laXWAgYW5kIGl0J3MgaW5pdGlhbGl6ZWQgd2l0aCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgbGl0ZXJhbCAqYm90aCogYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGJ1ZmZlciB0aGF0J3MgYWxyZWFkeSBzYWZlLiBUaGUgY3J1Y2lhbCBiZW5lZml0IG9mIGBzdHJzY3B5YCBoZXJlIGlzIHRoYXQgaXQgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uLCB3aGljaCwgZm9yIGEgZGV2aWNlIG5hbWUgdGVtcGxhdGUsIGlzICplc3NlbnRpYWwqLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIGlmIHRoZSBzdHJpbmcgZ2V0cyB0cnVuY2F0ZWQsIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5UaGUgY29kZSB0aGVuIHBhc3NlcyB0aGlzIGBuYW1lYCBzdHJpbmcgdG8gYGFsbG9jX25ldGRldmAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBhbGxvY19uZXRkZXZgIHdvcmtzLCBpdCBsaWtlbHkgZWl0aGVyIGNvcGllcyB0aGlzIHRlbXBsYXRlIGRpcmVjdGx5IG9yIHVzZXMgaXQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhlIGFjdHVhbCBkZXZpY2UgbmFtZSAoYXMgaW4gYGFsbG9jX25ldGRldl9tcXNgKS4gSSdtIGNvbmZpZGVudCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkIGhlcmUuIE5vIHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBnZXR0aW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGRldGVjdG9yIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgYW5kIHJ1bGUgb3V0IGFueSBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuIEknbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIGNvbW1vbiBLTVNBTiBnb3RjaGFzOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nOioqIE5vcGUsIG5vdCBhIGZhY3RvciBoZXJlLiBgbmFtZWAgaXMgYSBjaGFyIGFycmF5LCBpdCdzIGp1c3QgYSBzdHJpbmcsIGFuZCBpdCdzIGJlaW5nIGhhbmRsZWQgY2FyZWZ1bGx5LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBhbnl0aGluZyB1bmluaXRpYWxpemVkLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIE5vIGNvbXBsZXggc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQuIEp1c3QgYSBzaW1wbGUgc3RyaW5nLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCBgc3Ryc2NweWAgdGFrZXMgY2FyZSBvZiB0aGUgYm91bmRzLlxuXG5BbHJpZ2h0LCBhZnRlciByZXZpZXdpbmcgdGhlIGNvZGUgY2hhbmdlIGFuZCBjb25maXJtaW5nIG15IGFzc3VtcHRpb25zLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGVseSBmYWxzZS4gVGhlIHBhdGNoIGlzIGEgc29saWQsIHNhZmUgaW1wcm92ZW1lbnQgYW5kIEknbSByZWFkeSB0byBjcmFmdCBteSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0NSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjoxMzoxMy44MjMzNTIyMTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIHNwcmludGYoKSB3aXRoIHN0cnNjcHkoKSB3aGVuIHBvcHVsYXRpbmcgZGV2aWNlIG5hbWUgdGVtcGxhdGVzIGluIG5ldC9pcHY2L2lwNl90dW5uZWwuYywgbmV0L2lwdjYvaXA2X3Z0aS5jLCBhbmQgbmV0L2lwdjYvaXA2bXIuYy4gVGhlIHN0cmluZyBsaXRlcmFscyBhcmUgc3RhdGljIGFuZCBzYWZlbHkgY29waWVkIGludG8gbG9jYWwgc3RhY2sgYnVmZmVycyB3aXRoIGJvdW5kZWQgbGVuZ3RoIChJRk5BTVNJWikgYW5kIGd1YXJhbnRlZWQgTlVMIHRlcm1pbmF0aW9uLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY2FsbHMgdG8gc3ByaW50ZigpIHdpdGggc3Ryc2NweSgpIHdoZW4gcG9wdWxhdGluZyBkZXZpY2UgbmFtZSB0ZW1wbGF0ZXMgaW4gbmV0L2lwdjYvaXA2X3R1bm5lbC5jLCBuZXQvaXB2Ni9pcDZfdnRpLmMsIGFuZCBuZXQvaXB2Ni9pcDZtci5jLiBUaGUgc3RyaW5nIGxpdGVyYWxzIGFyZSBzdGF0aWMgYW5kIHNhZmVseSBjb3BpZWQgaW50byBsb2NhbCBzdGFjayBidWZmZXJzIHdpdGggYm91bmRlZCBsZW5ndGggKElGTkFNU0laKSBhbmQgZ3VhcmFudGVlZCBOVUwgdGVybWluYXRpb24uIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[1] Phase: Succeeded StartedAt: 2026-09-09 22:13:25 +0000 UTC FinishedAt: 2026-09-09 22:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 22:13:25 +0000 UTC FinishedAt: 2026-09-09 22:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2] Phase: Succeeded StartedAt: 2026-09-09 22:13:25 +0000 UTC FinishedAt: 2026-09-10 01:58:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:13:25 +0000 UTC FinishedAt: 2026-09-10 01:58:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:13:25 +0000 UTC FinishedAt: 2026-09-09 22:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:13:25 +0000 UTC FinishedAt: 2026-09-09 22:13:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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-workflow6ffq9/series-workflow6ffq9-convert-artifact-825929018/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:13:35 +0000 UTC FinishedAt: 2026-09-09 22:32:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:13:35 +0000 UTC FinishedAt: 2026-09-09 22:32:26 +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:*0fc921d5-2fb5-444a-8f1a-0eefce37fb63,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-workflow6ffq9/series-workflow6ffq9-convert-artifact-825929018/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": "8f9c7d6e-a071-4820-88f6-39d2233add36", "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-workflow6ffq9/series-workflow6ffq9-build-action-1803018984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:13:35 +0000 UTC FinishedAt: 2026-09-09 22:32:16 +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:*0fc921d5-2fb5-444a-8f1a-0eefce37fb63,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-workflow6ffq9/series-workflow6ffq9-convert-artifact-825929018/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": "8f9c7d6e-a071-4820-88f6-39d2233add36", "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-workflow6ffq9/series-workflow6ffq9-build-action-1803018984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:32:26 +0000 UTC FinishedAt: 2026-09-09 22:32:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:32:26 +0000 UTC FinishedAt: 2026-09-09 22:32:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:32:26 +0000 UTC FinishedAt: 2026-09-09 22:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:32:26 +0000 UTC FinishedAt: 2026-09-09 22:32:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-workflow6ffq9/series-workflow6ffq9-convert-artifact-3597754773/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:32:36 +0000 UTC FinishedAt: 2026-09-09 22:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:32:36 +0000 UTC FinishedAt: 2026-09-09 22:34:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f9c7d6e-a071-4820-88f6-39d2233add36,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-workflow6ffq9/series-workflow6ffq9-build-action-1803018984/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-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:34:44 +0000 UTC FinishedAt: 2026-09-09 22:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:34:44 +0000 UTC FinishedAt: 2026-09-09 22:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:34:44 +0000 UTC FinishedAt: 2026-09-09 22:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:34:44 +0000 UTC FinishedAt: 2026-09-09 22:54:44 +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:*0fc921d5-2fb5-444a-8f1a-0eefce37fb63,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-workflow6ffq9/series-workflow6ffq9-convert-artifact-3597754773/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": "8a064062-38d4-44c5-84f9-8b4dab47c8b8", "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-workflow6ffq9/series-workflow6ffq9-build-action-3711961121/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:34:44 +0000 UTC FinishedAt: 2026-09-09 22:54:21 +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:*0fc921d5-2fb5-444a-8f1a-0eefce37fb63,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-workflow6ffq9/series-workflow6ffq9-convert-artifact-3597754773/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": "8a064062-38d4-44c5-84f9-8b4dab47c8b8", "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-workflow6ffq9/series-workflow6ffq9-build-action-3711961121/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:54:44 +0000 UTC FinishedAt: 2026-09-09 22:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:54:44 +0000 UTC FinishedAt: 2026-09-09 22:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:54:44 +0000 UTC FinishedAt: 2026-09-09 22:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:54:44 +0000 UTC FinishedAt: 2026-09-09 22:56:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a064062-38d4-44c5-84f9-8b4dab47c8b8,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-workflow6ffq9/series-workflow6ffq9-build-action-3711961121/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-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:36 +0000 UTC FinishedAt: 2026-09-10 01:58:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:36 +0000 UTC FinishedAt: 2026-09-10 01:58:02 +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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"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:*8f9c7d6e-a071-4820-88f6-39d2233add36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a064062-38d4-44c5-84f9-8b4dab47c8b8,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-workflow6ffq9/series-workflow6ffq9-build-action-1803018984/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-workflow6ffq9/series-workflow6ffq9-build-action-3711961121/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:36 +0000 UTC FinishedAt: 2026-09-09 22:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:36 +0000 UTC FinishedAt: 2026-09-09 22:56: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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"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-workflow6ffq9/series-workflow6ffq9-convert-artifact-2960135802/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:36 +0000 UTC FinishedAt: 2026-09-09 22:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:36 +0000 UTC FinishedAt: 2026-09-09 22:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:36 +0000 UTC FinishedAt: 2026-09-09 22:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:46 +0000 UTC FinishedAt: 2026-09-10 01:58:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ffq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"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":["ip6_tnl_create","vti6_tnl_create","ip6mr_reg_vif"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fde5a8bc4cc72cc83ec8bca5ffd58dbb7eabe5d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_TUNNEL","IPV6_VTI","IPV6_MROUTE"],"series_id":"e1db2798-29ed-427e-ab29-7b7705653ed9","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-09 22:56:46 +0000 UTC FinishedAt: 2026-09-10 01:57:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f9c7d6e-a071-4820-88f6-39d2233add36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a064062-38d4-44c5-84f9-8b4dab47c8b8,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-workflow6ffq9/series-workflow6ffq9-build-action-1803018984/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-workflow6ffq9/series-workflow6ffq9-build-action-3711961121/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-workflow6ffq9/series-workflow6ffq9-convert-artifact-2960135802/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,}