Name: series-workflowcfpd8 Phase: Succeeded StartedAt: 2026-06-23 10:46:46 +0000 UTC FinishedAt: 2026-06-23 13:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[0] Phase: Succeeded StartedAt: 2026-06-23 10:46:46 +0000 UTC FinishedAt: 2026-06-23 10:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 10:46:46 +0000 UTC FinishedAt: 2026-06-23 10:59:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "948efecf22e49aa4bf55bb73ec79a0ddcfd38571", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DRM_RAS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "948efecf22e49aa4bf55bb73ec79a0ddcfd38571", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DRM_RAS" ], "series_id": "185c64cf-4077-4eb3-bf74-ea82ed09b722" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "drm_ras_nl_get_error_threshold_doit", "drm_ras_nl_set_error_threshold_doit", "doit_reply_threshold", "get_node_error_threshold", "set_node_error_threshold" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RSTV9SQVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkb2l0X3JlcGx5X3RocmVzaG9sZCYjMzQ7LAogICAgJiMzNDtnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7c2V0X25vZGVfZXJyb3JfdGhyZXNob2xkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kcyAoR0VUX0VSUk9SX1RIUkVTSE9MRCBhbmQgU0VUX0VSUk9SX1RIUkVTSE9MRCkgdG8gdGhlIERSTSBSQVMgc3Vic3lzdGVtLiBXaGlsZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhlIGB4ZWAgZHJpdmVyIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgR1BVcywgdGhlIGdlbmVyaWMgbmV0bGluayBwYXJzaW5nLCBtZXNzYWdlIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsIHZhbGlkYXRpb24gbG9naWMgaW4gYGRybV9yYXMuY2AgYXJlIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgYXR0cmlidXRlIHZhbGlkYXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDEwOjU3OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYwLi4yNzE4ZjhhZWUwOWRkNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuQEAgLTU2LDYgJiM0Mzs1NiwxMCBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiYjNDM7KiBRdWVyeSBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYGdldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZyBib3RoXG4mIzQzOyAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuJiM0MzsqIFNldCBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYHNldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZ1xuJiM0MzsgIGBgbm9kZS1pZGBgLCBgYGVycm9yLWlkYGAgYW5kIGBgZXJyb3ItdGhyZXNob2xkYGAgYXMgcGFyYW1ldGVycy5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgJiM0MzsxMTUsMTcgQEAgRXhhbXBsZTogQ2xlYXIgYW4gZXJyb3IgY291bnRlciBmb3IgYSBnaXZlbiBub2RlXG4gXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAmIzM5O3tcJiMzNDtub2RlLWlkXCYjMzQ7OjAsIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OjF9JiMzOTtcbiAgICAgTm9uZVxuJiM0MztcbiYjNDM7RXhhbXBsZTogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlclxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2hcbiYjNDM7XG4mIzQzOyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gZ2V0LWVycm9yLXRocmVzaG9sZCAtLWpzb24gJiMzOTt7XCYjMzQ7bm9kZS1pZFwmIzM0OzowLCBcJiMzNDtlcnJvci1pZFwmIzM0OzoxfSYjMzk7XG4mIzQzOyAgICB7JiMzOTtlcnJvci1pZCYjMzk7OiAxLCAmIzM5O2Vycm9yLW5hbWUmIzM5OzogJiMzOTtlcnJvcl9uYW1lMSYjMzk7LCAmIzM5O2Vycm9yLXRocmVzaG9sZCYjMzk7OiAxNn1cbiYjNDM7XG4mIzQzO0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyXG4mIzQzO1xuJiM0MzsuLiBjb2RlLWJsb2NrOjogYmFzaFxuJiM0MztcbiYjNDM7ICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBzZXQtZXJyb3ItdGhyZXNob2xkIC0tanNvbiAmIzM5O3tcJiMzNDtub2RlLWlkXCYjMzQ7OjAsIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OjEsIFwmIzM0O2Vycm9yLXRocmVzaG9sZFwmIzM0Ozo4fSYjMzk7XG4mIzQzOyAgICBOb25lXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi45Y2Y3ZjljZGUyNDI1MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbkBAIC02OSw2ICYjNDM7NjksMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdGhyZXNob2xkXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBFcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgJiM0MzsxMjgsMzEgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBnZXQtZXJyb3ItdGhyZXNob2xkXG4mIzQzOyAgICAgIGRvYzogXHUwMDNlLVxuJiM0MzsgICAgICAgICAgIFJldHJpZXZlIGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXG4mIzQzOyAgICAgICAgICAgVGhlIHJlc3BvbnNlIGluY2x1ZGVzIHRoZSBpZCwgdGhlIG5hbWUsIGFuZCBjdXJyZW50IHRocmVzaG9sZFxuJiM0MzsgICAgICAgICAgIG9mIHRoZSBjb3VudGVyLlxuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzXG4mIzQzOyAgICAgIGZsYWdzOiBbYWRtaW4tcGVybV1cbiYjNDM7ICAgICAgZG86XG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuJiM0MzsgICAgICAgIHJlcGx5OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1pZFxuJiM0MzsgICAgICAgICAgICAtIGVycm9yLW5hbWVcbiYjNDM7ICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogc2V0LWVycm9yLXRocmVzaG9sZFxuJiM0MzsgICAgICBkb2M6IFx1MDAzZS1cbiYjNDM7ICAgICAgICAgICBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItY291bnRlci1hdHRyc1xuJiM0MzsgICAgICBmbGFnczogW2FkbWluLXBlcm1dXG4mIzQzOyAgICAgIGRvOlxuJiM0MzsgICAgICAgIHJlcXVlc3Q6XG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIG5vZGUtaWRcbiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1pZFxuJiM0MzsgICAgICAgICAgICAtIGVycm9yLXRocmVzaG9sZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uZDYwYzQwYWM1NDI3YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5AQCAtNDEsNiAmIzQzOzQxLDEzIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4mIzQzOyAqIDQuIEdFVF9FUlJPUl9USFJFU0hPTEQ6IFF1ZXJ5IGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXG4mIzQzOyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQuXG4mIzQzOyAqICAgIFJldHVybnMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIDUuIFNFVF9FUlJPUl9USFJFU0hPTEQ6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLlxuJiM0MzsgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgdG8gYmUgc2V0LlxuJiM0MzsgKlxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxuICAqXG4gICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcbkBAIC02MSw2ICYjNDM7NjgsMTYgQEBcbiAgKiAgICAgJiM0MzsgVGhlIGVycm9yIGNvdW50ZXJzIGluIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgbmVlZCB0byBiZSBjb250aWd1b3VzLCBidXQgdGhlXG4gICogICAgICAgZHJpdmVyIG11c3QgcmV0dXJuIC1FTk9FTlQgdG8gdGhlIHF1ZXJ5X2Vycm9yX2NvdW50ZXIgYXMgYW4gaW5kaWNhdGlvblxuICAqICAgICAgIHRoYXQgdGhlIElEIHNob3VsZCBiZSBza2lwcGVkIGFuZCBub3QgbGlzdGVkIGluIHRoZSBuZXRsaW5rIEFQSS5cbiYjNDM7ICogICAgICYjNDM7IFRoZSBkcml2ZXIgY2FuIG9wdGlvbmFsbHkgaW1wbGVtZW50IHF1ZXJ5X2Vycm9yX3RocmVzaG9sZCgpIGFuZFxuJiM0MzsgKiAgICAgICBzZXRfZXJyb3JfdGhyZXNob2xkKCkgY2FsbGJhY2tzIHRvIGZhY2lsaXRhdGUgZ2V0dGluZy9zZXR0aW5nIGVycm9yXG4mIzQzOyAqICAgICAgIHRocmVzaG9sZCBvZiB0aGUgY291bnRlci4gVGhyZXNob2xkIGluIFJBUyBjb250ZXh0IG1lYW5zIHRoZSBudW1iZXIgb2ZcbiYjNDM7ICogICAgICAgZXJyb3JzIHRoZSBoYXJkd2FyZSBpcyBleHBlY3RlZCB0byBhY2N1bXVsYXRlIGJlZm9yZSBpdCByYWlzZXMgdGhlbSB0b1xuJiM0MzsgKiAgICAgICBzb2Z0d2FyZS4gVGhpcyBpcyB0byBoYXZlIGEgZmluZSBncmFpbmVkIGNvbnRyb2wgb3ZlciBlcnJvciBub3RpZmljYXRpb25zXG4mIzQzOyAqICAgICAgIHRoYXQgYXJlIHJhaXNlZCBieSB0aGUgaGFyZHdhcmUuXG4mIzQzOyAqICAgICAmIzQzOyBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBlcnJvciB0aHJlc2hvbGQgYm91bmRzIGNoZWNraW5nLlxuJiM0MzsgKiAgICAgJiM0MzsgVGhyZXNob2xkIG9mIDAgY2FuIG1lYW4gaW52YWxpZCB0aHJlc2hvbGQgb3IgYWN0IGFzIGEgZGlzYWJsZSBub3RpZmljYXRpb25zXG4mIzQzOyAqICAgICAgIHRvZ2dsZSBmb3IgdGhhdCBjb3VudGVyIGRlcGVuZGluZyBvbiB1c2VjYXNlIGFuZCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlXG4mIzQzOyAqICAgICAgIGZvciBoYW5kbGluZyBpdCBhcyBuZWVkZWQuXG4gICpcbiAgKiBOZXRsaW5rIGhhbmRsZXJzOlxuICAqXG5AQCAtNzIsNiAmIzQzOzg5LDEwIEBAXG4gICogICBvcGVyYXRpb24sIGZldGNoaW5nIGEgY291bnRlciB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgbm9kZS5cbiAgKiAtIGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KCk6IEltcGxlbWVudHMgdGhlIENMRUFSX0VSUk9SX0NPVU5URVIgZG9pdFxuICAqICAgb3BlcmF0aW9uLCBjbGVhcmluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXG4mIzQzOyAqIC0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgR0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0XG4mIzQzOyAqICAgb3BlcmF0aW9uLCBmZXRjaGluZyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cbiYjNDM7ICogLSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBTRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcbiYjNDM7ICogICBvcGVyYXRpb24sIHNldHRpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4gICovXG4gXG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoZHJtX3Jhc194YSk7XG5AQCAtMTY4LDYgJiM0MzsxODksNDAgQEAgc3RhdGljIGludCBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsXG4gXHRyZXR1cm4gbm9kZS1cdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkLCBuYW1lLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZCh1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICoqbmFtZSwgdTMyICp0aHJlc2hvbGQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xuJiM0MztcbiYjNDM7XHRub2RlID0geGFfbG9hZChcdTAwMjZkcm1fcmFzX3hhLCBub2RlX2lkKTtcbiYjNDM7XHRpZiAoIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlLVx1MDAzZXF1ZXJ5X2Vycm9yX3RocmVzaG9sZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycm9yX2lkIFx1MDAzYyBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwgZXJyb3JfaWQgXHUwMDNlIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlLVx1MDAzZXF1ZXJ5X2Vycm9yX3RocmVzaG9sZChub2RlLCBlcnJvcl9pZCwgbmFtZSwgdGhyZXNob2xkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSB4YV9sb2FkKFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xuJiM0MztcdGlmICghbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUtXHUwMDNlc2V0X2Vycm9yX3RocmVzaG9sZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycm9yX2lkIFx1MDAzYyBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwgZXJyb3JfaWQgXHUwMDNlIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlLVx1MDAzZXNldF9lcnJvcl90aHJlc2hvbGQobm9kZSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcbiB7XG5AQCAtMTg2LDYgJiM0MzsyNDEsMjIgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXNnX3JlcGx5X3RocmVzaG9sZChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgdGhyZXNob2xkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0XHRcdCAgICB1MzIgZXJyb3JfaWQpXG4ge1xuQEAgLTIwMSwyNSAmIzQzOzI3Miw2NSBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXG4gXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBpbmZvKTtcbiBcdGlmICghaGRyKSB7XG4tXHRcdG5sbXNnX2ZyZWUobXNnKTtcbi1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHRcdHJldCA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9tc2c7XG4gXHR9XG4gXG4gXHRyZXQgPSBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKG5vZGVfaWQsIGVycm9yX2lkLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZlcnJvcl9uYW1lLCBcdTAwMjZ2YWx1ZSk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBjYW5jZWxfbXNnO1xuIFxuIFx0cmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuLVx0XHRubG1zZ19mcmVlKG1zZyk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2FuY2VsX21zZztcbiYjNDM7XG4mIzQzO1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuJiM0MztcbiYjNDM7Y2FuY2VsX21zZzpcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4mIzQzO2ZyZWVfbXNnOlxuJiM0MztcdG5sbXNnX2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRvaXRfcmVwbHlfdGhyZXNob2xkKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICplcnJvcl9uYW1lO1xuJiM0MztcdHN0cnVjdCBza19idWZmICptc2c7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuJiM0MztcdHUzMiB0aHJlc2hvbGQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbXNnKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIGZyZWVfbXNnO1xuIFx0fVxuIFxuJiM0MztcdHJldCA9IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZChub2RlX2lkLCBlcnJvcl9pZCwgXHUwMDI2ZXJyb3JfbmFtZSwgXHUwMDI2dGhyZXNob2xkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjYW5jZWxfbXNnO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtc2dfcmVwbHlfdGhyZXNob2xkKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHRocmVzaG9sZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2FuY2VsX21zZztcbiYjNDM7XG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4gXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuJiM0MztcbiYjNDM7Y2FuY2VsX21zZzpcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4mIzQzO2ZyZWVfbXNnOlxuJiM0MztcdG5sbXNnX2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0zNTUsNiAmIzQzOzQ2Niw1OSBAQCBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBub2RlLVx1MDAzZWNsZWFyX2Vycm9yX2NvdW50ZXIobm9kZSwgZXJyb3JfaWQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyXG4mIzQzOyAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbiYjNDM7ICogQGluZm86IEdlbmVyaWMgTmV0bGluayBpbmZvIGNvbnRhaW5pbmcgYXR0cmlidXRlcyBvZiB0aGUgcmVxdWVzdFxuJiM0MzsgKlxuJiM0MzsgKiBFeHRyYWN0cyB0aGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCByZXRyaWV2ZXNcbiYjNDM7ICogdGhlIGVycm9yIHRocmVzaG9sZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb3VudGVyLiBTZW5kcyB0aGUgcmVzdWx0IGJhY2sgdG9cbiYjNDM7ICogdGhlIHJlcXVlc3RpbmcgdXNlciB2aWEgdGhlIHN0YW5kYXJkIEdlbmwgcmVwbHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHR1MzIgbm9kZV9pZCwgZXJyb3JfaWQ7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VhdHRycyB8fFxuJiM0MztcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSUQpIHx8XG4mIzQzO1x0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcbiYjNDM7XHRlcnJvcl9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgY291bnRlclxuJiM0MzsgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXG4mIzQzOyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3RcbiYjNDM7ICpcbiYjNDM7ICogRXh0cmFjdHMgdGhlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZFxuJiM0MzsgKiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHUzMiBub2RlX2lkLCBlcnJvcl9pZCwgdGhyZXNob2xkO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlYXR0cnMgfHxcbiYjNDM7XHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxuJiM0MztcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEKSB8fFxuJiM0MztcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0pO1xuJiM0MztcdGVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xuJiM0MztcdHRocmVzaG9sZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIG5ldyBSQVMgbm9kZVxuICAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZSB0byByZWdpc3RlclxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uMDJlOGU1MDU0ZDA1NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtMjgsNiAmIzQzOzI4LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2NsZWFyX2Vycm9yX2NvdW50ZXJfbmxfcG9saWN5W0RSTV9SQVNfQV9FXG4gXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4gfTtcbiBcbiYjNDM7LyogRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCAtIGRvICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2dldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEICYjNDM7IDFdID0ge1xuJiM0MztcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuJiM0MztcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIERSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQgLSBkbyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19zZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQgJiM0MzsgMV0gPSB7XG4mIzQzO1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4mIzQzO1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuJiM0MztcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTERdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4mIzQzO307XG4mIzQzO1xuIC8qIE9wcyB0YWJsZSBmb3IgZHJtX3JhcyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdHtcbkBAIC01Niw2ICYjNDM7NjksMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xuIFx0XHQubWF4YXR0clx0PSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCxcbiBcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuY21kXHRcdD0gRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCxcbiYjNDM7XHRcdC5kb2l0XHRcdD0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQsXG4mIzQzO1x0XHQucG9saWN5XHRcdD0gZHJtX3Jhc19nZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeSxcbiYjNDM7XHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuJiM0MztcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmNtZFx0XHQ9IERSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQsXG4mIzQzO1x0XHQuZG9pdFx0XHQ9IGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0LFxuJiM0MztcdFx0LnBvbGljeVx0XHQ9IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXG4mIzQzO1x0XHQubWF4YXR0clx0PSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsXG4mIzQzO1x0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi41N2IxZTY0N2Q4MzMwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbkBAIC0yMCw2ICYjNDM7MjAsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuJiM0MztpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuJiM0MztpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi40YWZhMmFkOTgzMDBmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbkBAIC04Niw2ICYjNDM7ODYsMzggQEAgc3RhdGljIGludCBjbGVhcl9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9cbiBcdHJldHVybiBjbGVhcl9lcnJvcl9jb3VudGVyKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkKHN0cnVjdCBkcm1fcmFzX25vZGUgKmVwLCB1MzIgZXJyb3JfaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKipuYW1lLCB1MzIgKnRocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZXAtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQqbmFtZSA9IGluZm9bZXJyb3JfaWRdLm5hbWU7XG4mIzQzO1x0cmV0dXJuIHhlX3Jhc19nZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNldF9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZXAtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geGVfcmFzX3NldF90aHJlc2hvbGQoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmFsbG9jYXRlX2FuZF9jb3B5X2NvdW50ZXJzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIHtcbiBcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmNvdW50ZXI7XG5AQCAtMTM0LDYgJiM0MzsxNjYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9ub2RlX3BhcmFtcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbiBcdGlmIChzZXZlcml0eSA9PSBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUpIHtcbiBcdFx0bm9kZS1cdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiBcdFx0bm9kZS1cdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiYjNDM7XHRcdG5vZGUtXHUwMDNlcXVlcnlfZXJyb3JfdGhyZXNob2xkID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkO1xuJiM0MztcdFx0bm9kZS1cdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkID0gc2V0X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZDtcbiBcdH0gZWxzZSB7XG4gXHRcdG5vZGUtXHUwMDNlcXVlcnlfZXJyb3JfY291bnRlciA9IHF1ZXJ5X3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiBcdFx0bm9kZS1cdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfdW5jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuaW5kZXggNDRmNGUxYTM0NTViN2MuLmFmZWU4MjAyZDI0ZWZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbkBAIC0yNzAsNiAmIzQzOzI3MCwxMTEgQEAgaW50IHhlX3Jhc19jbGVhcl9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeGVfcmFzX2dldF90aHJlc2hvbGQoKSAtIEdldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZFxuJiM0MzsgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxuJiM0MzsgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHF1ZXJpZWQgKFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbiYjNDM7ICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHF1ZXJpZWQgKFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXG4mIzQzOyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyIGJhc2VkIG9uXG4mIzQzOyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgeGVfcmFzX2dldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdGhyZXNob2xkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xuJiM0MztcdHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCBjb21tYW5kID0ge307XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlcjtcbiYjNDM7XHRzaXplX3QgbGVuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNvdW50ZXIgPSBcdTAwMjZyZXF1ZXN0LmNvdW50ZXI7XG4mIzQzO1x0Y291bnRlci1cdTAwM2Vjb21tb24uc2V2ZXJpdHkgPSBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcbiYjNDM7XHRjb3VudGVyLVx1MDAzZWNvbW1vbi5jb21wb25lbnQgPSBkcm1fdG9feGVfcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuJiM0MztcbiYjNDM7XHR4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKFx1MDAyNmNvbW1hbmQsIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCwgWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRCxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuJiM0MztcbiYjNDM7XHRndWFyZCh4ZV9wbV9ydW50aW1lKSh4ZSk7XG4mIzQzO1x0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXHUwMDI2eGUtXHUwMDNlc2MsIFx1MDAyNmNvbW1hbmQsIFx1MDAyNmxlbik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0eGVfZXJyKHhlLCBcJiMzNDtzeXNjdHJsOiBmYWlsZWQgdG8gZ2V0IHRocmVzaG9sZCAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuICE9IHNpemVvZihyZXNwb25zZSkpIHtcbiYjNDM7XHRcdHhlX2Vycih4ZSwgXCYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBnZXQgdGhyZXNob2xkIHJlc3BvbnNlIGxlbmd0aCAlenUgKGV4cGVjdGVkICV6dSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y291bnRlciA9IFx1MDAyNnJlc3BvbnNlLmNvdW50ZXI7XG4mIzQzO1x0KnRocmVzaG9sZCA9IHJlc3BvbnNlLnRocmVzaG9sZDtcbiYjNDM7XG4mIzQzO1x0eGVfZGJnKHhlLCBcJiMzNDtbUkFTXTogZ2V0IHRocmVzaG9sZCAldSBmb3IgJXMgJXNcXG5cJiMzNDssICp0aHJlc2hvbGQsXG4mIzQzO1x0ICAgICAgIGNvbXBfdG9fc3RyKGNvdW50ZXItXHUwMDNlY29tbW9uLmNvbXBvbmVudCksIHNldl90b19zdHIoY291bnRlci1cdTAwM2Vjb21tb24uc2V2ZXJpdHkpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHhlX3Jhc19zZXRfdGhyZXNob2xkKCkgLSBTZXQgZXJyb3IgY291bnRlciB0aHJlc2hvbGRcbiYjNDM7ICogQHhlOiBYZSBkZXZpY2UgaW5zdGFuY2VcbiYjNDM7ICogQHNldmVyaXR5OiBFcnJvciBzZXZlcml0eSB0byBiZSBzZXQgKFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbiYjNDM7ICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbiYjNDM7ICogQHRocmVzaG9sZDogQ291bnRlciB0aHJlc2hvbGRcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyIGJhc2VkIG9uXG4mIzQzOyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgeGVfcmFzX3NldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiB0aHJlc2hvbGQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCByZXF1ZXN0ID0ge307XG4mIzQzO1x0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y291bnRlciA9IFx1MDAyNnJlcXVlc3QuY291bnRlcjtcbiYjNDM7XHRjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuJiM0MztcdGNvdW50ZXItXHUwMDNlY29tbW9uLmNvbXBvbmVudCA9IGRybV90b194ZV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XG4mIzQzO1x0cmVxdWVzdC50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4mIzQzO1xuJiM0MztcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXHUwMDI2Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xELFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCBcdTAwMjZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHhlX3BtX3J1bnRpbWUpKHhlKTtcbiYjNDM7XHRyZXQgPSB4ZV9zeXNjdHJsX3NlbmRfY29tbWFuZChcdTAwMjZ4ZS1cdTAwM2VzYywgXHUwMDI2Y29tbWFuZCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHR4ZV9lcnIoeGUsIFwmIzM0O3N5c2N0cmw6IGZhaWxlZCB0byBzZXQgdGhyZXNob2xkICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gIT0gc2l6ZW9mKHJlc3BvbnNlKSkge1xuJiM0MztcdFx0eGVfZXJyKHhlLCBcJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIHNldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBsZW4sIHNpemVvZihyZXNwb25zZSkpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0eGVfZXJyKHhlLCBcJiMzNDtzeXNjdHJsOiBzZXQgdGhyZXNob2xkIGNvbW1hbmQgZmFpbGVkIHdpdGggc3RhdHVzICUjeFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICByZXNwb25zZS5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvdW50ZXIgPSBcdTAwMjZyZXNwb25zZS5jb3VudGVyO1xuJiM0MztcbiYjNDM7XHR4ZV9kYmcoeGUsIFwmIzM0O1tSQVNdOiBzZXQgdGhyZXNob2xkICV1IGZvciAlcyAlc1xcblwmIzM0OywgcmVzcG9uc2UudGhyZXNob2xkLFxuJiM0MztcdCAgICAgICBjb21wX3RvX3N0cihjb3VudGVyLVx1MDAzZWNvbW1vbi5jb21wb25lbnQpLCBzZXZfdG9fc3RyKGNvdW50ZXItXHUwMDNlY29tbW9uLnNldmVyaXR5KSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeGVfcmFzX2luaXQgLSBJbml0aWFsaXplIFhlIFJBU1xuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oXG5pbmRleCBiYTBiMDIyNGRmMjM2NS4uMWFhNDNjNTRiNzEwYzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxuQEAgLTE1LDYgJiM0MzsxNSw4IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xuIGludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xuIGludCB4ZV9yYXNfY2xlYXJfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCk7XG4mIzQzO2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpO1xuJiM0MztpbnQgeGVfcmFzX3NldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiB0aHJlc2hvbGQpO1xuIHZvaWQgeGVfcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxuaW5kZXggNjY4OGUxMWY1N2E4NjIuLjc0N2I2NTE4ODBjZDU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmhcbkBAIC0xMjEsNCAmIzQzOzEyMSw1NSBAQCBzdHJ1Y3QgeGVfcmFzX2NsZWFyX2NvdW50ZXJfcmVzcG9uc2Uge1xuIFx0LyoqIEByZXNlcnZlZDE6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4gXHR1MzIgcmVzZXJ2ZWQxWzNdO1xuIH0gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3Qge1xuJiM0MztcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBnZXQgdGhyZXNob2xkIGZvciAqL1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbiYjNDM7XHQvKiogQHJlc2VydmVkOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuJiM0MztcdHUzMiByZXNlcnZlZDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgeGVfcmFzX2dldF90aHJlc2hvbGRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIGdldCB0aHJlc2hvbGRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSB7XG4mIzQzO1x0LyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovXG4mIzQzO1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyO1xuJiM0MztcdC8qKiBAdGhyZXNob2xkOiBDdXJyZW50IHRocmVzaG9sZCBvZiB0aGUgY291bnRlciAqL1xuJiM0MztcdHUzMiB0aHJlc2hvbGQ7XG4mIzQzO1x0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHR1MzIgcmVzZXJ2ZWRbNF07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3Igc2V0IHRocmVzaG9sZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3Qge1xuJiM0MztcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBzZXQgdGhyZXNob2xkIGZvciAqL1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbiYjNDM7XHQvKiogQHRocmVzaG9sZDogVGhyZXNob2xkIHRvIGJlIHNldCAqL1xuJiM0MztcdHUzMiB0aHJlc2hvbGQ7XG4mIzQzO1x0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHR1MzIgcmVzZXJ2ZWQ7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3Jlc3BvbnNlIC0gUmVzcG9uc2Ugc3RydWN0dXJlIGZvciBzZXQgdGhyZXNob2xkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2Uge1xuJiM0MztcdC8qKiBAY291bnRlcjogQ291bnRlciBJRCAqL1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbiYjNDM7XHQvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqL1xuJiM0MztcdHUzMiByZXNlcnZlZDtcbiYjNDM7XHQvKiogQHRocmVzaG9sZDogVXBkYXRlZCB0aHJlc2hvbGQgKi9cbiYjNDM7XHR1MzIgdGhyZXNob2xkO1xuJiM0MztcdC8qKiBAc3RhdHVzOiBPcGVyYXRpb24gc3RhdHVzICovXG4mIzQzO1x0dTMyIHN0YXR1cztcbiYjNDM7XHQvKiogQHJlc2VydmVkMTogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHR1MzIgcmVzZXJ2ZWQxWzJdO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuaW5kZXggYjRkMTczMjlhZjZjOGQuLjA1NDdiN2IzOTcyNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuQEAgLTQ5LDE4ICYjNDM7NDksNiBAQCBzdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY1xuIFx0fSB3aGlsZSAocmVzcG9uc2UtXHUwMDNlY291bnQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBldmVudF9yZXF1ZXN0X3ByZXBhcmUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyICpoZWFkZXIsXG4tXHRcdFx0XHQgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgKnJlcXVlc3QpXG4te1xuLVx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHhlLVx1MDAzZWRybS5kZXYpO1xuLVxuLVx0aGVhZGVyLVx1MDAzZWRhdGEgPSBSRUdfRklFTERfUFJFUChBUFBfSERSX0dST1VQX0lEX01BU0ssIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCkgfFxuLVx0XHQgICAgICAgUkVHX0ZJRUxEX1BSRVAoQVBQX0hEUl9DT01NQU5EX01BU0ssIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UKTtcbi1cbi1cdHJlcXVlc3QtXHUwMDNldmVjdG9yID0geGVfZGV2aWNlX2hhc19tc2l4KHhlKSA/IFhFX0lSUV9ERUZBVUxUX01TSVggOiAwO1xuLVx0cmVxdWVzdC1cdTAwM2VmbiA9IFBDSV9GVU5DKHBkZXYtXHUwMDNlZGV2Zm4pO1xuLX1cbi1cbiAvKipcbiAgKiB4ZV9zeXNjdHJsX2V2ZW50KCkgLSBIYW5kbGVyIGZvciBTeXN0ZW0gQ29udHJvbGxlciBldmVudHNcbiAgKiBAc2M6IFN5c3RlbSBDb250cm9sbGVyIGluc3RhbmNlXG5AQCAtNzIsMTYgJiM0Mzs2MCwxNiBAQCB2b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxuIFx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbiBcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XG4gXHRzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0IHJlcXVlc3QgPSB7fTtcbi1cdHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyIGhlYWRlciA9IHt9O1xuJiM0MztcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gc2NfdG9feGUoc2MpO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4ZS1cdTAwM2Vkcm0uZGV2KTtcbiYjNDM7XG4mIzQzO1x0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbi1cdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2VzcyhzY190b194ZShzYykpO1xuLVx0ZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgXHUwMDI2aGVhZGVyLCBcdTAwMjZyZXF1ZXN0KTtcbiYjNDM7XHRyZXF1ZXN0LnZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDtcbiYjNDM7XHRyZXF1ZXN0LmZuID0gUENJX0ZVTkMocGRldi1cdTAwM2VkZXZmbik7XG4gXG4tXHRjb21tYW5kLmhlYWRlciA9IGhlYWRlcjtcbi1cdGNvbW1hbmQuZGF0YV9pbiA9IFx1MDAyNnJlcXVlc3Q7XG4tXHRjb21tYW5kLmRhdGFfaW5fbGVuID0gc2l6ZW9mKHJlcXVlc3QpO1xuLVx0Y29tbWFuZC5kYXRhX291dCA9IFx1MDAyNnJlc3BvbnNlO1xuLVx0Y29tbWFuZC5kYXRhX291dF9sZW4gPSBzaXplb2YocmVzcG9uc2UpO1xuJiM0MztcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXHUwMDI2Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVCxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuIFxuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnNjLVx1MDAzZWV2ZW50X2xvY2spO1xuIFx0Z2V0X3BlbmRpbmdfZXZlbnQoc2MsIFx1MDAyNmNvbW1hbmQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxuaW5kZXggNmUzNzUzNTU0NTEwYTUuLjEwZjA2YWE1YzRiNTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmhcbkBAIC0yNCwxMSAmIzQzOzI0LDE1IEBAIGVudW0geGVfc3lzY3RybF9ncm91cCB7XG4gICpcbiAgKiBAWEVfU1lTQ1RSTF9DTURfR0VUX0NPVU5URVI6IEdldCBlcnJvciBjb3VudGVyIHZhbHVlXG4gICogQFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVI6IENsZWFyIGVycm9yIGNvdW50ZXIgdmFsdWVcbiYjNDM7ICogQFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQ6IFJldHJpZXZlIGVycm9yIHRocmVzaG9sZFxuJiM0MzsgKiBAWEVfU1lTQ1RSTF9DTURfU0VUX1RIUkVTSE9MRDogU2V0IGVycm9yIHRocmVzaG9sZFxuICAqIEBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVDogUmV0cmlldmUgcGVuZGluZyBldmVudFxuICAqL1xuIGVudW0geGVfc3lzY3RybF9nZnNwX2NtZCB7XG4gXHRYRV9TWVNDVFJMX0NNRF9HRVRfQ09VTlRFUlx0XHQ9IDB4MDMsXG4gXHRYRV9TWVNDVFJMX0NNRF9DTEVBUl9DT1VOVEVSXHRcdD0gMHgwNCxcbiYjNDM7XHRYRV9TWVNDVFJMX0NNRF9HRVRfVEhSRVNIT0xEXHRcdD0gMHgwNSxcbiYjNDM7XHRYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEXHRcdD0gMHgwNixcbiBcdFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UXHQ9IDB4MDcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IGYyYTc4N2JjNGY2NGE5Li42ODNhMzg0NGY4NGY2MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtNjksNiAmIzQzOzY5LDM0IEBAIHN0cnVjdCBkcm1fcmFzX25vZGUge1xuIFx0ICovXG4gXHRpbnQgKCpjbGVhcl9lcnJvcl9jb3VudGVyKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQpO1xuIFxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBxdWVyeV9lcnJvcl90aHJlc2hvbGQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBxdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYVxuJiM0MztcdCAqIHNwZWNpZmljIGNvdW50ZXIuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBEcml2ZXIgc2hvdWxkIGV4cGVjdCBxdWVyeV9lcnJvcl90aHJlc2hvbGQoKSB0byBiZSBjYWxsZWQgd2l0aFxuJiM0MztcdCAqIGVycm9yX2lkIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvXG4mIzQzO1x0ICogYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpxdWVyeV9lcnJvcl90aHJlc2hvbGQpKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqKm5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKnRocmVzaG9sZCk7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQHNldF9lcnJvcl90aHJlc2hvbGQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBzZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWNcbiYjNDM7XHQgKiBjb3VudGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRHJpdmVyIHNob3VsZCBleHBlY3Qgc2V0X2Vycm9yX3RocmVzaG9sZCgpIHRvIGJlIGNhbGxlZCB3aXRoIGVycm9yX2lkXG4mIzQzO1x0ICogZnJvbSBgZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdGAgdG8gYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuXG4mIzQzO1x0ICogRHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBlcnJvciB0aHJlc2hvbGQgYm91bmRzIGNoZWNraW5nLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50ICgqc2V0X2Vycm9yX3RocmVzaG9sZCkoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKTtcbiYjNDM7XG4gXHQvKiogQHByaXY6IERyaXZlciBwcml2YXRlIGRhdGEgKi9cbiBcdHZvaWQgKnByaXY7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyNy4uMjdjNjg5NTY0OTVmYjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfTkFNRSxcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1ZBTFVFLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCxcbiBcbiBcdF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYLFxuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcbkBAIC00Miw2ICYjNDM7NDMsOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxuIFx0RFJNX1JBU19DTURfR0VUX0VSUk9SX0NPVU5URVIsXG4gXHREUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLFxuJiM0MztcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsXG4mIzQzO1x0RFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCxcbiBcbiBcdF9fRFJNX1JBU19DTURfTUFYLFxuIFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEUk1fUkFTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQmIzM0OywKICAgICYjMzQ7ZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQmIzM0OywKICAgICYjMzQ7ZG9pdF9yZXBseV90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7Z2V0X25vZGVfZXJyb3JfdGhyZXNob2xkJiMzNDssCiAgICAmIzM0O3NldF9ub2RlX2Vycm9yX3RocmVzaG9sZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMgKEdFVF9FUlJPUl9USFJFU0hPTEQgYW5kIFNFVF9FUlJPUl9USFJFU0hPTEQpIHRvIHRoZSBEUk0gUkFTIHN1YnN5c3RlbS4gV2hpbGUgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIGluIHRoZSBgeGVgIGRyaXZlciBpcyB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIEludGVsIEdQVXMsIHRoZSBnZW5lcmljIG5ldGxpbmsgcGFyc2luZywgbWVzc2FnZSBhbGxvY2F0aW9uLCBhbmQgaW5pdGlhbCB2YWxpZGF0aW9uIGxvZ2ljIGluIGBkcm1fcmFzLmNgIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWVtb3J5IGxlYWtzIG9yIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDEwOjU3OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAppbmRleCA4M2MyMTg1M2I3NGI2MC4uMjcxOGY4YWVlMDlkZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0CkBAIC01Niw2ICYjNDM7NTYsMTAgQEAgVXNlciBzcGFjZSB0b29scyBjYW46CiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy4KICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aAogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBRdWVyeSBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYGdldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZyBib3RoCiYjNDM7ICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBTZXQgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBzZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmcKJiM0MzsgIGBgbm9kZS1pZGBgLCBgYGVycm9yLWlkYGAgYW5kIGBgZXJyb3ItdGhyZXNob2xkYGAgYXMgcGFyYW1ldGVycy4KIAogWUFNTC1iYXNlZCBJbnRlcmZhY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTEsMyAmIzQzOzExNSwxNyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGUKIAogICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAmIzM5O3smIzM0O25vZGUtaWQmIzM0OzowLCAmIzM0O2Vycm9yLWlkJiMzNDs6MX0mIzM5OwogICAgIE5vbmUKJiM0MzsKJiM0MztFeGFtcGxlOiBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyCiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2gKJiM0MzsKJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGdldC1lcnJvci10aHJlc2hvbGQgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxfSYjMzk7CiYjNDM7ICAgIHsmIzM5O2Vycm9yLWlkJiMzOTs6IDEsICYjMzk7ZXJyb3ItbmFtZSYjMzk7OiAmIzM5O2Vycm9yX25hbWUxJiMzOTssICYjMzk7ZXJyb3ItdGhyZXNob2xkJiMzOTs6IDE2fQomIzQzOwomIzQzO0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyCiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2gKJiM0MzsKJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIHNldC1lcnJvci10aHJlc2hvbGQgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxLCAmIzM0O2Vycm9yLXRocmVzaG9sZCYjMzQ7Ojh9JiMzOTsKJiM0MzsgICAgTm9uZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKaW5kZXggZTExMzA1NmY4YzAxNmMuLjljZjdmOWNkZTI0MjUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKQEAgLTY5LDYgJiM0Mzs2OSwxMCBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWUKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdGhyZXNob2xkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGRvYzogRXJyb3IgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyLgogCiBvcGVyYXRpb25zOgogICBsaXN0OgpAQCAtMTI0LDMgJiM0MzsxMjgsMzEgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZ2V0LWVycm9yLXRocmVzaG9sZAomIzQzOyAgICAgIGRvYzogJmd0Oy0KJiM0MzsgICAgICAgICAgIFJldHJpZXZlIGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuCiYjNDM7ICAgICAgICAgICBUaGUgcmVzcG9uc2UgaW5jbHVkZXMgdGhlIGlkLCB0aGUgbmFtZSwgYW5kIGN1cnJlbnQgdGhyZXNob2xkCiYjNDM7ICAgICAgICAgICBvZiB0aGUgY291bnRlci4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzCiYjNDM7ICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXQomIzQzOyAgICAgIGRvOgomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzCiYjNDM7ICAgICAgICByZXBseToKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGVycm9yLWlkCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1uYW1lCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGQKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHNldC1lcnJvci10aHJlc2hvbGQKJiM0MzsgICAgICBkb2M6ICZndDstCiYjNDM7ICAgICAgICAgICBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzCiYjNDM7ICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXQomIzQzOyAgICAgIGRvOgomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIG5vZGUtaWQKJiM0MzsgICAgICAgICAgICAtIGVycm9yLWlkCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi5kNjBjNDBhYzU0MjdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCkBAIC00MSw2ICYjNDM7NDEsMTMgQEAKICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuCiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLgogICoKJiM0MzsgKiA0LiBHRVRfRVJST1JfVEhSRVNIT0xEOiBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLgomIzQzOyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQuCiYjNDM7ICogICAgUmV0dXJucyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci4KJiM0MzsgKgomIzQzOyAqIDUuIFNFVF9FUlJPUl9USFJFU0hPTEQ6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLgomIzQzOyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQgYW5kIHRocmVzaG9sZCB0byBiZSBzZXQuCiYjNDM7ICoKICAqIE5vZGUgcmVnaXN0cmF0aW9uOgogICoKICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zCkBAIC02MSw2ICYjNDM7NjgsMTYgQEAKICAqICAgICAmIzQzOyBUaGUgZXJyb3IgY291bnRlcnMgaW4gdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGNvbnRpZ3VvdXMsIGJ1dCB0aGUKICAqICAgICAgIGRyaXZlciBtdXN0IHJldHVybiAtRU5PRU5UIHRvIHRoZSBxdWVyeV9lcnJvcl9jb3VudGVyIGFzIGFuIGluZGljYXRpb24KICAqICAgICAgIHRoYXQgdGhlIElEIHNob3VsZCBiZSBza2lwcGVkIGFuZCBub3QgbGlzdGVkIGluIHRoZSBuZXRsaW5rIEFQSS4KJiM0MzsgKiAgICAgJiM0MzsgVGhlIGRyaXZlciBjYW4gb3B0aW9uYWxseSBpbXBsZW1lbnQgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgYW5kCiYjNDM7ICogICAgICAgc2V0X2Vycm9yX3RocmVzaG9sZCgpIGNhbGxiYWNrcyB0byBmYWNpbGl0YXRlIGdldHRpbmcvc2V0dGluZyBlcnJvcgomIzQzOyAqICAgICAgIHRocmVzaG9sZCBvZiB0aGUgY291bnRlci4gVGhyZXNob2xkIGluIFJBUyBjb250ZXh0IG1lYW5zIHRoZSBudW1iZXIgb2YKJiM0MzsgKiAgICAgICBlcnJvcnMgdGhlIGhhcmR3YXJlIGlzIGV4cGVjdGVkIHRvIGFjY3VtdWxhdGUgYmVmb3JlIGl0IHJhaXNlcyB0aGVtIHRvCiYjNDM7ICogICAgICAgc29mdHdhcmUuIFRoaXMgaXMgdG8gaGF2ZSBhIGZpbmUgZ3JhaW5lZCBjb250cm9sIG92ZXIgZXJyb3Igbm90aWZpY2F0aW9ucwomIzQzOyAqICAgICAgIHRoYXQgYXJlIHJhaXNlZCBieSB0aGUgaGFyZHdhcmUuCiYjNDM7ICogICAgICYjNDM7IFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuCiYjNDM7ICogICAgICYjNDM7IFRocmVzaG9sZCBvZiAwIGNhbiBtZWFuIGludmFsaWQgdGhyZXNob2xkIG9yIGFjdCBhcyBhIGRpc2FibGUgbm90aWZpY2F0aW9ucwomIzQzOyAqICAgICAgIHRvZ2dsZSBmb3IgdGhhdCBjb3VudGVyIGRlcGVuZGluZyBvbiB1c2VjYXNlIGFuZCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlCiYjNDM7ICogICAgICAgZm9yIGhhbmRsaW5nIGl0IGFzIG5lZWRlZC4KICAqCiAgKiBOZXRsaW5rIGhhbmRsZXJzOgogICoKQEAgLTcyLDYgJiM0Mzs4OSwxMCBAQAogICogICBvcGVyYXRpb24sIGZldGNoaW5nIGEgY291bnRlciB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgbm9kZS4KICAqIC0gZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgQ0xFQVJfRVJST1JfQ09VTlRFUiBkb2l0CiAgKiAgIG9wZXJhdGlvbiwgY2xlYXJpbmcgYSBjb3VudGVyIHZhbHVlIGZyb20gYSBzcGVjaWZpYyBub2RlLgomIzQzOyAqIC0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgR0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0CiYjNDM7ICogICBvcGVyYXRpb24sIGZldGNoaW5nIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyLgomIzQzOyAqIC0gZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgU0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0CiYjNDM7ICogICBvcGVyYXRpb24sIHNldHRpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuCiAgKi8KIAogc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoZHJtX3Jhc194YSk7CkBAIC0xNjgsNiAmIzQzOzE4OSw0MCBAQCBzdGF0aWMgaW50IGdldF9ub2RlX2Vycm9yX2NvdW50ZXIodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwKIAlyZXR1cm4gbm9kZS0mZ3Q7cXVlcnlfZXJyb3JfY291bnRlcihub2RlLCBlcnJvcl9pZCwgbmFtZSwgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGludCBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqKm5hbWUsIHUzMiAqdGhyZXNob2xkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTsKJiM0MzsKJiM0MzsJbm9kZSA9IHhhX2xvYWQoJmFtcDtkcm1fcmFzX3hhLCBub2RlX2lkKTsKJiM0MzsJaWYgKCFub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWlmICghbm9kZS0mZ3Q7cXVlcnlfZXJyb3JfdGhyZXNob2xkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoZXJyb3JfaWQgJmx0OyBub2RlLSZndDtlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkICZndDsgbm9kZS0mZ3Q7ZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlLSZndDtxdWVyeV9lcnJvcl90aHJlc2hvbGQobm9kZSwgZXJyb3JfaWQsIG5hbWUsIHRocmVzaG9sZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlOwomIzQzOwomIzQzOwlub2RlID0geGFfbG9hZCgmYW1wO2RybV9yYXNfeGEsIG5vZGVfaWQpOwomIzQzOwlpZiAoIW5vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKCFub2RlLSZndDtzZXRfZXJyb3JfdGhyZXNob2xkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoZXJyb3JfaWQgJmx0OyBub2RlLSZndDtlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkICZndDsgbm9kZS0mZ3Q7ZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlLSZndDtzZXRfZXJyb3JfdGhyZXNob2xkKG5vZGUsIGVycm9yX2lkLCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCwKIAkJCSAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSkKIHsKQEAgLTE4Niw2ICYjNDM7MjQxLDIyIEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCwKIAkJCSAgIHZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbXNnX3JlcGx5X3RocmVzaG9sZChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsCiYjNDM7CQkJICAgICAgIHUzMiB0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xELCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwKIAkJCSAgICB1MzIgZXJyb3JfaWQpCiB7CkBAIC0yMDEsMjUgJiM0MzsyNzIsNjUgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLAogCiAJaGRyID0gZ2VubG1zZ19pcHV0KG1zZywgaW5mbyk7CiAJaWYgKCFoZHIpIHsKLQkJbmxtc2dfZnJlZShtc2cpOwotCQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBmcmVlX21zZzsKIAl9CiAKIAlyZXQgPSBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKG5vZGVfaWQsIGVycm9yX2lkLAogCQkJCSAgICAgJmFtcDtlcnJvcl9uYW1lLCAmYW1wO3ZhbHVlKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBjYW5jZWxfbXNnOwogCiAJcmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTsKLQlpZiAocmV0KSB7Ci0JCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKLQkJbmxtc2dfZnJlZShtc2cpOwotCQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBjYW5jZWxfbXNnOwomIzQzOwomIzQzOwlnZW5sbXNnX2VuZChtc2csIGhkcik7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiYjNDM7CiYjNDM7Y2FuY2VsX21zZzoKJiM0MzsJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwomIzQzO2ZyZWVfbXNnOgomIzQzOwlubG1zZ19mcmVlKG1zZyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG9pdF9yZXBseV90aHJlc2hvbGQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKmVycm9yX25hbWU7CiYjNDM7CXN0cnVjdCBza19idWZmICptc2c7CiYjNDM7CXN0cnVjdCBubGF0dHIgKmhkcjsKJiM0MzsJdTMyIHRocmVzaG9sZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW1zZykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwloZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBpbmZvKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gZnJlZV9tc2c7CiAJfQogCiYjNDM7CXJldCA9IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZChub2RlX2lkLCBlcnJvcl9pZCwgJmFtcDtlcnJvcl9uYW1lLCAmYW1wO3RocmVzaG9sZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGNhbmNlbF9tc2c7CiYjNDM7CiYjNDM7CXJldCA9IG1zZ19yZXBseV90aHJlc2hvbGQobXNnLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdGhyZXNob2xkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2FuY2VsX21zZzsKJiM0MzsKIAlnZW5sbXNnX2VuZChtc2csIGhkcik7CiAKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwomIzQzOwomIzQzO2NhbmNlbF9tc2c6CiYjNDM7CWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKJiM0MztmcmVlX21zZzoKJiM0MzsJbmxtc2dfZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTM1NSw2ICYjNDM7NDY2LDU5IEBAIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiBub2RlLSZndDtjbGVhcl9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyCiYjNDM7ICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlcgomIzQzOyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3QKJiM0MzsgKgomIzQzOyAqIEV4dHJhY3RzIHRoZSBOb2RlIElEIGFuZCBFcnJvciBJRCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgYW5kIHJldHJpZXZlcwomIzQzOyAqIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci4gU2VuZHMgdGhlIHJlc3VsdCBiYWNrIHRvCiYjNDM7ICogdGhlIHJlcXVlc3RpbmcgdXNlciB2aWEgdGhlIHN0YW5kYXJkIEdlbmwgcmVwbHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXUzMiBub2RlX2lkLCBlcnJvcl9pZDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDthdHRycyB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTsKJiM0MzsJZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLSZndDthdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pOwomIzQzOwomIzQzOwlyZXR1cm4gZG9pdF9yZXBseV90aHJlc2hvbGQoaW5mbywgbm9kZV9pZCwgZXJyb3JfaWQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpIC0gU2V0IGVycm9yIHRocmVzaG9sZCBvZiBhIGNvdW50ZXIKJiM0MzsgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyCiYjNDM7ICogQGluZm86IEdlbmVyaWMgTmV0bGluayBpbmZvIGNvbnRhaW5pbmcgYXR0cmlidXRlcyBvZiB0aGUgcmVxdWVzdAomIzQzOyAqCiYjNDM7ICogRXh0cmFjdHMgdGhlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZAomIzQzOyAqIHNldHMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb3VudGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwl1MzIgbm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDthdHRycyB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkgfHwKJiM0MzsJICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlub2RlX2lkID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0pOwomIzQzOwllcnJvcl9pZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSk7CiYjNDM7CXRocmVzaG9sZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRF0pOwomIzQzOwomIzQzOwlyZXR1cm4gc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIC8qKgogICogZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIG5ldyBSQVMgbm9kZQogICogQG5vZGU6IE5vZGUgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwppbmRleCBkZWExYzFiMjQ5NGU4MS4uMDJlOGU1MDU0ZDA1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwpAQCAtMjgsNiAmIzQzOzI4LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2NsZWFyX2Vycm9yX2NvdW50ZXJfbmxfcG9saWN5W0RSTV9SQVNfQV9FCiAJW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAogfTsKIAomIzQzOy8qIERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQgLSBkbyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2dldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEICYjNDM7IDFdID0gewomIzQzOwlbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSwKJiM0MzsJW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzO307CiYjNDM7CiYjNDM7LyogRFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCAtIGRvICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3lbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEICYjNDM7IDFdID0gewomIzQzOwlbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSwKJiM0MzsJW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzOwlbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzO307CiYjNDM7CiAvKiBPcHMgdGFibGUgZm9yIGRybV9yYXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHsKIAl7CkBAIC01Niw2ICYjNDM7NjksMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCQkubWF4YXR0cgk9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELAogCQkuZmxhZ3MJCT0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJCT0gRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCwKJiM0MzsJCS5kb2l0CQk9IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0LAomIzQzOwkJLnBvbGljeQkJPSBkcm1fcmFzX2dldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5LAomIzQzOwkJLm1heGF0dHIJPSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCwKJiM0MzsJCS5mbGFncwkJPSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJCT0gRFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCwKJiM0MzsJCS5kb2l0CQk9IGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0LAomIzQzOwkJLnBvbGljeQkJPSBkcm1fcmFzX3NldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5LAomIzQzOwkJLm1heGF0dHIJPSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsCiYjNDM7CQkuZmxhZ3MJCT0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLAomIzQzOwl9LAogfTsKIAogc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCmluZGV4IGEzOTg2NDM1NzJhNWEwLi41N2IxZTY0N2Q4MzMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCkBAIC0yMCw2ICYjNDM7MjAsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiYjNDM7aW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCXN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwppbmRleCA3OTM3ZDhiYTBlZDljZS4uNGFmYTJhZDk4MzAwZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwpAQCAtODYsNiAmIzQzOzg2LDM4IEBAIHN0YXRpYyBpbnQgY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfCiAJcmV0dXJuIGNsZWFyX2Vycm9yX2NvdW50ZXIoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQpOwogfQogCiYjNDM7c3RhdGljIGludCBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCwKJiM0MzsJCQkJCSAgICAgY29uc3QgY2hhciAqKm5hbWUsIHUzMiAqdGhyZXNob2xkKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKCF4ZS0mZ3Q7aW5mby5oYXNfc3lzY3RybCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJKm5hbWUgPSBpbmZvW2Vycm9yX2lkXS5uYW1lOwomIzQzOwlyZXR1cm4geGVfcmFzX2dldF90aHJlc2hvbGQoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2V0X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZChzdHJ1Y3QgZHJtX3Jhc19ub2RlICplcCwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKCF4ZS0mZ3Q7aW5mby5oYXNfc3lzY3RybCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhlX3Jhc19zZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICphbGxvY2F0ZV9hbmRfY29weV9jb3VudGVycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIHsKIAlzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICpjb3VudGVyOwpAQCAtMTM0LDYgJiM0MzsxNjYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9ub2RlX3BhcmFtcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwKIAlpZiAoc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFKSB7CiAJCW5vZGUtJmd0O3F1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyOwogCQlub2RlLSZndDtjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjsKJiM0MzsJCW5vZGUtJmd0O3F1ZXJ5X2Vycm9yX3RocmVzaG9sZCA9IHF1ZXJ5X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZDsKJiM0MzsJCW5vZGUtJmd0O3NldF9lcnJvcl90aHJlc2hvbGQgPSBzZXRfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkOwogCX0gZWxzZSB7CiAJCW5vZGUtJmd0O3F1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV91bmNvcnJlY3RhYmxlX2Vycm9yX2NvdW50ZXI7CiAJCW5vZGUtJmd0O2NsZWFyX2Vycm9yX2NvdW50ZXIgPSBjbGVhcl91bmNvcnJlY3RhYmxlX2Vycm9yX2NvdW50ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKaW5kZXggNDRmNGUxYTM0NTViN2MuLmFmZWU4MjAyZDI0ZWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC0yNzAsNiAmIzQzOzI3MCwxMTEgQEAgaW50IHhlX3Jhc19jbGVhcl9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogeGVfcmFzX2dldF90aHJlc2hvbGQoKSAtIEdldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZAomIzQzOyAqIEB4ZTogWGUgZGV2aWNlIGluc3RhbmNlCiYjNDM7ICogQHNldmVyaXR5OiBFcnJvciBzZXZlcml0eSB0byBiZSBxdWVyaWVkICgmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSkKJiM0MzsgKiBAY29tcG9uZW50OiBFcnJvciBjb21wb25lbnQgdG8gYmUgcXVlcmllZCAoJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlciBiYXNlZCBvbgomIzQzOyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX2dldF90aHJlc2hvbGRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKJiM0MzsJc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyID0gJmFtcDtyZXF1ZXN0LmNvdW50ZXI7CiYjNDM7CWNvdW50ZXItJmd0O2NvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpOwomIzQzOwljb3VudGVyLSZndDtjb21tb24uY29tcG9uZW50ID0gZHJtX3RvX3hlX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTsKJiM0MzsKJiM0MzsJeGVfc3lzY3RybF9jcmVhdGVfY29tbWFuZCgmYW1wO2NvbW1hbmQsIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCwgWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRCwKJiM0MzsJCQkJICAmYW1wO3JlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgJmFtcDtyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CiYjNDM7CiYjNDM7CWd1YXJkKHhlX3BtX3J1bnRpbWUpKHhlKTsKJiM0MzsJcmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoJmFtcDt4ZS0mZ3Q7c2MsICZhbXA7Y29tbWFuZCwgJmFtcDtsZW4pOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQl4ZV9lcnIoeGUsICYjMzQ7c3lzY3RybDogZmFpbGVkIHRvIGdldCB0aHJlc2hvbGQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuICE9IHNpemVvZihyZXNwb25zZSkpIHsKJiM0MzsJCXhlX2Vycih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGdldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxuJiMzNDssCiYjNDM7CQkgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNvdW50ZXIgPSAmYW1wO3Jlc3BvbnNlLmNvdW50ZXI7CiYjNDM7CSp0aHJlc2hvbGQgPSByZXNwb25zZS50aHJlc2hvbGQ7CiYjNDM7CiYjNDM7CXhlX2RiZyh4ZSwgJiMzNDtbUkFTXTogZ2V0IHRocmVzaG9sZCAldSBmb3IgJXMgJXNcbiYjMzQ7LCAqdGhyZXNob2xkLAomIzQzOwkgICAgICAgY29tcF90b19zdHIoY291bnRlci0mZ3Q7Y29tbW9uLmNvbXBvbmVudCksIHNldl90b19zdHIoY291bnRlci0mZ3Q7Y29tbW9uLnNldmVyaXR5KSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB4ZV9yYXNfc2V0X3RocmVzaG9sZCgpIC0gU2V0IGVycm9yIGNvdW50ZXIgdGhyZXNob2xkCiYjNDM7ICogQHhlOiBYZSBkZXZpY2UgaW5zdGFuY2UKJiM0MzsgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHNldCAoJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpCiYjNDM7ICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIgYmFzZWQgb24KJiM0MzsgKiBzZXZlcml0eSBhbmQgY29tcG9uZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgeGVfcmFzX3NldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiB0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKJiM0MzsJc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyID0gJmFtcDtyZXF1ZXN0LmNvdW50ZXI7CiYjNDM7CWNvdW50ZXItJmd0O2NvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpOwomIzQzOwljb3VudGVyLSZndDtjb21tb24uY29tcG9uZW50ID0gZHJtX3RvX3hlX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTsKJiM0MzsJcmVxdWVzdC50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7CiYjNDM7CiYjNDM7CXhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoJmFtcDtjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQsCiYjNDM7CQkJCSAgJmFtcDtyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICZhbXA7cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOwomIzQzOwomIzQzOwlndWFyZCh4ZV9wbV9ydW50aW1lKSh4ZSk7CiYjNDM7CXJldCA9IHhlX3N5c2N0cmxfc2VuZF9jb21tYW5kKCZhbXA7eGUtJmd0O3NjLCAmYW1wO2NvbW1hbmQsICZhbXA7bGVuKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJeGVfZXJyKHhlLCAmIzM0O3N5c2N0cmw6IGZhaWxlZCB0byBzZXQgdGhyZXNob2xkICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxlbiAhPSBzaXplb2YocmVzcG9uc2UpKSB7CiYjNDM7CQl4ZV9lcnIoeGUsICYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBzZXQgdGhyZXNob2xkIHJlc3BvbnNlIGxlbmd0aCAlenUgKGV4cGVjdGVkICV6dSlcbiYjMzQ7LAomIzQzOwkJICAgICAgIGxlbiwgc2l6ZW9mKHJlc3BvbnNlKSk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXhlX2Vycih4ZSwgJiMzNDtzeXNjdHJsOiBzZXQgdGhyZXNob2xkIGNvbW1hbmQgZmFpbGVkIHdpdGggc3RhdHVzICUjeFxuJiMzNDssCiYjNDM7CQkgICAgICAgcmVzcG9uc2Uuc3RhdHVzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY291bnRlciA9ICZhbXA7cmVzcG9uc2UuY291bnRlcjsKJiM0MzsKJiM0MzsJeGVfZGJnKHhlLCAmIzM0O1tSQVNdOiBzZXQgdGhyZXNob2xkICV1IGZvciAlcyAlc1xuJiMzNDssIHJlc3BvbnNlLnRocmVzaG9sZCwKJiM0MzsJICAgICAgIGNvbXBfdG9fc3RyKGNvdW50ZXItJmd0O2NvbW1vbi5jb21wb25lbnQpLCBzZXZfdG9fc3RyKGNvdW50ZXItJmd0O2NvbW1vbi5zZXZlcml0eSkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHhlX3Jhc19pbml0IC0gSW5pdGlhbGl6ZSBYZSBSQVMKICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgKaW5kZXggYmEwYjAyMjRkZjIzNjUuLjFhYTQzYzU0YjcxMGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oCkBAIC0xNSw2ICYjNDM7MTUsOCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCQkJCSAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7CiBpbnQgeGVfcmFzX2dldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgKnZhbHVlKTsKIGludCB4ZV9yYXNfY2xlYXJfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCk7CiYjNDM7aW50IHhlX3Jhc19nZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgKnRocmVzaG9sZCk7CiYjNDM7aW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKTsKIHZvaWQgeGVfcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaAppbmRleCA2Njg4ZTExZjU3YTg2Mi4uNzQ3YjY1MTg4MGNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmgKQEAgLTEyMSw0ICYjNDM7MTIxLDU1IEBAIHN0cnVjdCB4ZV9yYXNfY2xlYXJfY291bnRlcl9yZXNwb25zZSB7CiAJLyoqIEByZXNlcnZlZDE6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiAJdTMyIHJlc2VydmVkMVszXTsKIH0gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZAomIzQzOyAqLwomIzQzO3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHsKJiM0MzsJLyoqIEBjb3VudGVyOiBDb3VudGVyIHRvIGdldCB0aHJlc2hvbGQgZm9yICovCiYjNDM7CXN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjsKJiM0MzsJLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJdTMyIHJlc2VydmVkOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIC0gUmVzcG9uc2Ugc3RydWN0dXJlIGZvciBnZXQgdGhyZXNob2xkCiYjNDM7ICovCiYjNDM7c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHsKJiM0MzsJLyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovCiYjNDM7CXN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjsKJiM0MzsJLyoqIEB0aHJlc2hvbGQ6IEN1cnJlbnQgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyICovCiYjNDM7CXUzMiB0aHJlc2hvbGQ7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CXUzMiByZXNlcnZlZFs0XTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXF1ZXN0IC0gUmVxdWVzdCBzdHJ1Y3R1cmUgZm9yIHNldCB0aHJlc2hvbGQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCB7CiYjNDM7CS8qKiBAY291bnRlcjogQ291bnRlciB0byBzZXQgdGhyZXNob2xkIGZvciAqLwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7CiYjNDM7CS8qKiBAdGhyZXNob2xkOiBUaHJlc2hvbGQgdG8gYmUgc2V0ICovCiYjNDM7CXUzMiB0aHJlc2hvbGQ7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CXUzMiByZXNlcnZlZDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3Igc2V0IHRocmVzaG9sZAomIzQzOyAqLwomIzQzO3N0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSB7CiYjNDM7CS8qKiBAY291bnRlcjogQ291bnRlciBJRCAqLwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovCiYjNDM7CXUzMiByZXNlcnZlZDsKJiM0MzsJLyoqIEB0aHJlc2hvbGQ6IFVwZGF0ZWQgdGhyZXNob2xkICovCiYjNDM7CXUzMiB0aHJlc2hvbGQ7CiYjNDM7CS8qKiBAc3RhdHVzOiBPcGVyYXRpb24gc3RhdHVzICovCiYjNDM7CXUzMiBzdGF0dXM7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQxOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwl1MzIgcmVzZXJ2ZWQxWzJdOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jCmluZGV4IGI0ZDE3MzI5YWY2YzhkLi4wNTQ3YjdiMzk3MjY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jCkBAIC00OSwxOCAmIzQzOzQ5LDYgQEAgc3RhdGljIHZvaWQgZ2V0X3BlbmRpbmdfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjLCBzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2MKIAl9IHdoaWxlIChyZXNwb25zZS0mZ3Q7Y291bnQpOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9yZXF1ZXN0X3ByZXBhcmUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyICpoZWFkZXIsCi0JCQkJICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4ZS0mZ3Q7ZHJtLmRldik7Ci0KLQloZWFkZXItJmd0O2RhdGEgPSBSRUdfRklFTERfUFJFUChBUFBfSERSX0dST1VQX0lEX01BU0ssIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCkgfAotCQkgICAgICAgUkVHX0ZJRUxEX1BSRVAoQVBQX0hEUl9DT01NQU5EX01BU0ssIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UKTsKLQotCXJlcXVlc3QtJmd0O3ZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDsKLQlyZXF1ZXN0LSZndDtmbiA9IFBDSV9GVU5DKHBkZXYtJmd0O2RldmZuKTsKLX0KLQogLyoqCiAgKiB4ZV9zeXNjdHJsX2V2ZW50KCkgLSBIYW5kbGVyIGZvciBTeXN0ZW0gQ29udHJvbGxlciBldmVudHMKICAqIEBzYzogU3lzdGVtIENvbnRyb2xsZXIgaW5zdGFuY2UKQEAgLTcyLDE2ICYjNDM7NjAsMTYgQEAgdm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYykKIAlzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9OwogCXN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlIHJlc3BvbnNlID0ge307CiAJc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCByZXF1ZXN0ID0ge307Ci0Jc3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgaGVhZGVyID0ge307CiYjNDM7CXN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gc2NfdG9feGUoc2MpOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGUtJmd0O2RybS5kZXYpOwomIzQzOwomIzQzOwl4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3MoeGUpOwogCi0JeGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHNjX3RvX3hlKHNjKSk7Ci0JZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgJmFtcDtoZWFkZXIsICZhbXA7cmVxdWVzdCk7CiYjNDM7CXJlcXVlc3QudmVjdG9yID0geGVfZGV2aWNlX2hhc19tc2l4KHhlKSA/IFhFX0lSUV9ERUZBVUxUX01TSVggOiAwOwomIzQzOwlyZXF1ZXN0LmZuID0gUENJX0ZVTkMocGRldi0mZ3Q7ZGV2Zm4pOwogCi0JY29tbWFuZC5oZWFkZXIgPSBoZWFkZXI7Ci0JY29tbWFuZC5kYXRhX2luID0gJmFtcDtyZXF1ZXN0OwotCWNvbW1hbmQuZGF0YV9pbl9sZW4gPSBzaXplb2YocmVxdWVzdCk7Ci0JY29tbWFuZC5kYXRhX291dCA9ICZhbXA7cmVzcG9uc2U7Ci0JY29tbWFuZC5kYXRhX291dF9sZW4gPSBzaXplb2YocmVzcG9uc2UpOwomIzQzOwl4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKCZhbXA7Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVCwKJiM0MzsJCQkJICAmYW1wO3JlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgJmFtcDtyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CiAKIAlndWFyZChtdXRleCkoJmFtcDtzYy0mZ3Q7ZXZlbnRfbG9jayk7CiAJZ2V0X3BlbmRpbmdfZXZlbnQoc2MsICZhbXA7Y29tbWFuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmgKaW5kZXggNmUzNzUzNTU0NTEwYTUuLjEwZjA2YWE1YzRiNTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oCkBAIC0yNCwxMSAmIzQzOzI0LDE1IEBAIGVudW0geGVfc3lzY3RybF9ncm91cCB7CiAgKgogICogQFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSOiBHZXQgZXJyb3IgY291bnRlciB2YWx1ZQogICogQFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVI6IENsZWFyIGVycm9yIGNvdW50ZXIgdmFsdWUKJiM0MzsgKiBAWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRDogUmV0cmlldmUgZXJyb3IgdGhyZXNob2xkCiYjNDM7ICogQFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQ6IFNldCBlcnJvciB0aHJlc2hvbGQKICAqIEBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVDogUmV0cmlldmUgcGVuZGluZyBldmVudAogICovCiBlbnVtIHhlX3N5c2N0cmxfZ2ZzcF9jbWQgewogCVhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSCQk9IDB4MDMsCiAJWEVfU1lTQ1RSTF9DTURfQ0xFQVJfQ09VTlRFUgkJPSAweDA0LAomIzQzOwlYRV9TWVNDVFJMX0NNRF9HRVRfVEhSRVNIT0xECQk9IDB4MDUsCiYjNDM7CVhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQJCT0gMHgwNiwKIAlYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVAk9IDB4MDcsCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmgKaW5kZXggZjJhNzg3YmM0ZjY0YTkuLjY4M2EzODQ0Zjg0ZjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCkBAIC02OSw2ICYjNDM7NjksMzQgQEAgc3RydWN0IGRybV9yYXNfbm9kZSB7CiAJICovCiAJaW50ICgqY2xlYXJfZXJyb3JfY291bnRlcikoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkKTsKIAomIzQzOwkvKioKJiM0MzsJICogQHF1ZXJ5X2Vycm9yX3RocmVzaG9sZDoKJiM0MzsJICoKJiM0MzsJICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGRybS1yYXMgdG8gcXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEKJiM0MzsJICogc3BlY2lmaWMgY291bnRlci4KJiM0MzsJICoKJiM0MzsJICogRHJpdmVyIHNob3VsZCBleHBlY3QgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGgKJiM0MzsJICogZXJyb3JfaWQgZnJvbSBgZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdGAgdG8KJiM0MzsJICogYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuCiYjNDM7CSAqCiYjNDM7CSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqcXVlcnlfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLAomIzQzOwkJCQkgICAgIHUzMiAqdGhyZXNob2xkKTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBzZXRfZXJyb3JfdGhyZXNob2xkOgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBzZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMKJiM0MzsJICogY291bnRlci4KJiM0MzsJICoKJiM0MzsJICogRHJpdmVyIHNob3VsZCBleHBlY3Qgc2V0X2Vycm9yX3RocmVzaG9sZCgpIHRvIGJlIGNhbGxlZCB3aXRoIGVycm9yX2lkCiYjNDM7CSAqIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvIGBlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3RgLgomIzQzOwkgKiBEcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuCiYjNDM7CSAqCiYjNDM7CSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqc2V0X2Vycm9yX3RocmVzaG9sZCkoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKTsKJiM0MzsKIAkvKiogQHByaXY6IERyaXZlciBwcml2YXRlIGRhdGEgKi8KIAl2b2lkICpwcml2OwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKaW5kZXggMjE4YTNlZTg2ODA1MjcuLjI3YzY4OTU2NDk1ZmI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaApAQCAtMzMsNiAmIzQzOzMzLDcgQEAgZW51bSB7CiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQsCiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfTkFNRSwKIAlEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9WQUxVRSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xELAogCiAJX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVgsCiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSkKQEAgLTQyLDYgJiM0Mzs0Myw4IEBAIGVudW0gewogCURSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLAogCURSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLAogCURSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsCiYjNDM7CURSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsCiYjNDM7CURSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQsCiAKIAlfX0RSTV9SQVNfQ01EX01BWCwKIAlEUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERSTSBSQVMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIG5ldyBOZXRsaW5rIGNvbW1hbmRzIHdpdGhpbiB0aGUgRFJNIFJBUyBzdWJzeXN0ZW06IGBHRVRfRVJST1JfVEhSRVNIT0xEYCBhbmQgYFNFVF9FUlJPUl9USFJFU0hPTERgLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRpbmcgc29tZSBjb25maWd1cmFiaWxpdHkgdG8gZXJyb3IgaGFuZGxpbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZpbGVzLCBwcmltYXJpbHkgZm9jdXNlZCBvbiBkb2N1bWVudGF0aW9uIGFuZCB0aGUgbmV0bGluayBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGFsb25nIHdpdGggdGhlIGB4ZWAgZHJpdmVyLCBJbnRlbCYjMzk7cyBEUk0gZHJpdmVyLiBUaGlzIGlzIGV4cGVjdGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUgaW4gYGRybV9yYXMuY2AgYW5kIGBkcm1fcmFzX25sLmNgLCB3aXRoIHRoZSBgeGVgIGRyaXZlciBoYW5kbGluZyB0aGUgYWN0dWFsIGNhbGxiYWNrIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAuIFVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgY2xlYXJseSBkZXNpZ25lZCB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UuCgpOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gZnV6emluZy4gQ2FuIHdlIGZ1enogdGhlIGB4ZWAgZHJpdmVyIHdpdGggdGhlc2UgbmV3IGNvbW1hbmRzPyBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgeWVzLCBpdCYjMzk7cyBhIERSTSBkcml2ZXIgYW5kIEludGVsJiMzOTtzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uIGJ1dCB0aGVuIEkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB2aXJ0dWFsaXphdGlvbi4gRFJNIGRyaXZlcnMgZ2VuZXJhbGx5IGhhdmUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSW50ZWwgR1BVcy4gSG93ZXZlciwgdGhlIGBkcm1fcmFzYCBuZXRsaW5rIGludGVyZmFjZSBpcyBnZW5lcmljLiBBbnkgZHJpdmVyIHRoYXQgcmVnaXN0ZXJzIGEgUkFTIG5vZGUgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQgZm9yIGZ1enppbmcuIEl0IG1lYW5zIHdlIGRvbiYjMzk7dCBuZWNlc3NhcmlseSBuZWVkIGFjdHVhbCBJbnRlbCBoYXJkd2FyZSB0byB0ZXN0IHRoZSBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlc2UgbmV3IGNvbW1hbmRzLgoKVGhlIG5leHQgcXVlc3Rpb246IERvZXMgYSB2aXJ0dWFsIGRyaXZlciwgbGlrZSBgdmttc2AsIG9yIGFueSBvdGhlciB2aXJ0dWFsIGRyaXZlciwgcmVnaXN0ZXIgYSBSQVMgbm9kZT8gSWYgaXQgZG9lcywgdGhhdCBvcGVucyB1cCBhIHdob2xlIG5ldyBhdmVudWUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQuLi4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBSQVMgbm9kZSB0aGF0JiMzOTtzIGJlaW5nIHVzZWQgYnkgYHZrbXNgIG9yIGFub3RoZXIgdmlydHVhbCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3Jhc19ub2RlX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0PTM1PURyaXZlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBub2RlcyB2aWEgdGhlXG5Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdDozNjpgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKClgIGFuZCBgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoKWAgQVBJcy5cbkRvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0LTM3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTItICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6NTM6ICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTQtICogICBpdCBhIHVuaXF1ZSBJRCBpbiB0aGUgeGFycmF5LlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM9NTA1PWludCBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTIyLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzo1MjM6ICogZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIG5ldyBSQVMgbm9kZVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01MjQtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlIHRvIHJlZ2lzdGVyXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01MzAtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjUzMTppbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTUzMi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01NDYtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzo1NDc6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25vZGVfcmVnaXN0ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01NDgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTE9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIwMy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MjA0Olx0XHRyZXQgPSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIobm9kZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIwNS1cdFx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg9MTA0PXN0cnVjdCBkcm1fZGV2aWNlO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMDYtI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6MTA3OmludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTA4LXZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTA5LSNlbHNlXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6MTEwOnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTExLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERSTSBSQVMgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGRybV9yYXNgIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYHhlYCBkcml2ZXIgaXMgdGhlIG9ubHkgb25lIEkmIzM5O20gc2VlaW5nIHJlZ2lzdGVyIGEgUkFTIG5vZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciBgeGVgIGl0c2VsZiBjb3VsZCBiZSBhIHRhcmdldCBmb3IgZnV6emluZywgYnV0IHRoZW4gSSByZW1lbWJlciB0aGUgdXN1YWwgYHhlYCBkZXBlbmRlbmN5IG9uIGEgcGh5c2ljYWwgSW50ZWwgR1BVLiBIbW1tLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gbG9va2luZyBjbG9zZXIsIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGBkcm1fcmFzYCwgaXMgKmdlbmVyaWMqLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoZSBhY3R1YWwgY29tbWFuZHMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgZHJtX3Jhc19ubF9mYW1pbHlgLiBBbmQgbG9vaywgd2UgaGF2ZSBgRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRGAgYW5kIGBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xEYCBoYW5kbGVkIGJ5IHRob3NlIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgZnVuY3Rpb25zLgoKSW50ZXJlc3RpbmcuIEkgcXVpY2tseSBzZWUgdGhleSBjaGVjayBmb3IgdGhlIG5vZGUmIzM5O3MgZXhpc3RlbmNlIHVzaW5nIGFuIGB4YV9sb2FkYCBjYWxsOgoKYGBgYwoJbm9kZSA9IHhhX2xvYWQoJmFtcDtkcm1fcmFzX3hhLCBub2RlX2lkKTsKCWlmICghbm9kZSkKCQlyZXR1cm4gLUVOT0VOVDsKYGBgCgpTbywgaWYgbm8gbm9kZXMgYXJlIHJlZ2lzdGVyZWQsIHdlJiMzOTtyZSBqdXN0IGdvaW5nIHRvIGdldCBhbiBgLUVOT0VOVGAgZXJyb3IuIEJhc2ljYWxseSwgYSBuby1vcCBpZiB0aGVyZSYjMzk7cyBub3RoaW5nIHRvIGFjdHVhbGx5IGNvbnRyb2wuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBUaGlzIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgYGRybV9yYXNgIGlzIHJlZ2lzdGVyZWQgKndoZW4qIHRoZSBgZHJtX3Jhc2AgbW9kdWxlIGlzIGxvYWRlZC4gVGhhdCYjMzk7cyB0aGUgcmVhbCBlbnRyeSBwb2ludC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBpbml0aWFsaXphdGlvbiBhY3R1YWxseSBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmxfcmVnaXN0ZXJfZmFtaWx5Lipkcm1fcmFzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM9MTc9aW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTIyLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYzoyMzpcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMjQtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjI3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIERSTSBSQVMgR0VOTCBGYW1pbHkgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgRFJNIFJBUyBHZW5lcmljIE5ldGxpbmsgZmFtaWx5IGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byBmaW5kIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIHRoZSBgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcmAgZnVuY3Rpb24gaXMgaW52b2tlZCBpbiB0aGUgY29kZS4gVGhpcyB3aWxsIHRlbGwgbWUgd2hlcmUgYW5kIHdoZW4gdGhpcyBwYXJ0aWN1bGFyIE5ldGxpbmsgZmFtaWx5IGlzIGJlaW5nIGJyb3VnaHQgb25saW5lLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsZXJzLCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgaG9va3MgdGhhdCBzZXQgaXQgYWxsIGluIG1vdGlvbi4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCBwcm92aWRlIHRoZSBlc3NlbnRpYWwgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBrbm93cyBhYm91dCBhbmQgaW50ZXJhY3RzIHdpdGggdGhpcyBHZW5lcmljIE5ldGxpbmsgZmFtaWx5IGRlZGljYXRlZCB0byBSQVMgKFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSkgY29uY2VybnMgd2l0aGluIHRoZSBEUk0gKERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlcikgc3Vic3lzdGVtLiBJIG5lZWQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgSSB6b29tIGluIG9uIGFueSBzcGVjaWZpYyBkZXRhaWwuIFRoaXMgaXMgd2hlcmUgSSBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmM9MTI0MD1zdGF0aWMgaW50IF9faW5pdCBkcm1fY29yZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYzoxMjY4Olx0cmV0ID0gZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcigpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jPTEwPXN0YXRpYyBib29sIHJlZ2lzdGVyZWQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYy0xMi0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM6MTM6ICogZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgZHJtLXJhcyBnZW5sIGZhbWlseVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYy0xNC0gKlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMTYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jOjE3OmludCBkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE4LXtcbi0tXG5pbmNsdWRlL2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmgtOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaDoxMDppbnQgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3Rlcih2b2lkKTtcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC0xMS12b2lkIGRybV9yYXNfZ2VubF9mYW1pbHlfdW5yZWdpc3Rlcih2b2lkKTtcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC0xMi0jZWxzZVxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oOjEzOnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oLTE0LXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX2dlbmxfZmFtaWx5X3VucmVnaXN0ZXIodm9pZCkgeyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERSTSBSQVMgTmV0bGluayBGYW1pbHkqKgoKT2theSwgc28gYGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXJgIGlzIGludm9rZWQgZHVyaW5nIGBkcm1fY29yZV9pbml0YC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoZSBOZXRsaW5rIGZhbWlseSBmb3IgUkFTIGlzIGFsd2F5cyByZWdpc3RlcmVkIGFzIGxvbmcgYXMgYENPTkZJR19EUk1fUkFTYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGVzdGFibGlzaGVzIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIFVzZXIgc3BhY2UgY2FuIHRoZW4gaW50ZXJhY3Qgd2l0aCB0aGlzIHRocm91Z2ggTmV0bGluayBjb21tYW5kcyBsaWtlIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4KCkJ1dCBoZXJlJiMzOTtzIGEgd3JpbmtsZTogdGhlc2UgY29tbWFuZHMgd2lsbCBqdXN0IHJldHVybiBgLUVOT0VOVGAgaWYgbm8gUkFTIG5vZGVzIGFyZSBhY3R1YWxseSByZWdpc3RlcmVkLiBNeSBuZXh0IHRob3VnaHQgaXMsIGFyZSB0aGVyZSBvdGhlciBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlc2UgUkFTIG5vZGVzIGJlc2lkZXMgYHhlYD8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSBubywganVzdCB0aGUgYHhlYCBkcml2ZXIuIFRoaXMgcmFpc2VzIGFub3RoZXIgcXVlc3Rpb24sIGNhbiB0aGUgYHhlYCBkcml2ZXIgYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgaXQgdHlwaWNhbGx5IHJlbGllcyBvbiBzcGVjaWZpYyBQQ0kgSURzLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIGB4ZWAgZHJpdmVyIGluY2x1ZGVzIGFueSBtb2NrIG9yIHZpcnR1YWwgZGV2aWNlIHN1cHBvcnQuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIGEgc3lzdGVtIHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgdmlydHVhbGl6ZWQsIG9yIHRoYXQgbWlnaHQgbm90IGhhdmUgdGhlIGhhcmR3YXJlIElEIGV4cGVjdGVkIGJ5IHhlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgZnVuY3Rpb25hbGl0eSBleHRlbmRzIHBhc3QgdGhlIGluaXRpYWwgUENJIHByb2JlLCB0byBlbnN1cmUgdGhlIFJBUyBpbnRlcmZhY2UgYWN0dWFsbHkgd29ya3MgYXMgaW50ZW5kZWQsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24mIzM5O3QgdGhlIHByaW1hcnkgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlX3BjaV9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NDg3PXN0cnVjdCB4ZV9kZXZpY2UgKnhlX2RldmljZV9jcmVhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTUxNS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6NTE2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfY3JlYXRlLCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTUxNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NzczPWludCB4ZV9kZXZpY2VfcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTgzMi19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6ODMzOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtODM0LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmM9MzkxPWludCB4ZV9nZ3R0X2luaXRfZWFybHkoc3RydWN0IHhlX2dndHQgKmdndHQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYy00NDktfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYzo0NTA6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2dndHRfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmMtNDUxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmM9MzkwPWludCB4ZV9ndWNfYWRzX2luaXQoc3RydWN0IHhlX2d1Y19hZHMgKmFkcylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jLTQxMy19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jOjQxNDpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2Fkc19pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy00MTUtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTMyMj1pbnQgeGVfZ3VjX2N0X2luaXRfbm9hbGxvYyhzdHJ1Y3QgeGVfZ3VjX2N0ICpjdClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMzU3LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzozNTg6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19jdF9pbml0X25vYWxsb2MsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMzU5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYz0zNjg9aW50IHhlX2d1Y19jdF9pbml0KHN0cnVjdCB4ZV9ndWNfY3QgKmN0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0zOTYtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjM5NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2N0X2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMzk4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM9NjI0PWludCB4ZV9ndWNfbG9nX2luaXQoc3RydWN0IHhlX2d1Y19sb2cgKmxvZylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jLTY0NC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM6NjQ1OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9ndWNfbG9nX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jLTY0Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmM9MzQyPWludCB4ZV9ndWNfcmVsYXlfaW5pdChzdHJ1Y3QgeGVfZ3VjX3JlbGF5ICpyZWxheSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmMtMzcwLX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYzozNzE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19yZWxheV9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19yZWxheS5jLTM3Mi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmM9NTc5PXN0YXRpYyBpbnQgeGVfYWRkX2h3X2VuZ2luZV9jbGFzc19kZWZhdWx0cyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmMtNjAzLX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdpbmVfY2xhc3Nfc3lzZnMuYzo2MDQ6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2FkZF9od19lbmdpbmVfY2xhc3NfZGVmYXVsdHMsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmMtNjA1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvLmM9ODk9aW50IHhlX21taW9fcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYy0xMTAtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYzoxMTE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX21taW9fcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pby5jLTExMi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTA0Mz1zdGF0aWMgdm9pZCB4ZV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYwLSAqIEZhdWx0IGluamVjdGlvbiBpcyB1c2VkIHRvIHRlc3QgdGhlIGVycm9yIHBhdGhzIG9mIHNvbWUgaW5pdGlhbGl6YXRpb25cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYxOiAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYyLSAqIGV4YW1wbGUgdGhyb3VnaCB4ZV9kZXZpY2VfcHJvYmUoKS4gVGhvc2UgZnVuY3Rpb25zIHVzZSB0aGUga2VybmVsIGZhdWx0XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzUtICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTA3NjpzdGF0aWMgaW50IHhlX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDc3LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTM0Nz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgeGVfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM0OS1cdC5pZF90YWJsZSA9IHBjaWlkbGlzdCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMzUwOlx0LnByb2JlID0geGVfcGNpX3Byb2JlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEzNTEtXHQucmVtb3ZlID0geGVfcGNpX3JlbW92ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNvZGUuYz0zNDg9aW50IHhlX3Bjb2RlX3Byb2JlX2Vhcmx5KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTM1MS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNvZGUuYzozNTI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3Bjb2RlX3Byb2JlX2Vhcmx5LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUgKi9cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYz0zNjI9aW50IHhlX3BtX2luaXRfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BtLmMtMzg0LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jOjM4NTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfcG1faW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jLTM4Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYz0xMDc9aW50IHhlX3NyaW92X2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92LmMtMTI4LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jOjEyOTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfc3Jpb3ZfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jLTEzMC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jPTE0OT1pbnQgeGVfdGlsZV9pbml0X2Vhcmx5KHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy0xNjUtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYzoxNjY6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3RpbGVfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmMtMTY3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90dW5pbmcuYz0xODM9aW50IHhlX3R1bmluZ19pbml0KHN0cnVjdCB4ZV9ndCAqZ3QpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3R1bmluZy5jLTIwNS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmM6MjA2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV90dW5pbmdfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90dW5pbmcuYy0yMDctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmM9ODM2PWludCB4ZV91Y19md19pbml0KHN0cnVjdCB4ZV91Y19mdyAqdWNfZncpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmMtODU2LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jOjg1NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfdWNfZndfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jLTg1OC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYz05NDA9aW50IHhlX3dhX2d0X2luaXQoc3RydWN0IHhlX2d0ICpndClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYy05NjUtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmM6OTY2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV93YV9ndF9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmMtOTY3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jPTIwNT1pbnQgeGVfd29wY21faW5pdChzdHJ1Y3QgeGVfd29wY20gKndvcGNtKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jLTI4MS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYzoyODI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3dvcGNtX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjI0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBHZW5lcmljIE5ldGxpbmsgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB4ZWAgZHJpdmVyLCBhbmQgaXQgc2VlbXMgdG8gbmVlZCBhIHBoeXNpY2FsIFBDSSBkZXZpY2UuIFRoZSBpc3N1ZSBpcyBJJiMzOTttIG5vdCBzZWVpbmcgdGhhdCB0aGUgUkFTIG5vZGUgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IHRoZSBgeGVgIGRyaXZlci4gSWYgdGhlIGB4ZWAgZHJpdmVyIGlzbiYjMzk7dCBwcm9iZWQsIHRoZW4gbm8gUkFTIG5vZGUgZ2V0cyByZWdpc3RlcmVkLiBUaGF0IG1lYW5zIHRoZSBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGZ1bmN0aW9ucyB3aWxsIGp1c3QgcmV0dXJuIGAtRU5PRU5UYC4gSSB3YXMgaW5pdGlhbGx5IHF1ZXN0aW9uaW5nIHdoZXRoZXIgdGhpcyB3YXMgZXZlbiB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiBJIHJlYWxpemVkIHNvbWV0aGluZy4uLgoKTGV0IG1lIGRvdWJsZS1jaGVjayAtIEkgYWxyZWFkeSBncmVwcGVkIGZvciBgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyYCBhbmQgaXQgbG9va3MgbGlrZSBvbmx5IHRoZSBgeGVgIGRyaXZlciB1c2VzIGl0LiBCdXQgd2FpdCwgZXZlbiB0aG91Z2ggdGhlIHNwZWNpZmljIFJBUyBub2RlIGlzbiYjMzk7dCByZWdpc3RlcmVkLCB0aGUgKmdlbmVyaWMqIG5ldGxpbmsgaW50ZXJmYWNlIGl0c2VsZiAqaXMqIHN0aWxsIHJlYWNoYWJsZS4gVGhlIGZ1bmN0aW9ucyBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFyZSB0aGVyZSwgcGFyc2luZyBuZXRsaW5rIGF0dHJpYnV0ZXMgYW5kIGNhbGxpbmcgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYW5kIGBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLgoKSSBjYW4gc2VlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdDoKYGBgYwppbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJdTMyIG5vZGVfaWQsIGVycm9yX2lkOwoKCWlmICghaW5mby0mZ3Q7YXR0cnMgfHwKCSAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSUQpIHx8CgkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkpCgkJcmV0dXJuIC1FSU5WQUw7CgoJbm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTsKCWVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdKTsKCglyZXR1cm4gZG9pdF9yZXBseV90aHJlc2hvbGQoaW5mbywgbm9kZV9pZCwgZXJyb3JfaWQpOwp9CmBgYApBbmQgaG93IGBkb2l0X3JlcGx5X3RocmVzaG9sZGAgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIHJldHVybnMgYC1FTk9FTlRgOgpgYGBjCnN0YXRpYyBpbnQgZG9pdF9yZXBseV90aHJlc2hvbGQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCkKewouLi4KCW1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKCWlmICghbXNnKQoJCXJldHVybiAtRU5PTUVNOwoKCWhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pOwoJaWYgKCFoZHIpIHsKCQlyZXQgPSAtRU1TR1NJWkU7CgkJZ290byBmcmVlX21zZzsKCX0KCglyZXQgPSBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsICZhbXA7ZXJyb3JfbmFtZSwgJmFtcDt0aHJlc2hvbGQpOwoJaWYgKHJldCkKCQlnb3RvIGNhbmNlbF9tc2c7Ci4uLgpjYW5jZWxfbXNnOgoJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwpmcmVlX21zZzoKCW5sbXNnX2ZyZWUobXNnKTsKCXJldHVybiByZXQ7Cn0KYGBgCk9rYXksIHNvIHRoaXMgbG9naWMgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBldmVuIHdpdGhvdXQgYW55IG5vZGVzIHJlZ2lzdGVyZWQuIFRoZSBgeGVgIHNwZWNpZmljIGNvZGUgKCBgeGVfcmFzLmNgICwgYHhlX2RybV9yYXMuY2ApIGlzIHVucmVhY2hhYmxlLCBidXQgdGhlIGdlbmVyaWMgbmV0bGluayBjb2RlIGlzIGdvb2QuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIG5ldyBuZXRsaW5rIEFQSSwgSSB0aGluayBpdCYjMzk7cyB3b3J0aCB0aGUgdGltZSB0byBmdXp6IGl0LCBhbmQgSSBzaG91bGQgc2VlIGlmIGBDT05GSUdfRFJNX1JBU2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRFJNX1JBUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz0xMjM9Y29uZmlnIERSTV9QQU5JQ19TQ1JFRU5fUVJfVkVSU0lPTlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTEzMi1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnOjEzMzpjb25maWcgRFJNX1JBU1xuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTM0LVx0Ym9vbCBcJiMzNDtEUk0gUkFTIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipBbmFseXppbmcgdGhlIERSTV9SQVMgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIGBEUk1fUkFTYC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIG1vZHVsZXMsIGRyaXZlcnMsIGFuZCBvdGhlciBjb21wb25lbnRzIGl0IHJlbGllcyBvbiwgYW5kIHdoYXQsIGluIHR1cm4sIG1heSBiZSByZWxpYW50IG9uICppdCouIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyBvdXQgdGhlIGAjaW5jbHVkZWAgc3RhdGVtZW50cywgYnV0IHJlYWxseSAqdW5kZXJzdGFuZGluZyogdGhlIGltcGFjdCBvZiBlYWNoIGNvbm5lY3Rpb24uIEZvciBpbnN0YW5jZSwgaXMgYERSTV9SQVNgIGEgY29yZSBjb21wb25lbnQsIG9yIGRvZXMgaXQgc2l0IG9uIHRvcCBvZiBvdGhlcnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIHRpZ2h0IGNvdXBsaW5nIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHk6IGFyZSB0aGVyZSBhbnkgaW1wbGljaXQgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgb3V0IGZvcj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIG1heWJlIHVzaW5nIHNvbWUgc3BlY2lmaWMgZmlsdGVyaW5nIHRvIGtlZXAgdGhlIHNpZ25hbC10by1ub2lzZSByYXRpbyBoaWdoLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSBhbmFseXplIHRoZSBhcmNoaXRlY3R1cmUgdG8gcHV0IGl0IGFsbCBpbiBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzM6XHRjb25maWcgRFJNX1JBU1xuIDEzNDpcdFx0Ym9vbCBcJiMzNDtEUk0gUkFTIHN1cHBvcnRcJiMzNDtcbiAxMzU6XHRcdGRlcGVuZHMgb24gRFJNXG4gMTM2Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDEzNzpcdFx0aGVscFxuIDEzODpcdFx0ICBFbmFibGVzIHRoZSBEUk0gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5IGFuZCBTZXJ2aWNlYWJpbGl0eSlcbiAxMzk6XHRcdCAgc3VwcG9ydCBmb3IgRFJNIGRyaXZlcnMuIFRoaXMgcHJvdmlkZXMgYSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlXG4gMTQwOlx0XHQgIGZvciBlcnJvciByZXBvcnRpbmcgYW5kIHF1ZXJpZXMuXG4gMTQxOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAxNDI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNzEKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogMTMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEUk1fUkFTIGZvciBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBgRFJNX1JBU2AgY29kZS4gSXQgaGluZ2VzIG9uIGBEUk1gIGFuZCBgTkVUYCwgYW5kIGl0IHByb3ZpZGVzIGEgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZS4gSSBrbm93IHRoaXMgaW50ZXJmYWNlIGlzIHJlYWNoYWJsZSwgc28gdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAsIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCBhbmQgYHNldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYXMgd2VsbDsgdGhleSYjMzk7cmUgaW50ZXJ0d2luZWQuIEkmIzM5O20gZGlzY2FyZGluZyB0aGUgYHhlYCBkcml2ZXIgZnVuY3Rpb25zIChgeGVfcmFzX2dldF90aHJlc2hvbGRgLCBgeGVfcmFzX3NldF90aHJlc2hvbGRgKSBzaW5jZSB0aGV5IHJlcXVpcmUgaGFyZHdhcmUgYW5kIGFyZSB0aHVzIG5vdCByZWFjaGFibGUgaW4gYSBnZW5lcmFsIGZ1enppbmcgY29udGV4dC4KCkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYERSTV9SQVNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3Qg4oCTICYjMzQ7SWYgaW4gZG91YnQsIHNheSBOJiMzNDsuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGFkZCBgRFJNX1JBU2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgbG9vayBmb3IgbW9yZS4gYG1zZ19yZXBseV90aHJlc2hvbGRgIGlzIGFsc28gYWRkZWQuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIGlmIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIHN1Y2NlZWRzLCB3aGljaCBuZWVkcyBhIHJlZ2lzdGVyZWQgbm9kZSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIGhhcmR3YXJlLiBIb3dldmVyLCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFjdHVhbGx5IGNhbGxzIGBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCB3aGljaCAqcmV0dXJucyogYC1FTk9FTlRgIGlmIG5vIG5vZGUgaXMgcmVnaXN0ZXJlZC4gU28sIGV2ZW4gdGhvdWdoIGl0IHJldHVybnMgYW4gZXJyb3IsIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgKmlzKiByZWFjaGFibGUuCgpMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB1c2FnZXMgb2YgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YC4gSXQmIzM5O3MgcmVnaXN0ZXJlZCBpbiBgZHJtX3Jhc19ubF9vcHNgLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIG5ldGxpbmsgcGFyc2luZywgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCwgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCwgYGRvaXRfcmVwbHlfdGhyZXNob2xkYCwgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAsIGFuZCBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCBhcmUgYWxsIHJlYWNoYWJsZS4KCkV2ZW4gdGhvdWdoIG1hbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGAtRU5PRU5UYCBvciBzaW1pbGFyIGluIHRoZSBhYnNlbmNlIG9mIHJlZ2lzdGVyZWQgaGFyZHdhcmUgb3IgdmFsaWQgaW5wdXRzLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHRoZSBhdHRyaWJ1dGUgdmFsaWRhdGlvbiwgYW5kIHRoZSBpbml0aWFsIGxvZ2ljIG9mIHRoZSBgZG9pdGAgaGFuZGxlcnMgKmFyZSogZXhlY3V0ZWQuIFNvLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIQoKU3BlY2lmaWNhbGx5LCBgZG9pdF9yZXBseV90aHJlc2hvbGRgIGlzIGFuIGludGVyZXN0aW5nIHBvaW50LiBJdCBhbGxvY2F0ZXMgYSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCB0aGVuIGNhbmNlbHMgaXQgaWYgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgZmFpbHMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYnV0IGl0JiMzOTtzIGEgcGxhY2Ugd2hlcmUgbWVtb3J5IGxlYWtzIG9yIG90aGVyIGlzc3VlcyBjb3VsZCBhcmlzZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB1cCB0byBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCByZXR1cm5pbmcgYC1FTk9FTlRgLCB0aGVuIGBjYW5jZWxfbXNnYCBhbmQgYGZyZWVfbXNnYCBhcmUgZXhlY3V0ZWQuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgIGFuZCBmb2N1cyBvbjoKKiAgIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAKKiAgIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAKKiAgIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAKKiAgIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgCiogICBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYAoKVGhlIHJlcXVpcmVkIGNvbmZpZyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBEUk1fUkFTYC4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBgeGVgIGRyaXZlciwgYW5kLCBhcyBleHBlY3RlZCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIG1vY2sgaXQuIFRoZSBgeGVgIGRyaXZlciBpcyBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyLCBtZWFuaW5nIGB4ZV9yYXNfZ2V0X3RocmVzaG9sZGAgYW5kIGB4ZV9yYXNfc2V0X3RocmVzaG9sZGAgYXJlIHVucmVhY2hhYmxlIGluIGEgbm9uLWhhcmR3YXJlIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RFJNX1JBUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0JiMzNDssCiAgICAmIzM0O2RybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0JiMzNDssCiAgICAmIzM0O2RvaXRfcmVwbHlfdGhyZXNob2xkJiMzNDssCiAgICAmIzM0O2dldF9ub2RlX2Vycm9yX3RocmVzaG9sZCYjMzQ7LAogICAgJiMzNDtzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RSTV9SQVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkb2l0X3JlcGx5X3RocmVzaG9sZCYjMzQ7LAogICAgJiMzNDtnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7c2V0X25vZGVfZXJyb3JfdGhyZXNob2xkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kcyAoR0VUX0VSUk9SX1RIUkVTSE9MRCBhbmQgU0VUX0VSUk9SX1RIUkVTSE9MRCkgdG8gdGhlIERSTSBSQVMgc3Vic3lzdGVtLiBXaGlsZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhlIGB4ZWAgZHJpdmVyIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgR1BVcywgdGhlIGdlbmVyaWMgbmV0bGluayBwYXJzaW5nLCBtZXNzYWdlIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsIHZhbGlkYXRpb24gbG9naWMgaW4gYGRybV9yYXMuY2AgYXJlIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgYXR0cmlidXRlIHZhbGlkYXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTc6MzguMjgwMjk3NzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3ODI2NTIxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU3OjM4LjI4MDMwNDYxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNzExMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMDo1NzozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjI3MThmOGFlZTA5ZGQ3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG5AQCAtNTYsNiArNTYsMTAgQEAgVXNlciBzcGFjZSB0b29scyBjYW46XFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxcbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcXG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXFxuKyogUXVlcnkgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBnZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmcgYm90aFxcbisgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4rKiBTZXQgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBzZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmdcXG4rICBgYG5vZGUtaWRgYCwgYGBlcnJvci1pZGBgIGFuZCBgYGVycm9yLXRocmVzaG9sZGBgIGFzIHBhcmFtZXRlcnMuXFxuIFxcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0xMTEsMyArMTE1LDE3IEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxcbiBcXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjF9J1xcbiAgICAgTm9uZVxcbitcXG4rRXhhbXBsZTogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlclxcbitcXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcXG4rXFxuKyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gZ2V0LWVycm9yLXRocmVzaG9sZCAtLWpzb24gJ3tcXFwibm9kZS1pZFxcXCI6MCwgXFxcImVycm9yLWlkXFxcIjoxfSdcXG4rICAgIHsnZXJyb3ItaWQnOiAxLCAnZXJyb3ItbmFtZSc6ICdlcnJvcl9uYW1lMScsICdlcnJvci10aHJlc2hvbGQnOiAxNn1cXG4rXFxuK0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogYmFzaFxcbitcXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBzZXQtZXJyb3ItdGhyZXNob2xkIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjEsIFxcXCJlcnJvci10aHJlc2hvbGRcXFwiOjh9J1xcbisgICAgTm9uZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi45Y2Y3ZjljZGUyNDI1MiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbkBAIC02OSw2ICs2OSwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBlcnJvci10aHJlc2hvbGRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IEVycm9yIHRocmVzaG9sZCBvZiB0aGUgY291bnRlci5cXG4gXFxuIG9wZXJhdGlvbnM6XFxuICAgbGlzdDpcXG5AQCAtMTI0LDMgKzEyOCwzMSBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGdldC1lcnJvci10aHJlc2hvbGRcXG4rICAgICAgZG9jOiBcXHUwMDNlLVxcbisgICAgICAgICAgIFJldHJpZXZlIGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXFxuKyAgICAgICAgICAgVGhlIHJlc3BvbnNlIGluY2x1ZGVzIHRoZSBpZCwgdGhlIG5hbWUsIGFuZCBjdXJyZW50IHRocmVzaG9sZFxcbisgICAgICAgICAgIG9mIHRoZSBjb3VudGVyLlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzXFxuKyAgICAgIGZsYWdzOiBbYWRtaW4tcGVybV1cXG4rICAgICAgZG86XFxuKyAgICAgICAgcmVxdWVzdDpcXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xcbisgICAgICAgIHJlcGx5OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBlcnJvci1pZFxcbisgICAgICAgICAgICAtIGVycm9yLW5hbWVcXG4rICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcXG4rICAgIC1cXG4rICAgICAgbmFtZTogc2V0LWVycm9yLXRocmVzaG9sZFxcbisgICAgICBkb2M6IFxcdTAwM2UtXFxuKyAgICAgICAgICAgU2V0IGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXFxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWNvdW50ZXItYXR0cnNcXG4rICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXVxcbisgICAgICBkbzpcXG4rICAgICAgICByZXF1ZXN0OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBub2RlLWlkXFxuKyAgICAgICAgICAgIC0gZXJyb3ItaWRcXG4rICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uZDYwYzQwYWM1NDI3YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5AQCAtNDEsNiArNDEsMTMgQEBcXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cXG4gICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC5cXG4gICpcXG4rICogNC4gR0VUX0VSUk9SX1RIUkVTSE9MRDogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cXG4rICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElEIGFuZCBFcnJvciBJRC5cXG4rICogICAgUmV0dXJucyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cXG4rICpcXG4rICogNS4gU0VUX0VSUk9SX1RIUkVTSE9MRDogU2V0IGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXFxuKyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQgYW5kIHRocmVzaG9sZCB0byBiZSBzZXQuXFxuKyAqXFxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxcbiAgKlxcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xcbkBAIC02MSw2ICs2OCwxNiBAQFxcbiAgKiAgICAgKyBUaGUgZXJyb3IgY291bnRlcnMgaW4gdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdG8gYmUgY29udGlndW91cywgYnV0IHRoZVxcbiAgKiAgICAgICBkcml2ZXIgbXVzdCByZXR1cm4gLUVOT0VOVCB0byB0aGUgcXVlcnlfZXJyb3JfY291bnRlciBhcyBhbiBpbmRpY2F0aW9uXFxuICAqICAgICAgIHRoYXQgdGhlIElEIHNob3VsZCBiZSBza2lwcGVkIGFuZCBub3QgbGlzdGVkIGluIHRoZSBuZXRsaW5rIEFQSS5cXG4rICogICAgICsgVGhlIGRyaXZlciBjYW4gb3B0aW9uYWxseSBpbXBsZW1lbnQgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgYW5kXFxuKyAqICAgICAgIHNldF9lcnJvcl90aHJlc2hvbGQoKSBjYWxsYmFja3MgdG8gZmFjaWxpdGF0ZSBnZXR0aW5nL3NldHRpbmcgZXJyb3JcXG4rICogICAgICAgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyLiBUaHJlc2hvbGQgaW4gUkFTIGNvbnRleHQgbWVhbnMgdGhlIG51bWJlciBvZlxcbisgKiAgICAgICBlcnJvcnMgdGhlIGhhcmR3YXJlIGlzIGV4cGVjdGVkIHRvIGFjY3VtdWxhdGUgYmVmb3JlIGl0IHJhaXNlcyB0aGVtIHRvXFxuKyAqICAgICAgIHNvZnR3YXJlLiBUaGlzIGlzIHRvIGhhdmUgYSBmaW5lIGdyYWluZWQgY29udHJvbCBvdmVyIGVycm9yIG5vdGlmaWNhdGlvbnNcXG4rICogICAgICAgdGhhdCBhcmUgcmFpc2VkIGJ5IHRoZSBoYXJkd2FyZS5cXG4rICogICAgICsgVGhlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgZXJyb3IgdGhyZXNob2xkIGJvdW5kcyBjaGVja2luZy5cXG4rICogICAgICsgVGhyZXNob2xkIG9mIDAgY2FuIG1lYW4gaW52YWxpZCB0aHJlc2hvbGQgb3IgYWN0IGFzIGEgZGlzYWJsZSBub3RpZmljYXRpb25zXFxuKyAqICAgICAgIHRvZ2dsZSBmb3IgdGhhdCBjb3VudGVyIGRlcGVuZGluZyBvbiB1c2VjYXNlIGFuZCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlXFxuKyAqICAgICAgIGZvciBoYW5kbGluZyBpdCBhcyBuZWVkZWQuXFxuICAqXFxuICAqIE5ldGxpbmsgaGFuZGxlcnM6XFxuICAqXFxuQEAgLTcyLDYgKzg5LDEwIEBAXFxuICAqICAgb3BlcmF0aW9uLCBmZXRjaGluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXFxuICAqIC0gZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgQ0xFQVJfRVJST1JfQ09VTlRFUiBkb2l0XFxuICAqICAgb3BlcmF0aW9uLCBjbGVhcmluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXFxuKyAqIC0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgR0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0XFxuKyAqICAgb3BlcmF0aW9uLCBmZXRjaGluZyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cXG4rICogLSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBTRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcXG4rICogICBvcGVyYXRpb24sIHNldHRpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXFxuICAqL1xcbiBcXG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoZHJtX3Jhc194YSk7XFxuQEAgLTE2OCw2ICsxODksNDAgQEAgc3RhdGljIGludCBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsXFxuIFxcdHJldHVybiBub2RlLVxcdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkLCBuYW1lLCB2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLCB1MzIgKnRocmVzaG9sZClcXG4re1xcbitcXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xcbitcXG4rXFx0bm9kZSA9IHhhX2xvYWQoXFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xcbitcXHRpZiAoIW5vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChlcnJvcl9pZCBcXHUwMDNjIG5vZGUtXFx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwgZXJyb3JfaWQgXFx1MDAzZSBub2RlLVxcdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3QpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIG5vZGUtXFx1MDAzZXF1ZXJ5X2Vycm9yX3RocmVzaG9sZChub2RlLCBlcnJvcl9pZCwgbmFtZSwgdGhyZXNob2xkKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcXG4re1xcbitcXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xcbitcXG4rXFx0bm9kZSA9IHhhX2xvYWQoXFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xcbitcXHRpZiAoIW5vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoZXJyb3JfaWQgXFx1MDAzYyBub2RlLVxcdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkIFxcdTAwM2Ugbm9kZS1cXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBub2RlLVxcdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkKG5vZGUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcXG4ge1xcbkBAIC0xODYsNiArMjQxLDIyIEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcXG4gXFx0XFx0XFx0ICAgdmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1zZ19yZXBseV90aHJlc2hvbGQoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxcbitcXHRcXHRcXHQgICAgICAgdTMyIHRocmVzaG9sZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCwgdGhyZXNob2xkKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbiBcXHRcXHRcXHQgICAgdTMyIGVycm9yX2lkKVxcbiB7XFxuQEAgLTIwMSwyNSArMjcyLDY1IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcXG4gXFxuIFxcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xcbiBcXHRpZiAoIWhkcikge1xcbi1cXHRcXHRubG1zZ19mcmVlKG1zZyk7XFxuLVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfY291bnRlcihub2RlX2lkLCBlcnJvcl9pZCxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZXJyb3JfbmFtZSwgXFx1MDAyNnZhbHVlKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbiBcXG4gXFx0cmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XFxuLVxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbitcXG4rXFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbitcXG4rXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcXG4rXFxuK2NhbmNlbF9tc2c6XFxuK1xcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcXG4rZnJlZV9tc2c6XFxuK1xcdG5sbXNnX2ZyZWUobXNnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkb2l0X3JlcGx5X3RocmVzaG9sZChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKmVycm9yX25hbWU7XFxuK1xcdHN0cnVjdCBza19idWZmICptc2c7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmhkcjtcXG4rXFx0dTMyIHRocmVzaG9sZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtc2cpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aGRyID0gZ2VubG1zZ19pcHV0KG1zZywgaW5mbyk7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCBcXHUwMDI2ZXJyb3JfbmFtZSwgXFx1MDAyNnRocmVzaG9sZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2FuY2VsX21zZztcXG4rXFxuK1xcdHJldCA9IG1zZ19yZXBseV90aHJlc2hvbGQobXNnLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdGhyZXNob2xkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbitcXG4gXFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbiBcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcXG4rXFxuK2NhbmNlbF9tc2c6XFxuK1xcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcXG4rZnJlZV9tc2c6XFxuK1xcdG5sbXNnX2ZyZWUobXNnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTM1NSw2ICs0NjYsNTkgQEAgaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBub2RlLVxcdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyXFxuKyAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcXG4rICogQGluZm86IEdlbmVyaWMgTmV0bGluayBpbmZvIGNvbnRhaW5pbmcgYXR0cmlidXRlcyBvZiB0aGUgcmVxdWVzdFxcbisgKlxcbisgKiBFeHRyYWN0cyB0aGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCByZXRyaWV2ZXNcXG4rICogdGhlIGVycm9yIHRocmVzaG9sZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb3VudGVyLiBTZW5kcyB0aGUgcmVzdWx0IGJhY2sgdG9cXG4rICogdGhlIHJlcXVlc3RpbmcgdXNlciB2aWEgdGhlIHN0YW5kYXJkIEdlbmwgcmVwbHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0dTMyIG5vZGVfaWQsIGVycm9yX2lkO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRycyB8fFxcbitcXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxcbitcXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcXG4rXFx0ZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xcbitcXG4rXFx0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgY291bnRlclxcbisgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXFxuKyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3RcXG4rICpcXG4rICogRXh0cmFjdHMgdGhlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZFxcbisgKiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHR1MzIgbm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZDtcXG4rXFxuK1xcdGlmICghaW5mby1cXHUwMDNlYXR0cnMgfHxcXG4rXFx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRCkgfHxcXG4rXFx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpIHx8XFxuK1xcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcXG4rXFx0ZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xcbitcXHR0aHJlc2hvbGQgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTERdKTtcXG4rXFxuK1xcdHJldHVybiBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGEgbmV3IFJBUyBub2RlXFxuICAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZSB0byByZWdpc3RlclxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbmluZGV4IGRlYTFjMWIyNDk0ZTgxLi4wMmU4ZTUwNTRkMDU2YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbkBAIC0yOCw2ICsyOCwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19jbGVhcl9lcnJvcl9jb3VudGVyX25sX3BvbGljeVtEUk1fUkFTX0FfRVxcbiBcXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuIH07XFxuIFxcbisvKiBEUk1fUkFTX0NNRF9HRVRfRVJST1JfVEhSRVNIT0xEIC0gZG8gKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRybV9yYXNfZ2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3lbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQgKyAxXSA9IHtcXG4rXFx0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuK1xcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4rfTtcXG4rXFxuKy8qIERSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQgLSBkbyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19zZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQgKyAxXSA9IHtcXG4rXFx0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuK1xcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4rXFx0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4rfTtcXG4rXFxuIC8qIE9wcyB0YWJsZSBmb3IgZHJtX3JhcyAqL1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XFxuIFxcdHtcXG5AQCAtNTYsNiArNjksMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xcbiBcXHRcXHQubWF4YXR0clxcdD0gRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQsXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jbWRcXHRcXHQ9IERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsXFxuK1xcdFxcdC5kb2l0XFx0XFx0PSBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCxcXG4rXFx0XFx0LnBvbGljeVxcdFxcdD0gZHJtX3Jhc19nZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeSxcXG4rXFx0XFx0Lm1heGF0dHJcXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxcbitcXHRcXHQuZmxhZ3NcXHRcXHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuY21kXFx0XFx0PSBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xELFxcbitcXHRcXHQuZG9pdFxcdFxcdD0gZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQsXFxuK1xcdFxcdC5wb2xpY3lcXHRcXHQ9IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXFxuK1xcdFxcdC5tYXhhdHRyXFx0PSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsXFxuK1xcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcXG5pbmRleCBhMzk4NjQzNTcyYTVhMC4uNTdiMWU2NDdkODMzMGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcXG5AQCAtMjAsNiArMjAsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbitpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIFxcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uNGFmYTJhZDk4MzAwZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG5AQCAtODYsNiArODYsMzggQEAgc3RhdGljIGludCBjbGVhcl9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9cXG4gXFx0cmV0dXJuIGNsZWFyX2Vycm9yX2NvdW50ZXIoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHF1ZXJ5X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZChzdHJ1Y3QgZHJtX3Jhc19ub2RlICplcCwgdTMyIGVycm9yX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKipuYW1lLCB1MzIgKnRocmVzaG9sZClcXG4re1xcbitcXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGVwLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXFx1MDAyNnhlLVxcdTAwM2VyYXM7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXFx1MDAzZWluZm9bRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFXTtcXG4rXFxuK1xcdGlmICghaW5mbyB8fCAhaW5mb1tlcnJvcl9pZF0ubmFtZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAoIXhlLVxcdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQqbmFtZSA9IGluZm9bZXJyb3JfaWRdLm5hbWU7XFxuK1xcdHJldHVybiB4ZV9yYXNfZ2V0X3RocmVzaG9sZCh4ZSwgRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFLCBlcnJvcl9pZCwgdGhyZXNob2xkKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzZXRfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkKHN0cnVjdCBkcm1fcmFzX25vZGUgKmVwLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpXFxuK3tcXG4rXFx0c3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFxcdTAwMjZ4ZS1cXHUwMDNlcmFzO1xcbitcXHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvID0gcmFzLVxcdTAwM2VpbmZvW0RSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRV07XFxuK1xcbitcXHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKCF4ZS1cXHUwMDNlaW5mby5oYXNfc3lzY3RybClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHhlX3Jhc19zZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqYWxsb2NhdGVfYW5kX2NvcHlfY291bnRlcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIHtcXG4gXFx0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqY291bnRlcjtcXG5AQCAtMTM0LDYgKzE2Niw4IEBAIHN0YXRpYyBpbnQgYXNzaWduX25vZGVfcGFyYW1zKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxcbiBcXHRpZiAoc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFKSB7XFxuIFxcdFxcdG5vZGUtXFx1MDAzZXF1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyO1xcbiBcXHRcXHRub2RlLVxcdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcXG4rXFx0XFx0bm9kZS1cXHUwMDNlcXVlcnlfZXJyb3JfdGhyZXNob2xkID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkO1xcbitcXHRcXHRub2RlLVxcdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkID0gc2V0X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0bm9kZS1cXHUwMDNlcXVlcnlfZXJyb3JfY291bnRlciA9IHF1ZXJ5X3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcXG4gXFx0XFx0bm9kZS1cXHUwMDNlY2xlYXJfZXJyb3JfY291bnRlciA9IGNsZWFyX3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuaW5kZXggNDRmNGUxYTM0NTViN2MuLmFmZWU4MjAyZDI0ZWZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xcbkBAIC0yNzAsNiArMjcwLDExMSBAQCBpbnQgeGVfcmFzX2NsZWFyX2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogeGVfcmFzX2dldF90aHJlc2hvbGQoKSAtIEdldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZFxcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxcbisgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHF1ZXJpZWQgKFxcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXFxuKyAqIEBjb21wb25lbnQ6IEVycm9yIGNvbXBvbmVudCB0byBiZSBxdWVyaWVkIChcXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcXG4rICogQHRocmVzaG9sZDogQ291bnRlciB0aHJlc2hvbGRcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIgYmFzZWQgb25cXG4rICogc2V2ZXJpdHkgYW5kIGNvbXBvbmVudC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpXFxuK3tcXG4rXFx0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XFxuK1xcdHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHJlcXVlc3QgPSB7fTtcXG4rXFx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcXG4rXFx0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlcjtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNvdW50ZXIgPSBcXHUwMDI2cmVxdWVzdC5jb3VudGVyO1xcbitcXHRjb3VudGVyLVxcdTAwM2Vjb21tb24uc2V2ZXJpdHkgPSBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcXG4rXFx0Y291bnRlci1cXHUwMDNlY29tbW9uLmNvbXBvbmVudCA9IGRybV90b194ZV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XFxuK1xcbitcXHR4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKFxcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXFx1MDAyNnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKTtcXG4rXFxuK1xcdGd1YXJkKHhlX3BtX3J1bnRpbWUpKHhlKTtcXG4rXFx0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXFx1MDAyNnhlLVxcdTAwM2VzYywgXFx1MDAyNmNvbW1hbmQsIFxcdTAwMjZsZW4pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHhlX2Vycih4ZSwgXFxcInN5c2N0cmw6IGZhaWxlZCB0byBnZXQgdGhyZXNob2xkICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuICE9IHNpemVvZihyZXNwb25zZSkpIHtcXG4rXFx0XFx0eGVfZXJyKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBnZXQgdGhyZXNob2xkIHJlc3BvbnNlIGxlbmd0aCAlenUgKGV4cGVjdGVkICV6dSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBsZW4sIHNpemVvZihyZXNwb25zZSkpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0Y291bnRlciA9IFxcdTAwMjZyZXNwb25zZS5jb3VudGVyO1xcbitcXHQqdGhyZXNob2xkID0gcmVzcG9uc2UudGhyZXNob2xkO1xcbitcXG4rXFx0eGVfZGJnKHhlLCBcXFwiW1JBU106IGdldCB0aHJlc2hvbGQgJXUgZm9yICVzICVzXFxcXG5cXFwiLCAqdGhyZXNob2xkLFxcbitcXHQgICAgICAgY29tcF90b19zdHIoY291bnRlci1cXHUwMDNlY29tbW9uLmNvbXBvbmVudCksIHNldl90b19zdHIoY291bnRlci1cXHUwMDNlY29tbW9uLnNldmVyaXR5KSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeGVfcmFzX3NldF90aHJlc2hvbGQoKSAtIFNldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZFxcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxcbisgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHNldCAoXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcXG4rICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXFxuKyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlciBiYXNlZCBvblxcbisgKiBzZXZlcml0eSBhbmQgY29tcG9uZW50LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKVxcbit7XFxuK1xcdHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xcbitcXHRzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCByZXF1ZXN0ID0ge307XFxuK1xcdHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCBjb21tYW5kID0ge307XFxuK1xcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXI7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjb3VudGVyID0gXFx1MDAyNnJlcXVlc3QuY291bnRlcjtcXG4rXFx0Y291bnRlci1cXHUwMDNlY29tbW9uLnNldmVyaXR5ID0gZHJtX3RvX3hlX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XFxuK1xcdGNvdW50ZXItXFx1MDAzZWNvbW1vbi5jb21wb25lbnQgPSBkcm1fdG9feGVfcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xcbitcXHRyZXF1ZXN0LnRocmVzaG9sZCA9IHRocmVzaG9sZDtcXG4rXFxuK1xcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXFx1MDAyNmNvbW1hbmQsIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCwgWEVfU1lTQ1RSTF9DTURfU0VUX1RIUkVTSE9MRCxcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCBcXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xcbitcXG4rXFx0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xcbitcXHRyZXQgPSB4ZV9zeXNjdHJsX3NlbmRfY29tbWFuZChcXHUwMDI2eGUtXFx1MDAzZXNjLCBcXHUwMDI2Y29tbWFuZCwgXFx1MDAyNmxlbik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0eGVfZXJyKHhlLCBcXFwic3lzY3RybDogZmFpbGVkIHRvIHNldCB0aHJlc2hvbGQgJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsZW4gIT0gc2l6ZW9mKHJlc3BvbnNlKSkge1xcbitcXHRcXHR4ZV9lcnIoeGUsIFxcXCJzeXNjdHJsOiB1bmV4cGVjdGVkIHNldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIGxlbiwgc2l6ZW9mKHJlc3BvbnNlKSk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0eGVfZXJyKHhlLCBcXFwic3lzY3RybDogc2V0IHRocmVzaG9sZCBjb21tYW5kIGZhaWxlZCB3aXRoIHN0YXR1cyAlI3hcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICByZXNwb25zZS5zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRjb3VudGVyID0gXFx1MDAyNnJlc3BvbnNlLmNvdW50ZXI7XFxuK1xcbitcXHR4ZV9kYmcoeGUsIFxcXCJbUkFTXTogc2V0IHRocmVzaG9sZCAldSBmb3IgJXMgJXNcXFxcblxcXCIsIHJlc3BvbnNlLnRocmVzaG9sZCxcXG4rXFx0ICAgICAgIGNvbXBfdG9fc3RyKGNvdW50ZXItXFx1MDAzZWNvbW1vbi5jb21wb25lbnQpLCBzZXZfdG9fc3RyKGNvdW50ZXItXFx1MDAzZWNvbW1vbi5zZXZlcml0eSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHhlX3Jhc19pbml0IC0gSW5pdGlhbGl6ZSBYZSBSQVNcXG4gICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oXFxuaW5kZXggYmEwYjAyMjRkZjIzNjUuLjFhYTQzYzU0YjcxMGMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxcbkBAIC0xNSw2ICsxNSw4IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XFxuIGludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xcbiBpbnQgeGVfcmFzX2NsZWFyX2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpO1xcbitpbnQgeGVfcmFzX2dldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdGhyZXNob2xkKTtcXG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKTtcXG4gdm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oXFxuaW5kZXggNjY4OGUxMWY1N2E4NjIuLjc0N2I2NTE4ODBjZDU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxcbkBAIC0xMjEsNCArMTIxLDU1IEBAIHN0cnVjdCB4ZV9yYXNfY2xlYXJfY291bnRlcl9yZXNwb25zZSB7XFxuIFxcdC8qKiBAcmVzZXJ2ZWQxOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xcbiBcXHR1MzIgcmVzZXJ2ZWQxWzNdO1xcbiB9IF9fcGFja2VkO1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IC0gUmVxdWVzdCBzdHJ1Y3R1cmUgZm9yIGdldCB0aHJlc2hvbGRcXG4rICovXFxuK3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHtcXG4rXFx0LyoqIEBjb3VudGVyOiBDb3VudGVyIHRvIGdldCB0aHJlc2hvbGQgZm9yICovXFxuK1xcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcXG4rXFx0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0dTMyIHJlc2VydmVkO1xcbit9IF9fcGFja2VkO1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxcbisgKi9cXG4rc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHtcXG4rXFx0LyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovXFxuK1xcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcXG4rXFx0LyoqIEB0aHJlc2hvbGQ6IEN1cnJlbnQgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyICovXFxuK1xcdHUzMiB0aHJlc2hvbGQ7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXFxuK1xcdHUzMiByZXNlcnZlZFs0XTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCAtIFJlcXVlc3Qgc3RydWN0dXJlIGZvciBzZXQgdGhyZXNob2xkXFxuKyAqL1xcbitzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCB7XFxuK1xcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBzZXQgdGhyZXNob2xkIGZvciAqL1xcbitcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XFxuK1xcdC8qKiBAdGhyZXNob2xkOiBUaHJlc2hvbGQgdG8gYmUgc2V0ICovXFxuK1xcdHUzMiB0aHJlc2hvbGQ7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXFxuK1xcdHUzMiByZXNlcnZlZDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIHNldCB0aHJlc2hvbGRcXG4rICovXFxuK3N0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSB7XFxuK1xcdC8qKiBAY291bnRlcjogQ291bnRlciBJRCAqL1xcbitcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovXFxuK1xcdHUzMiByZXNlcnZlZDtcXG4rXFx0LyoqIEB0aHJlc2hvbGQ6IFVwZGF0ZWQgdGhyZXNob2xkICovXFxuK1xcdHUzMiB0aHJlc2hvbGQ7XFxuK1xcdC8qKiBAc3RhdHVzOiBPcGVyYXRpb24gc3RhdHVzICovXFxuK1xcdHUzMiBzdGF0dXM7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQxOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xcbitcXHR1MzIgcmVzZXJ2ZWQxWzJdO1xcbit9IF9fcGFja2VkO1xcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jXFxuaW5kZXggYjRkMTczMjlhZjZjOGQuLjA1NDdiN2IzOTcyNjZlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jXFxuQEAgLTQ5LDE4ICs0OSw2IEBAIHN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jXFxuIFxcdH0gd2hpbGUgKHJlc3BvbnNlLVxcdTAwM2Vjb3VudCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGV2ZW50X3JlcXVlc3RfcHJlcGFyZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgKmhlYWRlcixcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KVxcbi17XFxuLVxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4ZS1cXHUwMDNlZHJtLmRldik7XFxuLVxcbi1cXHRoZWFkZXItXFx1MDAzZWRhdGEgPSBSRUdfRklFTERfUFJFUChBUFBfSERSX0dST1VQX0lEX01BU0ssIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCkgfFxcbi1cXHRcXHQgICAgICAgUkVHX0ZJRUxEX1BSRVAoQVBQX0hEUl9DT01NQU5EX01BU0ssIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UKTtcXG4tXFxuLVxcdHJlcXVlc3QtXFx1MDAzZXZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDtcXG4tXFx0cmVxdWVzdC1cXHUwMDNlZm4gPSBQQ0lfRlVOQyhwZGV2LVxcdTAwM2VkZXZmbik7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiB4ZV9zeXNjdHJsX2V2ZW50KCkgLSBIYW5kbGVyIGZvciBTeXN0ZW0gQ29udHJvbGxlciBldmVudHNcXG4gICogQHNjOiBTeXN0ZW0gQ29udHJvbGxlciBpbnN0YW5jZVxcbkBAIC03MiwxNiArNjAsMTYgQEAgdm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYylcXG4gXFx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcXG4gXFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTtcXG4gXFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCByZXF1ZXN0ID0ge307XFxuLVxcdHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyIGhlYWRlciA9IHt9O1xcbitcXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHNjX3RvX3hlKHNjKTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHhlLVxcdTAwM2Vkcm0uZGV2KTtcXG4rXFxuK1xcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XFxuIFxcbi1cXHR4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3Moc2NfdG9feGUoc2MpKTtcXG4tXFx0ZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgXFx1MDAyNmhlYWRlciwgXFx1MDAyNnJlcXVlc3QpO1xcbitcXHRyZXF1ZXN0LnZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDtcXG4rXFx0cmVxdWVzdC5mbiA9IFBDSV9GVU5DKHBkZXYtXFx1MDAzZWRldmZuKTtcXG4gXFxuLVxcdGNvbW1hbmQuaGVhZGVyID0gaGVhZGVyO1xcbi1cXHRjb21tYW5kLmRhdGFfaW4gPSBcXHUwMDI2cmVxdWVzdDtcXG4tXFx0Y29tbWFuZC5kYXRhX2luX2xlbiA9IHNpemVvZihyZXF1ZXN0KTtcXG4tXFx0Y29tbWFuZC5kYXRhX291dCA9IFxcdTAwMjZyZXNwb25zZTtcXG4tXFx0Y29tbWFuZC5kYXRhX291dF9sZW4gPSBzaXplb2YocmVzcG9uc2UpO1xcbitcXHR4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKFxcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5ULFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksIFxcdTAwMjZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7XFxuIFxcbiBcXHRndWFyZChtdXRleCkoXFx1MDAyNnNjLVxcdTAwM2VldmVudF9sb2NrKTtcXG4gXFx0Z2V0X3BlbmRpbmdfZXZlbnQoc2MsIFxcdTAwMjZjb21tYW5kKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oXFxuaW5kZXggNmUzNzUzNTU0NTEwYTUuLjEwZjA2YWE1YzRiNTUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxcbkBAIC0yNCwxMSArMjQsMTUgQEAgZW51bSB4ZV9zeXNjdHJsX2dyb3VwIHtcXG4gICpcXG4gICogQFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSOiBHZXQgZXJyb3IgY291bnRlciB2YWx1ZVxcbiAgKiBAWEVfU1lTQ1RSTF9DTURfQ0xFQVJfQ09VTlRFUjogQ2xlYXIgZXJyb3IgY291bnRlciB2YWx1ZVxcbisgKiBAWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRDogUmV0cmlldmUgZXJyb3IgdGhyZXNob2xkXFxuKyAqIEBYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEOiBTZXQgZXJyb3IgdGhyZXNob2xkXFxuICAqIEBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVDogUmV0cmlldmUgcGVuZGluZyBldmVudFxcbiAgKi9cXG4gZW51bSB4ZV9zeXNjdHJsX2dmc3BfY21kIHtcXG4gXFx0WEVfU1lTQ1RSTF9DTURfR0VUX0NPVU5URVJcXHRcXHQ9IDB4MDMsXFxuIFxcdFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVJcXHRcXHQ9IDB4MDQsXFxuK1xcdFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTERcXHRcXHQ9IDB4MDUsXFxuK1xcdFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTERcXHRcXHQ9IDB4MDYsXFxuIFxcdFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UXFx0PSAweDA3LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggZjJhNzg3YmM0ZjY0YTkuLjY4M2EzODQ0Zjg0ZjYyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbisrKyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbkBAIC02OSw2ICs2OSwzNCBAQCBzdHJ1Y3QgZHJtX3Jhc19ub2RlIHtcXG4gXFx0ICovXFxuIFxcdGludCAoKmNsZWFyX2Vycm9yX2NvdW50ZXIpKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCk7XFxuIFxcbitcXHQvKipcXG4rXFx0ICogQHF1ZXJ5X2Vycm9yX3RocmVzaG9sZDpcXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGRybS1yYXMgdG8gcXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGFcXG4rXFx0ICogc3BlY2lmaWMgY291bnRlci5cXG4rXFx0ICpcXG4rXFx0ICogRHJpdmVyIHNob3VsZCBleHBlY3QgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGhcXG4rXFx0ICogZXJyb3JfaWQgZnJvbSBgZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdGAgdG9cXG4rXFx0ICogYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuXFxuK1xcdCAqXFxuK1xcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqcXVlcnlfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiAqdGhyZXNob2xkKTtcXG4rXFx0LyoqXFxuK1xcdCAqIEBzZXRfZXJyb3JfdGhyZXNob2xkOlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBzZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWNcXG4rXFx0ICogY291bnRlci5cXG4rXFx0ICpcXG4rXFx0ICogRHJpdmVyIHNob3VsZCBleHBlY3Qgc2V0X2Vycm9yX3RocmVzaG9sZCgpIHRvIGJlIGNhbGxlZCB3aXRoIGVycm9yX2lkXFxuK1xcdCAqIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvIGBlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3RgLlxcbitcXHQgKiBEcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuXFxuK1xcdCAqXFxuK1xcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqc2V0X2Vycm9yX3RocmVzaG9sZCkoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKTtcXG4rXFxuIFxcdC8qKiBAcHJpdjogRHJpdmVyIHByaXZhdGUgZGF0YSAqL1xcbiBcXHR2b2lkICpwcml2O1xcbiB9O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggMjE4YTNlZTg2ODA1MjcuLjI3YzY4OTU2NDk1ZmI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG5AQCAtMzMsNiArMzMsNyBAQCBlbnVtIHtcXG4gXFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQsXFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX05BTUUsXFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1ZBTFVFLFxcbitcXHREUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCxcXG4gXFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcXG5AQCAtNDIsNiArNDMsOCBAQCBlbnVtIHtcXG4gXFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXFxuIFxcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxcbiBcXHREUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLFxcbitcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfVEhSRVNIT0xELFxcbitcXHREUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xELFxcbiBcXG4gXFx0X19EUk1fUkFTX0NNRF9NQVgsXFxuIFxcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU3OjM4Ljk5MTcyODc3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwNzEyMDc2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDEwOjU3OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjI3MThmOGFlZTA5ZGQ3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5AQCAtNTYsNiArNTYsMTAgQEAgVXNlciBzcGFjZSB0b29scyBjYW46XG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXG4gKiBDbGVhciBzcGVjaWZpYyBlcnJvciBjb3VudGVycyB3aXRoIHRoZSBgYGNsZWFyLWVycm9yLWNvdW50ZXJgYCBjb21tYW5kLCB1c2luZyBib3RoXG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXG4rKiBRdWVyeSBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYGdldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZyBib3RoXG4rICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXG4rKiBTZXQgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBzZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmdcbisgIGBgbm9kZS1pZGBgLCBgYGVycm9yLWlkYGAgYW5kIGBgZXJyb3ItdGhyZXNob2xkYGAgYXMgcGFyYW1ldGVycy5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgKzExNSwxNyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjF9J1xuICAgICBOb25lXG4rXG4rRXhhbXBsZTogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlclxuK1xuKy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4rXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBnZXQtZXJyb3ItdGhyZXNob2xkIC0tanNvbiAne1wibm9kZS1pZFwiOjAsIFwiZXJyb3ItaWRcIjoxfSdcbisgICAgeydlcnJvci1pZCc6IDEsICdlcnJvci1uYW1lJzogJ2Vycm9yX25hbWUxJywgJ2Vycm9yLXRocmVzaG9sZCc6IDE2fVxuK1xuK0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyXG4rXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcbitcbisgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIHNldC1lcnJvci10aHJlc2hvbGQgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjEsIFwiZXJyb3ItdGhyZXNob2xkXCI6OH0nXG4rICAgIE5vbmVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuaW5kZXggZTExMzA1NmY4YzAxNmMuLjljZjdmOWNkZTI0MjUyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgKzY5LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci10aHJlc2hvbGRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBFcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgKzEyOCwzMSBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXG4rICAgIC1cbisgICAgICBuYW1lOiBnZXQtZXJyb3ItdGhyZXNob2xkXG4rICAgICAgZG9jOiBcdTAwM2UtXG4rICAgICAgICAgICBSZXRyaWV2ZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLlxuKyAgICAgICAgICAgVGhlIHJlc3BvbnNlIGluY2x1ZGVzIHRoZSBpZCwgdGhlIG5hbWUsIGFuZCBjdXJyZW50IHRocmVzaG9sZFxuKyAgICAgICAgICAgb2YgdGhlIGNvdW50ZXIuXG4rICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItY291bnRlci1hdHRyc1xuKyAgICAgIGZsYWdzOiBbYWRtaW4tcGVybV1cbisgICAgICBkbzpcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuKyAgICAgICAgcmVwbHk6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBlcnJvci1pZFxuKyAgICAgICAgICAgIC0gZXJyb3ItbmFtZVxuKyAgICAgICAgICAgIC0gZXJyb3ItdGhyZXNob2xkXG4rICAgIC1cbisgICAgICBuYW1lOiBzZXQtZXJyb3ItdGhyZXNob2xkXG4rICAgICAgZG9jOiBcdTAwM2UtXG4rICAgICAgICAgICBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzXG4rICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXVxuKyAgICAgIGRvOlxuKyAgICAgICAgcmVxdWVzdDpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIG5vZGUtaWRcbisgICAgICAgICAgICAtIGVycm9yLWlkXG4rICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuaW5kZXggZDZlYWIyOWExMzk0Y2EuLmQ2MGM0MGFjNTQyN2FmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuQEAgLTQxLDYgKzQxLDEzIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4rICogNC4gR0VUX0VSUk9SX1RIUkVTSE9MRDogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbisgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQgYW5kIEVycm9yIElELlxuKyAqICAgIFJldHVybnMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4rICpcbisgKiA1LiBTRVRfRVJST1JfVEhSRVNIT0xEOiBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbisgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgdG8gYmUgc2V0LlxuKyAqXG4gICogTm9kZSByZWdpc3RyYXRpb246XG4gICpcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xuQEAgLTYxLDYgKzY4LDE2IEBAXG4gICogICAgICsgVGhlIGVycm9yIGNvdW50ZXJzIGluIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRvIGJlIGNvbnRpZ3VvdXMsIGJ1dCB0aGVcbiAgKiAgICAgICBkcml2ZXIgbXVzdCByZXR1cm4gLUVOT0VOVCB0byB0aGUgcXVlcnlfZXJyb3JfY291bnRlciBhcyBhbiBpbmRpY2F0aW9uXG4gICogICAgICAgdGhhdCB0aGUgSUQgc2hvdWxkIGJlIHNraXBwZWQgYW5kIG5vdCBsaXN0ZWQgaW4gdGhlIG5ldGxpbmsgQVBJLlxuKyAqICAgICArIFRoZSBkcml2ZXIgY2FuIG9wdGlvbmFsbHkgaW1wbGVtZW50IHF1ZXJ5X2Vycm9yX3RocmVzaG9sZCgpIGFuZFxuKyAqICAgICAgIHNldF9lcnJvcl90aHJlc2hvbGQoKSBjYWxsYmFja3MgdG8gZmFjaWxpdGF0ZSBnZXR0aW5nL3NldHRpbmcgZXJyb3JcbisgKiAgICAgICB0aHJlc2hvbGQgb2YgdGhlIGNvdW50ZXIuIFRocmVzaG9sZCBpbiBSQVMgY29udGV4dCBtZWFucyB0aGUgbnVtYmVyIG9mXG4rICogICAgICAgZXJyb3JzIHRoZSBoYXJkd2FyZSBpcyBleHBlY3RlZCB0byBhY2N1bXVsYXRlIGJlZm9yZSBpdCByYWlzZXMgdGhlbSB0b1xuKyAqICAgICAgIHNvZnR3YXJlLiBUaGlzIGlzIHRvIGhhdmUgYSBmaW5lIGdyYWluZWQgY29udHJvbCBvdmVyIGVycm9yIG5vdGlmaWNhdGlvbnNcbisgKiAgICAgICB0aGF0IGFyZSByYWlzZWQgYnkgdGhlIGhhcmR3YXJlLlxuKyAqICAgICArIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuXG4rICogICAgICsgVGhyZXNob2xkIG9mIDAgY2FuIG1lYW4gaW52YWxpZCB0aHJlc2hvbGQgb3IgYWN0IGFzIGEgZGlzYWJsZSBub3RpZmljYXRpb25zXG4rICogICAgICAgdG9nZ2xlIGZvciB0aGF0IGNvdW50ZXIgZGVwZW5kaW5nIG9uIHVzZWNhc2UgYW5kIHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGVcbisgKiAgICAgICBmb3IgaGFuZGxpbmcgaXQgYXMgbmVlZGVkLlxuICAqXG4gICogTmV0bGluayBoYW5kbGVyczpcbiAgKlxuQEAgLTcyLDYgKzg5LDEwIEBAXG4gICogICBvcGVyYXRpb24sIGZldGNoaW5nIGEgY291bnRlciB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgbm9kZS5cbiAgKiAtIGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KCk6IEltcGxlbWVudHMgdGhlIENMRUFSX0VSUk9SX0NPVU5URVIgZG9pdFxuICAqICAgb3BlcmF0aW9uLCBjbGVhcmluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXG4rICogLSBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBHRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcbisgKiAgIG9wZXJhdGlvbiwgZmV0Y2hpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4rICogLSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBTRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcbisgKiAgIG9wZXJhdGlvbiwgc2V0dGluZyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cbiAgKi9cbiBcbiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhkcm1fcmFzX3hhKTtcbkBAIC0xNjgsNiArMTg5LDQwIEBAIHN0YXRpYyBpbnQgZ2V0X25vZGVfZXJyb3JfY291bnRlcih1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkLFxuIFx0cmV0dXJuIG5vZGUtXHUwMDNlcXVlcnlfZXJyb3JfY291bnRlcihub2RlLCBlcnJvcl9pZCwgbmFtZSwgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZCh1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICoqbmFtZSwgdTMyICp0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbitcbitcdG5vZGUgPSB4YV9sb2FkKFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGlmICghbm9kZS1cdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChlcnJvcl9pZCBcdTAwM2Mgbm9kZS1cdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkIFx1MDAzZSBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gbm9kZS1cdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQobm9kZSwgZXJyb3JfaWQsIG5hbWUsIHRocmVzaG9sZCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbitcbitcdG5vZGUgPSB4YV9sb2FkKFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGlmICghbm9kZS1cdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoZXJyb3JfaWQgXHUwMDNjIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdCB8fCBlcnJvcl9pZCBcdTAwM2Ugbm9kZS1cdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3QpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIG5vZGUtXHUwMDNlc2V0X2Vycm9yX3RocmVzaG9sZChub2RlLCBlcnJvcl9pZCwgdGhyZXNob2xkKTtcbit9XG4rXG4gc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcbiB7XG5AQCAtMTg2LDYgKzI0MSwyMiBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXG4gXHRcdFx0ICAgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IG1zZ19yZXBseV90aHJlc2hvbGQoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuK1x0XHRcdCAgICAgICB1MzIgdGhyZXNob2xkKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsIHRocmVzaG9sZCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMDEsMjUgKzI3Miw2NSBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXG4gXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBpbmZvKTtcbiBcdGlmICghaGRyKSB7XG4tXHRcdG5sbXNnX2ZyZWUobXNnKTtcbi1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIGZyZWVfbXNnO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfY291bnRlcihub2RlX2lkLCBlcnJvcl9pZCxcbiBcdFx0XHRcdCAgICAgXHUwMDI2ZXJyb3JfbmFtZSwgXHUwMDI2dmFsdWUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuIFxuIFx0cmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuLVx0XHRubG1zZ19mcmVlKG1zZyk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNhbmNlbF9tc2c7XG4rXG4rXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4rXG4rXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuK1xuK2NhbmNlbF9tc2c6XG4rXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4rZnJlZV9tc2c6XG4rXHRubG1zZ19mcmVlKG1zZyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGRvaXRfcmVwbHlfdGhyZXNob2xkKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqZXJyb3JfbmFtZTtcbitcdHN0cnVjdCBza19idWZmICptc2c7XG4rXHRzdHJ1Y3QgbmxhdHRyICpoZHI7XG4rXHR1MzIgdGhyZXNob2xkO1xuK1x0aW50IHJldDtcbitcbitcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbXNnKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xuK1x0aWYgKCFoZHIpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIGZyZWVfbXNnO1xuIFx0fVxuIFxuK1x0cmV0ID0gZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCBcdTAwMjZlcnJvcl9uYW1lLCBcdTAwMjZ0aHJlc2hvbGQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuK1x0cmV0ID0gbXNnX3JlcGx5X3RocmVzaG9sZChtc2csIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB0aHJlc2hvbGQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuIFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuIFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbitcbitjYW5jZWxfbXNnOlxuK1x0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuK2ZyZWVfbXNnOlxuK1x0bmxtc2dfZnJlZShtc2cpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyoqXG5AQCAtMzU1LDYgKzQ2Niw1OSBAQCBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBub2RlLVx1MDAzZWNsZWFyX2Vycm9yX2NvdW50ZXIobm9kZSwgZXJyb3JfaWQpO1xuIH1cbiBcbisvKipcbisgKiBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpIC0gUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgY291bnRlclxuKyAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbisgKiBAaW5mbzogR2VuZXJpYyBOZXRsaW5rIGluZm8gY29udGFpbmluZyBhdHRyaWJ1dGVzIG9mIHRoZSByZXF1ZXN0XG4rICpcbisgKiBFeHRyYWN0cyB0aGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCByZXRyaWV2ZXNcbisgKiB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvdW50ZXIuIFNlbmRzIHRoZSByZXN1bHQgYmFjayB0b1xuKyAqIHRoZSByZXF1ZXN0aW5nIHVzZXIgdmlhIHRoZSBzdGFuZGFyZCBHZW5sIHJlcGx5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0dTMyIG5vZGVfaWQsIGVycm9yX2lkO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZWF0dHJzIHx8XG4rXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxuK1x0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcbitcdGVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xuK1xuK1x0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcbit9XG4rXG4rLyoqXG4rICogZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKSAtIFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyXG4rICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxuKyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3RcbisgKlxuKyAqIEV4dHJhY3RzIHRoZSBOb2RlIElELCBFcnJvciBJRCBhbmQgdGhyZXNob2xkIGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBhbmRcbisgKiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHUzMiBub2RlX2lkLCBlcnJvcl9pZCwgdGhyZXNob2xkO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZWF0dHJzIHx8XG4rXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxuK1x0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpIHx8XG4rXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcbitcdGVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xuK1x0dGhyZXNob2xkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTERdKTtcbitcbitcdHJldHVybiBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4rfVxuK1xuIC8qKlxuICAqIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYSBuZXcgUkFTIG5vZGVcbiAgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuaW5kZXggZGVhMWMxYjI0OTRlODEuLjAyZThlNTA1NGQwNTZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuQEAgLTI4LDYgKzI4LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2NsZWFyX2Vycm9yX2NvdW50ZXJfbmxfcG9saWN5W0RSTV9SQVNfQV9FXG4gXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4gfTtcbiBcbisvKiBEUk1fUkFTX0NNRF9HRVRfRVJST1JfVEhSRVNIT0xEIC0gZG8gKi9cbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19nZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCArIDFdID0ge1xuK1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4rXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4rfTtcbitcbisvKiBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xEIC0gZG8gKi9cbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19zZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQgKyAxXSA9IHtcbitcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuK1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuK1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbit9O1xuK1xuIC8qIE9wcyB0YWJsZSBmb3IgZHJtX3JhcyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdHtcbkBAIC01Niw2ICs2OSwyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XG4gXHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuIFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHRcdD0gRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCxcbitcdFx0LmRvaXRcdFx0PSBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCxcbitcdFx0LnBvbGljeVx0XHQ9IGRybV9yYXNfZ2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXG4rXHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuK1x0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4rXHR9LFxuK1x0e1xuK1x0XHQuY21kXHRcdD0gRFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCxcbitcdFx0LmRvaXRcdFx0PSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCxcbitcdFx0LnBvbGljeVx0XHQ9IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXG4rXHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCxcbitcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuK1x0fSxcbiB9O1xuIFxuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi41N2IxZTY0N2Q4MzMwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbkBAIC0yMCw2ICsyMCwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuK2ludCBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uNGFmYTJhZDk4MzAwZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5AQCAtODYsNiArODYsMzggQEAgc3RhdGljIGludCBjbGVhcl9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9cbiBcdHJldHVybiBjbGVhcl9lcnJvcl9jb3VudGVyKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkKTtcbiB9XG4gXG4rc3RhdGljIGludCBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCxcbitcdFx0XHRcdFx0ICAgICBjb25zdCBjaGFyICoqbmFtZSwgdTMyICp0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbitcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdO1xuK1xuK1x0aWYgKCFpbmZvIHx8ICFpbmZvW2Vycm9yX2lkXS5uYW1lKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGlmICgheGUtXHUwMDNlaW5mby5oYXNfc3lzY3RybClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Km5hbWUgPSBpbmZvW2Vycm9yX2lkXS5uYW1lO1xuK1x0cmV0dXJuIHhlX3Jhc19nZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xuK31cbitcbitzdGF0aWMgaW50IHNldF9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcbit7XG4rXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGVwLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuK1x0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy1cdTAwM2VpbmZvW0RSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRV07XG4rXG4rXHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4geGVfcmFzX3NldF90aHJlc2hvbGQoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICphbGxvY2F0ZV9hbmRfY29weV9jb3VudGVycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiB7XG4gXHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICpjb3VudGVyO1xuQEAgLTEzNCw2ICsxNjYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9ub2RlX3BhcmFtcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbiBcdGlmIChzZXZlcml0eSA9PSBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUpIHtcbiBcdFx0bm9kZS1cdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiBcdFx0bm9kZS1cdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbitcdFx0bm9kZS1cdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQgPSBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQ7XG4rXHRcdG5vZGUtXHUwMDNlc2V0X2Vycm9yX3RocmVzaG9sZCA9IHNldF9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRub2RlLVx1MDAzZXF1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV91bmNvcnJlY3RhYmxlX2Vycm9yX2NvdW50ZXI7XG4gXHRcdG5vZGUtXHUwMDNlY2xlYXJfZXJyb3JfY291bnRlciA9IGNsZWFyX3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IDQ0ZjRlMWEzNDU1YjdjLi5hZmVlODIwMmQyNGVmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5AQCAtMjcwLDYgKzI3MCwxMTEgQEAgaW50IHhlX3Jhc19jbGVhcl9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHhlX3Jhc19nZXRfdGhyZXNob2xkKCkgLSBHZXQgZXJyb3IgY291bnRlciB0aHJlc2hvbGRcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxuKyAqIEBzZXZlcml0eTogRXJyb3Igc2V2ZXJpdHkgdG8gYmUgcXVlcmllZCAoXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxuKyAqIEBjb21wb25lbnQ6IEVycm9yIGNvbXBvbmVudCB0byBiZSBxdWVyaWVkIChcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxuKyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlciBiYXNlZCBvblxuKyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XG4rXHRzdHJ1Y3QgeGVfcmFzX2dldF90aHJlc2hvbGRfcmVxdWVzdCByZXF1ZXN0ID0ge307XG4rXHRzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9O1xuK1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlcjtcbitcdHNpemVfdCBsZW47XG4rXHRpbnQgcmV0O1xuK1xuK1x0Y291bnRlciA9IFx1MDAyNnJlcXVlc3QuY291bnRlcjtcbitcdGNvdW50ZXItXHUwMDNlY29tbW9uLnNldmVyaXR5ID0gZHJtX3RvX3hlX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XG4rXHRjb3VudGVyLVx1MDAzZWNvbW1vbi5jb21wb25lbnQgPSBkcm1fdG9feGVfcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuK1xuK1x0eGVfc3lzY3RybF9jcmVhdGVfY29tbWFuZChcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQsXG4rXHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuK1xuK1x0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xuK1x0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXHUwMDI2eGUtXHUwMDNlc2MsIFx1MDAyNmNvbW1hbmQsIFx1MDAyNmxlbik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiBmYWlsZWQgdG8gZ2V0IHRocmVzaG9sZCAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGxlbiAhPSBzaXplb2YocmVzcG9uc2UpKSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiB1bmV4cGVjdGVkIGdldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcblwiLFxuK1x0XHQgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRjb3VudGVyID0gXHUwMDI2cmVzcG9uc2UuY291bnRlcjtcbitcdCp0aHJlc2hvbGQgPSByZXNwb25zZS50aHJlc2hvbGQ7XG4rXG4rXHR4ZV9kYmcoeGUsIFwiW1JBU106IGdldCB0aHJlc2hvbGQgJXUgZm9yICVzICVzXFxuXCIsICp0aHJlc2hvbGQsXG4rXHQgICAgICAgY29tcF90b19zdHIoY291bnRlci1cdTAwM2Vjb21tb24uY29tcG9uZW50KSwgc2V2X3RvX3N0cihjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHhlX3Jhc19zZXRfdGhyZXNob2xkKCkgLSBTZXQgZXJyb3IgY291bnRlciB0aHJlc2hvbGRcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxuKyAqIEBzZXZlcml0eTogRXJyb3Igc2V2ZXJpdHkgdG8gYmUgc2V0IChcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXG4rICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbisgKiBAdGhyZXNob2xkOiBDb3VudGVyIHRocmVzaG9sZFxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyIGJhc2VkIG9uXG4rICogc2V2ZXJpdHkgYW5kIGNvbXBvbmVudC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKVxuK3tcbitcdHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xuK1x0c3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xuK1x0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbitcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXI7XG4rXHRzaXplX3QgbGVuO1xuK1x0aW50IHJldDtcbitcbitcdGNvdW50ZXIgPSBcdTAwMjZyZXF1ZXN0LmNvdW50ZXI7XG4rXHRjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuK1x0Y291bnRlci1cdTAwM2Vjb21tb24uY29tcG9uZW50ID0gZHJtX3RvX3hlX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTtcbitcdHJlcXVlc3QudGhyZXNob2xkID0gdGhyZXNob2xkO1xuK1xuK1x0eGVfc3lzY3RybF9jcmVhdGVfY29tbWFuZChcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQsXG4rXHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuK1xuK1x0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xuK1x0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXHUwMDI2eGUtXHUwMDNlc2MsIFx1MDAyNmNvbW1hbmQsIFx1MDAyNmxlbik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiBmYWlsZWQgdG8gc2V0IHRocmVzaG9sZCAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGxlbiAhPSBzaXplb2YocmVzcG9uc2UpKSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiB1bmV4cGVjdGVkIHNldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcblwiLFxuK1x0XHQgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiBzZXQgdGhyZXNob2xkIGNvbW1hbmQgZmFpbGVkIHdpdGggc3RhdHVzICUjeFxcblwiLFxuK1x0XHQgICAgICAgcmVzcG9uc2Uuc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGNvdW50ZXIgPSBcdTAwMjZyZXNwb25zZS5jb3VudGVyO1xuK1xuK1x0eGVfZGJnKHhlLCBcIltSQVNdOiBzZXQgdGhyZXNob2xkICV1IGZvciAlcyAlc1xcblwiLCByZXNwb25zZS50aHJlc2hvbGQsXG4rXHQgICAgICAgY29tcF90b19zdHIoY291bnRlci1cdTAwM2Vjb21tb24uY29tcG9uZW50KSwgc2V2X3RvX3N0cihjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIHhlX3Jhc19pbml0IC0gSW5pdGlhbGl6ZSBYZSBSQVNcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxuaW5kZXggYmEwYjAyMjRkZjIzNjUuLjFhYTQzYzU0YjcxMGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmhcbkBAIC0xNSw2ICsxNSw4IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xuIGludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xuIGludCB4ZV9yYXNfY2xlYXJfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCk7XG4raW50IHhlX3Jhc19nZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgKnRocmVzaG9sZCk7XG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKTtcbiB2b2lkIHhlX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmhcbmluZGV4IDY2ODhlMTFmNTdhODYyLi43NDdiNjUxODgwY2Q1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oXG5AQCAtMTIxLDQgKzEyMSw1NSBAQCBzdHJ1Y3QgeGVfcmFzX2NsZWFyX2NvdW50ZXJfcmVzcG9uc2Uge1xuIFx0LyoqIEByZXNlcnZlZDE6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4gXHR1MzIgcmVzZXJ2ZWQxWzNdO1xuIH0gX19wYWNrZWQ7XG4rXG4rLyoqXG4rICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxuKyAqL1xuK3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHtcbitcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBnZXQgdGhyZXNob2xkIGZvciAqL1xuK1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyO1xuK1x0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdHUzMiByZXNlcnZlZDtcbit9IF9fcGFja2VkO1xuK1xuKy8qKlxuKyAqIHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxuKyAqL1xuK3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSB7XG4rXHQvKiogQGNvdW50ZXI6IENvdW50ZXIgSUQgKi9cbitcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbitcdC8qKiBAdGhyZXNob2xkOiBDdXJyZW50IHRocmVzaG9sZCBvZiB0aGUgY291bnRlciAqL1xuK1x0dTMyIHRocmVzaG9sZDtcbitcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4rXHR1MzIgcmVzZXJ2ZWRbNF07XG4rfSBfX3BhY2tlZDtcbitcbisvKipcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCAtIFJlcXVlc3Qgc3RydWN0dXJlIGZvciBzZXQgdGhyZXNob2xkXG4rICovXG4rc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3Qge1xuK1x0LyoqIEBjb3VudGVyOiBDb3VudGVyIHRvIHNldCB0aHJlc2hvbGQgZm9yICovXG4rXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XG4rXHQvKiogQHRocmVzaG9sZDogVGhyZXNob2xkIHRvIGJlIHNldCAqL1xuK1x0dTMyIHRocmVzaG9sZDtcbitcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4rXHR1MzIgcmVzZXJ2ZWQ7XG4rfSBfX3BhY2tlZDtcbitcbisvKipcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIHNldCB0aHJlc2hvbGRcbisgKi9cbitzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2Uge1xuK1x0LyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovXG4rXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XG4rXHQvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqL1xuK1x0dTMyIHJlc2VydmVkO1xuK1x0LyoqIEB0aHJlc2hvbGQ6IFVwZGF0ZWQgdGhyZXNob2xkICovXG4rXHR1MzIgdGhyZXNob2xkO1xuK1x0LyoqIEBzdGF0dXM6IE9wZXJhdGlvbiBzdGF0dXMgKi9cbitcdHUzMiBzdGF0dXM7XG4rXHQvKiogQHJlc2VydmVkMTogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdHUzMiByZXNlcnZlZDFbMl07XG4rfSBfX3BhY2tlZDtcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuaW5kZXggYjRkMTczMjlhZjZjOGQuLjA1NDdiN2IzOTcyNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuQEAgLTQ5LDE4ICs0OSw2IEBAIHN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jXG4gXHR9IHdoaWxlIChyZXNwb25zZS1cdTAwM2Vjb3VudCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV2ZW50X3JlcXVlc3RfcHJlcGFyZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgKmhlYWRlcixcbi1cdFx0XHRcdCAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCAqcmVxdWVzdClcbi17XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGUtXHUwMDNlZHJtLmRldik7XG4tXG4tXHRoZWFkZXItXHUwMDNlZGF0YSA9IFJFR19GSUVMRF9QUkVQKEFQUF9IRFJfR1JPVVBfSURfTUFTSywgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQKSB8XG4tXHRcdCAgICAgICBSRUdfRklFTERfUFJFUChBUFBfSERSX0NPTU1BTkRfTUFTSywgWEVfU1lTQ1RSTF9DTURfR0VUX1BFTkRJTkdfRVZFTlQpO1xuLVxuLVx0cmVxdWVzdC1cdTAwM2V2ZWN0b3IgPSB4ZV9kZXZpY2VfaGFzX21zaXgoeGUpID8gWEVfSVJRX0RFRkFVTFRfTVNJWCA6IDA7XG4tXHRyZXF1ZXN0LVx1MDAzZWZuID0gUENJX0ZVTkMocGRldi1cdTAwM2VkZXZmbik7XG4tfVxuLVxuIC8qKlxuICAqIHhlX3N5c2N0cmxfZXZlbnQoKSAtIEhhbmRsZXIgZm9yIFN5c3RlbSBDb250cm9sbGVyIGV2ZW50c1xuICAqIEBzYzogU3lzdGVtIENvbnRyb2xsZXIgaW5zdGFuY2VcbkBAIC03MiwxNiArNjAsMTYgQEAgdm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYylcbiBcdHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCBjb21tYW5kID0ge307XG4gXHRzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xuIFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCByZXF1ZXN0ID0ge307XG4tXHRzdHJ1Y3QgeGVfc3lzY3RybF9hcHBfbXNnX2hkciBoZWFkZXIgPSB7fTtcbitcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gc2NfdG9feGUoc2MpO1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHhlLVx1MDAzZWRybS5kZXYpO1xuK1xuK1x0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbi1cdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2VzcyhzY190b194ZShzYykpO1xuLVx0ZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgXHUwMDI2aGVhZGVyLCBcdTAwMjZyZXF1ZXN0KTtcbitcdHJlcXVlc3QudmVjdG9yID0geGVfZGV2aWNlX2hhc19tc2l4KHhlKSA/IFhFX0lSUV9ERUZBVUxUX01TSVggOiAwO1xuK1x0cmVxdWVzdC5mbiA9IFBDSV9GVU5DKHBkZXYtXHUwMDNlZGV2Zm4pO1xuIFxuLVx0Y29tbWFuZC5oZWFkZXIgPSBoZWFkZXI7XG4tXHRjb21tYW5kLmRhdGFfaW4gPSBcdTAwMjZyZXF1ZXN0O1xuLVx0Y29tbWFuZC5kYXRhX2luX2xlbiA9IHNpemVvZihyZXF1ZXN0KTtcbi1cdGNvbW1hbmQuZGF0YV9vdXQgPSBcdTAwMjZyZXNwb25zZTtcbi1cdGNvbW1hbmQuZGF0YV9vdXRfbGVuID0gc2l6ZW9mKHJlc3BvbnNlKTtcbitcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXHUwMDI2Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVCxcbitcdFx0XHRcdCAgXHUwMDI2cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCBcdTAwMjZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2c2MtXHUwMDNlZXZlbnRfbG9jayk7XG4gXHRnZXRfcGVuZGluZ19ldmVudChzYywgXHUwMDI2Y29tbWFuZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oXG5pbmRleCA2ZTM3NTM1NTQ1MTBhNS4uMTBmMDZhYTVjNGI1NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmhcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxuQEAgLTI0LDExICsyNCwxNSBAQCBlbnVtIHhlX3N5c2N0cmxfZ3JvdXAge1xuICAqXG4gICogQFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSOiBHZXQgZXJyb3IgY291bnRlciB2YWx1ZVxuICAqIEBYRV9TWVNDVFJMX0NNRF9DTEVBUl9DT1VOVEVSOiBDbGVhciBlcnJvciBjb3VudGVyIHZhbHVlXG4rICogQFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQ6IFJldHJpZXZlIGVycm9yIHRocmVzaG9sZFxuKyAqIEBYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEOiBTZXQgZXJyb3IgdGhyZXNob2xkXG4gICogQFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UOiBSZXRyaWV2ZSBwZW5kaW5nIGV2ZW50XG4gICovXG4gZW51bSB4ZV9zeXNjdHJsX2dmc3BfY21kIHtcbiBcdFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSXHRcdD0gMHgwMyxcbiBcdFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVJcdFx0PSAweDA0LFxuK1x0WEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRFx0XHQ9IDB4MDUsXG4rXHRYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEXHRcdD0gMHgwNixcbiBcdFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UXHQ9IDB4MDcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IGYyYTc4N2JjNGY2NGE5Li42ODNhMzg0NGY4NGY2MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuKysrIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtNjksNiArNjksMzQgQEAgc3RydWN0IGRybV9yYXNfbm9kZSB7XG4gXHQgKi9cbiBcdGludCAoKmNsZWFyX2Vycm9yX2NvdW50ZXIpKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCk7XG4gXG4rXHQvKipcbitcdCAqIEBxdWVyeV9lcnJvcl90aHJlc2hvbGQ6XG4rXHQgKlxuK1x0ICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGRybS1yYXMgdG8gcXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGFcbitcdCAqIHNwZWNpZmljIGNvdW50ZXIuXG4rXHQgKlxuK1x0ICogRHJpdmVyIHNob3VsZCBleHBlY3QgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGhcbitcdCAqIGVycm9yX2lkIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvXG4rXHQgKiBgZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0YC5cbitcdCAqXG4rXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbitcdCAqL1xuK1x0aW50ICgqcXVlcnlfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLFxuK1x0XHRcdFx0ICAgICB1MzIgKnRocmVzaG9sZCk7XG4rXHQvKipcbitcdCAqIEBzZXRfZXJyb3JfdGhyZXNob2xkOlxuK1x0ICpcbitcdCAqIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBieSBkcm0tcmFzIHRvIHNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpY1xuK1x0ICogY291bnRlci5cbitcdCAqXG4rXHQgKiBEcml2ZXIgc2hvdWxkIGV4cGVjdCBzZXRfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGggZXJyb3JfaWRcbitcdCAqIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvIGBlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3RgLlxuK1x0ICogRHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBlcnJvciB0aHJlc2hvbGQgYm91bmRzIGNoZWNraW5nLlxuK1x0ICpcbitcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuK1x0ICovXG4rXHRpbnQgKCpzZXRfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpO1xuK1xuIFx0LyoqIEBwcml2OiBEcml2ZXIgcHJpdmF0ZSBkYXRhICovXG4gXHR2b2lkICpwcml2O1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuaW5kZXggMjE4YTNlZTg2ODA1MjcuLjI3YzY4OTU2NDk1ZmI2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzMsNiArMzMsNyBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfTkFNRSxcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1ZBTFVFLFxuK1x0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xELFxuIFxuIFx0X19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVgsXG4gXHREUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggLSAxKVxuQEAgLTQyLDYgKzQzLDggQEAgZW51bSB7XG4gXHREUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSxcbiBcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxuIFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcbitcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsXG4rXHREUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xELFxuIFxuIFx0X19EUk1fUkFTX0NNRF9NQVgsXG4gXHREUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTc6MzguOTkxNzMwNjM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4ODM1MjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERSTSBSQVMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBuZXcgTmV0bGluayBjb21tYW5kcyB3aXRoaW4gdGhlIERSTSBSQVMgc3Vic3lzdGVtOiBgR0VUX0VSUk9SX1RIUkVTSE9MRGAgYW5kIGBTRVRfRVJST1JfVEhSRVNIT0xEYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIHNvbWUgY29uZmlndXJhYmlsaXR5IHRvIGVycm9yIGhhbmRsaW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmaWxlcywgcHJpbWFyaWx5IGZvY3VzZWQgb24gZG9jdW1lbnRhdGlvbiBhbmQgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhbG9uZyB3aXRoIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwncyBEUk0gZHJpdmVyLiBUaGlzIGlzIGV4cGVjdGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUgaW4gYGRybV9yYXMuY2AgYW5kIGBkcm1fcmFzX25sLmNgLCB3aXRoIHRoZSBgeGVgIGRyaXZlciBoYW5kbGluZyB0aGUgYWN0dWFsIGNhbGxiYWNrIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAuIFVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgY2xlYXJseSBkZXNpZ25lZCB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBmdXp6aW5nLiBDYW4gd2UgZnV6eiB0aGUgYHhlYCBkcml2ZXIgd2l0aCB0aGVzZSBuZXcgY29tbWFuZHM/IE15IGluaXRpYWwgdGhvdWdodCBpcywgb2YgY291cnNlLCB5ZXMsIGl0J3MgYSBEUk0gZHJpdmVyIGFuZCBJbnRlbCdzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uIGJ1dCB0aGVuIEkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB2aXJ0dWFsaXphdGlvbi4gRFJNIGRyaXZlcnMgZ2VuZXJhbGx5IGhhdmUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSW50ZWwgR1BVcy4gSG93ZXZlciwgdGhlIGBkcm1fcmFzYCBuZXRsaW5rIGludGVyZmFjZSBpcyBnZW5lcmljLiBBbnkgZHJpdmVyIHRoYXQgcmVnaXN0ZXJzIGEgUkFTIG5vZGUgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQgZm9yIGZ1enppbmcuIEl0IG1lYW5zIHdlIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgYWN0dWFsIEludGVsIGhhcmR3YXJlIHRvIHRlc3QgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGVzZSBuZXcgY29tbWFuZHMuXG5cblRoZSBuZXh0IHF1ZXN0aW9uOiBEb2VzIGEgdmlydHVhbCBkcml2ZXIsIGxpa2UgYHZrbXNgLCBvciBhbnkgb3RoZXIgdmlydHVhbCBkcml2ZXIsIHJlZ2lzdGVyIGEgUkFTIG5vZGU/IElmIGl0IGRvZXMsIHRoYXQgb3BlbnMgdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciBmdXp6aW5nIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0Li4uIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSdzIGEgdmlydHVhbCBSQVMgbm9kZSB0aGF0J3MgYmVpbmcgdXNlZCBieSBgdmttc2Agb3IgYW5vdGhlciB2aXJ0dWFsIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1Nzo0Ni4yODAwODUwODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5OTYzNzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fcmFzX25vZGVfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3Q9MzU9RHJpdmVycyBhcmUgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nIG5vZGVzIHZpYSB0aGVcXG5Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdDozNjpgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKClgIGFuZCBgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoKWAgQVBJcy5cXG5Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdC0zNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTItICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjUzOiAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01NC0gKiAgIGl0IGEgdW5pcXVlIElEIGluIHRoZSB4YXJyYXkuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jPTUwNT1pbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTIyLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6NTIzOiAqIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYSBuZXcgUkFTIG5vZGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTUyNC0gKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTMwLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6NTMxOmludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTUzMi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTU0Ni19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzo1NDc6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25vZGVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTQ4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTE9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMjAzLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MjA0OlxcdFxcdHJldCA9IGRybV9yYXNfbm9kZV9yZWdpc3Rlcihub2RlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIwNS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTEwND1zdHJ1Y3QgZHJtX2RldmljZTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMDYtI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjEwNzppbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMDgtdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTA5LSNlbHNlXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjExMDpzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMTEtc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1Nzo1MC4wNzk3Mjk4MzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI3MTk5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFJNIFJBUyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGRybV9yYXNgIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYHhlYCBkcml2ZXIgaXMgdGhlIG9ubHkgb25lIEknbSBzZWVpbmcgcmVnaXN0ZXIgYSBSQVMgbm9kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIGB4ZWAgaXRzZWxmIGNvdWxkIGJlIGEgdGFyZ2V0IGZvciBmdXp6aW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoZSB1c3VhbCBgeGVgIGRlcGVuZGVuY3kgb24gYSBwaHlzaWNhbCBJbnRlbCBHUFUuIEhtbW0uXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGxvb2tpbmcgY2xvc2VyLCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgZHJtX3Jhc2AsIGlzICpnZW5lcmljKi4gVGhhdCdzIHRoZSBrZXkuIFRoZSBhY3R1YWwgY29tbWFuZHMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgZHJtX3Jhc19ubF9mYW1pbHlgLiBBbmQgbG9vaywgd2UgaGF2ZSBgRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRGAgYW5kIGBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xEYCBoYW5kbGVkIGJ5IHRob3NlIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgZnVuY3Rpb25zLlxuXG5JbnRlcmVzdGluZy4gSSBxdWlja2x5IHNlZSB0aGV5IGNoZWNrIGZvciB0aGUgbm9kZSdzIGV4aXN0ZW5jZSB1c2luZyBhbiBgeGFfbG9hZGAgY2FsbDpcblxuYGBgY1xuXHRub2RlID0geGFfbG9hZChcdTAwMjZkcm1fcmFzX3hhLCBub2RlX2lkKTtcblx0aWYgKCFub2RlKVxuXHRcdHJldHVybiAtRU5PRU5UO1xuYGBgXG5cblNvLCBpZiBubyBub2RlcyBhcmUgcmVnaXN0ZXJlZCwgd2UncmUganVzdCBnb2luZyB0byBnZXQgYW4gYC1FTk9FTlRgIGVycm9yLiBCYXNpY2FsbHksIGEgbm8tb3AgaWYgdGhlcmUncyBub3RoaW5nIHRvIGFjdHVhbGx5IGNvbnRyb2wuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjay4gVGhpcyBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IGBkcm1fcmFzYCBpcyByZWdpc3RlcmVkICp3aGVuKiB0aGUgYGRybV9yYXNgIG1vZHVsZSBpcyBsb2FkZWQuIFRoYXQncyB0aGUgcmVhbCBlbnRyeSBwb2ludC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGFjdHVhbGx5IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU3OjU1LjQwNjkzMjY1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUxMDQ3MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmxfcmVnaXN0ZXJfZmFtaWx5Lipkcm1fcmFzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM9MTc9aW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMjItXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYzoyMzpcXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHkpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMjQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTc6NTguMDU3OTg1NzM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NzQzODY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIERSTSBSQVMgR0VOTCBGYW1pbHkgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEUk0gUkFTIEdlbmVyaWMgTmV0bGluayBmYW1pbHkgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSB3YW50IHRvIGZpbmQgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgdGhlIGBkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyYCBmdW5jdGlvbiBpcyBpbnZva2VkIGluIHRoZSBjb2RlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGVyZSBhbmQgd2hlbiB0aGlzIHBhcnRpY3VsYXIgTmV0bGluayBmYW1pbHkgaXMgYmVpbmcgYnJvdWdodCBvbmxpbmUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbGVycywgdGhlIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzIHRoYXQgc2V0IGl0IGFsbCBpbiBtb3Rpb24uIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgcHJvdmlkZSB0aGUgZXNzZW50aWFsIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0ga25vd3MgYWJvdXQgYW5kIGludGVyYWN0cyB3aXRoIHRoaXMgR2VuZXJpYyBOZXRsaW5rIGZhbWlseSBkZWRpY2F0ZWQgdG8gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5LCBhbmQgU2VydmljZWFiaWxpdHkpIGNvbmNlcm5zIHdpdGhpbiB0aGUgRFJNIChEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIEkgem9vbSBpbiBvbiBhbnkgc3BlY2lmaWMgZGV0YWlsLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjI3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MDIuMDA1NDI3Nzg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjgyNzEyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jPTEyNDA9c3RhdGljIGludCBfX2luaXQgZHJtX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY3LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmM6MTI2ODpcXHRyZXQgPSBkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyKCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY5LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYz0xMD1zdGF0aWMgYm9vbCByZWdpc3RlcmVkO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYy0xMi0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jOjEzOiAqIGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGRybS1yYXMgZ2VubCBmYW1pbHlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE0LSAqXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM6MTc6aW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE4LXtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC05LSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaDoxMDppbnQgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3Rlcih2b2lkKTtcXG5pbmNsdWRlL2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmgtMTEtdm9pZCBkcm1fcmFzX2dlbmxfZmFtaWx5X3VucmVnaXN0ZXIodm9pZCk7XFxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oLTEyLSNlbHNlXFxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oOjEzOnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC0xNC1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19nZW5sX2ZhbWlseV91bnJlZ2lzdGVyKHZvaWQpIHsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1ODowNC4xMzM3MDM2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDgwNDg5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERSTSBSQVMgTmV0bGluayBGYW1pbHkqKlxuXG5Pa2F5LCBzbyBgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcmAgaXMgaW52b2tlZCBkdXJpbmcgYGRybV9jb3JlX2luaXRgLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhlIE5ldGxpbmsgZmFtaWx5IGZvciBSQVMgaXMgYWx3YXlzIHJlZ2lzdGVyZWQgYXMgbG9uZyBhcyBgQ09ORklHX0RSTV9SQVNgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoYXQncyBnb29kOyBpdCBlc3RhYmxpc2hlcyB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsLiBVc2VyIHNwYWNlIGNhbiB0aGVuIGludGVyYWN0IHdpdGggdGhpcyB0aHJvdWdoIE5ldGxpbmsgY29tbWFuZHMgbGlrZSBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbkJ1dCBoZXJlJ3MgYSB3cmlua2xlOiB0aGVzZSBjb21tYW5kcyB3aWxsIGp1c3QgcmV0dXJuIGAtRU5PRU5UYCBpZiBubyBSQVMgbm9kZXMgYXJlIGFjdHVhbGx5IHJlZ2lzdGVyZWQuIE15IG5leHQgdGhvdWdodCBpcywgYXJlIHRoZXJlIG90aGVyIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVzZSBSQVMgbm9kZXMgYmVzaWRlcyBgeGVgPyBUaGUgYW5zd2VyIHNlZW1zIHRvIGJlIG5vLCBqdXN0IHRoZSBgeGVgIGRyaXZlci4gVGhpcyByYWlzZXMgYW5vdGhlciBxdWVzdGlvbiwgY2FuIHRoZSBgeGVgIGRyaXZlciBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBpdCB0eXBpY2FsbHkgcmVsaWVzIG9uIHNwZWNpZmljIFBDSSBJRHMuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZSBgeGVgIGRyaXZlciBpbmNsdWRlcyBhbnkgbW9jayBvciB2aXJ0dWFsIGRldmljZSBzdXBwb3J0LiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50IGZvciBhIHN5c3RlbSB0aGF0J3Mgc3VwcG9zZWQgdG8gYmUgdmlydHVhbGl6ZWQsIG9yIHRoYXQgbWlnaHQgbm90IGhhdmUgdGhlIGhhcmR3YXJlIElEIGV4cGVjdGVkIGJ5IHhlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgZnVuY3Rpb25hbGl0eSBleHRlbmRzIHBhc3QgdGhlIGluaXRpYWwgUENJIHByb2JlLCB0byBlbnN1cmUgdGhlIFJBUyBpbnRlcmZhY2UgYWN0dWFsbHkgd29ya3MgYXMgaW50ZW5kZWQsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24ndCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MTEuOTQxNzU3MTY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1MjE0MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX3BjaV9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NDg3PXN0cnVjdCB4ZV9kZXZpY2UgKnhlX2RldmljZV9jcmVhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtNTE1LX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6NTE2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfY3JlYXRlLCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYy01MTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NzczPWludCB4ZV9kZXZpY2VfcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtODMyLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6ODMzOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTgzNC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmM9MzkxPWludCB4ZV9nZ3R0X2luaXRfZWFybHkoc3RydWN0IHhlX2dndHQgKmdndHQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTQ0OS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYzo0NTA6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2dndHRfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTQ1MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmM9MzkwPWludCB4ZV9ndWNfYWRzX2luaXQoc3RydWN0IHhlX2d1Y19hZHMgKmFkcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmMtNDEzLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jOjQxNDpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2Fkc19pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmMtNDE1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTMyMj1pbnQgeGVfZ3VjX2N0X2luaXRfbm9hbGxvYyhzdHJ1Y3QgeGVfZ3VjX2N0ICpjdClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0zNTctfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzozNTg6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19jdF9pbml0X25vYWxsb2MsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTM1OS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYz0zNjg9aW50IHhlX2d1Y19jdF9pbml0KHN0cnVjdCB4ZV9ndWNfY3QgKmN0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTM5Ni19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjM5NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2N0X2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTM5OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM9NjI0PWludCB4ZV9ndWNfbG9nX2luaXQoc3RydWN0IHhlX2d1Y19sb2cgKmxvZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmMtNjQ0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM6NjQ1OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9ndWNfbG9nX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19sb2cuYy02NDYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmM9MzQyPWludCB4ZV9ndWNfcmVsYXlfaW5pdChzdHJ1Y3QgeGVfZ3VjX3JlbGF5ICpyZWxheSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy0zNzAtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYzozNzE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19yZWxheV9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy0zNzItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmM9NTc5PXN0YXRpYyBpbnQgeGVfYWRkX2h3X2VuZ2luZV9jbGFzc19kZWZhdWx0cyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdpbmVfY2xhc3Nfc3lzZnMuYy02MDMtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdpbmVfY2xhc3Nfc3lzZnMuYzo2MDQ6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2FkZF9od19lbmdpbmVfY2xhc3NfZGVmYXVsdHMsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2VuZ2luZV9jbGFzc19zeXNmcy5jLTYwNS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvLmM9ODk9aW50IHhlX21taW9fcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pby5jLTExMC19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYzoxMTE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX21taW9fcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYy0xMTItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTA0Mz1zdGF0aWMgdm9pZCB4ZV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNjAtICogRmF1bHQgaW5qZWN0aW9uIGlzIHVzZWQgdG8gdGVzdCB0aGUgZXJyb3IgcGF0aHMgb2Ygc29tZSBpbml0aWFsaXphdGlvblxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYxOiAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2Mi0gKiBleGFtcGxlIHRocm91Z2ggeGVfZGV2aWNlX3Byb2JlKCkuIFRob3NlIGZ1bmN0aW9ucyB1c2UgdGhlIGtlcm5lbCBmYXVsdFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzUtICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEwNzY6c3RhdGljIGludCB4ZV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzcte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTEzNDc9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHhlX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM0OS1cXHQuaWRfdGFibGUgPSBwY2lpZGxpc3QsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEzNTA6XFx0LnByb2JlID0geGVfcGNpX3Byb2JlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMzUxLVxcdC5yZW1vdmUgPSB4ZV9wY2lfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmM9MzQ4PWludCB4ZV9wY29kZV9wcm9iZV9lYXJseShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTM1MS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmM6MzUyOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9wY29kZV9wcm9iZV9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYz0zNjI9aW50IHhlX3BtX2luaXRfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYy0zODQtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jOjM4NTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfcG1faW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYy0zODYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYz0xMDc9aW50IHhlX3NyaW92X2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy0xMjgtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jOjEyOTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfc3Jpb3ZfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy0xMzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jPTE0OT1pbnQgeGVfdGlsZV9pbml0X2Vhcmx5KHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jLTE2NS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYzoxNjY6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3RpbGVfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jLTE2Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90dW5pbmcuYz0xODM9aW50IHhlX3R1bmluZ19pbml0KHN0cnVjdCB4ZV9ndCAqZ3QpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmMtMjA1LX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmM6MjA2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV90dW5pbmdfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmMtMjA3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmM9ODM2PWludCB4ZV91Y19md19pbml0KHN0cnVjdCB4ZV91Y19mdyAqdWNfZncpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYy04NTYtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jOjg1NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfdWNfZndfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYy04NTgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYz05NDA9aW50IHhlX3dhX2d0X2luaXQoc3RydWN0IHhlX2d0ICpndClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93YS5jLTk2NS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmM6OTY2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV93YV9ndF9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93YS5jLTk2Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jPTIwNT1pbnQgeGVfd29wY21faW5pdChzdHJ1Y3QgeGVfd29wY20gKndvcGNtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dvcGNtLmMtMjgxLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYzoyODI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3dvcGNtX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU4OjE0LjIzNjk4MTMwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ1MzAwNzUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgR2VuZXJpYyBOZXRsaW5rIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHhlYCBkcml2ZXIsIGFuZCBpdCBzZWVtcyB0byBuZWVkIGEgcGh5c2ljYWwgUENJIGRldmljZS4gVGhlIGlzc3VlIGlzIEknbSBub3Qgc2VlaW5nIHRoYXQgdGhlIFJBUyBub2RlIGlzIHJlZ2lzdGVyZWQgd2l0aG91dCB0aGUgYHhlYCBkcml2ZXIuIElmIHRoZSBgeGVgIGRyaXZlciBpc24ndCBwcm9iZWQsIHRoZW4gbm8gUkFTIG5vZGUgZ2V0cyByZWdpc3RlcmVkLiBUaGF0IG1lYW5zIHRoZSBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGZ1bmN0aW9ucyB3aWxsIGp1c3QgcmV0dXJuIGAtRU5PRU5UYC4gSSB3YXMgaW5pdGlhbGx5IHF1ZXN0aW9uaW5nIHdoZXRoZXIgdGhpcyB3YXMgZXZlbiB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiBJIHJlYWxpemVkIHNvbWV0aGluZy4uLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIC0gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBkcm1fcmFzX25vZGVfcmVnaXN0ZXJgIGFuZCBpdCBsb29rcyBsaWtlIG9ubHkgdGhlIGB4ZWAgZHJpdmVyIHVzZXMgaXQuIEJ1dCB3YWl0LCBldmVuIHRob3VnaCB0aGUgc3BlY2lmaWMgUkFTIG5vZGUgaXNuJ3QgcmVnaXN0ZXJlZCwgdGhlICpnZW5lcmljKiBuZXRsaW5rIGludGVyZmFjZSBpdHNlbGYgKmlzKiBzdGlsbCByZWFjaGFibGUuIFRoZSBmdW5jdGlvbnMgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhbmQgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhcmUgdGhlcmUsIHBhcnNpbmcgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCBjYWxsaW5nIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIGFuZCBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYC5cblxuSSBjYW4gc2VlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBjb2RlIEknbSBsb29raW5nIGF0OlxuYGBgY1xuaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG57XG5cdHUzMiBub2RlX2lkLCBlcnJvcl9pZDtcblxuXHRpZiAoIWluZm8tXHUwMDNlYXR0cnMgfHxcblx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRCkgfHxcblx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuXG5cdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcblx0ZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSk7XG5cblx0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcbn1cbmBgYFxuQW5kIGhvdyBgZG9pdF9yZXBseV90aHJlc2hvbGRgIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCByZXR1cm5zIGAtRU5PRU5UYDpcbmBgYGNcbnN0YXRpYyBpbnQgZG9pdF9yZXBseV90aHJlc2hvbGQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZClcbntcbi4uLlxuXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XG5cdGlmICghbXNnKVxuXHRcdHJldHVybiAtRU5PTUVNO1xuXG5cdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xuXHRpZiAoIWhkcikge1xuXHRcdHJldCA9IC1FTVNHU0laRTtcblx0XHRnb3RvIGZyZWVfbXNnO1xuXHR9XG5cblx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCBcdTAwMjZlcnJvcl9uYW1lLCBcdTAwMjZ0aHJlc2hvbGQpO1xuXHRpZiAocmV0KVxuXHRcdGdvdG8gY2FuY2VsX21zZztcbi4uLlxuY2FuY2VsX21zZzpcblx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuZnJlZV9tc2c6XG5cdG5sbXNnX2ZyZWUobXNnKTtcblx0cmV0dXJuIHJldDtcbn1cbmBgYFxuT2theSwgc28gdGhpcyBsb2dpYyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGV2ZW4gd2l0aG91dCBhbnkgbm9kZXMgcmVnaXN0ZXJlZC4gVGhlIGB4ZWAgc3BlY2lmaWMgY29kZSAoIGB4ZV9yYXMuY2AgLCBgeGVfZHJtX3Jhcy5jYCkgaXMgdW5yZWFjaGFibGUsIGJ1dCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGNvZGUgaXMgZ29vZC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgbmV3IG5ldGxpbmsgQVBJLCBJIHRoaW5rIGl0J3Mgd29ydGggdGhlIHRpbWUgdG8gZnV6eiBpdCwgYW5kIEkgc2hvdWxkIHNlZSBpZiBgQ09ORklHX0RSTV9SQVNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMjQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MjQuNjg5OTkxNjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDYzNjg4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERSTV9SQVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL0tjb25maWc9MTIzPWNvbmZpZyBEUk1fUEFOSUNfU0NSRUVOX1FSX1ZFUlNJT05cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTEzMi1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxMzM6Y29uZmlnIERSTV9SQVNcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMzQtXFx0Ym9vbCBcXFwiRFJNIFJBUyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1ODoyNi43MzYzNjY1MTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNDEwMTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIHRoZSBEUk1fUkFTIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIGBEUk1fUkFTYC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgbW9kdWxlcywgZHJpdmVycywgYW5kIG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCwgaW4gdHVybiwgbWF5IGJlIHJlbGlhbnQgb24gKml0Ki4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3Rpbmcgb3V0IHRoZSBgI2luY2x1ZGVgIHN0YXRlbWVudHMsIGJ1dCByZWFsbHkgKnVuZGVyc3RhbmRpbmcqIHRoZSBpbXBhY3Qgb2YgZWFjaCBjb25uZWN0aW9uLiBGb3IgaW5zdGFuY2UsIGlzIGBEUk1fUkFTYCBhIGNvcmUgY29tcG9uZW50LCBvciBkb2VzIGl0IHNpdCBvbiB0b3Agb2Ygb3RoZXJzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBvZiB0aWdodCBjb3VwbGluZyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3N0IGltcG9ydGFudGx5OiBhcmUgdGhlcmUgYW55IGltcGxpY2l0IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3I/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIG1heWJlIHVzaW5nIHNvbWUgc3BlY2lmaWMgZmlsdGVyaW5nIHRvIGtlZXAgdGhlIHNpZ25hbC10by1ub2lzZSByYXRpbyBoaWdoLiBBZnRlciB0aGF0LCBJJ2xsIG5lZWQgdG8gcmVhbGx5IGFuYWx5emUgdGhlIGFyY2hpdGVjdHVyZSB0byBwdXQgaXQgYWxsIGluIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MzIuNTcwNDcyNTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzM6XFx0Y29uZmlnIERSTV9SQVNcXG4gMTM0OlxcdFxcdGJvb2wgXFxcIkRSTSBSQVMgc3VwcG9ydFxcXCJcXG4gMTM1OlxcdFxcdGRlcGVuZHMgb24gRFJNXFxuIDEzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAxMzc6XFx0XFx0aGVscFxcbiAxMzg6XFx0XFx0ICBFbmFibGVzIHRoZSBEUk0gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5IGFuZCBTZXJ2aWNlYWJpbGl0eSlcXG4gMTM5OlxcdFxcdCAgc3VwcG9ydCBmb3IgRFJNIGRyaXZlcnMuIFRoaXMgcHJvdmlkZXMgYSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlXFxuIDE0MDpcXHRcXHQgIGZvciBlcnJvciByZXBvcnRpbmcgYW5kIHF1ZXJpZXMuXFxuIDE0MTpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgXFxcIk5cXFwiLlxcbiAxNDI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU4OjMyLjU3MDU4OTUwNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQwNjU5MjMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEUk1fUkFTIGZvciBGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBgRFJNX1JBU2AgY29kZS4gSXQgaGluZ2VzIG9uIGBEUk1gIGFuZCBgTkVUYCwgYW5kIGl0IHByb3ZpZGVzIGEgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZS4gSSBrbm93IHRoaXMgaW50ZXJmYWNlIGlzIHJlYWNoYWJsZSwgc28gdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhbmQgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAsIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCBhbmQgYHNldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYXMgd2VsbDsgdGhleSdyZSBpbnRlcnR3aW5lZC4gSSdtIGRpc2NhcmRpbmcgdGhlIGB4ZWAgZHJpdmVyIGZ1bmN0aW9ucyAoYHhlX3Jhc19nZXRfdGhyZXNob2xkYCwgYHhlX3Jhc19zZXRfdGhyZXNob2xkYCkgc2luY2UgdGhleSByZXF1aXJlIGhhcmR3YXJlIGFuZCBhcmUgdGh1cyBub3QgcmVhY2hhYmxlIGluIGEgZ2VuZXJhbCBmdXp6aW5nIGNvbnRleHQuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYERSTV9SQVNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgaXQgbG9va3MgbGlrZSBpdCdzIG5vdCDigJMgXCJJZiBpbiBkb3VidCwgc2F5IE5cIi4gU28sIEknbGwgbmVlZCB0byBhZGQgYERSTV9SQVNgIHRvIGBFbmFibGVDb25maWdzYCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBsb29rIGZvciBtb3JlLiBgbXNnX3JlcGx5X3RocmVzaG9sZGAgaXMgYWxzbyBhZGRlZC4gSXQncyBvbmx5IGNhbGxlZCBpZiBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCBzdWNjZWVkcywgd2hpY2ggbmVlZHMgYSByZWdpc3RlcmVkIG5vZGUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBoYXJkd2FyZS4gSG93ZXZlciwgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhY3R1YWxseSBjYWxscyBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCwgd2hpY2ggKnJldHVybnMqIGAtRU5PRU5UYCBpZiBubyBub2RlIGlzIHJlZ2lzdGVyZWQuIFNvLCBldmVuIHRob3VnaCBpdCByZXR1cm5zIGFuIGVycm9yLCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgICppcyogcmVhY2hhYmxlLlxuXG5MZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHVzYWdlcyBvZiBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgLiBJdCdzIHJlZ2lzdGVyZWQgaW4gYGRybV9yYXNfbmxfb3BzYC4gVGhhdCBjb25maXJtcyB0aGF0IHRoZSBuZXRsaW5rIHBhcnNpbmcsIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAsIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAsIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAsIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCBhbmQgYHNldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYXJlIGFsbCByZWFjaGFibGUuXG5cbkV2ZW4gdGhvdWdoIG1hbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGAtRU5PRU5UYCBvciBzaW1pbGFyIGluIHRoZSBhYnNlbmNlIG9mIHJlZ2lzdGVyZWQgaGFyZHdhcmUgb3IgdmFsaWQgaW5wdXRzLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHRoZSBhdHRyaWJ1dGUgdmFsaWRhdGlvbiwgYW5kIHRoZSBpbml0aWFsIGxvZ2ljIG9mIHRoZSBgZG9pdGAgaGFuZGxlcnMgKmFyZSogZXhlY3V0ZWQuIFNvLCBpdCdzIHdvcnRoIGZ1enppbmchXG5cblNwZWNpZmljYWxseSwgYGRvaXRfcmVwbHlfdGhyZXNob2xkYCBpcyBhbiBpbnRlcmVzdGluZyBwb2ludC4gSXQgYWxsb2NhdGVzIGEgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhlbiBjYW5jZWxzIGl0IGlmIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIGZhaWxzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGJ1dCBpdCdzIGEgcGxhY2Ugd2hlcmUgbWVtb3J5IGxlYWtzIG9yIG90aGVyIGlzc3VlcyBjb3VsZCBhcmlzZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB1cCB0byBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCByZXR1cm5pbmcgYC1FTk9FTlRgLCB0aGVuIGBjYW5jZWxfbXNnYCBhbmQgYGZyZWVfbXNnYCBhcmUgZXhlY3V0ZWQuXG5cblRoZXJlZm9yZSwgSSdsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgZm9jdXMgb246XG4qICAgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YFxuKiAgIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGBcbiogICBgZG9pdF9yZXBseV90aHJlc2hvbGRgXG4qICAgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGBcbiogICBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYFxuXG5UaGUgcmVxdWlyZWQgY29uZmlnIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYERSTV9SQVNgLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBgeGVgIGRyaXZlciwgYW5kLCBhcyBleHBlY3RlZCwgdGhlcmUncyBubyB3YXkgdG8gbW9jayBpdC4gVGhlIGB4ZWAgZHJpdmVyIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIG1lYW5pbmcgYHhlX3Jhc19nZXRfdGhyZXNob2xkYCBhbmQgYHhlX3Jhc19zZXRfdGhyZXNob2xkYCBhcmUgdW5yZWFjaGFibGUgaW4gYSBub24taGFyZHdhcmUgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzcxLCJPdXRwdXRUb2tlbnMiOjE5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1ODo0OC45NzcxODUwMjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc0NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 10:46:46 +0000 UTC FinishedAt: 2026-06-23 10:58:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "948efecf22e49aa4bf55bb73ec79a0ddcfd38571", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DRM_RAS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "948efecf22e49aa4bf55bb73ec79a0ddcfd38571", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DRM_RAS" ], "series_id": "185c64cf-4077-4eb3-bf74-ea82ed09b722" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "drm_ras_nl_get_error_threshold_doit", "drm_ras_nl_set_error_threshold_doit", "doit_reply_threshold", "get_node_error_threshold", "set_node_error_threshold" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RSTV9SQVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkb2l0X3JlcGx5X3RocmVzaG9sZCYjMzQ7LAogICAgJiMzNDtnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7c2V0X25vZGVfZXJyb3JfdGhyZXNob2xkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kcyAoR0VUX0VSUk9SX1RIUkVTSE9MRCBhbmQgU0VUX0VSUk9SX1RIUkVTSE9MRCkgdG8gdGhlIERSTSBSQVMgc3Vic3lzdGVtLiBXaGlsZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhlIGB4ZWAgZHJpdmVyIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgR1BVcywgdGhlIGdlbmVyaWMgbmV0bGluayBwYXJzaW5nLCBtZXNzYWdlIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsIHZhbGlkYXRpb24gbG9naWMgaW4gYGRybV9yYXMuY2AgYXJlIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgYXR0cmlidXRlIHZhbGlkYXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDEwOjU3OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYwLi4yNzE4ZjhhZWUwOWRkNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuQEAgLTU2LDYgJiM0Mzs1NiwxMCBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiYjNDM7KiBRdWVyeSBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYGdldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZyBib3RoXG4mIzQzOyAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuJiM0MzsqIFNldCBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYHNldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZ1xuJiM0MzsgIGBgbm9kZS1pZGBgLCBgYGVycm9yLWlkYGAgYW5kIGBgZXJyb3ItdGhyZXNob2xkYGAgYXMgcGFyYW1ldGVycy5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgJiM0MzsxMTUsMTcgQEAgRXhhbXBsZTogQ2xlYXIgYW4gZXJyb3IgY291bnRlciBmb3IgYSBnaXZlbiBub2RlXG4gXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAmIzM5O3tcJiMzNDtub2RlLWlkXCYjMzQ7OjAsIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OjF9JiMzOTtcbiAgICAgTm9uZVxuJiM0MztcbiYjNDM7RXhhbXBsZTogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlclxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2hcbiYjNDM7XG4mIzQzOyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gZ2V0LWVycm9yLXRocmVzaG9sZCAtLWpzb24gJiMzOTt7XCYjMzQ7bm9kZS1pZFwmIzM0OzowLCBcJiMzNDtlcnJvci1pZFwmIzM0OzoxfSYjMzk7XG4mIzQzOyAgICB7JiMzOTtlcnJvci1pZCYjMzk7OiAxLCAmIzM5O2Vycm9yLW5hbWUmIzM5OzogJiMzOTtlcnJvcl9uYW1lMSYjMzk7LCAmIzM5O2Vycm9yLXRocmVzaG9sZCYjMzk7OiAxNn1cbiYjNDM7XG4mIzQzO0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyXG4mIzQzO1xuJiM0MzsuLiBjb2RlLWJsb2NrOjogYmFzaFxuJiM0MztcbiYjNDM7ICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBzZXQtZXJyb3ItdGhyZXNob2xkIC0tanNvbiAmIzM5O3tcJiMzNDtub2RlLWlkXCYjMzQ7OjAsIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OjEsIFwmIzM0O2Vycm9yLXRocmVzaG9sZFwmIzM0Ozo4fSYjMzk7XG4mIzQzOyAgICBOb25lXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi45Y2Y3ZjljZGUyNDI1MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbkBAIC02OSw2ICYjNDM7NjksMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdGhyZXNob2xkXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBFcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgJiM0MzsxMjgsMzEgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBnZXQtZXJyb3ItdGhyZXNob2xkXG4mIzQzOyAgICAgIGRvYzogXHUwMDNlLVxuJiM0MzsgICAgICAgICAgIFJldHJpZXZlIGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXG4mIzQzOyAgICAgICAgICAgVGhlIHJlc3BvbnNlIGluY2x1ZGVzIHRoZSBpZCwgdGhlIG5hbWUsIGFuZCBjdXJyZW50IHRocmVzaG9sZFxuJiM0MzsgICAgICAgICAgIG9mIHRoZSBjb3VudGVyLlxuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzXG4mIzQzOyAgICAgIGZsYWdzOiBbYWRtaW4tcGVybV1cbiYjNDM7ICAgICAgZG86XG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuJiM0MzsgICAgICAgIHJlcGx5OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1pZFxuJiM0MzsgICAgICAgICAgICAtIGVycm9yLW5hbWVcbiYjNDM7ICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogc2V0LWVycm9yLXRocmVzaG9sZFxuJiM0MzsgICAgICBkb2M6IFx1MDAzZS1cbiYjNDM7ICAgICAgICAgICBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItY291bnRlci1hdHRyc1xuJiM0MzsgICAgICBmbGFnczogW2FkbWluLXBlcm1dXG4mIzQzOyAgICAgIGRvOlxuJiM0MzsgICAgICAgIHJlcXVlc3Q6XG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIG5vZGUtaWRcbiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1pZFxuJiM0MzsgICAgICAgICAgICAtIGVycm9yLXRocmVzaG9sZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uZDYwYzQwYWM1NDI3YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5AQCAtNDEsNiAmIzQzOzQxLDEzIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4mIzQzOyAqIDQuIEdFVF9FUlJPUl9USFJFU0hPTEQ6IFF1ZXJ5IGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXG4mIzQzOyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQuXG4mIzQzOyAqICAgIFJldHVybnMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIDUuIFNFVF9FUlJPUl9USFJFU0hPTEQ6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLlxuJiM0MzsgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgdG8gYmUgc2V0LlxuJiM0MzsgKlxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxuICAqXG4gICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcbkBAIC02MSw2ICYjNDM7NjgsMTYgQEBcbiAgKiAgICAgJiM0MzsgVGhlIGVycm9yIGNvdW50ZXJzIGluIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgbmVlZCB0byBiZSBjb250aWd1b3VzLCBidXQgdGhlXG4gICogICAgICAgZHJpdmVyIG11c3QgcmV0dXJuIC1FTk9FTlQgdG8gdGhlIHF1ZXJ5X2Vycm9yX2NvdW50ZXIgYXMgYW4gaW5kaWNhdGlvblxuICAqICAgICAgIHRoYXQgdGhlIElEIHNob3VsZCBiZSBza2lwcGVkIGFuZCBub3QgbGlzdGVkIGluIHRoZSBuZXRsaW5rIEFQSS5cbiYjNDM7ICogICAgICYjNDM7IFRoZSBkcml2ZXIgY2FuIG9wdGlvbmFsbHkgaW1wbGVtZW50IHF1ZXJ5X2Vycm9yX3RocmVzaG9sZCgpIGFuZFxuJiM0MzsgKiAgICAgICBzZXRfZXJyb3JfdGhyZXNob2xkKCkgY2FsbGJhY2tzIHRvIGZhY2lsaXRhdGUgZ2V0dGluZy9zZXR0aW5nIGVycm9yXG4mIzQzOyAqICAgICAgIHRocmVzaG9sZCBvZiB0aGUgY291bnRlci4gVGhyZXNob2xkIGluIFJBUyBjb250ZXh0IG1lYW5zIHRoZSBudW1iZXIgb2ZcbiYjNDM7ICogICAgICAgZXJyb3JzIHRoZSBoYXJkd2FyZSBpcyBleHBlY3RlZCB0byBhY2N1bXVsYXRlIGJlZm9yZSBpdCByYWlzZXMgdGhlbSB0b1xuJiM0MzsgKiAgICAgICBzb2Z0d2FyZS4gVGhpcyBpcyB0byBoYXZlIGEgZmluZSBncmFpbmVkIGNvbnRyb2wgb3ZlciBlcnJvciBub3RpZmljYXRpb25zXG4mIzQzOyAqICAgICAgIHRoYXQgYXJlIHJhaXNlZCBieSB0aGUgaGFyZHdhcmUuXG4mIzQzOyAqICAgICAmIzQzOyBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBlcnJvciB0aHJlc2hvbGQgYm91bmRzIGNoZWNraW5nLlxuJiM0MzsgKiAgICAgJiM0MzsgVGhyZXNob2xkIG9mIDAgY2FuIG1lYW4gaW52YWxpZCB0aHJlc2hvbGQgb3IgYWN0IGFzIGEgZGlzYWJsZSBub3RpZmljYXRpb25zXG4mIzQzOyAqICAgICAgIHRvZ2dsZSBmb3IgdGhhdCBjb3VudGVyIGRlcGVuZGluZyBvbiB1c2VjYXNlIGFuZCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlXG4mIzQzOyAqICAgICAgIGZvciBoYW5kbGluZyBpdCBhcyBuZWVkZWQuXG4gICpcbiAgKiBOZXRsaW5rIGhhbmRsZXJzOlxuICAqXG5AQCAtNzIsNiAmIzQzOzg5LDEwIEBAXG4gICogICBvcGVyYXRpb24sIGZldGNoaW5nIGEgY291bnRlciB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgbm9kZS5cbiAgKiAtIGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KCk6IEltcGxlbWVudHMgdGhlIENMRUFSX0VSUk9SX0NPVU5URVIgZG9pdFxuICAqICAgb3BlcmF0aW9uLCBjbGVhcmluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXG4mIzQzOyAqIC0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgR0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0XG4mIzQzOyAqICAgb3BlcmF0aW9uLCBmZXRjaGluZyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cbiYjNDM7ICogLSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBTRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcbiYjNDM7ICogICBvcGVyYXRpb24sIHNldHRpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4gICovXG4gXG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoZHJtX3Jhc194YSk7XG5AQCAtMTY4LDYgJiM0MzsxODksNDAgQEAgc3RhdGljIGludCBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsXG4gXHRyZXR1cm4gbm9kZS1cdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkLCBuYW1lLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZCh1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICoqbmFtZSwgdTMyICp0aHJlc2hvbGQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xuJiM0MztcbiYjNDM7XHRub2RlID0geGFfbG9hZChcdTAwMjZkcm1fcmFzX3hhLCBub2RlX2lkKTtcbiYjNDM7XHRpZiAoIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlLVx1MDAzZXF1ZXJ5X2Vycm9yX3RocmVzaG9sZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycm9yX2lkIFx1MDAzYyBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwgZXJyb3JfaWQgXHUwMDNlIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlLVx1MDAzZXF1ZXJ5X2Vycm9yX3RocmVzaG9sZChub2RlLCBlcnJvcl9pZCwgbmFtZSwgdGhyZXNob2xkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSB4YV9sb2FkKFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xuJiM0MztcdGlmICghbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUtXHUwMDNlc2V0X2Vycm9yX3RocmVzaG9sZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycm9yX2lkIFx1MDAzYyBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwgZXJyb3JfaWQgXHUwMDNlIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlLVx1MDAzZXNldF9lcnJvcl90aHJlc2hvbGQobm9kZSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcbiB7XG5AQCAtMTg2LDYgJiM0MzsyNDEsMjIgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXNnX3JlcGx5X3RocmVzaG9sZChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgdGhyZXNob2xkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0XHRcdCAgICB1MzIgZXJyb3JfaWQpXG4ge1xuQEAgLTIwMSwyNSAmIzQzOzI3Miw2NSBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXG4gXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBpbmZvKTtcbiBcdGlmICghaGRyKSB7XG4tXHRcdG5sbXNnX2ZyZWUobXNnKTtcbi1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHRcdHJldCA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9tc2c7XG4gXHR9XG4gXG4gXHRyZXQgPSBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKG5vZGVfaWQsIGVycm9yX2lkLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZlcnJvcl9uYW1lLCBcdTAwMjZ2YWx1ZSk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBjYW5jZWxfbXNnO1xuIFxuIFx0cmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuLVx0XHRubG1zZ19mcmVlKG1zZyk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2FuY2VsX21zZztcbiYjNDM7XG4mIzQzO1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuJiM0MztcbiYjNDM7Y2FuY2VsX21zZzpcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4mIzQzO2ZyZWVfbXNnOlxuJiM0MztcdG5sbXNnX2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRvaXRfcmVwbHlfdGhyZXNob2xkKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICplcnJvcl9uYW1lO1xuJiM0MztcdHN0cnVjdCBza19idWZmICptc2c7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuJiM0MztcdHUzMiB0aHJlc2hvbGQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbXNnKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIGZyZWVfbXNnO1xuIFx0fVxuIFxuJiM0MztcdHJldCA9IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZChub2RlX2lkLCBlcnJvcl9pZCwgXHUwMDI2ZXJyb3JfbmFtZSwgXHUwMDI2dGhyZXNob2xkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjYW5jZWxfbXNnO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtc2dfcmVwbHlfdGhyZXNob2xkKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHRocmVzaG9sZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2FuY2VsX21zZztcbiYjNDM7XG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4gXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuJiM0MztcbiYjNDM7Y2FuY2VsX21zZzpcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4mIzQzO2ZyZWVfbXNnOlxuJiM0MztcdG5sbXNnX2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0zNTUsNiAmIzQzOzQ2Niw1OSBAQCBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBub2RlLVx1MDAzZWNsZWFyX2Vycm9yX2NvdW50ZXIobm9kZSwgZXJyb3JfaWQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyXG4mIzQzOyAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbiYjNDM7ICogQGluZm86IEdlbmVyaWMgTmV0bGluayBpbmZvIGNvbnRhaW5pbmcgYXR0cmlidXRlcyBvZiB0aGUgcmVxdWVzdFxuJiM0MzsgKlxuJiM0MzsgKiBFeHRyYWN0cyB0aGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCByZXRyaWV2ZXNcbiYjNDM7ICogdGhlIGVycm9yIHRocmVzaG9sZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb3VudGVyLiBTZW5kcyB0aGUgcmVzdWx0IGJhY2sgdG9cbiYjNDM7ICogdGhlIHJlcXVlc3RpbmcgdXNlciB2aWEgdGhlIHN0YW5kYXJkIEdlbmwgcmVwbHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHR1MzIgbm9kZV9pZCwgZXJyb3JfaWQ7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VhdHRycyB8fFxuJiM0MztcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSUQpIHx8XG4mIzQzO1x0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcbiYjNDM7XHRlcnJvcl9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgY291bnRlclxuJiM0MzsgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXG4mIzQzOyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3RcbiYjNDM7ICpcbiYjNDM7ICogRXh0cmFjdHMgdGhlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZFxuJiM0MzsgKiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHUzMiBub2RlX2lkLCBlcnJvcl9pZCwgdGhyZXNob2xkO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlYXR0cnMgfHxcbiYjNDM7XHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxuJiM0MztcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEKSB8fFxuJiM0MztcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0pO1xuJiM0MztcdGVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xuJiM0MztcdHRocmVzaG9sZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIG5ldyBSQVMgbm9kZVxuICAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZSB0byByZWdpc3RlclxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uMDJlOGU1MDU0ZDA1NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtMjgsNiAmIzQzOzI4LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2NsZWFyX2Vycm9yX2NvdW50ZXJfbmxfcG9saWN5W0RSTV9SQVNfQV9FXG4gXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4gfTtcbiBcbiYjNDM7LyogRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCAtIGRvICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2dldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEICYjNDM7IDFdID0ge1xuJiM0MztcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuJiM0MztcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIERSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQgLSBkbyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19zZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQgJiM0MzsgMV0gPSB7XG4mIzQzO1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4mIzQzO1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuJiM0MztcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTERdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4mIzQzO307XG4mIzQzO1xuIC8qIE9wcyB0YWJsZSBmb3IgZHJtX3JhcyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdHtcbkBAIC01Niw2ICYjNDM7NjksMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xuIFx0XHQubWF4YXR0clx0PSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCxcbiBcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuY21kXHRcdD0gRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCxcbiYjNDM7XHRcdC5kb2l0XHRcdD0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQsXG4mIzQzO1x0XHQucG9saWN5XHRcdD0gZHJtX3Jhc19nZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeSxcbiYjNDM7XHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuJiM0MztcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmNtZFx0XHQ9IERSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQsXG4mIzQzO1x0XHQuZG9pdFx0XHQ9IGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0LFxuJiM0MztcdFx0LnBvbGljeVx0XHQ9IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXG4mIzQzO1x0XHQubWF4YXR0clx0PSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsXG4mIzQzO1x0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi41N2IxZTY0N2Q4MzMwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbkBAIC0yMCw2ICYjNDM7MjAsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuJiM0MztpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuJiM0MztpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi40YWZhMmFkOTgzMDBmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbkBAIC04Niw2ICYjNDM7ODYsMzggQEAgc3RhdGljIGludCBjbGVhcl9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9cbiBcdHJldHVybiBjbGVhcl9lcnJvcl9jb3VudGVyKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkKHN0cnVjdCBkcm1fcmFzX25vZGUgKmVwLCB1MzIgZXJyb3JfaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKipuYW1lLCB1MzIgKnRocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZXAtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQqbmFtZSA9IGluZm9bZXJyb3JfaWRdLm5hbWU7XG4mIzQzO1x0cmV0dXJuIHhlX3Jhc19nZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNldF9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZXAtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geGVfcmFzX3NldF90aHJlc2hvbGQoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmFsbG9jYXRlX2FuZF9jb3B5X2NvdW50ZXJzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIHtcbiBcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmNvdW50ZXI7XG5AQCAtMTM0LDYgJiM0MzsxNjYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9ub2RlX3BhcmFtcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbiBcdGlmIChzZXZlcml0eSA9PSBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUpIHtcbiBcdFx0bm9kZS1cdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiBcdFx0bm9kZS1cdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiYjNDM7XHRcdG5vZGUtXHUwMDNlcXVlcnlfZXJyb3JfdGhyZXNob2xkID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkO1xuJiM0MztcdFx0bm9kZS1cdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkID0gc2V0X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZDtcbiBcdH0gZWxzZSB7XG4gXHRcdG5vZGUtXHUwMDNlcXVlcnlfZXJyb3JfY291bnRlciA9IHF1ZXJ5X3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiBcdFx0bm9kZS1cdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfdW5jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuaW5kZXggNDRmNGUxYTM0NTViN2MuLmFmZWU4MjAyZDI0ZWZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbkBAIC0yNzAsNiAmIzQzOzI3MCwxMTEgQEAgaW50IHhlX3Jhc19jbGVhcl9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeGVfcmFzX2dldF90aHJlc2hvbGQoKSAtIEdldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZFxuJiM0MzsgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxuJiM0MzsgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHF1ZXJpZWQgKFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbiYjNDM7ICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHF1ZXJpZWQgKFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXG4mIzQzOyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyIGJhc2VkIG9uXG4mIzQzOyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgeGVfcmFzX2dldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdGhyZXNob2xkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xuJiM0MztcdHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCBjb21tYW5kID0ge307XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlcjtcbiYjNDM7XHRzaXplX3QgbGVuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNvdW50ZXIgPSBcdTAwMjZyZXF1ZXN0LmNvdW50ZXI7XG4mIzQzO1x0Y291bnRlci1cdTAwM2Vjb21tb24uc2V2ZXJpdHkgPSBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcbiYjNDM7XHRjb3VudGVyLVx1MDAzZWNvbW1vbi5jb21wb25lbnQgPSBkcm1fdG9feGVfcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuJiM0MztcbiYjNDM7XHR4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKFx1MDAyNmNvbW1hbmQsIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCwgWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRCxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuJiM0MztcbiYjNDM7XHRndWFyZCh4ZV9wbV9ydW50aW1lKSh4ZSk7XG4mIzQzO1x0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXHUwMDI2eGUtXHUwMDNlc2MsIFx1MDAyNmNvbW1hbmQsIFx1MDAyNmxlbik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0eGVfZXJyKHhlLCBcJiMzNDtzeXNjdHJsOiBmYWlsZWQgdG8gZ2V0IHRocmVzaG9sZCAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuICE9IHNpemVvZihyZXNwb25zZSkpIHtcbiYjNDM7XHRcdHhlX2Vycih4ZSwgXCYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBnZXQgdGhyZXNob2xkIHJlc3BvbnNlIGxlbmd0aCAlenUgKGV4cGVjdGVkICV6dSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y291bnRlciA9IFx1MDAyNnJlc3BvbnNlLmNvdW50ZXI7XG4mIzQzO1x0KnRocmVzaG9sZCA9IHJlc3BvbnNlLnRocmVzaG9sZDtcbiYjNDM7XG4mIzQzO1x0eGVfZGJnKHhlLCBcJiMzNDtbUkFTXTogZ2V0IHRocmVzaG9sZCAldSBmb3IgJXMgJXNcXG5cJiMzNDssICp0aHJlc2hvbGQsXG4mIzQzO1x0ICAgICAgIGNvbXBfdG9fc3RyKGNvdW50ZXItXHUwMDNlY29tbW9uLmNvbXBvbmVudCksIHNldl90b19zdHIoY291bnRlci1cdTAwM2Vjb21tb24uc2V2ZXJpdHkpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHhlX3Jhc19zZXRfdGhyZXNob2xkKCkgLSBTZXQgZXJyb3IgY291bnRlciB0aHJlc2hvbGRcbiYjNDM7ICogQHhlOiBYZSBkZXZpY2UgaW5zdGFuY2VcbiYjNDM7ICogQHNldmVyaXR5OiBFcnJvciBzZXZlcml0eSB0byBiZSBzZXQgKFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbiYjNDM7ICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbiYjNDM7ICogQHRocmVzaG9sZDogQ291bnRlciB0aHJlc2hvbGRcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyIGJhc2VkIG9uXG4mIzQzOyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgeGVfcmFzX3NldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiB0aHJlc2hvbGQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCByZXF1ZXN0ID0ge307XG4mIzQzO1x0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y291bnRlciA9IFx1MDAyNnJlcXVlc3QuY291bnRlcjtcbiYjNDM7XHRjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuJiM0MztcdGNvdW50ZXItXHUwMDNlY29tbW9uLmNvbXBvbmVudCA9IGRybV90b194ZV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XG4mIzQzO1x0cmVxdWVzdC50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4mIzQzO1xuJiM0MztcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXHUwMDI2Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xELFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCBcdTAwMjZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHhlX3BtX3J1bnRpbWUpKHhlKTtcbiYjNDM7XHRyZXQgPSB4ZV9zeXNjdHJsX3NlbmRfY29tbWFuZChcdTAwMjZ4ZS1cdTAwM2VzYywgXHUwMDI2Y29tbWFuZCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHR4ZV9lcnIoeGUsIFwmIzM0O3N5c2N0cmw6IGZhaWxlZCB0byBzZXQgdGhyZXNob2xkICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gIT0gc2l6ZW9mKHJlc3BvbnNlKSkge1xuJiM0MztcdFx0eGVfZXJyKHhlLCBcJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIHNldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBsZW4sIHNpemVvZihyZXNwb25zZSkpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0eGVfZXJyKHhlLCBcJiMzNDtzeXNjdHJsOiBzZXQgdGhyZXNob2xkIGNvbW1hbmQgZmFpbGVkIHdpdGggc3RhdHVzICUjeFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICByZXNwb25zZS5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvdW50ZXIgPSBcdTAwMjZyZXNwb25zZS5jb3VudGVyO1xuJiM0MztcbiYjNDM7XHR4ZV9kYmcoeGUsIFwmIzM0O1tSQVNdOiBzZXQgdGhyZXNob2xkICV1IGZvciAlcyAlc1xcblwmIzM0OywgcmVzcG9uc2UudGhyZXNob2xkLFxuJiM0MztcdCAgICAgICBjb21wX3RvX3N0cihjb3VudGVyLVx1MDAzZWNvbW1vbi5jb21wb25lbnQpLCBzZXZfdG9fc3RyKGNvdW50ZXItXHUwMDNlY29tbW9uLnNldmVyaXR5KSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeGVfcmFzX2luaXQgLSBJbml0aWFsaXplIFhlIFJBU1xuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oXG5pbmRleCBiYTBiMDIyNGRmMjM2NS4uMWFhNDNjNTRiNzEwYzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxuQEAgLTE1LDYgJiM0MzsxNSw4IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xuIGludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xuIGludCB4ZV9yYXNfY2xlYXJfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCk7XG4mIzQzO2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpO1xuJiM0MztpbnQgeGVfcmFzX3NldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiB0aHJlc2hvbGQpO1xuIHZvaWQgeGVfcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxuaW5kZXggNjY4OGUxMWY1N2E4NjIuLjc0N2I2NTE4ODBjZDU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmhcbkBAIC0xMjEsNCAmIzQzOzEyMSw1NSBAQCBzdHJ1Y3QgeGVfcmFzX2NsZWFyX2NvdW50ZXJfcmVzcG9uc2Uge1xuIFx0LyoqIEByZXNlcnZlZDE6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4gXHR1MzIgcmVzZXJ2ZWQxWzNdO1xuIH0gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3Qge1xuJiM0MztcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBnZXQgdGhyZXNob2xkIGZvciAqL1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbiYjNDM7XHQvKiogQHJlc2VydmVkOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuJiM0MztcdHUzMiByZXNlcnZlZDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgeGVfcmFzX2dldF90aHJlc2hvbGRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIGdldCB0aHJlc2hvbGRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSB7XG4mIzQzO1x0LyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovXG4mIzQzO1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyO1xuJiM0MztcdC8qKiBAdGhyZXNob2xkOiBDdXJyZW50IHRocmVzaG9sZCBvZiB0aGUgY291bnRlciAqL1xuJiM0MztcdHUzMiB0aHJlc2hvbGQ7XG4mIzQzO1x0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHR1MzIgcmVzZXJ2ZWRbNF07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3Igc2V0IHRocmVzaG9sZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3Qge1xuJiM0MztcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBzZXQgdGhyZXNob2xkIGZvciAqL1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbiYjNDM7XHQvKiogQHRocmVzaG9sZDogVGhyZXNob2xkIHRvIGJlIHNldCAqL1xuJiM0MztcdHUzMiB0aHJlc2hvbGQ7XG4mIzQzO1x0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHR1MzIgcmVzZXJ2ZWQ7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3Jlc3BvbnNlIC0gUmVzcG9uc2Ugc3RydWN0dXJlIGZvciBzZXQgdGhyZXNob2xkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2Uge1xuJiM0MztcdC8qKiBAY291bnRlcjogQ291bnRlciBJRCAqL1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbiYjNDM7XHQvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqL1xuJiM0MztcdHUzMiByZXNlcnZlZDtcbiYjNDM7XHQvKiogQHRocmVzaG9sZDogVXBkYXRlZCB0aHJlc2hvbGQgKi9cbiYjNDM7XHR1MzIgdGhyZXNob2xkO1xuJiM0MztcdC8qKiBAc3RhdHVzOiBPcGVyYXRpb24gc3RhdHVzICovXG4mIzQzO1x0dTMyIHN0YXR1cztcbiYjNDM7XHQvKiogQHJlc2VydmVkMTogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHR1MzIgcmVzZXJ2ZWQxWzJdO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuaW5kZXggYjRkMTczMjlhZjZjOGQuLjA1NDdiN2IzOTcyNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuQEAgLTQ5LDE4ICYjNDM7NDksNiBAQCBzdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY1xuIFx0fSB3aGlsZSAocmVzcG9uc2UtXHUwMDNlY291bnQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBldmVudF9yZXF1ZXN0X3ByZXBhcmUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyICpoZWFkZXIsXG4tXHRcdFx0XHQgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgKnJlcXVlc3QpXG4te1xuLVx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHhlLVx1MDAzZWRybS5kZXYpO1xuLVxuLVx0aGVhZGVyLVx1MDAzZWRhdGEgPSBSRUdfRklFTERfUFJFUChBUFBfSERSX0dST1VQX0lEX01BU0ssIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCkgfFxuLVx0XHQgICAgICAgUkVHX0ZJRUxEX1BSRVAoQVBQX0hEUl9DT01NQU5EX01BU0ssIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UKTtcbi1cbi1cdHJlcXVlc3QtXHUwMDNldmVjdG9yID0geGVfZGV2aWNlX2hhc19tc2l4KHhlKSA/IFhFX0lSUV9ERUZBVUxUX01TSVggOiAwO1xuLVx0cmVxdWVzdC1cdTAwM2VmbiA9IFBDSV9GVU5DKHBkZXYtXHUwMDNlZGV2Zm4pO1xuLX1cbi1cbiAvKipcbiAgKiB4ZV9zeXNjdHJsX2V2ZW50KCkgLSBIYW5kbGVyIGZvciBTeXN0ZW0gQ29udHJvbGxlciBldmVudHNcbiAgKiBAc2M6IFN5c3RlbSBDb250cm9sbGVyIGluc3RhbmNlXG5AQCAtNzIsMTYgJiM0Mzs2MCwxNiBAQCB2b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxuIFx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbiBcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XG4gXHRzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0IHJlcXVlc3QgPSB7fTtcbi1cdHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyIGhlYWRlciA9IHt9O1xuJiM0MztcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gc2NfdG9feGUoc2MpO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4ZS1cdTAwM2Vkcm0uZGV2KTtcbiYjNDM7XG4mIzQzO1x0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbi1cdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2VzcyhzY190b194ZShzYykpO1xuLVx0ZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgXHUwMDI2aGVhZGVyLCBcdTAwMjZyZXF1ZXN0KTtcbiYjNDM7XHRyZXF1ZXN0LnZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDtcbiYjNDM7XHRyZXF1ZXN0LmZuID0gUENJX0ZVTkMocGRldi1cdTAwM2VkZXZmbik7XG4gXG4tXHRjb21tYW5kLmhlYWRlciA9IGhlYWRlcjtcbi1cdGNvbW1hbmQuZGF0YV9pbiA9IFx1MDAyNnJlcXVlc3Q7XG4tXHRjb21tYW5kLmRhdGFfaW5fbGVuID0gc2l6ZW9mKHJlcXVlc3QpO1xuLVx0Y29tbWFuZC5kYXRhX291dCA9IFx1MDAyNnJlc3BvbnNlO1xuLVx0Y29tbWFuZC5kYXRhX291dF9sZW4gPSBzaXplb2YocmVzcG9uc2UpO1xuJiM0MztcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXHUwMDI2Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVCxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuIFxuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnNjLVx1MDAzZWV2ZW50X2xvY2spO1xuIFx0Z2V0X3BlbmRpbmdfZXZlbnQoc2MsIFx1MDAyNmNvbW1hbmQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxuaW5kZXggNmUzNzUzNTU0NTEwYTUuLjEwZjA2YWE1YzRiNTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmhcbkBAIC0yNCwxMSAmIzQzOzI0LDE1IEBAIGVudW0geGVfc3lzY3RybF9ncm91cCB7XG4gICpcbiAgKiBAWEVfU1lTQ1RSTF9DTURfR0VUX0NPVU5URVI6IEdldCBlcnJvciBjb3VudGVyIHZhbHVlXG4gICogQFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVI6IENsZWFyIGVycm9yIGNvdW50ZXIgdmFsdWVcbiYjNDM7ICogQFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQ6IFJldHJpZXZlIGVycm9yIHRocmVzaG9sZFxuJiM0MzsgKiBAWEVfU1lTQ1RSTF9DTURfU0VUX1RIUkVTSE9MRDogU2V0IGVycm9yIHRocmVzaG9sZFxuICAqIEBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVDogUmV0cmlldmUgcGVuZGluZyBldmVudFxuICAqL1xuIGVudW0geGVfc3lzY3RybF9nZnNwX2NtZCB7XG4gXHRYRV9TWVNDVFJMX0NNRF9HRVRfQ09VTlRFUlx0XHQ9IDB4MDMsXG4gXHRYRV9TWVNDVFJMX0NNRF9DTEVBUl9DT1VOVEVSXHRcdD0gMHgwNCxcbiYjNDM7XHRYRV9TWVNDVFJMX0NNRF9HRVRfVEhSRVNIT0xEXHRcdD0gMHgwNSxcbiYjNDM7XHRYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEXHRcdD0gMHgwNixcbiBcdFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UXHQ9IDB4MDcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IGYyYTc4N2JjNGY2NGE5Li42ODNhMzg0NGY4NGY2MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtNjksNiAmIzQzOzY5LDM0IEBAIHN0cnVjdCBkcm1fcmFzX25vZGUge1xuIFx0ICovXG4gXHRpbnQgKCpjbGVhcl9lcnJvcl9jb3VudGVyKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQpO1xuIFxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBxdWVyeV9lcnJvcl90aHJlc2hvbGQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBxdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYVxuJiM0MztcdCAqIHNwZWNpZmljIGNvdW50ZXIuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBEcml2ZXIgc2hvdWxkIGV4cGVjdCBxdWVyeV9lcnJvcl90aHJlc2hvbGQoKSB0byBiZSBjYWxsZWQgd2l0aFxuJiM0MztcdCAqIGVycm9yX2lkIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvXG4mIzQzO1x0ICogYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpxdWVyeV9lcnJvcl90aHJlc2hvbGQpKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqKm5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKnRocmVzaG9sZCk7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQHNldF9lcnJvcl90aHJlc2hvbGQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBzZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWNcbiYjNDM7XHQgKiBjb3VudGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRHJpdmVyIHNob3VsZCBleHBlY3Qgc2V0X2Vycm9yX3RocmVzaG9sZCgpIHRvIGJlIGNhbGxlZCB3aXRoIGVycm9yX2lkXG4mIzQzO1x0ICogZnJvbSBgZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdGAgdG8gYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuXG4mIzQzO1x0ICogRHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBlcnJvciB0aHJlc2hvbGQgYm91bmRzIGNoZWNraW5nLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50ICgqc2V0X2Vycm9yX3RocmVzaG9sZCkoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKTtcbiYjNDM7XG4gXHQvKiogQHByaXY6IERyaXZlciBwcml2YXRlIGRhdGEgKi9cbiBcdHZvaWQgKnByaXY7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyNy4uMjdjNjg5NTY0OTVmYjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfTkFNRSxcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1ZBTFVFLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCxcbiBcbiBcdF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYLFxuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcbkBAIC00Miw2ICYjNDM7NDMsOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxuIFx0RFJNX1JBU19DTURfR0VUX0VSUk9SX0NPVU5URVIsXG4gXHREUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLFxuJiM0MztcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsXG4mIzQzO1x0RFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCxcbiBcbiBcdF9fRFJNX1JBU19DTURfTUFYLFxuIFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEUk1fUkFTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQmIzM0OywKICAgICYjMzQ7ZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQmIzM0OywKICAgICYjMzQ7ZG9pdF9yZXBseV90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7Z2V0X25vZGVfZXJyb3JfdGhyZXNob2xkJiMzNDssCiAgICAmIzM0O3NldF9ub2RlX2Vycm9yX3RocmVzaG9sZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMgKEdFVF9FUlJPUl9USFJFU0hPTEQgYW5kIFNFVF9FUlJPUl9USFJFU0hPTEQpIHRvIHRoZSBEUk0gUkFTIHN1YnN5c3RlbS4gV2hpbGUgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIGluIHRoZSBgeGVgIGRyaXZlciBpcyB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIEludGVsIEdQVXMsIHRoZSBnZW5lcmljIG5ldGxpbmsgcGFyc2luZywgbWVzc2FnZSBhbGxvY2F0aW9uLCBhbmQgaW5pdGlhbCB2YWxpZGF0aW9uIGxvZ2ljIGluIGBkcm1fcmFzLmNgIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWVtb3J5IGxlYWtzIG9yIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDEwOjU3OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAppbmRleCA4M2MyMTg1M2I3NGI2MC4uMjcxOGY4YWVlMDlkZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0CkBAIC01Niw2ICYjNDM7NTYsMTAgQEAgVXNlciBzcGFjZSB0b29scyBjYW46CiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy4KICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aAogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBRdWVyeSBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYGdldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZyBib3RoCiYjNDM7ICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBTZXQgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBzZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmcKJiM0MzsgIGBgbm9kZS1pZGBgLCBgYGVycm9yLWlkYGAgYW5kIGBgZXJyb3ItdGhyZXNob2xkYGAgYXMgcGFyYW1ldGVycy4KIAogWUFNTC1iYXNlZCBJbnRlcmZhY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTEsMyAmIzQzOzExNSwxNyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGUKIAogICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAmIzM5O3smIzM0O25vZGUtaWQmIzM0OzowLCAmIzM0O2Vycm9yLWlkJiMzNDs6MX0mIzM5OwogICAgIE5vbmUKJiM0MzsKJiM0MztFeGFtcGxlOiBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyCiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2gKJiM0MzsKJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGdldC1lcnJvci10aHJlc2hvbGQgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxfSYjMzk7CiYjNDM7ICAgIHsmIzM5O2Vycm9yLWlkJiMzOTs6IDEsICYjMzk7ZXJyb3ItbmFtZSYjMzk7OiAmIzM5O2Vycm9yX25hbWUxJiMzOTssICYjMzk7ZXJyb3ItdGhyZXNob2xkJiMzOTs6IDE2fQomIzQzOwomIzQzO0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyCiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2gKJiM0MzsKJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIHNldC1lcnJvci10aHJlc2hvbGQgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxLCAmIzM0O2Vycm9yLXRocmVzaG9sZCYjMzQ7Ojh9JiMzOTsKJiM0MzsgICAgTm9uZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKaW5kZXggZTExMzA1NmY4YzAxNmMuLjljZjdmOWNkZTI0MjUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKQEAgLTY5LDYgJiM0Mzs2OSwxMCBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWUKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdGhyZXNob2xkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGRvYzogRXJyb3IgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyLgogCiBvcGVyYXRpb25zOgogICBsaXN0OgpAQCAtMTI0LDMgJiM0MzsxMjgsMzEgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZ2V0LWVycm9yLXRocmVzaG9sZAomIzQzOyAgICAgIGRvYzogJmd0Oy0KJiM0MzsgICAgICAgICAgIFJldHJpZXZlIGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuCiYjNDM7ICAgICAgICAgICBUaGUgcmVzcG9uc2UgaW5jbHVkZXMgdGhlIGlkLCB0aGUgbmFtZSwgYW5kIGN1cnJlbnQgdGhyZXNob2xkCiYjNDM7ICAgICAgICAgICBvZiB0aGUgY291bnRlci4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzCiYjNDM7ICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXQomIzQzOyAgICAgIGRvOgomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzCiYjNDM7ICAgICAgICByZXBseToKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGVycm9yLWlkCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1uYW1lCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGQKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHNldC1lcnJvci10aHJlc2hvbGQKJiM0MzsgICAgICBkb2M6ICZndDstCiYjNDM7ICAgICAgICAgICBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzCiYjNDM7ICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXQomIzQzOyAgICAgIGRvOgomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIG5vZGUtaWQKJiM0MzsgICAgICAgICAgICAtIGVycm9yLWlkCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi5kNjBjNDBhYzU0MjdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCkBAIC00MSw2ICYjNDM7NDEsMTMgQEAKICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuCiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLgogICoKJiM0MzsgKiA0LiBHRVRfRVJST1JfVEhSRVNIT0xEOiBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLgomIzQzOyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQuCiYjNDM7ICogICAgUmV0dXJucyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci4KJiM0MzsgKgomIzQzOyAqIDUuIFNFVF9FUlJPUl9USFJFU0hPTEQ6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLgomIzQzOyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQgYW5kIHRocmVzaG9sZCB0byBiZSBzZXQuCiYjNDM7ICoKICAqIE5vZGUgcmVnaXN0cmF0aW9uOgogICoKICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zCkBAIC02MSw2ICYjNDM7NjgsMTYgQEAKICAqICAgICAmIzQzOyBUaGUgZXJyb3IgY291bnRlcnMgaW4gdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGNvbnRpZ3VvdXMsIGJ1dCB0aGUKICAqICAgICAgIGRyaXZlciBtdXN0IHJldHVybiAtRU5PRU5UIHRvIHRoZSBxdWVyeV9lcnJvcl9jb3VudGVyIGFzIGFuIGluZGljYXRpb24KICAqICAgICAgIHRoYXQgdGhlIElEIHNob3VsZCBiZSBza2lwcGVkIGFuZCBub3QgbGlzdGVkIGluIHRoZSBuZXRsaW5rIEFQSS4KJiM0MzsgKiAgICAgJiM0MzsgVGhlIGRyaXZlciBjYW4gb3B0aW9uYWxseSBpbXBsZW1lbnQgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgYW5kCiYjNDM7ICogICAgICAgc2V0X2Vycm9yX3RocmVzaG9sZCgpIGNhbGxiYWNrcyB0byBmYWNpbGl0YXRlIGdldHRpbmcvc2V0dGluZyBlcnJvcgomIzQzOyAqICAgICAgIHRocmVzaG9sZCBvZiB0aGUgY291bnRlci4gVGhyZXNob2xkIGluIFJBUyBjb250ZXh0IG1lYW5zIHRoZSBudW1iZXIgb2YKJiM0MzsgKiAgICAgICBlcnJvcnMgdGhlIGhhcmR3YXJlIGlzIGV4cGVjdGVkIHRvIGFjY3VtdWxhdGUgYmVmb3JlIGl0IHJhaXNlcyB0aGVtIHRvCiYjNDM7ICogICAgICAgc29mdHdhcmUuIFRoaXMgaXMgdG8gaGF2ZSBhIGZpbmUgZ3JhaW5lZCBjb250cm9sIG92ZXIgZXJyb3Igbm90aWZpY2F0aW9ucwomIzQzOyAqICAgICAgIHRoYXQgYXJlIHJhaXNlZCBieSB0aGUgaGFyZHdhcmUuCiYjNDM7ICogICAgICYjNDM7IFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuCiYjNDM7ICogICAgICYjNDM7IFRocmVzaG9sZCBvZiAwIGNhbiBtZWFuIGludmFsaWQgdGhyZXNob2xkIG9yIGFjdCBhcyBhIGRpc2FibGUgbm90aWZpY2F0aW9ucwomIzQzOyAqICAgICAgIHRvZ2dsZSBmb3IgdGhhdCBjb3VudGVyIGRlcGVuZGluZyBvbiB1c2VjYXNlIGFuZCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlCiYjNDM7ICogICAgICAgZm9yIGhhbmRsaW5nIGl0IGFzIG5lZWRlZC4KICAqCiAgKiBOZXRsaW5rIGhhbmRsZXJzOgogICoKQEAgLTcyLDYgJiM0Mzs4OSwxMCBAQAogICogICBvcGVyYXRpb24sIGZldGNoaW5nIGEgY291bnRlciB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgbm9kZS4KICAqIC0gZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgQ0xFQVJfRVJST1JfQ09VTlRFUiBkb2l0CiAgKiAgIG9wZXJhdGlvbiwgY2xlYXJpbmcgYSBjb3VudGVyIHZhbHVlIGZyb20gYSBzcGVjaWZpYyBub2RlLgomIzQzOyAqIC0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgR0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0CiYjNDM7ICogICBvcGVyYXRpb24sIGZldGNoaW5nIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyLgomIzQzOyAqIC0gZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgU0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0CiYjNDM7ICogICBvcGVyYXRpb24sIHNldHRpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuCiAgKi8KIAogc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoZHJtX3Jhc194YSk7CkBAIC0xNjgsNiAmIzQzOzE4OSw0MCBAQCBzdGF0aWMgaW50IGdldF9ub2RlX2Vycm9yX2NvdW50ZXIodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwKIAlyZXR1cm4gbm9kZS0mZ3Q7cXVlcnlfZXJyb3JfY291bnRlcihub2RlLCBlcnJvcl9pZCwgbmFtZSwgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGludCBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqKm5hbWUsIHUzMiAqdGhyZXNob2xkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTsKJiM0MzsKJiM0MzsJbm9kZSA9IHhhX2xvYWQoJmFtcDtkcm1fcmFzX3hhLCBub2RlX2lkKTsKJiM0MzsJaWYgKCFub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWlmICghbm9kZS0mZ3Q7cXVlcnlfZXJyb3JfdGhyZXNob2xkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoZXJyb3JfaWQgJmx0OyBub2RlLSZndDtlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkICZndDsgbm9kZS0mZ3Q7ZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlLSZndDtxdWVyeV9lcnJvcl90aHJlc2hvbGQobm9kZSwgZXJyb3JfaWQsIG5hbWUsIHRocmVzaG9sZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlOwomIzQzOwomIzQzOwlub2RlID0geGFfbG9hZCgmYW1wO2RybV9yYXNfeGEsIG5vZGVfaWQpOwomIzQzOwlpZiAoIW5vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKCFub2RlLSZndDtzZXRfZXJyb3JfdGhyZXNob2xkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoZXJyb3JfaWQgJmx0OyBub2RlLSZndDtlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkICZndDsgbm9kZS0mZ3Q7ZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlLSZndDtzZXRfZXJyb3JfdGhyZXNob2xkKG5vZGUsIGVycm9yX2lkLCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCwKIAkJCSAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSkKIHsKQEAgLTE4Niw2ICYjNDM7MjQxLDIyIEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCwKIAkJCSAgIHZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbXNnX3JlcGx5X3RocmVzaG9sZChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsCiYjNDM7CQkJICAgICAgIHUzMiB0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xELCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwKIAkJCSAgICB1MzIgZXJyb3JfaWQpCiB7CkBAIC0yMDEsMjUgJiM0MzsyNzIsNjUgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLAogCiAJaGRyID0gZ2VubG1zZ19pcHV0KG1zZywgaW5mbyk7CiAJaWYgKCFoZHIpIHsKLQkJbmxtc2dfZnJlZShtc2cpOwotCQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBmcmVlX21zZzsKIAl9CiAKIAlyZXQgPSBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKG5vZGVfaWQsIGVycm9yX2lkLAogCQkJCSAgICAgJmFtcDtlcnJvcl9uYW1lLCAmYW1wO3ZhbHVlKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBjYW5jZWxfbXNnOwogCiAJcmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTsKLQlpZiAocmV0KSB7Ci0JCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKLQkJbmxtc2dfZnJlZShtc2cpOwotCQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBjYW5jZWxfbXNnOwomIzQzOwomIzQzOwlnZW5sbXNnX2VuZChtc2csIGhkcik7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiYjNDM7CiYjNDM7Y2FuY2VsX21zZzoKJiM0MzsJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwomIzQzO2ZyZWVfbXNnOgomIzQzOwlubG1zZ19mcmVlKG1zZyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG9pdF9yZXBseV90aHJlc2hvbGQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKmVycm9yX25hbWU7CiYjNDM7CXN0cnVjdCBza19idWZmICptc2c7CiYjNDM7CXN0cnVjdCBubGF0dHIgKmhkcjsKJiM0MzsJdTMyIHRocmVzaG9sZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW1zZykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwloZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBpbmZvKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gZnJlZV9tc2c7CiAJfQogCiYjNDM7CXJldCA9IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZChub2RlX2lkLCBlcnJvcl9pZCwgJmFtcDtlcnJvcl9uYW1lLCAmYW1wO3RocmVzaG9sZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGNhbmNlbF9tc2c7CiYjNDM7CiYjNDM7CXJldCA9IG1zZ19yZXBseV90aHJlc2hvbGQobXNnLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdGhyZXNob2xkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2FuY2VsX21zZzsKJiM0MzsKIAlnZW5sbXNnX2VuZChtc2csIGhkcik7CiAKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwomIzQzOwomIzQzO2NhbmNlbF9tc2c6CiYjNDM7CWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKJiM0MztmcmVlX21zZzoKJiM0MzsJbmxtc2dfZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTM1NSw2ICYjNDM7NDY2LDU5IEBAIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiBub2RlLSZndDtjbGVhcl9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyCiYjNDM7ICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlcgomIzQzOyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3QKJiM0MzsgKgomIzQzOyAqIEV4dHJhY3RzIHRoZSBOb2RlIElEIGFuZCBFcnJvciBJRCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgYW5kIHJldHJpZXZlcwomIzQzOyAqIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci4gU2VuZHMgdGhlIHJlc3VsdCBiYWNrIHRvCiYjNDM7ICogdGhlIHJlcXVlc3RpbmcgdXNlciB2aWEgdGhlIHN0YW5kYXJkIEdlbmwgcmVwbHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXUzMiBub2RlX2lkLCBlcnJvcl9pZDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDthdHRycyB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTsKJiM0MzsJZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLSZndDthdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pOwomIzQzOwomIzQzOwlyZXR1cm4gZG9pdF9yZXBseV90aHJlc2hvbGQoaW5mbywgbm9kZV9pZCwgZXJyb3JfaWQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpIC0gU2V0IGVycm9yIHRocmVzaG9sZCBvZiBhIGNvdW50ZXIKJiM0MzsgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyCiYjNDM7ICogQGluZm86IEdlbmVyaWMgTmV0bGluayBpbmZvIGNvbnRhaW5pbmcgYXR0cmlidXRlcyBvZiB0aGUgcmVxdWVzdAomIzQzOyAqCiYjNDM7ICogRXh0cmFjdHMgdGhlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZAomIzQzOyAqIHNldHMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb3VudGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwl1MzIgbm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDthdHRycyB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fAomIzQzOwkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkgfHwKJiM0MzsJICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlub2RlX2lkID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0pOwomIzQzOwllcnJvcl9pZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSk7CiYjNDM7CXRocmVzaG9sZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRF0pOwomIzQzOwomIzQzOwlyZXR1cm4gc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIC8qKgogICogZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIG5ldyBSQVMgbm9kZQogICogQG5vZGU6IE5vZGUgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwppbmRleCBkZWExYzFiMjQ5NGU4MS4uMDJlOGU1MDU0ZDA1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwpAQCAtMjgsNiAmIzQzOzI4LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2NsZWFyX2Vycm9yX2NvdW50ZXJfbmxfcG9saWN5W0RSTV9SQVNfQV9FCiAJW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAogfTsKIAomIzQzOy8qIERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQgLSBkbyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2dldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEICYjNDM7IDFdID0gewomIzQzOwlbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSwKJiM0MzsJW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzO307CiYjNDM7CiYjNDM7LyogRFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCAtIGRvICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3lbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEICYjNDM7IDFdID0gewomIzQzOwlbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSwKJiM0MzsJW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzOwlbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzO307CiYjNDM7CiAvKiBPcHMgdGFibGUgZm9yIGRybV9yYXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHsKIAl7CkBAIC01Niw2ICYjNDM7NjksMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCQkubWF4YXR0cgk9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELAogCQkuZmxhZ3MJCT0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJCT0gRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCwKJiM0MzsJCS5kb2l0CQk9IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0LAomIzQzOwkJLnBvbGljeQkJPSBkcm1fcmFzX2dldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5LAomIzQzOwkJLm1heGF0dHIJPSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCwKJiM0MzsJCS5mbGFncwkJPSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJCT0gRFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCwKJiM0MzsJCS5kb2l0CQk9IGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0LAomIzQzOwkJLnBvbGljeQkJPSBkcm1fcmFzX3NldF9lcnJvcl90aHJlc2hvbGRfbmxfcG9saWN5LAomIzQzOwkJLm1heGF0dHIJPSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsCiYjNDM7CQkuZmxhZ3MJCT0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLAomIzQzOwl9LAogfTsKIAogc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCmluZGV4IGEzOTg2NDM1NzJhNWEwLi41N2IxZTY0N2Q4MzMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCkBAIC0yMCw2ICYjNDM7MjAsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiYjNDM7aW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCXN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwppbmRleCA3OTM3ZDhiYTBlZDljZS4uNGFmYTJhZDk4MzAwZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwpAQCAtODYsNiAmIzQzOzg2LDM4IEBAIHN0YXRpYyBpbnQgY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfCiAJcmV0dXJuIGNsZWFyX2Vycm9yX2NvdW50ZXIoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQpOwogfQogCiYjNDM7c3RhdGljIGludCBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCwKJiM0MzsJCQkJCSAgICAgY29uc3QgY2hhciAqKm5hbWUsIHUzMiAqdGhyZXNob2xkKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKCF4ZS0mZ3Q7aW5mby5oYXNfc3lzY3RybCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJKm5hbWUgPSBpbmZvW2Vycm9yX2lkXS5uYW1lOwomIzQzOwlyZXR1cm4geGVfcmFzX2dldF90aHJlc2hvbGQoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2V0X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZChzdHJ1Y3QgZHJtX3Jhc19ub2RlICplcCwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKCF4ZS0mZ3Q7aW5mby5oYXNfc3lzY3RybCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhlX3Jhc19zZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICphbGxvY2F0ZV9hbmRfY29weV9jb3VudGVycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIHsKIAlzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICpjb3VudGVyOwpAQCAtMTM0LDYgJiM0MzsxNjYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9ub2RlX3BhcmFtcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwKIAlpZiAoc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFKSB7CiAJCW5vZGUtJmd0O3F1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyOwogCQlub2RlLSZndDtjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjsKJiM0MzsJCW5vZGUtJmd0O3F1ZXJ5X2Vycm9yX3RocmVzaG9sZCA9IHF1ZXJ5X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZDsKJiM0MzsJCW5vZGUtJmd0O3NldF9lcnJvcl90aHJlc2hvbGQgPSBzZXRfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkOwogCX0gZWxzZSB7CiAJCW5vZGUtJmd0O3F1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV91bmNvcnJlY3RhYmxlX2Vycm9yX2NvdW50ZXI7CiAJCW5vZGUtJmd0O2NsZWFyX2Vycm9yX2NvdW50ZXIgPSBjbGVhcl91bmNvcnJlY3RhYmxlX2Vycm9yX2NvdW50ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKaW5kZXggNDRmNGUxYTM0NTViN2MuLmFmZWU4MjAyZDI0ZWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC0yNzAsNiAmIzQzOzI3MCwxMTEgQEAgaW50IHhlX3Jhc19jbGVhcl9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogeGVfcmFzX2dldF90aHJlc2hvbGQoKSAtIEdldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZAomIzQzOyAqIEB4ZTogWGUgZGV2aWNlIGluc3RhbmNlCiYjNDM7ICogQHNldmVyaXR5OiBFcnJvciBzZXZlcml0eSB0byBiZSBxdWVyaWVkICgmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSkKJiM0MzsgKiBAY29tcG9uZW50OiBFcnJvciBjb21wb25lbnQgdG8gYmUgcXVlcmllZCAoJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlciBiYXNlZCBvbgomIzQzOyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX2dldF90aHJlc2hvbGRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKJiM0MzsJc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyID0gJmFtcDtyZXF1ZXN0LmNvdW50ZXI7CiYjNDM7CWNvdW50ZXItJmd0O2NvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpOwomIzQzOwljb3VudGVyLSZndDtjb21tb24uY29tcG9uZW50ID0gZHJtX3RvX3hlX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTsKJiM0MzsKJiM0MzsJeGVfc3lzY3RybF9jcmVhdGVfY29tbWFuZCgmYW1wO2NvbW1hbmQsIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCwgWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRCwKJiM0MzsJCQkJICAmYW1wO3JlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgJmFtcDtyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CiYjNDM7CiYjNDM7CWd1YXJkKHhlX3BtX3J1bnRpbWUpKHhlKTsKJiM0MzsJcmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoJmFtcDt4ZS0mZ3Q7c2MsICZhbXA7Y29tbWFuZCwgJmFtcDtsZW4pOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQl4ZV9lcnIoeGUsICYjMzQ7c3lzY3RybDogZmFpbGVkIHRvIGdldCB0aHJlc2hvbGQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuICE9IHNpemVvZihyZXNwb25zZSkpIHsKJiM0MzsJCXhlX2Vycih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGdldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxuJiMzNDssCiYjNDM7CQkgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNvdW50ZXIgPSAmYW1wO3Jlc3BvbnNlLmNvdW50ZXI7CiYjNDM7CSp0aHJlc2hvbGQgPSByZXNwb25zZS50aHJlc2hvbGQ7CiYjNDM7CiYjNDM7CXhlX2RiZyh4ZSwgJiMzNDtbUkFTXTogZ2V0IHRocmVzaG9sZCAldSBmb3IgJXMgJXNcbiYjMzQ7LCAqdGhyZXNob2xkLAomIzQzOwkgICAgICAgY29tcF90b19zdHIoY291bnRlci0mZ3Q7Y29tbW9uLmNvbXBvbmVudCksIHNldl90b19zdHIoY291bnRlci0mZ3Q7Y29tbW9uLnNldmVyaXR5KSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB4ZV9yYXNfc2V0X3RocmVzaG9sZCgpIC0gU2V0IGVycm9yIGNvdW50ZXIgdGhyZXNob2xkCiYjNDM7ICogQHhlOiBYZSBkZXZpY2UgaW5zdGFuY2UKJiM0MzsgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHNldCAoJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpCiYjNDM7ICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIgYmFzZWQgb24KJiM0MzsgKiBzZXZlcml0eSBhbmQgY29tcG9uZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgeGVfcmFzX3NldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiB0aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKJiM0MzsJc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9OwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyID0gJmFtcDtyZXF1ZXN0LmNvdW50ZXI7CiYjNDM7CWNvdW50ZXItJmd0O2NvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpOwomIzQzOwljb3VudGVyLSZndDtjb21tb24uY29tcG9uZW50ID0gZHJtX3RvX3hlX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTsKJiM0MzsJcmVxdWVzdC50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7CiYjNDM7CiYjNDM7CXhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoJmFtcDtjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQsCiYjNDM7CQkJCSAgJmFtcDtyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICZhbXA7cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOwomIzQzOwomIzQzOwlndWFyZCh4ZV9wbV9ydW50aW1lKSh4ZSk7CiYjNDM7CXJldCA9IHhlX3N5c2N0cmxfc2VuZF9jb21tYW5kKCZhbXA7eGUtJmd0O3NjLCAmYW1wO2NvbW1hbmQsICZhbXA7bGVuKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJeGVfZXJyKHhlLCAmIzM0O3N5c2N0cmw6IGZhaWxlZCB0byBzZXQgdGhyZXNob2xkICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxlbiAhPSBzaXplb2YocmVzcG9uc2UpKSB7CiYjNDM7CQl4ZV9lcnIoeGUsICYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBzZXQgdGhyZXNob2xkIHJlc3BvbnNlIGxlbmd0aCAlenUgKGV4cGVjdGVkICV6dSlcbiYjMzQ7LAomIzQzOwkJICAgICAgIGxlbiwgc2l6ZW9mKHJlc3BvbnNlKSk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXhlX2Vycih4ZSwgJiMzNDtzeXNjdHJsOiBzZXQgdGhyZXNob2xkIGNvbW1hbmQgZmFpbGVkIHdpdGggc3RhdHVzICUjeFxuJiMzNDssCiYjNDM7CQkgICAgICAgcmVzcG9uc2Uuc3RhdHVzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY291bnRlciA9ICZhbXA7cmVzcG9uc2UuY291bnRlcjsKJiM0MzsKJiM0MzsJeGVfZGJnKHhlLCAmIzM0O1tSQVNdOiBzZXQgdGhyZXNob2xkICV1IGZvciAlcyAlc1xuJiMzNDssIHJlc3BvbnNlLnRocmVzaG9sZCwKJiM0MzsJICAgICAgIGNvbXBfdG9fc3RyKGNvdW50ZXItJmd0O2NvbW1vbi5jb21wb25lbnQpLCBzZXZfdG9fc3RyKGNvdW50ZXItJmd0O2NvbW1vbi5zZXZlcml0eSkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHhlX3Jhc19pbml0IC0gSW5pdGlhbGl6ZSBYZSBSQVMKICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgKaW5kZXggYmEwYjAyMjRkZjIzNjUuLjFhYTQzYzU0YjcxMGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oCkBAIC0xNSw2ICYjNDM7MTUsOCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCQkJCSAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7CiBpbnQgeGVfcmFzX2dldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgKnZhbHVlKTsKIGludCB4ZV9yYXNfY2xlYXJfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCk7CiYjNDM7aW50IHhlX3Jhc19nZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgKnRocmVzaG9sZCk7CiYjNDM7aW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKTsKIHZvaWQgeGVfcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaAppbmRleCA2Njg4ZTExZjU3YTg2Mi4uNzQ3YjY1MTg4MGNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmgKQEAgLTEyMSw0ICYjNDM7MTIxLDU1IEBAIHN0cnVjdCB4ZV9yYXNfY2xlYXJfY291bnRlcl9yZXNwb25zZSB7CiAJLyoqIEByZXNlcnZlZDE6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiAJdTMyIHJlc2VydmVkMVszXTsKIH0gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZAomIzQzOyAqLwomIzQzO3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHsKJiM0MzsJLyoqIEBjb3VudGVyOiBDb3VudGVyIHRvIGdldCB0aHJlc2hvbGQgZm9yICovCiYjNDM7CXN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjsKJiM0MzsJLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJdTMyIHJlc2VydmVkOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIC0gUmVzcG9uc2Ugc3RydWN0dXJlIGZvciBnZXQgdGhyZXNob2xkCiYjNDM7ICovCiYjNDM7c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHsKJiM0MzsJLyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovCiYjNDM7CXN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjsKJiM0MzsJLyoqIEB0aHJlc2hvbGQ6IEN1cnJlbnQgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyICovCiYjNDM7CXUzMiB0aHJlc2hvbGQ7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CXUzMiByZXNlcnZlZFs0XTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXF1ZXN0IC0gUmVxdWVzdCBzdHJ1Y3R1cmUgZm9yIHNldCB0aHJlc2hvbGQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCB7CiYjNDM7CS8qKiBAY291bnRlcjogQ291bnRlciB0byBzZXQgdGhyZXNob2xkIGZvciAqLwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7CiYjNDM7CS8qKiBAdGhyZXNob2xkOiBUaHJlc2hvbGQgdG8gYmUgc2V0ICovCiYjNDM7CXUzMiB0aHJlc2hvbGQ7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CXUzMiByZXNlcnZlZDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3Igc2V0IHRocmVzaG9sZAomIzQzOyAqLwomIzQzO3N0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSB7CiYjNDM7CS8qKiBAY291bnRlcjogQ291bnRlciBJRCAqLwomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovCiYjNDM7CXUzMiByZXNlcnZlZDsKJiM0MzsJLyoqIEB0aHJlc2hvbGQ6IFVwZGF0ZWQgdGhyZXNob2xkICovCiYjNDM7CXUzMiB0aHJlc2hvbGQ7CiYjNDM7CS8qKiBAc3RhdHVzOiBPcGVyYXRpb24gc3RhdHVzICovCiYjNDM7CXUzMiBzdGF0dXM7CiYjNDM7CS8qKiBAcmVzZXJ2ZWQxOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwl1MzIgcmVzZXJ2ZWQxWzJdOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jCmluZGV4IGI0ZDE3MzI5YWY2YzhkLi4wNTQ3YjdiMzk3MjY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jCkBAIC00OSwxOCAmIzQzOzQ5LDYgQEAgc3RhdGljIHZvaWQgZ2V0X3BlbmRpbmdfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjLCBzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2MKIAl9IHdoaWxlIChyZXNwb25zZS0mZ3Q7Y291bnQpOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9yZXF1ZXN0X3ByZXBhcmUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyICpoZWFkZXIsCi0JCQkJICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4ZS0mZ3Q7ZHJtLmRldik7Ci0KLQloZWFkZXItJmd0O2RhdGEgPSBSRUdfRklFTERfUFJFUChBUFBfSERSX0dST1VQX0lEX01BU0ssIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCkgfAotCQkgICAgICAgUkVHX0ZJRUxEX1BSRVAoQVBQX0hEUl9DT01NQU5EX01BU0ssIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UKTsKLQotCXJlcXVlc3QtJmd0O3ZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDsKLQlyZXF1ZXN0LSZndDtmbiA9IFBDSV9GVU5DKHBkZXYtJmd0O2RldmZuKTsKLX0KLQogLyoqCiAgKiB4ZV9zeXNjdHJsX2V2ZW50KCkgLSBIYW5kbGVyIGZvciBTeXN0ZW0gQ29udHJvbGxlciBldmVudHMKICAqIEBzYzogU3lzdGVtIENvbnRyb2xsZXIgaW5zdGFuY2UKQEAgLTcyLDE2ICYjNDM7NjAsMTYgQEAgdm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYykKIAlzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9OwogCXN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlIHJlc3BvbnNlID0ge307CiAJc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCByZXF1ZXN0ID0ge307Ci0Jc3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgaGVhZGVyID0ge307CiYjNDM7CXN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gc2NfdG9feGUoc2MpOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGUtJmd0O2RybS5kZXYpOwomIzQzOwomIzQzOwl4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3MoeGUpOwogCi0JeGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHNjX3RvX3hlKHNjKSk7Ci0JZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgJmFtcDtoZWFkZXIsICZhbXA7cmVxdWVzdCk7CiYjNDM7CXJlcXVlc3QudmVjdG9yID0geGVfZGV2aWNlX2hhc19tc2l4KHhlKSA/IFhFX0lSUV9ERUZBVUxUX01TSVggOiAwOwomIzQzOwlyZXF1ZXN0LmZuID0gUENJX0ZVTkMocGRldi0mZ3Q7ZGV2Zm4pOwogCi0JY29tbWFuZC5oZWFkZXIgPSBoZWFkZXI7Ci0JY29tbWFuZC5kYXRhX2luID0gJmFtcDtyZXF1ZXN0OwotCWNvbW1hbmQuZGF0YV9pbl9sZW4gPSBzaXplb2YocmVxdWVzdCk7Ci0JY29tbWFuZC5kYXRhX291dCA9ICZhbXA7cmVzcG9uc2U7Ci0JY29tbWFuZC5kYXRhX291dF9sZW4gPSBzaXplb2YocmVzcG9uc2UpOwomIzQzOwl4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKCZhbXA7Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVCwKJiM0MzsJCQkJICAmYW1wO3JlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgJmFtcDtyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CiAKIAlndWFyZChtdXRleCkoJmFtcDtzYy0mZ3Q7ZXZlbnRfbG9jayk7CiAJZ2V0X3BlbmRpbmdfZXZlbnQoc2MsICZhbXA7Y29tbWFuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmgKaW5kZXggNmUzNzUzNTU0NTEwYTUuLjEwZjA2YWE1YzRiNTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oCkBAIC0yNCwxMSAmIzQzOzI0LDE1IEBAIGVudW0geGVfc3lzY3RybF9ncm91cCB7CiAgKgogICogQFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSOiBHZXQgZXJyb3IgY291bnRlciB2YWx1ZQogICogQFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVI6IENsZWFyIGVycm9yIGNvdW50ZXIgdmFsdWUKJiM0MzsgKiBAWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRDogUmV0cmlldmUgZXJyb3IgdGhyZXNob2xkCiYjNDM7ICogQFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQ6IFNldCBlcnJvciB0aHJlc2hvbGQKICAqIEBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVDogUmV0cmlldmUgcGVuZGluZyBldmVudAogICovCiBlbnVtIHhlX3N5c2N0cmxfZ2ZzcF9jbWQgewogCVhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSCQk9IDB4MDMsCiAJWEVfU1lTQ1RSTF9DTURfQ0xFQVJfQ09VTlRFUgkJPSAweDA0LAomIzQzOwlYRV9TWVNDVFJMX0NNRF9HRVRfVEhSRVNIT0xECQk9IDB4MDUsCiYjNDM7CVhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQJCT0gMHgwNiwKIAlYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVAk9IDB4MDcsCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmgKaW5kZXggZjJhNzg3YmM0ZjY0YTkuLjY4M2EzODQ0Zjg0ZjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCkBAIC02OSw2ICYjNDM7NjksMzQgQEAgc3RydWN0IGRybV9yYXNfbm9kZSB7CiAJICovCiAJaW50ICgqY2xlYXJfZXJyb3JfY291bnRlcikoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkKTsKIAomIzQzOwkvKioKJiM0MzsJICogQHF1ZXJ5X2Vycm9yX3RocmVzaG9sZDoKJiM0MzsJICoKJiM0MzsJICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGRybS1yYXMgdG8gcXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEKJiM0MzsJICogc3BlY2lmaWMgY291bnRlci4KJiM0MzsJICoKJiM0MzsJICogRHJpdmVyIHNob3VsZCBleHBlY3QgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGgKJiM0MzsJICogZXJyb3JfaWQgZnJvbSBgZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdGAgdG8KJiM0MzsJICogYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuCiYjNDM7CSAqCiYjNDM7CSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqcXVlcnlfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLAomIzQzOwkJCQkgICAgIHUzMiAqdGhyZXNob2xkKTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBzZXRfZXJyb3JfdGhyZXNob2xkOgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBzZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMKJiM0MzsJICogY291bnRlci4KJiM0MzsJICoKJiM0MzsJICogRHJpdmVyIHNob3VsZCBleHBlY3Qgc2V0X2Vycm9yX3RocmVzaG9sZCgpIHRvIGJlIGNhbGxlZCB3aXRoIGVycm9yX2lkCiYjNDM7CSAqIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvIGBlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3RgLgomIzQzOwkgKiBEcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuCiYjNDM7CSAqCiYjNDM7CSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqc2V0X2Vycm9yX3RocmVzaG9sZCkoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKTsKJiM0MzsKIAkvKiogQHByaXY6IERyaXZlciBwcml2YXRlIGRhdGEgKi8KIAl2b2lkICpwcml2OwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKaW5kZXggMjE4YTNlZTg2ODA1MjcuLjI3YzY4OTU2NDk1ZmI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaApAQCAtMzMsNiAmIzQzOzMzLDcgQEAgZW51bSB7CiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQsCiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfTkFNRSwKIAlEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9WQUxVRSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xELAogCiAJX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVgsCiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSkKQEAgLTQyLDYgJiM0Mzs0Myw4IEBAIGVudW0gewogCURSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLAogCURSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLAogCURSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsCiYjNDM7CURSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsCiYjNDM7CURSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQsCiAKIAlfX0RSTV9SQVNfQ01EX01BWCwKIAlEUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERSTSBSQVMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIG5ldyBOZXRsaW5rIGNvbW1hbmRzIHdpdGhpbiB0aGUgRFJNIFJBUyBzdWJzeXN0ZW06IGBHRVRfRVJST1JfVEhSRVNIT0xEYCBhbmQgYFNFVF9FUlJPUl9USFJFU0hPTERgLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRpbmcgc29tZSBjb25maWd1cmFiaWxpdHkgdG8gZXJyb3IgaGFuZGxpbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZpbGVzLCBwcmltYXJpbHkgZm9jdXNlZCBvbiBkb2N1bWVudGF0aW9uIGFuZCB0aGUgbmV0bGluayBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGFsb25nIHdpdGggdGhlIGB4ZWAgZHJpdmVyLCBJbnRlbCYjMzk7cyBEUk0gZHJpdmVyLiBUaGlzIGlzIGV4cGVjdGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUgaW4gYGRybV9yYXMuY2AgYW5kIGBkcm1fcmFzX25sLmNgLCB3aXRoIHRoZSBgeGVgIGRyaXZlciBoYW5kbGluZyB0aGUgYWN0dWFsIGNhbGxiYWNrIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAuIFVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgY2xlYXJseSBkZXNpZ25lZCB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UuCgpOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gZnV6emluZy4gQ2FuIHdlIGZ1enogdGhlIGB4ZWAgZHJpdmVyIHdpdGggdGhlc2UgbmV3IGNvbW1hbmRzPyBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgeWVzLCBpdCYjMzk7cyBhIERSTSBkcml2ZXIgYW5kIEludGVsJiMzOTtzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uIGJ1dCB0aGVuIEkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB2aXJ0dWFsaXphdGlvbi4gRFJNIGRyaXZlcnMgZ2VuZXJhbGx5IGhhdmUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSW50ZWwgR1BVcy4gSG93ZXZlciwgdGhlIGBkcm1fcmFzYCBuZXRsaW5rIGludGVyZmFjZSBpcyBnZW5lcmljLiBBbnkgZHJpdmVyIHRoYXQgcmVnaXN0ZXJzIGEgUkFTIG5vZGUgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQgZm9yIGZ1enppbmcuIEl0IG1lYW5zIHdlIGRvbiYjMzk7dCBuZWNlc3NhcmlseSBuZWVkIGFjdHVhbCBJbnRlbCBoYXJkd2FyZSB0byB0ZXN0IHRoZSBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlc2UgbmV3IGNvbW1hbmRzLgoKVGhlIG5leHQgcXVlc3Rpb246IERvZXMgYSB2aXJ0dWFsIGRyaXZlciwgbGlrZSBgdmttc2AsIG9yIGFueSBvdGhlciB2aXJ0dWFsIGRyaXZlciwgcmVnaXN0ZXIgYSBSQVMgbm9kZT8gSWYgaXQgZG9lcywgdGhhdCBvcGVucyB1cCBhIHdob2xlIG5ldyBhdmVudWUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQuLi4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBSQVMgbm9kZSB0aGF0JiMzOTtzIGJlaW5nIHVzZWQgYnkgYHZrbXNgIG9yIGFub3RoZXIgdmlydHVhbCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3Jhc19ub2RlX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0PTM1PURyaXZlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBub2RlcyB2aWEgdGhlXG5Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdDozNjpgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKClgIGFuZCBgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoKWAgQVBJcy5cbkRvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0LTM3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTItICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6NTM6ICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTQtICogICBpdCBhIHVuaXF1ZSBJRCBpbiB0aGUgeGFycmF5LlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM9NTA1PWludCBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTIyLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzo1MjM6ICogZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIG5ldyBSQVMgbm9kZVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01MjQtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlIHRvIHJlZ2lzdGVyXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01MzAtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjUzMTppbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTUzMi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01NDYtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzo1NDc6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25vZGVfcmVnaXN0ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01NDgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTE9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIwMy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MjA0Olx0XHRyZXQgPSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIobm9kZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIwNS1cdFx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg9MTA0PXN0cnVjdCBkcm1fZGV2aWNlO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMDYtI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6MTA3OmludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTA4LXZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTA5LSNlbHNlXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6MTEwOnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTExLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERSTSBSQVMgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGRybV9yYXNgIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYHhlYCBkcml2ZXIgaXMgdGhlIG9ubHkgb25lIEkmIzM5O20gc2VlaW5nIHJlZ2lzdGVyIGEgUkFTIG5vZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciBgeGVgIGl0c2VsZiBjb3VsZCBiZSBhIHRhcmdldCBmb3IgZnV6emluZywgYnV0IHRoZW4gSSByZW1lbWJlciB0aGUgdXN1YWwgYHhlYCBkZXBlbmRlbmN5IG9uIGEgcGh5c2ljYWwgSW50ZWwgR1BVLiBIbW1tLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gbG9va2luZyBjbG9zZXIsIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGBkcm1fcmFzYCwgaXMgKmdlbmVyaWMqLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoZSBhY3R1YWwgY29tbWFuZHMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgZHJtX3Jhc19ubF9mYW1pbHlgLiBBbmQgbG9vaywgd2UgaGF2ZSBgRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRGAgYW5kIGBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xEYCBoYW5kbGVkIGJ5IHRob3NlIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgZnVuY3Rpb25zLgoKSW50ZXJlc3RpbmcuIEkgcXVpY2tseSBzZWUgdGhleSBjaGVjayBmb3IgdGhlIG5vZGUmIzM5O3MgZXhpc3RlbmNlIHVzaW5nIGFuIGB4YV9sb2FkYCBjYWxsOgoKYGBgYwoJbm9kZSA9IHhhX2xvYWQoJmFtcDtkcm1fcmFzX3hhLCBub2RlX2lkKTsKCWlmICghbm9kZSkKCQlyZXR1cm4gLUVOT0VOVDsKYGBgCgpTbywgaWYgbm8gbm9kZXMgYXJlIHJlZ2lzdGVyZWQsIHdlJiMzOTtyZSBqdXN0IGdvaW5nIHRvIGdldCBhbiBgLUVOT0VOVGAgZXJyb3IuIEJhc2ljYWxseSwgYSBuby1vcCBpZiB0aGVyZSYjMzk7cyBub3RoaW5nIHRvIGFjdHVhbGx5IGNvbnRyb2wuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBUaGlzIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgYGRybV9yYXNgIGlzIHJlZ2lzdGVyZWQgKndoZW4qIHRoZSBgZHJtX3Jhc2AgbW9kdWxlIGlzIGxvYWRlZC4gVGhhdCYjMzk7cyB0aGUgcmVhbCBlbnRyeSBwb2ludC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBpbml0aWFsaXphdGlvbiBhY3R1YWxseSBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmxfcmVnaXN0ZXJfZmFtaWx5Lipkcm1fcmFzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM9MTc9aW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTIyLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYzoyMzpcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMjQtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjI3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIERSTSBSQVMgR0VOTCBGYW1pbHkgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgRFJNIFJBUyBHZW5lcmljIE5ldGxpbmsgZmFtaWx5IGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byBmaW5kIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIHRoZSBgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcmAgZnVuY3Rpb24gaXMgaW52b2tlZCBpbiB0aGUgY29kZS4gVGhpcyB3aWxsIHRlbGwgbWUgd2hlcmUgYW5kIHdoZW4gdGhpcyBwYXJ0aWN1bGFyIE5ldGxpbmsgZmFtaWx5IGlzIGJlaW5nIGJyb3VnaHQgb25saW5lLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsZXJzLCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgaG9va3MgdGhhdCBzZXQgaXQgYWxsIGluIG1vdGlvbi4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCBwcm92aWRlIHRoZSBlc3NlbnRpYWwgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBrbm93cyBhYm91dCBhbmQgaW50ZXJhY3RzIHdpdGggdGhpcyBHZW5lcmljIE5ldGxpbmsgZmFtaWx5IGRlZGljYXRlZCB0byBSQVMgKFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSkgY29uY2VybnMgd2l0aGluIHRoZSBEUk0gKERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlcikgc3Vic3lzdGVtLiBJIG5lZWQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgSSB6b29tIGluIG9uIGFueSBzcGVjaWZpYyBkZXRhaWwuIFRoaXMgaXMgd2hlcmUgSSBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmM9MTI0MD1zdGF0aWMgaW50IF9faW5pdCBkcm1fY29yZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYzoxMjY4Olx0cmV0ID0gZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcigpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jPTEwPXN0YXRpYyBib29sIHJlZ2lzdGVyZWQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYy0xMi0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM6MTM6ICogZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgZHJtLXJhcyBnZW5sIGZhbWlseVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYy0xNC0gKlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMTYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jOjE3OmludCBkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE4LXtcbi0tXG5pbmNsdWRlL2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmgtOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaDoxMDppbnQgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3Rlcih2b2lkKTtcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC0xMS12b2lkIGRybV9yYXNfZ2VubF9mYW1pbHlfdW5yZWdpc3Rlcih2b2lkKTtcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC0xMi0jZWxzZVxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oOjEzOnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oLTE0LXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX2dlbmxfZmFtaWx5X3VucmVnaXN0ZXIodm9pZCkgeyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERSTSBSQVMgTmV0bGluayBGYW1pbHkqKgoKT2theSwgc28gYGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXJgIGlzIGludm9rZWQgZHVyaW5nIGBkcm1fY29yZV9pbml0YC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoZSBOZXRsaW5rIGZhbWlseSBmb3IgUkFTIGlzIGFsd2F5cyByZWdpc3RlcmVkIGFzIGxvbmcgYXMgYENPTkZJR19EUk1fUkFTYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGVzdGFibGlzaGVzIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIFVzZXIgc3BhY2UgY2FuIHRoZW4gaW50ZXJhY3Qgd2l0aCB0aGlzIHRocm91Z2ggTmV0bGluayBjb21tYW5kcyBsaWtlIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4KCkJ1dCBoZXJlJiMzOTtzIGEgd3JpbmtsZTogdGhlc2UgY29tbWFuZHMgd2lsbCBqdXN0IHJldHVybiBgLUVOT0VOVGAgaWYgbm8gUkFTIG5vZGVzIGFyZSBhY3R1YWxseSByZWdpc3RlcmVkLiBNeSBuZXh0IHRob3VnaHQgaXMsIGFyZSB0aGVyZSBvdGhlciBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlc2UgUkFTIG5vZGVzIGJlc2lkZXMgYHhlYD8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSBubywganVzdCB0aGUgYHhlYCBkcml2ZXIuIFRoaXMgcmFpc2VzIGFub3RoZXIgcXVlc3Rpb24sIGNhbiB0aGUgYHhlYCBkcml2ZXIgYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgaXQgdHlwaWNhbGx5IHJlbGllcyBvbiBzcGVjaWZpYyBQQ0kgSURzLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIGB4ZWAgZHJpdmVyIGluY2x1ZGVzIGFueSBtb2NrIG9yIHZpcnR1YWwgZGV2aWNlIHN1cHBvcnQuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIGEgc3lzdGVtIHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgdmlydHVhbGl6ZWQsIG9yIHRoYXQgbWlnaHQgbm90IGhhdmUgdGhlIGhhcmR3YXJlIElEIGV4cGVjdGVkIGJ5IHhlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgZnVuY3Rpb25hbGl0eSBleHRlbmRzIHBhc3QgdGhlIGluaXRpYWwgUENJIHByb2JlLCB0byBlbnN1cmUgdGhlIFJBUyBpbnRlcmZhY2UgYWN0dWFsbHkgd29ya3MgYXMgaW50ZW5kZWQsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24mIzM5O3QgdGhlIHByaW1hcnkgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlX3BjaV9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NDg3PXN0cnVjdCB4ZV9kZXZpY2UgKnhlX2RldmljZV9jcmVhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTUxNS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6NTE2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfY3JlYXRlLCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTUxNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NzczPWludCB4ZV9kZXZpY2VfcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTgzMi19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6ODMzOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtODM0LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmM9MzkxPWludCB4ZV9nZ3R0X2luaXRfZWFybHkoc3RydWN0IHhlX2dndHQgKmdndHQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYy00NDktfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYzo0NTA6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2dndHRfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmMtNDUxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmM9MzkwPWludCB4ZV9ndWNfYWRzX2luaXQoc3RydWN0IHhlX2d1Y19hZHMgKmFkcylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jLTQxMy19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jOjQxNDpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2Fkc19pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy00MTUtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTMyMj1pbnQgeGVfZ3VjX2N0X2luaXRfbm9hbGxvYyhzdHJ1Y3QgeGVfZ3VjX2N0ICpjdClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMzU3LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzozNTg6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19jdF9pbml0X25vYWxsb2MsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMzU5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYz0zNjg9aW50IHhlX2d1Y19jdF9pbml0KHN0cnVjdCB4ZV9ndWNfY3QgKmN0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0zOTYtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjM5NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2N0X2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMzk4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM9NjI0PWludCB4ZV9ndWNfbG9nX2luaXQoc3RydWN0IHhlX2d1Y19sb2cgKmxvZylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jLTY0NC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM6NjQ1OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9ndWNfbG9nX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jLTY0Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmM9MzQyPWludCB4ZV9ndWNfcmVsYXlfaW5pdChzdHJ1Y3QgeGVfZ3VjX3JlbGF5ICpyZWxheSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmMtMzcwLX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYzozNzE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19yZWxheV9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19yZWxheS5jLTM3Mi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmM9NTc5PXN0YXRpYyBpbnQgeGVfYWRkX2h3X2VuZ2luZV9jbGFzc19kZWZhdWx0cyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmMtNjAzLX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdpbmVfY2xhc3Nfc3lzZnMuYzo2MDQ6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2FkZF9od19lbmdpbmVfY2xhc3NfZGVmYXVsdHMsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmMtNjA1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvLmM9ODk9aW50IHhlX21taW9fcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYy0xMTAtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYzoxMTE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX21taW9fcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pby5jLTExMi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTA0Mz1zdGF0aWMgdm9pZCB4ZV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYwLSAqIEZhdWx0IGluamVjdGlvbiBpcyB1c2VkIHRvIHRlc3QgdGhlIGVycm9yIHBhdGhzIG9mIHNvbWUgaW5pdGlhbGl6YXRpb25cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYxOiAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYyLSAqIGV4YW1wbGUgdGhyb3VnaCB4ZV9kZXZpY2VfcHJvYmUoKS4gVGhvc2UgZnVuY3Rpb25zIHVzZSB0aGUga2VybmVsIGZhdWx0XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzUtICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTA3NjpzdGF0aWMgaW50IHhlX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDc3LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTM0Nz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgeGVfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM0OS1cdC5pZF90YWJsZSA9IHBjaWlkbGlzdCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMzUwOlx0LnByb2JlID0geGVfcGNpX3Byb2JlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEzNTEtXHQucmVtb3ZlID0geGVfcGNpX3JlbW92ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNvZGUuYz0zNDg9aW50IHhlX3Bjb2RlX3Byb2JlX2Vhcmx5KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTM1MS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNvZGUuYzozNTI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3Bjb2RlX3Byb2JlX2Vhcmx5LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUgKi9cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYz0zNjI9aW50IHhlX3BtX2luaXRfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BtLmMtMzg0LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jOjM4NTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfcG1faW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jLTM4Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYz0xMDc9aW50IHhlX3NyaW92X2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92LmMtMTI4LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jOjEyOTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfc3Jpb3ZfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jLTEzMC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jPTE0OT1pbnQgeGVfdGlsZV9pbml0X2Vhcmx5KHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy0xNjUtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYzoxNjY6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3RpbGVfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmMtMTY3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90dW5pbmcuYz0xODM9aW50IHhlX3R1bmluZ19pbml0KHN0cnVjdCB4ZV9ndCAqZ3QpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3R1bmluZy5jLTIwNS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmM6MjA2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV90dW5pbmdfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90dW5pbmcuYy0yMDctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmM9ODM2PWludCB4ZV91Y19md19pbml0KHN0cnVjdCB4ZV91Y19mdyAqdWNfZncpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmMtODU2LX1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jOjg1NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfdWNfZndfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jLTg1OC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYz05NDA9aW50IHhlX3dhX2d0X2luaXQoc3RydWN0IHhlX2d0ICpndClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYy05NjUtfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmM6OTY2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV93YV9ndF9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmMtOTY3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jPTIwNT1pbnQgeGVfd29wY21faW5pdChzdHJ1Y3QgeGVfd29wY20gKndvcGNtKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jLTI4MS19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYzoyODI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3dvcGNtX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjI0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBHZW5lcmljIE5ldGxpbmsgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB4ZWAgZHJpdmVyLCBhbmQgaXQgc2VlbXMgdG8gbmVlZCBhIHBoeXNpY2FsIFBDSSBkZXZpY2UuIFRoZSBpc3N1ZSBpcyBJJiMzOTttIG5vdCBzZWVpbmcgdGhhdCB0aGUgUkFTIG5vZGUgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IHRoZSBgeGVgIGRyaXZlci4gSWYgdGhlIGB4ZWAgZHJpdmVyIGlzbiYjMzk7dCBwcm9iZWQsIHRoZW4gbm8gUkFTIG5vZGUgZ2V0cyByZWdpc3RlcmVkLiBUaGF0IG1lYW5zIHRoZSBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGZ1bmN0aW9ucyB3aWxsIGp1c3QgcmV0dXJuIGAtRU5PRU5UYC4gSSB3YXMgaW5pdGlhbGx5IHF1ZXN0aW9uaW5nIHdoZXRoZXIgdGhpcyB3YXMgZXZlbiB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiBJIHJlYWxpemVkIHNvbWV0aGluZy4uLgoKTGV0IG1lIGRvdWJsZS1jaGVjayAtIEkgYWxyZWFkeSBncmVwcGVkIGZvciBgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyYCBhbmQgaXQgbG9va3MgbGlrZSBvbmx5IHRoZSBgeGVgIGRyaXZlciB1c2VzIGl0LiBCdXQgd2FpdCwgZXZlbiB0aG91Z2ggdGhlIHNwZWNpZmljIFJBUyBub2RlIGlzbiYjMzk7dCByZWdpc3RlcmVkLCB0aGUgKmdlbmVyaWMqIG5ldGxpbmsgaW50ZXJmYWNlIGl0c2VsZiAqaXMqIHN0aWxsIHJlYWNoYWJsZS4gVGhlIGZ1bmN0aW9ucyBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFyZSB0aGVyZSwgcGFyc2luZyBuZXRsaW5rIGF0dHJpYnV0ZXMgYW5kIGNhbGxpbmcgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYW5kIGBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLgoKSSBjYW4gc2VlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdDoKYGBgYwppbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJdTMyIG5vZGVfaWQsIGVycm9yX2lkOwoKCWlmICghaW5mby0mZ3Q7YXR0cnMgfHwKCSAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSUQpIHx8CgkgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkpCgkJcmV0dXJuIC1FSU5WQUw7CgoJbm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTsKCWVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdKTsKCglyZXR1cm4gZG9pdF9yZXBseV90aHJlc2hvbGQoaW5mbywgbm9kZV9pZCwgZXJyb3JfaWQpOwp9CmBgYApBbmQgaG93IGBkb2l0X3JlcGx5X3RocmVzaG9sZGAgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIHJldHVybnMgYC1FTk9FTlRgOgpgYGBjCnN0YXRpYyBpbnQgZG9pdF9yZXBseV90aHJlc2hvbGQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCkKewouLi4KCW1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKCWlmICghbXNnKQoJCXJldHVybiAtRU5PTUVNOwoKCWhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pOwoJaWYgKCFoZHIpIHsKCQlyZXQgPSAtRU1TR1NJWkU7CgkJZ290byBmcmVlX21zZzsKCX0KCglyZXQgPSBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsICZhbXA7ZXJyb3JfbmFtZSwgJmFtcDt0aHJlc2hvbGQpOwoJaWYgKHJldCkKCQlnb3RvIGNhbmNlbF9tc2c7Ci4uLgpjYW5jZWxfbXNnOgoJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwpmcmVlX21zZzoKCW5sbXNnX2ZyZWUobXNnKTsKCXJldHVybiByZXQ7Cn0KYGBgCk9rYXksIHNvIHRoaXMgbG9naWMgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBldmVuIHdpdGhvdXQgYW55IG5vZGVzIHJlZ2lzdGVyZWQuIFRoZSBgeGVgIHNwZWNpZmljIGNvZGUgKCBgeGVfcmFzLmNgICwgYHhlX2RybV9yYXMuY2ApIGlzIHVucmVhY2hhYmxlLCBidXQgdGhlIGdlbmVyaWMgbmV0bGluayBjb2RlIGlzIGdvb2QuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIG5ldyBuZXRsaW5rIEFQSSwgSSB0aGluayBpdCYjMzk7cyB3b3J0aCB0aGUgdGltZSB0byBmdXp6IGl0LCBhbmQgSSBzaG91bGQgc2VlIGlmIGBDT05GSUdfRFJNX1JBU2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRFJNX1JBUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz0xMjM9Y29uZmlnIERSTV9QQU5JQ19TQ1JFRU5fUVJfVkVSU0lPTlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTEzMi1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnOjEzMzpjb25maWcgRFJNX1JBU1xuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTM0LVx0Ym9vbCBcJiMzNDtEUk0gUkFTIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipBbmFseXppbmcgdGhlIERSTV9SQVMgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIGBEUk1fUkFTYC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIG1vZHVsZXMsIGRyaXZlcnMsIGFuZCBvdGhlciBjb21wb25lbnRzIGl0IHJlbGllcyBvbiwgYW5kIHdoYXQsIGluIHR1cm4sIG1heSBiZSByZWxpYW50IG9uICppdCouIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyBvdXQgdGhlIGAjaW5jbHVkZWAgc3RhdGVtZW50cywgYnV0IHJlYWxseSAqdW5kZXJzdGFuZGluZyogdGhlIGltcGFjdCBvZiBlYWNoIGNvbm5lY3Rpb24uIEZvciBpbnN0YW5jZSwgaXMgYERSTV9SQVNgIGEgY29yZSBjb21wb25lbnQsIG9yIGRvZXMgaXQgc2l0IG9uIHRvcCBvZiBvdGhlcnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIHRpZ2h0IGNvdXBsaW5nIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHk6IGFyZSB0aGVyZSBhbnkgaW1wbGljaXQgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgb3V0IGZvcj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIG1heWJlIHVzaW5nIHNvbWUgc3BlY2lmaWMgZmlsdGVyaW5nIHRvIGtlZXAgdGhlIHNpZ25hbC10by1ub2lzZSByYXRpbyBoaWdoLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSBhbmFseXplIHRoZSBhcmNoaXRlY3R1cmUgdG8gcHV0IGl0IGFsbCBpbiBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzM6XHRjb25maWcgRFJNX1JBU1xuIDEzNDpcdFx0Ym9vbCBcJiMzNDtEUk0gUkFTIHN1cHBvcnRcJiMzNDtcbiAxMzU6XHRcdGRlcGVuZHMgb24gRFJNXG4gMTM2Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDEzNzpcdFx0aGVscFxuIDEzODpcdFx0ICBFbmFibGVzIHRoZSBEUk0gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5IGFuZCBTZXJ2aWNlYWJpbGl0eSlcbiAxMzk6XHRcdCAgc3VwcG9ydCBmb3IgRFJNIGRyaXZlcnMuIFRoaXMgcHJvdmlkZXMgYSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlXG4gMTQwOlx0XHQgIGZvciBlcnJvciByZXBvcnRpbmcgYW5kIHF1ZXJpZXMuXG4gMTQxOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAxNDI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNzEKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogMTMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEUk1fUkFTIGZvciBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBgRFJNX1JBU2AgY29kZS4gSXQgaGluZ2VzIG9uIGBEUk1gIGFuZCBgTkVUYCwgYW5kIGl0IHByb3ZpZGVzIGEgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZS4gSSBrbm93IHRoaXMgaW50ZXJmYWNlIGlzIHJlYWNoYWJsZSwgc28gdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAsIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCBhbmQgYHNldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYXMgd2VsbDsgdGhleSYjMzk7cmUgaW50ZXJ0d2luZWQuIEkmIzM5O20gZGlzY2FyZGluZyB0aGUgYHhlYCBkcml2ZXIgZnVuY3Rpb25zIChgeGVfcmFzX2dldF90aHJlc2hvbGRgLCBgeGVfcmFzX3NldF90aHJlc2hvbGRgKSBzaW5jZSB0aGV5IHJlcXVpcmUgaGFyZHdhcmUgYW5kIGFyZSB0aHVzIG5vdCByZWFjaGFibGUgaW4gYSBnZW5lcmFsIGZ1enppbmcgY29udGV4dC4KCkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYERSTV9SQVNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3Qg4oCTICYjMzQ7SWYgaW4gZG91YnQsIHNheSBOJiMzNDsuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGFkZCBgRFJNX1JBU2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgbG9vayBmb3IgbW9yZS4gYG1zZ19yZXBseV90aHJlc2hvbGRgIGlzIGFsc28gYWRkZWQuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIGlmIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIHN1Y2NlZWRzLCB3aGljaCBuZWVkcyBhIHJlZ2lzdGVyZWQgbm9kZSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIGhhcmR3YXJlLiBIb3dldmVyLCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFjdHVhbGx5IGNhbGxzIGBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCB3aGljaCAqcmV0dXJucyogYC1FTk9FTlRgIGlmIG5vIG5vZGUgaXMgcmVnaXN0ZXJlZC4gU28sIGV2ZW4gdGhvdWdoIGl0IHJldHVybnMgYW4gZXJyb3IsIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgKmlzKiByZWFjaGFibGUuCgpMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB1c2FnZXMgb2YgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YC4gSXQmIzM5O3MgcmVnaXN0ZXJlZCBpbiBgZHJtX3Jhc19ubF9vcHNgLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIG5ldGxpbmsgcGFyc2luZywgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCwgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCwgYGRvaXRfcmVwbHlfdGhyZXNob2xkYCwgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAsIGFuZCBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCBhcmUgYWxsIHJlYWNoYWJsZS4KCkV2ZW4gdGhvdWdoIG1hbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGAtRU5PRU5UYCBvciBzaW1pbGFyIGluIHRoZSBhYnNlbmNlIG9mIHJlZ2lzdGVyZWQgaGFyZHdhcmUgb3IgdmFsaWQgaW5wdXRzLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHRoZSBhdHRyaWJ1dGUgdmFsaWRhdGlvbiwgYW5kIHRoZSBpbml0aWFsIGxvZ2ljIG9mIHRoZSBgZG9pdGAgaGFuZGxlcnMgKmFyZSogZXhlY3V0ZWQuIFNvLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIQoKU3BlY2lmaWNhbGx5LCBgZG9pdF9yZXBseV90aHJlc2hvbGRgIGlzIGFuIGludGVyZXN0aW5nIHBvaW50LiBJdCBhbGxvY2F0ZXMgYSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCB0aGVuIGNhbmNlbHMgaXQgaWYgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgZmFpbHMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYnV0IGl0JiMzOTtzIGEgcGxhY2Ugd2hlcmUgbWVtb3J5IGxlYWtzIG9yIG90aGVyIGlzc3VlcyBjb3VsZCBhcmlzZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB1cCB0byBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCByZXR1cm5pbmcgYC1FTk9FTlRgLCB0aGVuIGBjYW5jZWxfbXNnYCBhbmQgYGZyZWVfbXNnYCBhcmUgZXhlY3V0ZWQuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgIGFuZCBmb2N1cyBvbjoKKiAgIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAKKiAgIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAKKiAgIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAKKiAgIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgCiogICBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYAoKVGhlIHJlcXVpcmVkIGNvbmZpZyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBEUk1fUkFTYC4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBgeGVgIGRyaXZlciwgYW5kLCBhcyBleHBlY3RlZCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIG1vY2sgaXQuIFRoZSBgeGVgIGRyaXZlciBpcyBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyLCBtZWFuaW5nIGB4ZV9yYXNfZ2V0X3RocmVzaG9sZGAgYW5kIGB4ZV9yYXNfc2V0X3RocmVzaG9sZGAgYXJlIHVucmVhY2hhYmxlIGluIGEgbm9uLWhhcmR3YXJlIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RFJNX1JBUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0JiMzNDssCiAgICAmIzM0O2RybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0JiMzNDssCiAgICAmIzM0O2RvaXRfcmVwbHlfdGhyZXNob2xkJiMzNDssCiAgICAmIzM0O2dldF9ub2RlX2Vycm9yX3RocmVzaG9sZCYjMzQ7LAogICAgJiMzNDtzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RSTV9SQVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCYjMzQ7LAogICAgJiMzNDtkb2l0X3JlcGx5X3RocmVzaG9sZCYjMzQ7LAogICAgJiMzNDtnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7c2V0X25vZGVfZXJyb3JfdGhyZXNob2xkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kcyAoR0VUX0VSUk9SX1RIUkVTSE9MRCBhbmQgU0VUX0VSUk9SX1RIUkVTSE9MRCkgdG8gdGhlIERSTSBSQVMgc3Vic3lzdGVtLiBXaGlsZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhlIGB4ZWAgZHJpdmVyIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgR1BVcywgdGhlIGdlbmVyaWMgbmV0bGluayBwYXJzaW5nLCBtZXNzYWdlIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsIHZhbGlkYXRpb24gbG9naWMgaW4gYGRybV9yYXMuY2AgYXJlIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgYXR0cmlidXRlIHZhbGlkYXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTc6MzguMjgwMjk3NzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3ODI2NTIxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU3OjM4LjI4MDMwNDYxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNzExMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMDo1NzozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjI3MThmOGFlZTA5ZGQ3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG5AQCAtNTYsNiArNTYsMTAgQEAgVXNlciBzcGFjZSB0b29scyBjYW46XFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxcbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcXG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXFxuKyogUXVlcnkgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBnZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmcgYm90aFxcbisgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4rKiBTZXQgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBzZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmdcXG4rICBgYG5vZGUtaWRgYCwgYGBlcnJvci1pZGBgIGFuZCBgYGVycm9yLXRocmVzaG9sZGBgIGFzIHBhcmFtZXRlcnMuXFxuIFxcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0xMTEsMyArMTE1LDE3IEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxcbiBcXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjF9J1xcbiAgICAgTm9uZVxcbitcXG4rRXhhbXBsZTogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlclxcbitcXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcXG4rXFxuKyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gZ2V0LWVycm9yLXRocmVzaG9sZCAtLWpzb24gJ3tcXFwibm9kZS1pZFxcXCI6MCwgXFxcImVycm9yLWlkXFxcIjoxfSdcXG4rICAgIHsnZXJyb3ItaWQnOiAxLCAnZXJyb3ItbmFtZSc6ICdlcnJvcl9uYW1lMScsICdlcnJvci10aHJlc2hvbGQnOiAxNn1cXG4rXFxuK0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogYmFzaFxcbitcXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBzZXQtZXJyb3ItdGhyZXNob2xkIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjEsIFxcXCJlcnJvci10aHJlc2hvbGRcXFwiOjh9J1xcbisgICAgTm9uZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi45Y2Y3ZjljZGUyNDI1MiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbkBAIC02OSw2ICs2OSwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBlcnJvci10aHJlc2hvbGRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IEVycm9yIHRocmVzaG9sZCBvZiB0aGUgY291bnRlci5cXG4gXFxuIG9wZXJhdGlvbnM6XFxuICAgbGlzdDpcXG5AQCAtMTI0LDMgKzEyOCwzMSBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGdldC1lcnJvci10aHJlc2hvbGRcXG4rICAgICAgZG9jOiBcXHUwMDNlLVxcbisgICAgICAgICAgIFJldHJpZXZlIGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXFxuKyAgICAgICAgICAgVGhlIHJlc3BvbnNlIGluY2x1ZGVzIHRoZSBpZCwgdGhlIG5hbWUsIGFuZCBjdXJyZW50IHRocmVzaG9sZFxcbisgICAgICAgICAgIG9mIHRoZSBjb3VudGVyLlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzXFxuKyAgICAgIGZsYWdzOiBbYWRtaW4tcGVybV1cXG4rICAgICAgZG86XFxuKyAgICAgICAgcmVxdWVzdDpcXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xcbisgICAgICAgIHJlcGx5OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBlcnJvci1pZFxcbisgICAgICAgICAgICAtIGVycm9yLW5hbWVcXG4rICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcXG4rICAgIC1cXG4rICAgICAgbmFtZTogc2V0LWVycm9yLXRocmVzaG9sZFxcbisgICAgICBkb2M6IFxcdTAwM2UtXFxuKyAgICAgICAgICAgU2V0IGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXFxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWNvdW50ZXItYXR0cnNcXG4rICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXVxcbisgICAgICBkbzpcXG4rICAgICAgICByZXF1ZXN0OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBub2RlLWlkXFxuKyAgICAgICAgICAgIC0gZXJyb3ItaWRcXG4rICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uZDYwYzQwYWM1NDI3YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5AQCAtNDEsNiArNDEsMTMgQEBcXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cXG4gICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC5cXG4gICpcXG4rICogNC4gR0VUX0VSUk9SX1RIUkVTSE9MRDogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cXG4rICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElEIGFuZCBFcnJvciBJRC5cXG4rICogICAgUmV0dXJucyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cXG4rICpcXG4rICogNS4gU0VUX0VSUk9SX1RIUkVTSE9MRDogU2V0IGVycm9yIHRocmVzaG9sZCBvZiBhIGdpdmVuIGNvdW50ZXIuXFxuKyAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQgYW5kIHRocmVzaG9sZCB0byBiZSBzZXQuXFxuKyAqXFxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxcbiAgKlxcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xcbkBAIC02MSw2ICs2OCwxNiBAQFxcbiAgKiAgICAgKyBUaGUgZXJyb3IgY291bnRlcnMgaW4gdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdG8gYmUgY29udGlndW91cywgYnV0IHRoZVxcbiAgKiAgICAgICBkcml2ZXIgbXVzdCByZXR1cm4gLUVOT0VOVCB0byB0aGUgcXVlcnlfZXJyb3JfY291bnRlciBhcyBhbiBpbmRpY2F0aW9uXFxuICAqICAgICAgIHRoYXQgdGhlIElEIHNob3VsZCBiZSBza2lwcGVkIGFuZCBub3QgbGlzdGVkIGluIHRoZSBuZXRsaW5rIEFQSS5cXG4rICogICAgICsgVGhlIGRyaXZlciBjYW4gb3B0aW9uYWxseSBpbXBsZW1lbnQgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgYW5kXFxuKyAqICAgICAgIHNldF9lcnJvcl90aHJlc2hvbGQoKSBjYWxsYmFja3MgdG8gZmFjaWxpdGF0ZSBnZXR0aW5nL3NldHRpbmcgZXJyb3JcXG4rICogICAgICAgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyLiBUaHJlc2hvbGQgaW4gUkFTIGNvbnRleHQgbWVhbnMgdGhlIG51bWJlciBvZlxcbisgKiAgICAgICBlcnJvcnMgdGhlIGhhcmR3YXJlIGlzIGV4cGVjdGVkIHRvIGFjY3VtdWxhdGUgYmVmb3JlIGl0IHJhaXNlcyB0aGVtIHRvXFxuKyAqICAgICAgIHNvZnR3YXJlLiBUaGlzIGlzIHRvIGhhdmUgYSBmaW5lIGdyYWluZWQgY29udHJvbCBvdmVyIGVycm9yIG5vdGlmaWNhdGlvbnNcXG4rICogICAgICAgdGhhdCBhcmUgcmFpc2VkIGJ5IHRoZSBoYXJkd2FyZS5cXG4rICogICAgICsgVGhlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgZXJyb3IgdGhyZXNob2xkIGJvdW5kcyBjaGVja2luZy5cXG4rICogICAgICsgVGhyZXNob2xkIG9mIDAgY2FuIG1lYW4gaW52YWxpZCB0aHJlc2hvbGQgb3IgYWN0IGFzIGEgZGlzYWJsZSBub3RpZmljYXRpb25zXFxuKyAqICAgICAgIHRvZ2dsZSBmb3IgdGhhdCBjb3VudGVyIGRlcGVuZGluZyBvbiB1c2VjYXNlIGFuZCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlXFxuKyAqICAgICAgIGZvciBoYW5kbGluZyBpdCBhcyBuZWVkZWQuXFxuICAqXFxuICAqIE5ldGxpbmsgaGFuZGxlcnM6XFxuICAqXFxuQEAgLTcyLDYgKzg5LDEwIEBAXFxuICAqICAgb3BlcmF0aW9uLCBmZXRjaGluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXFxuICAqIC0gZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgQ0xFQVJfRVJST1JfQ09VTlRFUiBkb2l0XFxuICAqICAgb3BlcmF0aW9uLCBjbGVhcmluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXFxuKyAqIC0gZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKTogSW1wbGVtZW50cyB0aGUgR0VUX0VSUk9SX1RIUkVTSE9MRCBkb2l0XFxuKyAqICAgb3BlcmF0aW9uLCBmZXRjaGluZyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cXG4rICogLSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBTRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcXG4rICogICBvcGVyYXRpb24sIHNldHRpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXFxuICAqL1xcbiBcXG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoZHJtX3Jhc194YSk7XFxuQEAgLTE2OCw2ICsxODksNDAgQEAgc3RhdGljIGludCBnZXRfbm9kZV9lcnJvcl9jb3VudGVyKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsXFxuIFxcdHJldHVybiBub2RlLVxcdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkLCBuYW1lLCB2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLCB1MzIgKnRocmVzaG9sZClcXG4re1xcbitcXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xcbitcXG4rXFx0bm9kZSA9IHhhX2xvYWQoXFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xcbitcXHRpZiAoIW5vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChlcnJvcl9pZCBcXHUwMDNjIG5vZGUtXFx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwgZXJyb3JfaWQgXFx1MDAzZSBub2RlLVxcdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3QpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIG5vZGUtXFx1MDAzZXF1ZXJ5X2Vycm9yX3RocmVzaG9sZChub2RlLCBlcnJvcl9pZCwgbmFtZSwgdGhyZXNob2xkKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQodTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcXG4re1xcbitcXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xcbitcXG4rXFx0bm9kZSA9IHhhX2xvYWQoXFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xcbitcXHRpZiAoIW5vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoZXJyb3JfaWQgXFx1MDAzYyBub2RlLVxcdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkIFxcdTAwM2Ugbm9kZS1cXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBub2RlLVxcdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkKG5vZGUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcXG4ge1xcbkBAIC0xODYsNiArMjQxLDIyIEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcXG4gXFx0XFx0XFx0ICAgdmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1zZ19yZXBseV90aHJlc2hvbGQoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxcbitcXHRcXHRcXHQgICAgICAgdTMyIHRocmVzaG9sZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCwgdGhyZXNob2xkKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbiBcXHRcXHRcXHQgICAgdTMyIGVycm9yX2lkKVxcbiB7XFxuQEAgLTIwMSwyNSArMjcyLDY1IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcXG4gXFxuIFxcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xcbiBcXHRpZiAoIWhkcikge1xcbi1cXHRcXHRubG1zZ19mcmVlKG1zZyk7XFxuLVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfY291bnRlcihub2RlX2lkLCBlcnJvcl9pZCxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZXJyb3JfbmFtZSwgXFx1MDAyNnZhbHVlKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbiBcXG4gXFx0cmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XFxuLVxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbitcXG4rXFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbitcXG4rXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcXG4rXFxuK2NhbmNlbF9tc2c6XFxuK1xcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcXG4rZnJlZV9tc2c6XFxuK1xcdG5sbXNnX2ZyZWUobXNnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkb2l0X3JlcGx5X3RocmVzaG9sZChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKmVycm9yX25hbWU7XFxuK1xcdHN0cnVjdCBza19idWZmICptc2c7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmhkcjtcXG4rXFx0dTMyIHRocmVzaG9sZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtc2cpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aGRyID0gZ2VubG1zZ19pcHV0KG1zZywgaW5mbyk7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCBcXHUwMDI2ZXJyb3JfbmFtZSwgXFx1MDAyNnRocmVzaG9sZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2FuY2VsX21zZztcXG4rXFxuK1xcdHJldCA9IG1zZ19yZXBseV90aHJlc2hvbGQobXNnLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdGhyZXNob2xkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbitcXG4gXFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbiBcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcXG4rXFxuK2NhbmNlbF9tc2c6XFxuK1xcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcXG4rZnJlZV9tc2c6XFxuK1xcdG5sbXNnX2ZyZWUobXNnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTM1NSw2ICs0NjYsNTkgQEAgaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBub2RlLVxcdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyKG5vZGUsIGVycm9yX2lkKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBRdWVyeSBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyXFxuKyAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcXG4rICogQGluZm86IEdlbmVyaWMgTmV0bGluayBpbmZvIGNvbnRhaW5pbmcgYXR0cmlidXRlcyBvZiB0aGUgcmVxdWVzdFxcbisgKlxcbisgKiBFeHRyYWN0cyB0aGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCByZXRyaWV2ZXNcXG4rICogdGhlIGVycm9yIHRocmVzaG9sZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb3VudGVyLiBTZW5kcyB0aGUgcmVzdWx0IGJhY2sgdG9cXG4rICogdGhlIHJlcXVlc3RpbmcgdXNlciB2aWEgdGhlIHN0YW5kYXJkIEdlbmwgcmVwbHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0dTMyIG5vZGVfaWQsIGVycm9yX2lkO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRycyB8fFxcbitcXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxcbitcXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcXG4rXFx0ZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xcbitcXG4rXFx0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KCkgLSBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgY291bnRlclxcbisgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXFxuKyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3RcXG4rICpcXG4rICogRXh0cmFjdHMgdGhlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZFxcbisgKiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHR1MzIgbm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZDtcXG4rXFxuK1xcdGlmICghaW5mby1cXHUwMDNlYXR0cnMgfHxcXG4rXFx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRCkgfHxcXG4rXFx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpIHx8XFxuK1xcdCAgICBHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bm9kZV9pZCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcXG4rXFx0ZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xcbitcXHR0aHJlc2hvbGQgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTERdKTtcXG4rXFxuK1xcdHJldHVybiBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGEgbmV3IFJBUyBub2RlXFxuICAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZSB0byByZWdpc3RlclxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbmluZGV4IGRlYTFjMWIyNDk0ZTgxLi4wMmU4ZTUwNTRkMDU2YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbkBAIC0yOCw2ICsyOCwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19jbGVhcl9lcnJvcl9jb3VudGVyX25sX3BvbGljeVtEUk1fUkFTX0FfRVxcbiBcXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuIH07XFxuIFxcbisvKiBEUk1fUkFTX0NNRF9HRVRfRVJST1JfVEhSRVNIT0xEIC0gZG8gKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRybV9yYXNfZ2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3lbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQgKyAxXSA9IHtcXG4rXFx0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuK1xcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4rfTtcXG4rXFxuKy8qIERSTV9SQVNfQ01EX1NFVF9FUlJPUl9USFJFU0hPTEQgLSBkbyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19zZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQgKyAxXSA9IHtcXG4rXFx0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuK1xcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4rXFx0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4rfTtcXG4rXFxuIC8qIE9wcyB0YWJsZSBmb3IgZHJtX3JhcyAqL1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XFxuIFxcdHtcXG5AQCAtNTYsNiArNjksMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xcbiBcXHRcXHQubWF4YXR0clxcdD0gRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQsXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jbWRcXHRcXHQ9IERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsXFxuK1xcdFxcdC5kb2l0XFx0XFx0PSBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCxcXG4rXFx0XFx0LnBvbGljeVxcdFxcdD0gZHJtX3Jhc19nZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeSxcXG4rXFx0XFx0Lm1heGF0dHJcXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxcbitcXHRcXHQuZmxhZ3NcXHRcXHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuY21kXFx0XFx0PSBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xELFxcbitcXHRcXHQuZG9pdFxcdFxcdD0gZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQsXFxuK1xcdFxcdC5wb2xpY3lcXHRcXHQ9IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXFxuK1xcdFxcdC5tYXhhdHRyXFx0PSBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsXFxuK1xcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcXG5pbmRleCBhMzk4NjQzNTcyYTVhMC4uNTdiMWU2NDdkODMzMGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcXG5AQCAtMjAsNiArMjAsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbitpbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIFxcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uNGFmYTJhZDk4MzAwZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG5AQCAtODYsNiArODYsMzggQEAgc3RhdGljIGludCBjbGVhcl9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9cXG4gXFx0cmV0dXJuIGNsZWFyX2Vycm9yX2NvdW50ZXIoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHF1ZXJ5X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZChzdHJ1Y3QgZHJtX3Jhc19ub2RlICplcCwgdTMyIGVycm9yX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKipuYW1lLCB1MzIgKnRocmVzaG9sZClcXG4re1xcbitcXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGVwLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXFx1MDAyNnhlLVxcdTAwM2VyYXM7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXFx1MDAzZWluZm9bRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFXTtcXG4rXFxuK1xcdGlmICghaW5mbyB8fCAhaW5mb1tlcnJvcl9pZF0ubmFtZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAoIXhlLVxcdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQqbmFtZSA9IGluZm9bZXJyb3JfaWRdLm5hbWU7XFxuK1xcdHJldHVybiB4ZV9yYXNfZ2V0X3RocmVzaG9sZCh4ZSwgRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFLCBlcnJvcl9pZCwgdGhyZXNob2xkKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzZXRfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkKHN0cnVjdCBkcm1fcmFzX25vZGUgKmVwLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpXFxuK3tcXG4rXFx0c3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFxcdTAwMjZ4ZS1cXHUwMDNlcmFzO1xcbitcXHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvID0gcmFzLVxcdTAwM2VpbmZvW0RSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRV07XFxuK1xcbitcXHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKCF4ZS1cXHUwMDNlaW5mby5oYXNfc3lzY3RybClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHhlX3Jhc19zZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqYWxsb2NhdGVfYW5kX2NvcHlfY291bnRlcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIHtcXG4gXFx0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqY291bnRlcjtcXG5AQCAtMTM0LDYgKzE2Niw4IEBAIHN0YXRpYyBpbnQgYXNzaWduX25vZGVfcGFyYW1zKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxcbiBcXHRpZiAoc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFKSB7XFxuIFxcdFxcdG5vZGUtXFx1MDAzZXF1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyO1xcbiBcXHRcXHRub2RlLVxcdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcXG4rXFx0XFx0bm9kZS1cXHUwMDNlcXVlcnlfZXJyb3JfdGhyZXNob2xkID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfdGhyZXNob2xkO1xcbitcXHRcXHRub2RlLVxcdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkID0gc2V0X2NvcnJlY3RhYmxlX2Vycm9yX3RocmVzaG9sZDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0bm9kZS1cXHUwMDNlcXVlcnlfZXJyb3JfY291bnRlciA9IHF1ZXJ5X3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcXG4gXFx0XFx0bm9kZS1cXHUwMDNlY2xlYXJfZXJyb3JfY291bnRlciA9IGNsZWFyX3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuaW5kZXggNDRmNGUxYTM0NTViN2MuLmFmZWU4MjAyZDI0ZWZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xcbkBAIC0yNzAsNiArMjcwLDExMSBAQCBpbnQgeGVfcmFzX2NsZWFyX2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogeGVfcmFzX2dldF90aHJlc2hvbGQoKSAtIEdldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZFxcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxcbisgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHF1ZXJpZWQgKFxcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXFxuKyAqIEBjb21wb25lbnQ6IEVycm9yIGNvbXBvbmVudCB0byBiZSBxdWVyaWVkIChcXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcXG4rICogQHRocmVzaG9sZDogQ291bnRlciB0aHJlc2hvbGRcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIgYmFzZWQgb25cXG4rICogc2V2ZXJpdHkgYW5kIGNvbXBvbmVudC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpXFxuK3tcXG4rXFx0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XFxuK1xcdHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHJlcXVlc3QgPSB7fTtcXG4rXFx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcXG4rXFx0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlcjtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNvdW50ZXIgPSBcXHUwMDI2cmVxdWVzdC5jb3VudGVyO1xcbitcXHRjb3VudGVyLVxcdTAwM2Vjb21tb24uc2V2ZXJpdHkgPSBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcXG4rXFx0Y291bnRlci1cXHUwMDNlY29tbW9uLmNvbXBvbmVudCA9IGRybV90b194ZV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XFxuK1xcbitcXHR4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKFxcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXFx1MDAyNnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKTtcXG4rXFxuK1xcdGd1YXJkKHhlX3BtX3J1bnRpbWUpKHhlKTtcXG4rXFx0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXFx1MDAyNnhlLVxcdTAwM2VzYywgXFx1MDAyNmNvbW1hbmQsIFxcdTAwMjZsZW4pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHhlX2Vycih4ZSwgXFxcInN5c2N0cmw6IGZhaWxlZCB0byBnZXQgdGhyZXNob2xkICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuICE9IHNpemVvZihyZXNwb25zZSkpIHtcXG4rXFx0XFx0eGVfZXJyKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBnZXQgdGhyZXNob2xkIHJlc3BvbnNlIGxlbmd0aCAlenUgKGV4cGVjdGVkICV6dSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBsZW4sIHNpemVvZihyZXNwb25zZSkpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0Y291bnRlciA9IFxcdTAwMjZyZXNwb25zZS5jb3VudGVyO1xcbitcXHQqdGhyZXNob2xkID0gcmVzcG9uc2UudGhyZXNob2xkO1xcbitcXG4rXFx0eGVfZGJnKHhlLCBcXFwiW1JBU106IGdldCB0aHJlc2hvbGQgJXUgZm9yICVzICVzXFxcXG5cXFwiLCAqdGhyZXNob2xkLFxcbitcXHQgICAgICAgY29tcF90b19zdHIoY291bnRlci1cXHUwMDNlY29tbW9uLmNvbXBvbmVudCksIHNldl90b19zdHIoY291bnRlci1cXHUwMDNlY29tbW9uLnNldmVyaXR5KSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeGVfcmFzX3NldF90aHJlc2hvbGQoKSAtIFNldCBlcnJvciBjb3VudGVyIHRocmVzaG9sZFxcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxcbisgKiBAc2V2ZXJpdHk6IEVycm9yIHNldmVyaXR5IHRvIGJlIHNldCAoXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcXG4rICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXFxuKyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlciBiYXNlZCBvblxcbisgKiBzZXZlcml0eSBhbmQgY29tcG9uZW50LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKVxcbit7XFxuK1xcdHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xcbitcXHRzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCByZXF1ZXN0ID0ge307XFxuK1xcdHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCBjb21tYW5kID0ge307XFxuK1xcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXI7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjb3VudGVyID0gXFx1MDAyNnJlcXVlc3QuY291bnRlcjtcXG4rXFx0Y291bnRlci1cXHUwMDNlY29tbW9uLnNldmVyaXR5ID0gZHJtX3RvX3hlX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XFxuK1xcdGNvdW50ZXItXFx1MDAzZWNvbW1vbi5jb21wb25lbnQgPSBkcm1fdG9feGVfcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xcbitcXHRyZXF1ZXN0LnRocmVzaG9sZCA9IHRocmVzaG9sZDtcXG4rXFxuK1xcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXFx1MDAyNmNvbW1hbmQsIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCwgWEVfU1lTQ1RSTF9DTURfU0VUX1RIUkVTSE9MRCxcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCBcXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xcbitcXG4rXFx0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xcbitcXHRyZXQgPSB4ZV9zeXNjdHJsX3NlbmRfY29tbWFuZChcXHUwMDI2eGUtXFx1MDAzZXNjLCBcXHUwMDI2Y29tbWFuZCwgXFx1MDAyNmxlbik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0eGVfZXJyKHhlLCBcXFwic3lzY3RybDogZmFpbGVkIHRvIHNldCB0aHJlc2hvbGQgJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsZW4gIT0gc2l6ZW9mKHJlc3BvbnNlKSkge1xcbitcXHRcXHR4ZV9lcnIoeGUsIFxcXCJzeXNjdHJsOiB1bmV4cGVjdGVkIHNldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIGxlbiwgc2l6ZW9mKHJlc3BvbnNlKSk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0eGVfZXJyKHhlLCBcXFwic3lzY3RybDogc2V0IHRocmVzaG9sZCBjb21tYW5kIGZhaWxlZCB3aXRoIHN0YXR1cyAlI3hcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICByZXNwb25zZS5zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRjb3VudGVyID0gXFx1MDAyNnJlc3BvbnNlLmNvdW50ZXI7XFxuK1xcbitcXHR4ZV9kYmcoeGUsIFxcXCJbUkFTXTogc2V0IHRocmVzaG9sZCAldSBmb3IgJXMgJXNcXFxcblxcXCIsIHJlc3BvbnNlLnRocmVzaG9sZCxcXG4rXFx0ICAgICAgIGNvbXBfdG9fc3RyKGNvdW50ZXItXFx1MDAzZWNvbW1vbi5jb21wb25lbnQpLCBzZXZfdG9fc3RyKGNvdW50ZXItXFx1MDAzZWNvbW1vbi5zZXZlcml0eSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHhlX3Jhc19pbml0IC0gSW5pdGlhbGl6ZSBYZSBSQVNcXG4gICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oXFxuaW5kZXggYmEwYjAyMjRkZjIzNjUuLjFhYTQzYzU0YjcxMGMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxcbkBAIC0xNSw2ICsxNSw4IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XFxuIGludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xcbiBpbnQgeGVfcmFzX2NsZWFyX2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpO1xcbitpbnQgeGVfcmFzX2dldF90aHJlc2hvbGQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdGhyZXNob2xkKTtcXG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKTtcXG4gdm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oXFxuaW5kZXggNjY4OGUxMWY1N2E4NjIuLjc0N2I2NTE4ODBjZDU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxcbkBAIC0xMjEsNCArMTIxLDU1IEBAIHN0cnVjdCB4ZV9yYXNfY2xlYXJfY291bnRlcl9yZXNwb25zZSB7XFxuIFxcdC8qKiBAcmVzZXJ2ZWQxOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xcbiBcXHR1MzIgcmVzZXJ2ZWQxWzNdO1xcbiB9IF9fcGFja2VkO1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IC0gUmVxdWVzdCBzdHJ1Y3R1cmUgZm9yIGdldCB0aHJlc2hvbGRcXG4rICovXFxuK3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHtcXG4rXFx0LyoqIEBjb3VudGVyOiBDb3VudGVyIHRvIGdldCB0aHJlc2hvbGQgZm9yICovXFxuK1xcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcXG4rXFx0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0dTMyIHJlc2VydmVkO1xcbit9IF9fcGFja2VkO1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxcbisgKi9cXG4rc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHtcXG4rXFx0LyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovXFxuK1xcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcXG4rXFx0LyoqIEB0aHJlc2hvbGQ6IEN1cnJlbnQgdGhyZXNob2xkIG9mIHRoZSBjb3VudGVyICovXFxuK1xcdHUzMiB0aHJlc2hvbGQ7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXFxuK1xcdHUzMiByZXNlcnZlZFs0XTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCAtIFJlcXVlc3Qgc3RydWN0dXJlIGZvciBzZXQgdGhyZXNob2xkXFxuKyAqL1xcbitzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCB7XFxuK1xcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBzZXQgdGhyZXNob2xkIGZvciAqL1xcbitcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XFxuK1xcdC8qKiBAdGhyZXNob2xkOiBUaHJlc2hvbGQgdG8gYmUgc2V0ICovXFxuK1xcdHUzMiB0aHJlc2hvbGQ7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXFxuK1xcdHUzMiByZXNlcnZlZDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIHNldCB0aHJlc2hvbGRcXG4rICovXFxuK3N0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSB7XFxuK1xcdC8qKiBAY291bnRlcjogQ291bnRlciBJRCAqL1xcbitcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovXFxuK1xcdHUzMiByZXNlcnZlZDtcXG4rXFx0LyoqIEB0aHJlc2hvbGQ6IFVwZGF0ZWQgdGhyZXNob2xkICovXFxuK1xcdHUzMiB0aHJlc2hvbGQ7XFxuK1xcdC8qKiBAc3RhdHVzOiBPcGVyYXRpb24gc3RhdHVzICovXFxuK1xcdHUzMiBzdGF0dXM7XFxuK1xcdC8qKiBAcmVzZXJ2ZWQxOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xcbitcXHR1MzIgcmVzZXJ2ZWQxWzJdO1xcbit9IF9fcGFja2VkO1xcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jXFxuaW5kZXggYjRkMTczMjlhZjZjOGQuLjA1NDdiN2IzOTcyNjZlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jXFxuQEAgLTQ5LDE4ICs0OSw2IEBAIHN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jXFxuIFxcdH0gd2hpbGUgKHJlc3BvbnNlLVxcdTAwM2Vjb3VudCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGV2ZW50X3JlcXVlc3RfcHJlcGFyZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgKmhlYWRlcixcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KVxcbi17XFxuLVxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4ZS1cXHUwMDNlZHJtLmRldik7XFxuLVxcbi1cXHRoZWFkZXItXFx1MDAzZWRhdGEgPSBSRUdfRklFTERfUFJFUChBUFBfSERSX0dST1VQX0lEX01BU0ssIFhFX1NZU0NUUkxfR1JPVVBfR0ZTUCkgfFxcbi1cXHRcXHQgICAgICAgUkVHX0ZJRUxEX1BSRVAoQVBQX0hEUl9DT01NQU5EX01BU0ssIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UKTtcXG4tXFxuLVxcdHJlcXVlc3QtXFx1MDAzZXZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDtcXG4tXFx0cmVxdWVzdC1cXHUwMDNlZm4gPSBQQ0lfRlVOQyhwZGV2LVxcdTAwM2VkZXZmbik7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiB4ZV9zeXNjdHJsX2V2ZW50KCkgLSBIYW5kbGVyIGZvciBTeXN0ZW0gQ29udHJvbGxlciBldmVudHNcXG4gICogQHNjOiBTeXN0ZW0gQ29udHJvbGxlciBpbnN0YW5jZVxcbkBAIC03MiwxNiArNjAsMTYgQEAgdm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYylcXG4gXFx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcXG4gXFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTtcXG4gXFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCByZXF1ZXN0ID0ge307XFxuLVxcdHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyIGhlYWRlciA9IHt9O1xcbitcXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHNjX3RvX3hlKHNjKTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHhlLVxcdTAwM2Vkcm0uZGV2KTtcXG4rXFxuK1xcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XFxuIFxcbi1cXHR4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3Moc2NfdG9feGUoc2MpKTtcXG4tXFx0ZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgXFx1MDAyNmhlYWRlciwgXFx1MDAyNnJlcXVlc3QpO1xcbitcXHRyZXF1ZXN0LnZlY3RvciA9IHhlX2RldmljZV9oYXNfbXNpeCh4ZSkgPyBYRV9JUlFfREVGQVVMVF9NU0lYIDogMDtcXG4rXFx0cmVxdWVzdC5mbiA9IFBDSV9GVU5DKHBkZXYtXFx1MDAzZWRldmZuKTtcXG4gXFxuLVxcdGNvbW1hbmQuaGVhZGVyID0gaGVhZGVyO1xcbi1cXHRjb21tYW5kLmRhdGFfaW4gPSBcXHUwMDI2cmVxdWVzdDtcXG4tXFx0Y29tbWFuZC5kYXRhX2luX2xlbiA9IHNpemVvZihyZXF1ZXN0KTtcXG4tXFx0Y29tbWFuZC5kYXRhX291dCA9IFxcdTAwMjZyZXNwb25zZTtcXG4tXFx0Y29tbWFuZC5kYXRhX291dF9sZW4gPSBzaXplb2YocmVzcG9uc2UpO1xcbitcXHR4ZV9zeXNjdHJsX2NyZWF0ZV9jb21tYW5kKFxcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5ULFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksIFxcdTAwMjZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7XFxuIFxcbiBcXHRndWFyZChtdXRleCkoXFx1MDAyNnNjLVxcdTAwM2VldmVudF9sb2NrKTtcXG4gXFx0Z2V0X3BlbmRpbmdfZXZlbnQoc2MsIFxcdTAwMjZjb21tYW5kKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oXFxuaW5kZXggNmUzNzUzNTU0NTEwYTUuLjEwZjA2YWE1YzRiNTUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxcbkBAIC0yNCwxMSArMjQsMTUgQEAgZW51bSB4ZV9zeXNjdHJsX2dyb3VwIHtcXG4gICpcXG4gICogQFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSOiBHZXQgZXJyb3IgY291bnRlciB2YWx1ZVxcbiAgKiBAWEVfU1lTQ1RSTF9DTURfQ0xFQVJfQ09VTlRFUjogQ2xlYXIgZXJyb3IgY291bnRlciB2YWx1ZVxcbisgKiBAWEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRDogUmV0cmlldmUgZXJyb3IgdGhyZXNob2xkXFxuKyAqIEBYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEOiBTZXQgZXJyb3IgdGhyZXNob2xkXFxuICAqIEBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVDogUmV0cmlldmUgcGVuZGluZyBldmVudFxcbiAgKi9cXG4gZW51bSB4ZV9zeXNjdHJsX2dmc3BfY21kIHtcXG4gXFx0WEVfU1lTQ1RSTF9DTURfR0VUX0NPVU5URVJcXHRcXHQ9IDB4MDMsXFxuIFxcdFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVJcXHRcXHQ9IDB4MDQsXFxuK1xcdFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTERcXHRcXHQ9IDB4MDUsXFxuK1xcdFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTERcXHRcXHQ9IDB4MDYsXFxuIFxcdFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UXFx0PSAweDA3LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggZjJhNzg3YmM0ZjY0YTkuLjY4M2EzODQ0Zjg0ZjYyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbisrKyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbkBAIC02OSw2ICs2OSwzNCBAQCBzdHJ1Y3QgZHJtX3Jhc19ub2RlIHtcXG4gXFx0ICovXFxuIFxcdGludCAoKmNsZWFyX2Vycm9yX2NvdW50ZXIpKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCk7XFxuIFxcbitcXHQvKipcXG4rXFx0ICogQHF1ZXJ5X2Vycm9yX3RocmVzaG9sZDpcXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGRybS1yYXMgdG8gcXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGFcXG4rXFx0ICogc3BlY2lmaWMgY291bnRlci5cXG4rXFx0ICpcXG4rXFx0ICogRHJpdmVyIHNob3VsZCBleHBlY3QgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGhcXG4rXFx0ICogZXJyb3JfaWQgZnJvbSBgZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdGAgdG9cXG4rXFx0ICogYGVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdGAuXFxuK1xcdCAqXFxuK1xcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqcXVlcnlfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiAqdGhyZXNob2xkKTtcXG4rXFx0LyoqXFxuK1xcdCAqIEBzZXRfZXJyb3JfdGhyZXNob2xkOlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgZHJtLXJhcyB0byBzZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWNcXG4rXFx0ICogY291bnRlci5cXG4rXFx0ICpcXG4rXFx0ICogRHJpdmVyIHNob3VsZCBleHBlY3Qgc2V0X2Vycm9yX3RocmVzaG9sZCgpIHRvIGJlIGNhbGxlZCB3aXRoIGVycm9yX2lkXFxuK1xcdCAqIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvIGBlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3RgLlxcbitcXHQgKiBEcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuXFxuK1xcdCAqXFxuK1xcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqc2V0X2Vycm9yX3RocmVzaG9sZCkoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCB1MzIgdGhyZXNob2xkKTtcXG4rXFxuIFxcdC8qKiBAcHJpdjogRHJpdmVyIHByaXZhdGUgZGF0YSAqL1xcbiBcXHR2b2lkICpwcml2O1xcbiB9O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggMjE4YTNlZTg2ODA1MjcuLjI3YzY4OTU2NDk1ZmI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG5AQCAtMzMsNiArMzMsNyBAQCBlbnVtIHtcXG4gXFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQsXFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX05BTUUsXFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1ZBTFVFLFxcbitcXHREUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCxcXG4gXFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcXG5AQCAtNDIsNiArNDMsOCBAQCBlbnVtIHtcXG4gXFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXFxuIFxcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxcbiBcXHREUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLFxcbitcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfVEhSRVNIT0xELFxcbitcXHREUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xELFxcbiBcXG4gXFx0X19EUk1fUkFTX0NNRF9NQVgsXFxuIFxcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU3OjM4Ljk5MTcyODc3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwNzEyMDc2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZiZTI4NGJhMGYxMWY4MzRhMzVlM2U3MjBiMDRhOTEwZjk2YjIzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDEwOjU3OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjI3MThmOGFlZTA5ZGQ3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5AQCAtNTYsNiArNTYsMTAgQEAgVXNlciBzcGFjZSB0b29scyBjYW46XG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXG4gKiBDbGVhciBzcGVjaWZpYyBlcnJvciBjb3VudGVycyB3aXRoIHRoZSBgYGNsZWFyLWVycm9yLWNvdW50ZXJgYCBjb21tYW5kLCB1c2luZyBib3RoXG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXG4rKiBRdWVyeSBzcGVjaWZpYyBlcnJvciBjb3VudGVyIHRocmVzaG9sZCB3aXRoIHRoZSBgYGdldC1lcnJvci10aHJlc2hvbGRgYCBjb21tYW5kLCB1c2luZyBib3RoXG4rICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXG4rKiBTZXQgc3BlY2lmaWMgZXJyb3IgY291bnRlciB0aHJlc2hvbGQgd2l0aCB0aGUgYGBzZXQtZXJyb3ItdGhyZXNob2xkYGAgY29tbWFuZCwgdXNpbmdcbisgIGBgbm9kZS1pZGBgLCBgYGVycm9yLWlkYGAgYW5kIGBgZXJyb3ItdGhyZXNob2xkYGAgYXMgcGFyYW1ldGVycy5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgKzExNSwxNyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjF9J1xuICAgICBOb25lXG4rXG4rRXhhbXBsZTogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlclxuK1xuKy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4rXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBnZXQtZXJyb3ItdGhyZXNob2xkIC0tanNvbiAne1wibm9kZS1pZFwiOjAsIFwiZXJyb3ItaWRcIjoxfSdcbisgICAgeydlcnJvci1pZCc6IDEsICdlcnJvci1uYW1lJzogJ2Vycm9yX25hbWUxJywgJ2Vycm9yLXRocmVzaG9sZCc6IDE2fVxuK1xuK0V4YW1wbGU6IFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyXG4rXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcbitcbisgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIHNldC1lcnJvci10aHJlc2hvbGQgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjEsIFwiZXJyb3ItdGhyZXNob2xkXCI6OH0nXG4rICAgIE5vbmVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuaW5kZXggZTExMzA1NmY4YzAxNmMuLjljZjdmOWNkZTI0MjUyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgKzY5LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci10aHJlc2hvbGRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBFcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgKzEyOCwzMSBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXG4rICAgIC1cbisgICAgICBuYW1lOiBnZXQtZXJyb3ItdGhyZXNob2xkXG4rICAgICAgZG9jOiBcdTAwM2UtXG4rICAgICAgICAgICBSZXRyaWV2ZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBnaXZlbiBjb3VudGVyLlxuKyAgICAgICAgICAgVGhlIHJlc3BvbnNlIGluY2x1ZGVzIHRoZSBpZCwgdGhlIG5hbWUsIGFuZCBjdXJyZW50IHRocmVzaG9sZFxuKyAgICAgICAgICAgb2YgdGhlIGNvdW50ZXIuXG4rICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItY291bnRlci1hdHRyc1xuKyAgICAgIGZsYWdzOiBbYWRtaW4tcGVybV1cbisgICAgICBkbzpcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuKyAgICAgICAgcmVwbHk6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBlcnJvci1pZFxuKyAgICAgICAgICAgIC0gZXJyb3ItbmFtZVxuKyAgICAgICAgICAgIC0gZXJyb3ItdGhyZXNob2xkXG4rICAgIC1cbisgICAgICBuYW1lOiBzZXQtZXJyb3ItdGhyZXNob2xkXG4rICAgICAgZG9jOiBcdTAwM2UtXG4rICAgICAgICAgICBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1jb3VudGVyLWF0dHJzXG4rICAgICAgZmxhZ3M6IFthZG1pbi1wZXJtXVxuKyAgICAgIGRvOlxuKyAgICAgICAgcmVxdWVzdDpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIG5vZGUtaWRcbisgICAgICAgICAgICAtIGVycm9yLWlkXG4rICAgICAgICAgICAgLSBlcnJvci10aHJlc2hvbGRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuaW5kZXggZDZlYWIyOWExMzk0Y2EuLmQ2MGM0MGFjNTQyN2FmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuQEAgLTQxLDYgKzQxLDEzIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4rICogNC4gR0VUX0VSUk9SX1RIUkVTSE9MRDogUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbisgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQgYW5kIEVycm9yIElELlxuKyAqICAgIFJldHVybnMgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4rICpcbisgKiA1LiBTRVRfRVJST1JfVEhSRVNIT0xEOiBTZXQgZXJyb3IgdGhyZXNob2xkIG9mIGEgZ2l2ZW4gY291bnRlci5cbisgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElEIGFuZCB0aHJlc2hvbGQgdG8gYmUgc2V0LlxuKyAqXG4gICogTm9kZSByZWdpc3RyYXRpb246XG4gICpcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xuQEAgLTYxLDYgKzY4LDE2IEBAXG4gICogICAgICsgVGhlIGVycm9yIGNvdW50ZXJzIGluIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRvIGJlIGNvbnRpZ3VvdXMsIGJ1dCB0aGVcbiAgKiAgICAgICBkcml2ZXIgbXVzdCByZXR1cm4gLUVOT0VOVCB0byB0aGUgcXVlcnlfZXJyb3JfY291bnRlciBhcyBhbiBpbmRpY2F0aW9uXG4gICogICAgICAgdGhhdCB0aGUgSUQgc2hvdWxkIGJlIHNraXBwZWQgYW5kIG5vdCBsaXN0ZWQgaW4gdGhlIG5ldGxpbmsgQVBJLlxuKyAqICAgICArIFRoZSBkcml2ZXIgY2FuIG9wdGlvbmFsbHkgaW1wbGVtZW50IHF1ZXJ5X2Vycm9yX3RocmVzaG9sZCgpIGFuZFxuKyAqICAgICAgIHNldF9lcnJvcl90aHJlc2hvbGQoKSBjYWxsYmFja3MgdG8gZmFjaWxpdGF0ZSBnZXR0aW5nL3NldHRpbmcgZXJyb3JcbisgKiAgICAgICB0aHJlc2hvbGQgb2YgdGhlIGNvdW50ZXIuIFRocmVzaG9sZCBpbiBSQVMgY29udGV4dCBtZWFucyB0aGUgbnVtYmVyIG9mXG4rICogICAgICAgZXJyb3JzIHRoZSBoYXJkd2FyZSBpcyBleHBlY3RlZCB0byBhY2N1bXVsYXRlIGJlZm9yZSBpdCByYWlzZXMgdGhlbSB0b1xuKyAqICAgICAgIHNvZnR3YXJlLiBUaGlzIGlzIHRvIGhhdmUgYSBmaW5lIGdyYWluZWQgY29udHJvbCBvdmVyIGVycm9yIG5vdGlmaWNhdGlvbnNcbisgKiAgICAgICB0aGF0IGFyZSByYWlzZWQgYnkgdGhlIGhhcmR3YXJlLlxuKyAqICAgICArIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVycm9yIHRocmVzaG9sZCBib3VuZHMgY2hlY2tpbmcuXG4rICogICAgICsgVGhyZXNob2xkIG9mIDAgY2FuIG1lYW4gaW52YWxpZCB0aHJlc2hvbGQgb3IgYWN0IGFzIGEgZGlzYWJsZSBub3RpZmljYXRpb25zXG4rICogICAgICAgdG9nZ2xlIGZvciB0aGF0IGNvdW50ZXIgZGVwZW5kaW5nIG9uIHVzZWNhc2UgYW5kIHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGVcbisgKiAgICAgICBmb3IgaGFuZGxpbmcgaXQgYXMgbmVlZGVkLlxuICAqXG4gICogTmV0bGluayBoYW5kbGVyczpcbiAgKlxuQEAgLTcyLDYgKzg5LDEwIEBAXG4gICogICBvcGVyYXRpb24sIGZldGNoaW5nIGEgY291bnRlciB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgbm9kZS5cbiAgKiAtIGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KCk6IEltcGxlbWVudHMgdGhlIENMRUFSX0VSUk9SX0NPVU5URVIgZG9pdFxuICAqICAgb3BlcmF0aW9uLCBjbGVhcmluZyBhIGNvdW50ZXIgdmFsdWUgZnJvbSBhIHNwZWNpZmljIG5vZGUuXG4rICogLSBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBHRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcbisgKiAgIG9wZXJhdGlvbiwgZmV0Y2hpbmcgdGhlIGVycm9yIHRocmVzaG9sZCBvZiBhIHNwZWNpZmljIGNvdW50ZXIuXG4rICogLSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpOiBJbXBsZW1lbnRzIHRoZSBTRVRfRVJST1JfVEhSRVNIT0xEIGRvaXRcbisgKiAgIG9wZXJhdGlvbiwgc2V0dGluZyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlci5cbiAgKi9cbiBcbiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhkcm1fcmFzX3hhKTtcbkBAIC0xNjgsNiArMTg5LDQwIEBAIHN0YXRpYyBpbnQgZ2V0X25vZGVfZXJyb3JfY291bnRlcih1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkLFxuIFx0cmV0dXJuIG5vZGUtXHUwMDNlcXVlcnlfZXJyb3JfY291bnRlcihub2RlLCBlcnJvcl9pZCwgbmFtZSwgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZCh1MzIgbm9kZV9pZCwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICoqbmFtZSwgdTMyICp0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbitcbitcdG5vZGUgPSB4YV9sb2FkKFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGlmICghbm9kZS1cdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChlcnJvcl9pZCBcdTAwM2Mgbm9kZS1cdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmZpcnN0IHx8IGVycm9yX2lkIFx1MDAzZSBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gbm9kZS1cdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQobm9kZSwgZXJyb3JfaWQsIG5hbWUsIHRocmVzaG9sZCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbitcbitcdG5vZGUgPSB4YV9sb2FkKFx1MDAyNmRybV9yYXNfeGEsIG5vZGVfaWQpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGlmICghbm9kZS1cdTAwM2VzZXRfZXJyb3JfdGhyZXNob2xkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoZXJyb3JfaWQgXHUwMDNjIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdCB8fCBlcnJvcl9pZCBcdTAwM2Ugbm9kZS1cdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3QpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIG5vZGUtXHUwMDNlc2V0X2Vycm9yX3RocmVzaG9sZChub2RlLCBlcnJvcl9pZCwgdGhyZXNob2xkKTtcbit9XG4rXG4gc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcbiB7XG5AQCAtMTg2LDYgKzI0MSwyMiBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXG4gXHRcdFx0ICAgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IG1zZ19yZXBseV90aHJlc2hvbGQoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuK1x0XHRcdCAgICAgICB1MzIgdGhyZXNob2xkKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQsIHRocmVzaG9sZCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMDEsMjUgKzI3Miw2NSBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXG4gXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBpbmZvKTtcbiBcdGlmICghaGRyKSB7XG4tXHRcdG5sbXNnX2ZyZWUobXNnKTtcbi1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIGZyZWVfbXNnO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfY291bnRlcihub2RlX2lkLCBlcnJvcl9pZCxcbiBcdFx0XHRcdCAgICAgXHUwMDI2ZXJyb3JfbmFtZSwgXHUwMDI2dmFsdWUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuIFxuIFx0cmV0ID0gbXNnX3JlcGx5X3ZhbHVlKG1zZywgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuLVx0XHRubG1zZ19mcmVlKG1zZyk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNhbmNlbF9tc2c7XG4rXG4rXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4rXG4rXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuK1xuK2NhbmNlbF9tc2c6XG4rXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4rZnJlZV9tc2c6XG4rXHRubG1zZ19mcmVlKG1zZyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGRvaXRfcmVwbHlfdGhyZXNob2xkKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLCB1MzIgZXJyb3JfaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqZXJyb3JfbmFtZTtcbitcdHN0cnVjdCBza19idWZmICptc2c7XG4rXHRzdHJ1Y3QgbmxhdHRyICpoZHI7XG4rXHR1MzIgdGhyZXNob2xkO1xuK1x0aW50IHJldDtcbitcbitcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbXNnKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xuK1x0aWYgKCFoZHIpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIGZyZWVfbXNnO1xuIFx0fVxuIFxuK1x0cmV0ID0gZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCBcdTAwMjZlcnJvcl9uYW1lLCBcdTAwMjZ0aHJlc2hvbGQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuK1x0cmV0ID0gbXNnX3JlcGx5X3RocmVzaG9sZChtc2csIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB0aHJlc2hvbGQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuIFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuIFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbitcbitjYW5jZWxfbXNnOlxuK1x0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuK2ZyZWVfbXNnOlxuK1x0bmxtc2dfZnJlZShtc2cpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyoqXG5AQCAtMzU1LDYgKzQ2Niw1OSBAQCBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBub2RlLVx1MDAzZWNsZWFyX2Vycm9yX2NvdW50ZXIobm9kZSwgZXJyb3JfaWQpO1xuIH1cbiBcbisvKipcbisgKiBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCgpIC0gUXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGEgY291bnRlclxuKyAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbisgKiBAaW5mbzogR2VuZXJpYyBOZXRsaW5rIGluZm8gY29udGFpbmluZyBhdHRyaWJ1dGVzIG9mIHRoZSByZXF1ZXN0XG4rICpcbisgKiBFeHRyYWN0cyB0aGUgTm9kZSBJRCBhbmQgRXJyb3IgSUQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCByZXRyaWV2ZXNcbisgKiB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvdW50ZXIuIFNlbmRzIHRoZSByZXN1bHQgYmFjayB0b1xuKyAqIHRoZSByZXF1ZXN0aW5nIHVzZXIgdmlhIHRoZSBzdGFuZGFyZCBHZW5sIHJlcGx5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0dTMyIG5vZGVfaWQsIGVycm9yX2lkO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZWF0dHJzIHx8XG4rXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxuK1x0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcbitcdGVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xuK1xuK1x0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcbit9XG4rXG4rLyoqXG4rICogZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoKSAtIFNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBjb3VudGVyXG4rICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxuKyAqIEBpbmZvOiBHZW5lcmljIE5ldGxpbmsgaW5mbyBjb250YWluaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIHJlcXVlc3RcbisgKlxuKyAqIEV4dHJhY3RzIHRoZSBOb2RlIElELCBFcnJvciBJRCBhbmQgdGhyZXNob2xkIGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBhbmRcbisgKiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY291bnRlci5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHUzMiBub2RlX2lkLCBlcnJvcl9pZCwgdGhyZXNob2xkO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZWF0dHJzIHx8XG4rXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEKSB8fFxuK1x0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpIHx8XG4rXHQgICAgR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcbitcdGVycm9yX2lkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRF0pO1xuK1x0dGhyZXNob2xkID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTERdKTtcbitcbitcdHJldHVybiBzZXRfbm9kZV9lcnJvcl90aHJlc2hvbGQobm9kZV9pZCwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4rfVxuK1xuIC8qKlxuICAqIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYSBuZXcgUkFTIG5vZGVcbiAgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuaW5kZXggZGVhMWMxYjI0OTRlODEuLjAyZThlNTA1NGQwNTZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuQEAgLTI4LDYgKzI4LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcm1fcmFzX2NsZWFyX2Vycm9yX2NvdW50ZXJfbmxfcG9saWN5W0RSTV9SQVNfQV9FXG4gXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4gfTtcbiBcbisvKiBEUk1fUkFTX0NNRF9HRVRfRVJST1JfVEhSRVNIT0xEIC0gZG8gKi9cbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19nZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9JRCArIDFdID0ge1xuK1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4rXHRbRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4rfTtcbitcbisvKiBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xEIC0gZG8gKi9cbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHJtX3Jhc19zZXRfZXJyb3JfdGhyZXNob2xkX25sX3BvbGljeVtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19FUlJPUl9USFJFU0hPTEQgKyAxXSA9IHtcbitcdFtEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19OT0RFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuK1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuK1x0W0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbit9O1xuK1xuIC8qIE9wcyB0YWJsZSBmb3IgZHJtX3JhcyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdHtcbkBAIC01Niw2ICs2OSwyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XG4gXHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuIFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHRcdD0gRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRCxcbitcdFx0LmRvaXRcdFx0PSBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdCxcbitcdFx0LnBvbGljeVx0XHQ9IGRybV9yYXNfZ2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXG4rXHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuK1x0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4rXHR9LFxuK1x0e1xuK1x0XHQuY21kXHRcdD0gRFJNX1JBU19DTURfU0VUX0VSUk9SX1RIUkVTSE9MRCxcbitcdFx0LmRvaXRcdFx0PSBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdCxcbitcdFx0LnBvbGljeVx0XHQ9IGRybV9yYXNfc2V0X2Vycm9yX3RocmVzaG9sZF9ubF9wb2xpY3ksXG4rXHRcdC5tYXhhdHRyXHQ9IERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1RIUkVTSE9MRCxcbitcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuK1x0fSxcbiB9O1xuIFxuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi41N2IxZTY0N2Q4MzMwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbkBAIC0yMCw2ICsyMCwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4raW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuK2ludCBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uNGFmYTJhZDk4MzAwZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5AQCAtODYsNiArODYsMzggQEAgc3RhdGljIGludCBjbGVhcl9jb3JyZWN0YWJsZV9lcnJvcl9jb3VudGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9cbiBcdHJldHVybiBjbGVhcl9lcnJvcl9jb3VudGVyKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkKTtcbiB9XG4gXG4rc3RhdGljIGludCBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCxcbitcdFx0XHRcdFx0ICAgICBjb25zdCBjaGFyICoqbmFtZSwgdTMyICp0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IHhlX2RldmljZSAqeGUgPSBlcC1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbitcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEVdO1xuK1xuK1x0aWYgKCFpbmZvIHx8ICFpbmZvW2Vycm9yX2lkXS5uYW1lKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGlmICgheGUtXHUwMDNlaW5mby5oYXNfc3lzY3RybClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Km5hbWUgPSBpbmZvW2Vycm9yX2lkXS5uYW1lO1xuK1x0cmV0dXJuIHhlX3Jhc19nZXRfdGhyZXNob2xkKHhlLCBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUsIGVycm9yX2lkLCB0aHJlc2hvbGQpO1xuK31cbitcbitzdGF0aWMgaW50IHNldF9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQoc3RydWN0IGRybV9yYXNfbm9kZSAqZXAsIHUzMiBlcnJvcl9pZCwgdTMyIHRocmVzaG9sZClcbit7XG4rXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGVwLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuK1x0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy1cdTAwM2VpbmZvW0RSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRV07XG4rXG4rXHRpZiAoIWluZm8gfHwgIWluZm9bZXJyb3JfaWRdLm5hbWUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4geGVfcmFzX3NldF90aHJlc2hvbGQoeGUsIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRSwgZXJyb3JfaWQsIHRocmVzaG9sZCk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICphbGxvY2F0ZV9hbmRfY29weV9jb3VudGVycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiB7XG4gXHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICpjb3VudGVyO1xuQEAgLTEzNCw2ICsxNjYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9ub2RlX3BhcmFtcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbiBcdGlmIChzZXZlcml0eSA9PSBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEUpIHtcbiBcdFx0bm9kZS1cdTAwM2VxdWVyeV9lcnJvcl9jb3VudGVyID0gcXVlcnlfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbiBcdFx0bm9kZS1cdTAwM2VjbGVhcl9lcnJvcl9jb3VudGVyID0gY2xlYXJfY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbitcdFx0bm9kZS1cdTAwM2VxdWVyeV9lcnJvcl90aHJlc2hvbGQgPSBxdWVyeV9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQ7XG4rXHRcdG5vZGUtXHUwMDNlc2V0X2Vycm9yX3RocmVzaG9sZCA9IHNldF9jb3JyZWN0YWJsZV9lcnJvcl90aHJlc2hvbGQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRub2RlLVx1MDAzZXF1ZXJ5X2Vycm9yX2NvdW50ZXIgPSBxdWVyeV91bmNvcnJlY3RhYmxlX2Vycm9yX2NvdW50ZXI7XG4gXHRcdG5vZGUtXHUwMDNlY2xlYXJfZXJyb3JfY291bnRlciA9IGNsZWFyX3VuY29ycmVjdGFibGVfZXJyb3JfY291bnRlcjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IDQ0ZjRlMWEzNDU1YjdjLi5hZmVlODIwMmQyNGVmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5AQCAtMjcwLDYgKzI3MCwxMTEgQEAgaW50IHhlX3Jhc19jbGVhcl9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHhlX3Jhc19nZXRfdGhyZXNob2xkKCkgLSBHZXQgZXJyb3IgY291bnRlciB0aHJlc2hvbGRcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxuKyAqIEBzZXZlcml0eTogRXJyb3Igc2V2ZXJpdHkgdG8gYmUgcXVlcmllZCAoXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxuKyAqIEBjb21wb25lbnQ6IEVycm9yIGNvbXBvbmVudCB0byBiZSBxdWVyaWVkIChcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxuKyAqIEB0aHJlc2hvbGQ6IENvdW50ZXIgdGhyZXNob2xkXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZXJyb3IgdGhyZXNob2xkIG9mIGEgc3BlY2lmaWMgY291bnRlciBiYXNlZCBvblxuKyAqIHNldmVyaXR5IGFuZCBjb21wb25lbnQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCB4ZV9yYXNfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCwgdTMyICp0aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3Jlc3BvbnNlIHJlc3BvbnNlID0ge307XG4rXHRzdHJ1Y3QgeGVfcmFzX2dldF90aHJlc2hvbGRfcmVxdWVzdCByZXF1ZXN0ID0ge307XG4rXHRzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9O1xuK1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlcjtcbitcdHNpemVfdCBsZW47XG4rXHRpbnQgcmV0O1xuK1xuK1x0Y291bnRlciA9IFx1MDAyNnJlcXVlc3QuY291bnRlcjtcbitcdGNvdW50ZXItXHUwMDNlY29tbW9uLnNldmVyaXR5ID0gZHJtX3RvX3hlX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XG4rXHRjb3VudGVyLVx1MDAzZWNvbW1vbi5jb21wb25lbnQgPSBkcm1fdG9feGVfcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuK1xuK1x0eGVfc3lzY3RybF9jcmVhdGVfY29tbWFuZChcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQsXG4rXHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuK1xuK1x0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xuK1x0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXHUwMDI2eGUtXHUwMDNlc2MsIFx1MDAyNmNvbW1hbmQsIFx1MDAyNmxlbik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiBmYWlsZWQgdG8gZ2V0IHRocmVzaG9sZCAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGxlbiAhPSBzaXplb2YocmVzcG9uc2UpKSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiB1bmV4cGVjdGVkIGdldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcblwiLFxuK1x0XHQgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRjb3VudGVyID0gXHUwMDI2cmVzcG9uc2UuY291bnRlcjtcbitcdCp0aHJlc2hvbGQgPSByZXNwb25zZS50aHJlc2hvbGQ7XG4rXG4rXHR4ZV9kYmcoeGUsIFwiW1JBU106IGdldCB0aHJlc2hvbGQgJXUgZm9yICVzICVzXFxuXCIsICp0aHJlc2hvbGQsXG4rXHQgICAgICAgY29tcF90b19zdHIoY291bnRlci1cdTAwM2Vjb21tb24uY29tcG9uZW50KSwgc2V2X3RvX3N0cihjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHhlX3Jhc19zZXRfdGhyZXNob2xkKCkgLSBTZXQgZXJyb3IgY291bnRlciB0aHJlc2hvbGRcbisgKiBAeGU6IFhlIGRldmljZSBpbnN0YW5jZVxuKyAqIEBzZXZlcml0eTogRXJyb3Igc2V2ZXJpdHkgdG8gYmUgc2V0IChcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXG4rICogQGNvbXBvbmVudDogRXJyb3IgY29tcG9uZW50IHRvIGJlIHNldCAoXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbisgKiBAdGhyZXNob2xkOiBDb3VudGVyIHRocmVzaG9sZFxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpYyBjb3VudGVyIGJhc2VkIG9uXG4rICogc2V2ZXJpdHkgYW5kIGNvbXBvbmVudC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKVxuK3tcbitcdHN0cnVjdCB4ZV9yYXNfc2V0X3RocmVzaG9sZF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xuK1x0c3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xuK1x0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbitcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXI7XG4rXHRzaXplX3QgbGVuO1xuK1x0aW50IHJldDtcbitcbitcdGNvdW50ZXIgPSBcdTAwMjZyZXF1ZXN0LmNvdW50ZXI7XG4rXHRjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSA9IGRybV90b194ZV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuK1x0Y291bnRlci1cdTAwM2Vjb21tb24uY29tcG9uZW50ID0gZHJtX3RvX3hlX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTtcbitcdHJlcXVlc3QudGhyZXNob2xkID0gdGhyZXNob2xkO1xuK1xuK1x0eGVfc3lzY3RybF9jcmVhdGVfY29tbWFuZChcdTAwMjZjb21tYW5kLCBYRV9TWVNDVFJMX0dST1VQX0dGU1AsIFhFX1NZU0NUUkxfQ01EX1NFVF9USFJFU0hPTEQsXG4rXHRcdFx0XHQgIFx1MDAyNnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgXHUwMDI2cmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpO1xuK1xuK1x0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xuK1x0cmV0ID0geGVfc3lzY3RybF9zZW5kX2NvbW1hbmQoXHUwMDI2eGUtXHUwMDNlc2MsIFx1MDAyNmNvbW1hbmQsIFx1MDAyNmxlbik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiBmYWlsZWQgdG8gc2V0IHRocmVzaG9sZCAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGxlbiAhPSBzaXplb2YocmVzcG9uc2UpKSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiB1bmV4cGVjdGVkIHNldCB0aHJlc2hvbGQgcmVzcG9uc2UgbGVuZ3RoICV6dSAoZXhwZWN0ZWQgJXp1KVxcblwiLFxuK1x0XHQgICAgICAgbGVuLCBzaXplb2YocmVzcG9uc2UpKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRyZXQgPSByYXNfc3RhdHVzX3RvX2Vycm5vKHJlc3BvbnNlLnN0YXR1cyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHhlX2Vycih4ZSwgXCJzeXNjdHJsOiBzZXQgdGhyZXNob2xkIGNvbW1hbmQgZmFpbGVkIHdpdGggc3RhdHVzICUjeFxcblwiLFxuK1x0XHQgICAgICAgcmVzcG9uc2Uuc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGNvdW50ZXIgPSBcdTAwMjZyZXNwb25zZS5jb3VudGVyO1xuK1xuK1x0eGVfZGJnKHhlLCBcIltSQVNdOiBzZXQgdGhyZXNob2xkICV1IGZvciAlcyAlc1xcblwiLCByZXNwb25zZS50aHJlc2hvbGQsXG4rXHQgICAgICAgY29tcF90b19zdHIoY291bnRlci1cdTAwM2Vjb21tb24uY29tcG9uZW50KSwgc2V2X3RvX3N0cihjb3VudGVyLVx1MDAzZWNvbW1vbi5zZXZlcml0eSkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIHhlX3Jhc19pbml0IC0gSW5pdGlhbGl6ZSBYZSBSQVNcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaFxuaW5kZXggYmEwYjAyMjRkZjIzNjUuLjFhYTQzYzU0YjcxMGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmhcbkBAIC0xNSw2ICsxNSw4IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xuIGludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xuIGludCB4ZV9yYXNfY2xlYXJfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudCk7XG4raW50IHhlX3Jhc19nZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgKnRocmVzaG9sZCk7XG4raW50IHhlX3Jhc19zZXRfdGhyZXNob2xkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50LCB1MzIgdGhyZXNob2xkKTtcbiB2b2lkIHhlX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzX3R5cGVzLmhcbmluZGV4IDY2ODhlMTFmNTdhODYyLi43NDdiNjUxODgwY2Q1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXNfdHlwZXMuaFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhc190eXBlcy5oXG5AQCAtMTIxLDQgKzEyMSw1NSBAQCBzdHJ1Y3QgeGVfcmFzX2NsZWFyX2NvdW50ZXJfcmVzcG9uc2Uge1xuIFx0LyoqIEByZXNlcnZlZDE6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4gXHR1MzIgcmVzZXJ2ZWQxWzNdO1xuIH0gX19wYWNrZWQ7XG4rXG4rLyoqXG4rICogc3RydWN0IHhlX3Jhc19nZXRfdGhyZXNob2xkX3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxuKyAqL1xuK3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXF1ZXN0IHtcbitcdC8qKiBAY291bnRlcjogQ291bnRlciB0byBnZXQgdGhyZXNob2xkIGZvciAqL1xuK1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyO1xuK1x0LyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdHUzMiByZXNlcnZlZDtcbit9IF9fcGFja2VkO1xuK1xuKy8qKlxuKyAqIHN0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3IgZ2V0IHRocmVzaG9sZFxuKyAqL1xuK3N0cnVjdCB4ZV9yYXNfZ2V0X3RocmVzaG9sZF9yZXNwb25zZSB7XG4rXHQvKiogQGNvdW50ZXI6IENvdW50ZXIgSUQgKi9cbitcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlcjtcbitcdC8qKiBAdGhyZXNob2xkOiBDdXJyZW50IHRocmVzaG9sZCBvZiB0aGUgY291bnRlciAqL1xuK1x0dTMyIHRocmVzaG9sZDtcbitcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4rXHR1MzIgcmVzZXJ2ZWRbNF07XG4rfSBfX3BhY2tlZDtcbitcbisvKipcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVxdWVzdCAtIFJlcXVlc3Qgc3RydWN0dXJlIGZvciBzZXQgdGhyZXNob2xkXG4rICovXG4rc3RydWN0IHhlX3Jhc19zZXRfdGhyZXNob2xkX3JlcXVlc3Qge1xuK1x0LyoqIEBjb3VudGVyOiBDb3VudGVyIHRvIHNldCB0aHJlc2hvbGQgZm9yICovXG4rXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XG4rXHQvKiogQHRocmVzaG9sZDogVGhyZXNob2xkIHRvIGJlIHNldCAqL1xuK1x0dTMyIHRocmVzaG9sZDtcbitcdC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4rXHR1MzIgcmVzZXJ2ZWQ7XG4rfSBfX3BhY2tlZDtcbitcbisvKipcbisgKiBzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIHNldCB0aHJlc2hvbGRcbisgKi9cbitzdHJ1Y3QgeGVfcmFzX3NldF90aHJlc2hvbGRfcmVzcG9uc2Uge1xuK1x0LyoqIEBjb3VudGVyOiBDb3VudGVyIElEICovXG4rXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXI7XG4rXHQvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqL1xuK1x0dTMyIHJlc2VydmVkO1xuK1x0LyoqIEB0aHJlc2hvbGQ6IFVwZGF0ZWQgdGhyZXNob2xkICovXG4rXHR1MzIgdGhyZXNob2xkO1xuK1x0LyoqIEBzdGF0dXM6IE9wZXJhdGlvbiBzdGF0dXMgKi9cbitcdHUzMiBzdGF0dXM7XG4rXHQvKiogQHJlc2VydmVkMTogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdHUzMiByZXNlcnZlZDFbMl07XG4rfSBfX3BhY2tlZDtcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuaW5kZXggYjRkMTczMjlhZjZjOGQuLjA1NDdiN2IzOTcyNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuY1xuQEAgLTQ5LDE4ICs0OSw2IEBAIHN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jXG4gXHR9IHdoaWxlIChyZXNwb25zZS1cdTAwM2Vjb3VudCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV2ZW50X3JlcXVlc3RfcHJlcGFyZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgKmhlYWRlcixcbi1cdFx0XHRcdCAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCAqcmVxdWVzdClcbi17XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGUtXHUwMDNlZHJtLmRldik7XG4tXG4tXHRoZWFkZXItXHUwMDNlZGF0YSA9IFJFR19GSUVMRF9QUkVQKEFQUF9IRFJfR1JPVVBfSURfTUFTSywgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQKSB8XG4tXHRcdCAgICAgICBSRUdfRklFTERfUFJFUChBUFBfSERSX0NPTU1BTkRfTUFTSywgWEVfU1lTQ1RSTF9DTURfR0VUX1BFTkRJTkdfRVZFTlQpO1xuLVxuLVx0cmVxdWVzdC1cdTAwM2V2ZWN0b3IgPSB4ZV9kZXZpY2VfaGFzX21zaXgoeGUpID8gWEVfSVJRX0RFRkFVTFRfTVNJWCA6IDA7XG4tXHRyZXF1ZXN0LVx1MDAzZWZuID0gUENJX0ZVTkMocGRldi1cdTAwM2VkZXZmbik7XG4tfVxuLVxuIC8qKlxuICAqIHhlX3N5c2N0cmxfZXZlbnQoKSAtIEhhbmRsZXIgZm9yIFN5c3RlbSBDb250cm9sbGVyIGV2ZW50c1xuICAqIEBzYzogU3lzdGVtIENvbnRyb2xsZXIgaW5zdGFuY2VcbkBAIC03MiwxNiArNjAsMTYgQEAgdm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYylcbiBcdHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCBjb21tYW5kID0ge307XG4gXHRzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xuIFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCByZXF1ZXN0ID0ge307XG4tXHRzdHJ1Y3QgeGVfc3lzY3RybF9hcHBfbXNnX2hkciBoZWFkZXIgPSB7fTtcbitcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gc2NfdG9feGUoc2MpO1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHhlLVx1MDAzZWRybS5kZXYpO1xuK1xuK1x0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbi1cdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2VzcyhzY190b194ZShzYykpO1xuLVx0ZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHNjX3RvX3hlKHNjKSwgXHUwMDI2aGVhZGVyLCBcdTAwMjZyZXF1ZXN0KTtcbitcdHJlcXVlc3QudmVjdG9yID0geGVfZGV2aWNlX2hhc19tc2l4KHhlKSA/IFhFX0lSUV9ERUZBVUxUX01TSVggOiAwO1xuK1x0cmVxdWVzdC5mbiA9IFBDSV9GVU5DKHBkZXYtXHUwMDNlZGV2Zm4pO1xuIFxuLVx0Y29tbWFuZC5oZWFkZXIgPSBoZWFkZXI7XG4tXHRjb21tYW5kLmRhdGFfaW4gPSBcdTAwMjZyZXF1ZXN0O1xuLVx0Y29tbWFuZC5kYXRhX2luX2xlbiA9IHNpemVvZihyZXF1ZXN0KTtcbi1cdGNvbW1hbmQuZGF0YV9vdXQgPSBcdTAwMjZyZXNwb25zZTtcbi1cdGNvbW1hbmQuZGF0YV9vdXRfbGVuID0gc2l6ZW9mKHJlc3BvbnNlKTtcbitcdHhlX3N5c2N0cmxfY3JlYXRlX2NvbW1hbmQoXHUwMDI2Y29tbWFuZCwgWEVfU1lTQ1RSTF9HUk9VUF9HRlNQLCBYRV9TWVNDVFJMX0NNRF9HRVRfUEVORElOR19FVkVOVCxcbitcdFx0XHRcdCAgXHUwMDI2cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCBcdTAwMjZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2c2MtXHUwMDNlZXZlbnRfbG9jayk7XG4gXHRnZXRfcGVuZGluZ19ldmVudChzYywgXHUwMDI2Y29tbWFuZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfbWFpbGJveF90eXBlcy5oXG5pbmRleCA2ZTM3NTM1NTQ1MTBhNS4uMTBmMDZhYTVjNGI1NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9tYWlsYm94X3R5cGVzLmhcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX21haWxib3hfdHlwZXMuaFxuQEAgLTI0LDExICsyNCwxNSBAQCBlbnVtIHhlX3N5c2N0cmxfZ3JvdXAge1xuICAqXG4gICogQFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSOiBHZXQgZXJyb3IgY291bnRlciB2YWx1ZVxuICAqIEBYRV9TWVNDVFJMX0NNRF9DTEVBUl9DT1VOVEVSOiBDbGVhciBlcnJvciBjb3VudGVyIHZhbHVlXG4rICogQFhFX1NZU0NUUkxfQ01EX0dFVF9USFJFU0hPTEQ6IFJldHJpZXZlIGVycm9yIHRocmVzaG9sZFxuKyAqIEBYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEOiBTZXQgZXJyb3IgdGhyZXNob2xkXG4gICogQFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UOiBSZXRyaWV2ZSBwZW5kaW5nIGV2ZW50XG4gICovXG4gZW51bSB4ZV9zeXNjdHJsX2dmc3BfY21kIHtcbiBcdFhFX1NZU0NUUkxfQ01EX0dFVF9DT1VOVEVSXHRcdD0gMHgwMyxcbiBcdFhFX1NZU0NUUkxfQ01EX0NMRUFSX0NPVU5URVJcdFx0PSAweDA0LFxuK1x0WEVfU1lTQ1RSTF9DTURfR0VUX1RIUkVTSE9MRFx0XHQ9IDB4MDUsXG4rXHRYRV9TWVNDVFJMX0NNRF9TRVRfVEhSRVNIT0xEXHRcdD0gMHgwNixcbiBcdFhFX1NZU0NUUkxfQ01EX0dFVF9QRU5ESU5HX0VWRU5UXHQ9IDB4MDcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IGYyYTc4N2JjNGY2NGE5Li42ODNhMzg0NGY4NGY2MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuKysrIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtNjksNiArNjksMzQgQEAgc3RydWN0IGRybV9yYXNfbm9kZSB7XG4gXHQgKi9cbiBcdGludCAoKmNsZWFyX2Vycm9yX2NvdW50ZXIpKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCk7XG4gXG4rXHQvKipcbitcdCAqIEBxdWVyeV9lcnJvcl90aHJlc2hvbGQ6XG4rXHQgKlxuK1x0ICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGRybS1yYXMgdG8gcXVlcnkgZXJyb3IgdGhyZXNob2xkIG9mIGFcbitcdCAqIHNwZWNpZmljIGNvdW50ZXIuXG4rXHQgKlxuK1x0ICogRHJpdmVyIHNob3VsZCBleHBlY3QgcXVlcnlfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGhcbitcdCAqIGVycm9yX2lkIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvXG4rXHQgKiBgZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0YC5cbitcdCAqXG4rXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbitcdCAqL1xuK1x0aW50ICgqcXVlcnlfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKipuYW1lLFxuK1x0XHRcdFx0ICAgICB1MzIgKnRocmVzaG9sZCk7XG4rXHQvKipcbitcdCAqIEBzZXRfZXJyb3JfdGhyZXNob2xkOlxuK1x0ICpcbitcdCAqIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBieSBkcm0tcmFzIHRvIHNldCBlcnJvciB0aHJlc2hvbGQgb2YgYSBzcGVjaWZpY1xuK1x0ICogY291bnRlci5cbitcdCAqXG4rXHQgKiBEcml2ZXIgc2hvdWxkIGV4cGVjdCBzZXRfZXJyb3JfdGhyZXNob2xkKCkgdG8gYmUgY2FsbGVkIHdpdGggZXJyb3JfaWRcbitcdCAqIGZyb20gYGVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3RgIHRvIGBlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3RgLlxuK1x0ICogRHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBlcnJvciB0aHJlc2hvbGQgYm91bmRzIGNoZWNraW5nLlxuK1x0ICpcbitcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuK1x0ICovXG4rXHRpbnQgKCpzZXRfZXJyb3JfdGhyZXNob2xkKShzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIHUzMiB0aHJlc2hvbGQpO1xuK1xuIFx0LyoqIEBwcml2OiBEcml2ZXIgcHJpdmF0ZSBkYXRhICovXG4gXHR2b2lkICpwcml2O1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuaW5kZXggMjE4YTNlZTg2ODA1MjcuLjI3YzY4OTU2NDk1ZmI2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzMsNiArMzMsNyBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lELFxuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfTkFNRSxcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX1ZBTFVFLFxuK1x0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfVEhSRVNIT0xELFxuIFxuIFx0X19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVgsXG4gXHREUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggLSAxKVxuQEAgLTQyLDYgKzQzLDggQEAgZW51bSB7XG4gXHREUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSxcbiBcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxuIFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcbitcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9USFJFU0hPTEQsXG4rXHREUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xELFxuIFxuIFx0X19EUk1fUkFTX0NNRF9NQVgsXG4gXHREUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTc6MzguOTkxNzMwNjM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4ODM1MjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERSTSBSQVMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBuZXcgTmV0bGluayBjb21tYW5kcyB3aXRoaW4gdGhlIERSTSBSQVMgc3Vic3lzdGVtOiBgR0VUX0VSUk9SX1RIUkVTSE9MRGAgYW5kIGBTRVRfRVJST1JfVEhSRVNIT0xEYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIHNvbWUgY29uZmlndXJhYmlsaXR5IHRvIGVycm9yIGhhbmRsaW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmaWxlcywgcHJpbWFyaWx5IGZvY3VzZWQgb24gZG9jdW1lbnRhdGlvbiBhbmQgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhbG9uZyB3aXRoIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwncyBEUk0gZHJpdmVyLiBUaGlzIGlzIGV4cGVjdGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUgaW4gYGRybV9yYXMuY2AgYW5kIGBkcm1fcmFzX25sLmNgLCB3aXRoIHRoZSBgeGVgIGRyaXZlciBoYW5kbGluZyB0aGUgYWN0dWFsIGNhbGxiYWNrIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAuIFVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgY2xlYXJseSBkZXNpZ25lZCB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBmdXp6aW5nLiBDYW4gd2UgZnV6eiB0aGUgYHhlYCBkcml2ZXIgd2l0aCB0aGVzZSBuZXcgY29tbWFuZHM/IE15IGluaXRpYWwgdGhvdWdodCBpcywgb2YgY291cnNlLCB5ZXMsIGl0J3MgYSBEUk0gZHJpdmVyIGFuZCBJbnRlbCdzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uIGJ1dCB0aGVuIEkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB2aXJ0dWFsaXphdGlvbi4gRFJNIGRyaXZlcnMgZ2VuZXJhbGx5IGhhdmUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSW50ZWwgR1BVcy4gSG93ZXZlciwgdGhlIGBkcm1fcmFzYCBuZXRsaW5rIGludGVyZmFjZSBpcyBnZW5lcmljLiBBbnkgZHJpdmVyIHRoYXQgcmVnaXN0ZXJzIGEgUkFTIG5vZGUgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQgZm9yIGZ1enppbmcuIEl0IG1lYW5zIHdlIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgYWN0dWFsIEludGVsIGhhcmR3YXJlIHRvIHRlc3QgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGVzZSBuZXcgY29tbWFuZHMuXG5cblRoZSBuZXh0IHF1ZXN0aW9uOiBEb2VzIGEgdmlydHVhbCBkcml2ZXIsIGxpa2UgYHZrbXNgLCBvciBhbnkgb3RoZXIgdmlydHVhbCBkcml2ZXIsIHJlZ2lzdGVyIGEgUkFTIG5vZGU/IElmIGl0IGRvZXMsIHRoYXQgb3BlbnMgdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciBmdXp6aW5nIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0Li4uIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSdzIGEgdmlydHVhbCBSQVMgbm9kZSB0aGF0J3MgYmVpbmcgdXNlZCBieSBgdmttc2Agb3IgYW5vdGhlciB2aXJ0dWFsIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1Nzo0Ni4yODAwODUwODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5OTYzNzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fcmFzX25vZGVfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3Q9MzU9RHJpdmVycyBhcmUgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nIG5vZGVzIHZpYSB0aGVcXG5Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdDozNjpgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKClgIGFuZCBgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoKWAgQVBJcy5cXG5Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdC0zNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTItICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjUzOiAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy01NC0gKiAgIGl0IGEgdW5pcXVlIElEIGluIHRoZSB4YXJyYXkuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jPTUwNT1pbnQgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTIyLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6NTIzOiAqIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYSBuZXcgUkFTIG5vZGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTUyNC0gKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTMwLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6NTMxOmludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTUzMi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTU0Ni19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzo1NDc6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25vZGVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtNTQ4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTE9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMjAzLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MjA0OlxcdFxcdHJldCA9IGRybV9yYXNfbm9kZV9yZWdpc3Rlcihub2RlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIwNS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTEwND1zdHJ1Y3QgZHJtX2RldmljZTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMDYtI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjEwNzppbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMDgtdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtMTA5LSNlbHNlXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjExMDpzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC0xMTEtc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1Nzo1MC4wNzk3Mjk4MzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI3MTk5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFJNIFJBUyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGRybV9yYXNgIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYHhlYCBkcml2ZXIgaXMgdGhlIG9ubHkgb25lIEknbSBzZWVpbmcgcmVnaXN0ZXIgYSBSQVMgbm9kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIGB4ZWAgaXRzZWxmIGNvdWxkIGJlIGEgdGFyZ2V0IGZvciBmdXp6aW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoZSB1c3VhbCBgeGVgIGRlcGVuZGVuY3kgb24gYSBwaHlzaWNhbCBJbnRlbCBHUFUuIEhtbW0uXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGxvb2tpbmcgY2xvc2VyLCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgZHJtX3Jhc2AsIGlzICpnZW5lcmljKi4gVGhhdCdzIHRoZSBrZXkuIFRoZSBhY3R1YWwgY29tbWFuZHMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgZHJtX3Jhc19ubF9mYW1pbHlgLiBBbmQgbG9vaywgd2UgaGF2ZSBgRFJNX1JBU19DTURfR0VUX0VSUk9SX1RIUkVTSE9MRGAgYW5kIGBEUk1fUkFTX0NNRF9TRVRfRVJST1JfVEhSRVNIT0xEYCBoYW5kbGVkIGJ5IHRob3NlIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgYW5kIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAgZnVuY3Rpb25zLlxuXG5JbnRlcmVzdGluZy4gSSBxdWlja2x5IHNlZSB0aGV5IGNoZWNrIGZvciB0aGUgbm9kZSdzIGV4aXN0ZW5jZSB1c2luZyBhbiBgeGFfbG9hZGAgY2FsbDpcblxuYGBgY1xuXHRub2RlID0geGFfbG9hZChcdTAwMjZkcm1fcmFzX3hhLCBub2RlX2lkKTtcblx0aWYgKCFub2RlKVxuXHRcdHJldHVybiAtRU5PRU5UO1xuYGBgXG5cblNvLCBpZiBubyBub2RlcyBhcmUgcmVnaXN0ZXJlZCwgd2UncmUganVzdCBnb2luZyB0byBnZXQgYW4gYC1FTk9FTlRgIGVycm9yLiBCYXNpY2FsbHksIGEgbm8tb3AgaWYgdGhlcmUncyBub3RoaW5nIHRvIGFjdHVhbGx5IGNvbnRyb2wuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjay4gVGhpcyBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IGBkcm1fcmFzYCBpcyByZWdpc3RlcmVkICp3aGVuKiB0aGUgYGRybV9yYXNgIG1vZHVsZSBpcyBsb2FkZWQuIFRoYXQncyB0aGUgcmVhbCBlbnRyeSBwb2ludC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGFjdHVhbGx5IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU3OjU1LjQwNjkzMjY1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUxMDQ3MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmxfcmVnaXN0ZXJfZmFtaWx5Lipkcm1fcmFzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM9MTc9aW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMjItXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYzoyMzpcXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHkpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmMtMjQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTc6NTguMDU3OTg1NzM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NzQzODY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIERSTSBSQVMgR0VOTCBGYW1pbHkgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEUk0gUkFTIEdlbmVyaWMgTmV0bGluayBmYW1pbHkgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSB3YW50IHRvIGZpbmQgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgdGhlIGBkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyYCBmdW5jdGlvbiBpcyBpbnZva2VkIGluIHRoZSBjb2RlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGVyZSBhbmQgd2hlbiB0aGlzIHBhcnRpY3VsYXIgTmV0bGluayBmYW1pbHkgaXMgYmVpbmcgYnJvdWdodCBvbmxpbmUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbGVycywgdGhlIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzIHRoYXQgc2V0IGl0IGFsbCBpbiBtb3Rpb24uIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgcHJvdmlkZSB0aGUgZXNzZW50aWFsIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0ga25vd3MgYWJvdXQgYW5kIGludGVyYWN0cyB3aXRoIHRoaXMgR2VuZXJpYyBOZXRsaW5rIGZhbWlseSBkZWRpY2F0ZWQgdG8gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5LCBhbmQgU2VydmljZWFiaWxpdHkpIGNvbmNlcm5zIHdpdGhpbiB0aGUgRFJNIChEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIEkgem9vbSBpbiBvbiBhbnkgc3BlY2lmaWMgZGV0YWlsLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjI3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MDIuMDA1NDI3Nzg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjgyNzEyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jPTEyNDA9c3RhdGljIGludCBfX2luaXQgZHJtX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY3LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmM6MTI2ODpcXHRyZXQgPSBkcm1fcmFzX2dlbmxfZmFtaWx5X3JlZ2lzdGVyKCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYy0xMjY5LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYz0xMD1zdGF0aWMgYm9vbCByZWdpc3RlcmVkO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuYy0xMi0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jOjEzOiAqIGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGRybS1yYXMgZ2VubCBmYW1pbHlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE0LSAqXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmM6MTc6aW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5jLTE4LXtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC05LSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaDoxMDppbnQgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3Rlcih2b2lkKTtcXG5pbmNsdWRlL2RybS9kcm1fcmFzX2dlbmxfZmFtaWx5LmgtMTEtdm9pZCBkcm1fcmFzX2dlbmxfZmFtaWx5X3VucmVnaXN0ZXIodm9pZCk7XFxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oLTEyLSNlbHNlXFxuaW5jbHVkZS9kcm0vZHJtX3Jhc19nZW5sX2ZhbWlseS5oOjEzOnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfZ2VubF9mYW1pbHlfcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvZHJtL2RybV9yYXNfZ2VubF9mYW1pbHkuaC0xNC1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19nZW5sX2ZhbWlseV91bnJlZ2lzdGVyKHZvaWQpIHsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1ODowNC4xMzM3MDM2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDgwNDg5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERSTSBSQVMgTmV0bGluayBGYW1pbHkqKlxuXG5Pa2F5LCBzbyBgZHJtX3Jhc19nZW5sX2ZhbWlseV9yZWdpc3RlcmAgaXMgaW52b2tlZCBkdXJpbmcgYGRybV9jb3JlX2luaXRgLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhlIE5ldGxpbmsgZmFtaWx5IGZvciBSQVMgaXMgYWx3YXlzIHJlZ2lzdGVyZWQgYXMgbG9uZyBhcyBgQ09ORklHX0RSTV9SQVNgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoYXQncyBnb29kOyBpdCBlc3RhYmxpc2hlcyB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsLiBVc2VyIHNwYWNlIGNhbiB0aGVuIGludGVyYWN0IHdpdGggdGhpcyB0aHJvdWdoIE5ldGxpbmsgY29tbWFuZHMgbGlrZSBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbkJ1dCBoZXJlJ3MgYSB3cmlua2xlOiB0aGVzZSBjb21tYW5kcyB3aWxsIGp1c3QgcmV0dXJuIGAtRU5PRU5UYCBpZiBubyBSQVMgbm9kZXMgYXJlIGFjdHVhbGx5IHJlZ2lzdGVyZWQuIE15IG5leHQgdGhvdWdodCBpcywgYXJlIHRoZXJlIG90aGVyIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVzZSBSQVMgbm9kZXMgYmVzaWRlcyBgeGVgPyBUaGUgYW5zd2VyIHNlZW1zIHRvIGJlIG5vLCBqdXN0IHRoZSBgeGVgIGRyaXZlci4gVGhpcyByYWlzZXMgYW5vdGhlciBxdWVzdGlvbiwgY2FuIHRoZSBgeGVgIGRyaXZlciBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBpdCB0eXBpY2FsbHkgcmVsaWVzIG9uIHNwZWNpZmljIFBDSSBJRHMuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZSBgeGVgIGRyaXZlciBpbmNsdWRlcyBhbnkgbW9jayBvciB2aXJ0dWFsIGRldmljZSBzdXBwb3J0LiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50IGZvciBhIHN5c3RlbSB0aGF0J3Mgc3VwcG9zZWQgdG8gYmUgdmlydHVhbGl6ZWQsIG9yIHRoYXQgbWlnaHQgbm90IGhhdmUgdGhlIGhhcmR3YXJlIElEIGV4cGVjdGVkIGJ5IHhlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgZnVuY3Rpb25hbGl0eSBleHRlbmRzIHBhc3QgdGhlIGluaXRpYWwgUENJIHByb2JlLCB0byBlbnN1cmUgdGhlIFJBUyBpbnRlcmZhY2UgYWN0dWFsbHkgd29ya3MgYXMgaW50ZW5kZWQsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24ndCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MTEuOTQxNzU3MTY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1MjE0MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX3BjaV9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NDg3PXN0cnVjdCB4ZV9kZXZpY2UgKnhlX2RldmljZV9jcmVhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtNTE1LX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6NTE2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfY3JlYXRlLCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYy01MTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM9NzczPWludCB4ZV9kZXZpY2VfcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtODMyLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6ODMzOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9kZXZpY2VfcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTgzNC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmM9MzkxPWludCB4ZV9nZ3R0X2luaXRfZWFybHkoc3RydWN0IHhlX2dndHQgKmdndHQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTQ0OS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYzo0NTA6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2dndHRfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTQ1MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmM9MzkwPWludCB4ZV9ndWNfYWRzX2luaXQoc3RydWN0IHhlX2d1Y19hZHMgKmFkcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmMtNDEzLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jOjQxNDpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2Fkc19pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmMtNDE1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTMyMj1pbnQgeGVfZ3VjX2N0X2luaXRfbm9hbGxvYyhzdHJ1Y3QgeGVfZ3VjX2N0ICpjdClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0zNTctfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzozNTg6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19jdF9pbml0X25vYWxsb2MsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTM1OS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYz0zNjg9aW50IHhlX2d1Y19jdF9pbml0KHN0cnVjdCB4ZV9ndWNfY3QgKmN0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTM5Ni19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjM5NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfZ3VjX2N0X2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTM5OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM9NjI0PWludCB4ZV9ndWNfbG9nX2luaXQoc3RydWN0IHhlX2d1Y19sb2cgKmxvZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmMtNjQ0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmM6NjQ1OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9ndWNfbG9nX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19sb2cuYy02NDYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmM9MzQyPWludCB4ZV9ndWNfcmVsYXlfaW5pdChzdHJ1Y3QgeGVfZ3VjX3JlbGF5ICpyZWxheSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy0zNzAtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYzozNzE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2d1Y19yZWxheV9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy0zNzItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX2NsYXNzX3N5c2ZzLmM9NTc5PXN0YXRpYyBpbnQgeGVfYWRkX2h3X2VuZ2luZV9jbGFzc19kZWZhdWx0cyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdpbmVfY2xhc3Nfc3lzZnMuYy02MDMtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdpbmVfY2xhc3Nfc3lzZnMuYzo2MDQ6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX2FkZF9od19lbmdpbmVfY2xhc3NfZGVmYXVsdHMsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2VuZ2luZV9jbGFzc19zeXNmcy5jLTYwNS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvLmM9ODk9aW50IHhlX21taW9fcHJvYmVfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pby5jLTExMC19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYzoxMTE6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX21taW9fcHJvYmVfZWFybHksIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW8uYy0xMTItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTA0Mz1zdGF0aWMgdm9pZCB4ZV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNjAtICogRmF1bHQgaW5qZWN0aW9uIGlzIHVzZWQgdG8gdGVzdCB0aGUgZXJyb3IgcGF0aHMgb2Ygc29tZSBpbml0aWFsaXphdGlvblxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYxOiAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2Mi0gKiBleGFtcGxlIHRocm91Z2ggeGVfZGV2aWNlX3Byb2JlKCkuIFRob3NlIGZ1bmN0aW9ucyB1c2UgdGhlIGtlcm5lbCBmYXVsdFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzUtICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEwNzY6c3RhdGljIGludCB4ZV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzcte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTEzNDc9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHhlX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM0OS1cXHQuaWRfdGFibGUgPSBwY2lpZGxpc3QsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEzNTA6XFx0LnByb2JlID0geGVfcGNpX3Byb2JlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMzUxLVxcdC5yZW1vdmUgPSB4ZV9wY2lfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmM9MzQ4PWludCB4ZV9wY29kZV9wcm9iZV9lYXJseShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTM1MS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmM6MzUyOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9wY29kZV9wcm9iZV9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYz0zNjI9aW50IHhlX3BtX2luaXRfZWFybHkoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYy0zODQtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jOjM4NTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfcG1faW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYy0zODYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYz0xMDc9aW50IHhlX3NyaW92X2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy0xMjgtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jOjEyOTpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfc3Jpb3ZfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy0xMzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jPTE0OT1pbnQgeGVfdGlsZV9pbml0X2Vhcmx5KHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jLTE2NS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYzoxNjY6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3RpbGVfaW5pdF9lYXJseSwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZS5jLTE2Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90dW5pbmcuYz0xODM9aW50IHhlX3R1bmluZ19pbml0KHN0cnVjdCB4ZV9ndCAqZ3QpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmMtMjA1LX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmM6MjA2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV90dW5pbmdfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHVuaW5nLmMtMjA3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmM9ODM2PWludCB4ZV91Y19md19pbml0KHN0cnVjdCB4ZV91Y19mdyAqdWNfZncpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYy04NTYtfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jOjg1NzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfdWNfZndfaW5pdCwgRVJSTk8pOyAvKiBTZWUgeGVfcGNpX3Byb2JlKCkgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYy04NTgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYz05NDA9aW50IHhlX3dhX2d0X2luaXQoc3RydWN0IHhlX2d0ICpndClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93YS5jLTk2NS19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmM6OTY2OkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV93YV9ndF9pbml0LCBFUlJOTyk7IC8qIFNlZSB4ZV9wY2lfcHJvYmUoKSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93YS5jLTk2Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jPTIwNT1pbnQgeGVfd29wY21faW5pdChzdHJ1Y3QgeGVfd29wY20gKndvcGNtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dvcGNtLmMtMjgxLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYzoyODI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHhlX3dvcGNtX2luaXQsIEVSUk5PKTsgLyogU2VlIHhlX3BjaV9wcm9iZSgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU4OjE0LjIzNjk4MTMwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ1MzAwNzUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgR2VuZXJpYyBOZXRsaW5rIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHhlYCBkcml2ZXIsIGFuZCBpdCBzZWVtcyB0byBuZWVkIGEgcGh5c2ljYWwgUENJIGRldmljZS4gVGhlIGlzc3VlIGlzIEknbSBub3Qgc2VlaW5nIHRoYXQgdGhlIFJBUyBub2RlIGlzIHJlZ2lzdGVyZWQgd2l0aG91dCB0aGUgYHhlYCBkcml2ZXIuIElmIHRoZSBgeGVgIGRyaXZlciBpc24ndCBwcm9iZWQsIHRoZW4gbm8gUkFTIG5vZGUgZ2V0cyByZWdpc3RlcmVkLiBUaGF0IG1lYW5zIHRoZSBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGFuZCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgIGZ1bmN0aW9ucyB3aWxsIGp1c3QgcmV0dXJuIGAtRU5PRU5UYC4gSSB3YXMgaW5pdGlhbGx5IHF1ZXN0aW9uaW5nIHdoZXRoZXIgdGhpcyB3YXMgZXZlbiB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiBJIHJlYWxpemVkIHNvbWV0aGluZy4uLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIC0gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBkcm1fcmFzX25vZGVfcmVnaXN0ZXJgIGFuZCBpdCBsb29rcyBsaWtlIG9ubHkgdGhlIGB4ZWAgZHJpdmVyIHVzZXMgaXQuIEJ1dCB3YWl0LCBldmVuIHRob3VnaCB0aGUgc3BlY2lmaWMgUkFTIG5vZGUgaXNuJ3QgcmVnaXN0ZXJlZCwgdGhlICpnZW5lcmljKiBuZXRsaW5rIGludGVyZmFjZSBpdHNlbGYgKmlzKiBzdGlsbCByZWFjaGFibGUuIFRoZSBmdW5jdGlvbnMgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhbmQgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhcmUgdGhlcmUsIHBhcnNpbmcgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCBjYWxsaW5nIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIGFuZCBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYC5cblxuSSBjYW4gc2VlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBjb2RlIEknbSBsb29raW5nIGF0OlxuYGBgY1xuaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG57XG5cdHUzMiBub2RlX2lkLCBlcnJvcl9pZDtcblxuXHRpZiAoIWluZm8tXHUwMDNlYXR0cnMgfHxcblx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTk9ERV9JRCkgfHxcblx0ICAgIEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfRVJST1JfSUQpKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuXG5cdG5vZGVfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX05PREVfSURdKTtcblx0ZXJyb3JfaWQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX0VSUk9SX0lEXSk7XG5cblx0cmV0dXJuIGRvaXRfcmVwbHlfdGhyZXNob2xkKGluZm8sIG5vZGVfaWQsIGVycm9yX2lkKTtcbn1cbmBgYFxuQW5kIGhvdyBgZG9pdF9yZXBseV90aHJlc2hvbGRgIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCByZXR1cm5zIGAtRU5PRU5UYDpcbmBgYGNcbnN0YXRpYyBpbnQgZG9pdF9yZXBseV90aHJlc2hvbGQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsIHUzMiBlcnJvcl9pZClcbntcbi4uLlxuXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XG5cdGlmICghbXNnKVxuXHRcdHJldHVybiAtRU5PTUVNO1xuXG5cdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIGluZm8pO1xuXHRpZiAoIWhkcikge1xuXHRcdHJldCA9IC1FTVNHU0laRTtcblx0XHRnb3RvIGZyZWVfbXNnO1xuXHR9XG5cblx0cmV0ID0gZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkKG5vZGVfaWQsIGVycm9yX2lkLCBcdTAwMjZlcnJvcl9uYW1lLCBcdTAwMjZ0aHJlc2hvbGQpO1xuXHRpZiAocmV0KVxuXHRcdGdvdG8gY2FuY2VsX21zZztcbi4uLlxuY2FuY2VsX21zZzpcblx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuZnJlZV9tc2c6XG5cdG5sbXNnX2ZyZWUobXNnKTtcblx0cmV0dXJuIHJldDtcbn1cbmBgYFxuT2theSwgc28gdGhpcyBsb2dpYyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGV2ZW4gd2l0aG91dCBhbnkgbm9kZXMgcmVnaXN0ZXJlZC4gVGhlIGB4ZWAgc3BlY2lmaWMgY29kZSAoIGB4ZV9yYXMuY2AgLCBgeGVfZHJtX3Jhcy5jYCkgaXMgdW5yZWFjaGFibGUsIGJ1dCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGNvZGUgaXMgZ29vZC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgbmV3IG5ldGxpbmsgQVBJLCBJIHRoaW5rIGl0J3Mgd29ydGggdGhlIHRpbWUgdG8gZnV6eiBpdCwgYW5kIEkgc2hvdWxkIHNlZSBpZiBgQ09ORklHX0RSTV9SQVNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMjQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MjQuNjg5OTkxNjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDYzNjg4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERSTV9SQVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL0tjb25maWc9MTIzPWNvbmZpZyBEUk1fUEFOSUNfU0NSRUVOX1FSX1ZFUlNJT05cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTEzMi1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxMzM6Y29uZmlnIERSTV9SQVNcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMzQtXFx0Ym9vbCBcXFwiRFJNIFJBUyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1ODoyNi43MzYzNjY1MTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNDEwMTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIHRoZSBEUk1fUkFTIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIGBEUk1fUkFTYC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgbW9kdWxlcywgZHJpdmVycywgYW5kIG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCwgaW4gdHVybiwgbWF5IGJlIHJlbGlhbnQgb24gKml0Ki4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3Rpbmcgb3V0IHRoZSBgI2luY2x1ZGVgIHN0YXRlbWVudHMsIGJ1dCByZWFsbHkgKnVuZGVyc3RhbmRpbmcqIHRoZSBpbXBhY3Qgb2YgZWFjaCBjb25uZWN0aW9uLiBGb3IgaW5zdGFuY2UsIGlzIGBEUk1fUkFTYCBhIGNvcmUgY29tcG9uZW50LCBvciBkb2VzIGl0IHNpdCBvbiB0b3Agb2Ygb3RoZXJzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBvZiB0aWdodCBjb3VwbGluZyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3N0IGltcG9ydGFudGx5OiBhcmUgdGhlcmUgYW55IGltcGxpY2l0IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3I/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIG1heWJlIHVzaW5nIHNvbWUgc3BlY2lmaWMgZmlsdGVyaW5nIHRvIGtlZXAgdGhlIHNpZ25hbC10by1ub2lzZSByYXRpbyBoaWdoLiBBZnRlciB0aGF0LCBJJ2xsIG5lZWQgdG8gcmVhbGx5IGFuYWx5emUgdGhlIGFyY2hpdGVjdHVyZSB0byBwdXQgaXQgYWxsIGluIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6NTg6MzIuNTcwNDcyNTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzM6XFx0Y29uZmlnIERSTV9SQVNcXG4gMTM0OlxcdFxcdGJvb2wgXFxcIkRSTSBSQVMgc3VwcG9ydFxcXCJcXG4gMTM1OlxcdFxcdGRlcGVuZHMgb24gRFJNXFxuIDEzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAxMzc6XFx0XFx0aGVscFxcbiAxMzg6XFx0XFx0ICBFbmFibGVzIHRoZSBEUk0gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5IGFuZCBTZXJ2aWNlYWJpbGl0eSlcXG4gMTM5OlxcdFxcdCAgc3VwcG9ydCBmb3IgRFJNIGRyaXZlcnMuIFRoaXMgcHJvdmlkZXMgYSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlXFxuIDE0MDpcXHRcXHQgIGZvciBlcnJvciByZXBvcnRpbmcgYW5kIHF1ZXJpZXMuXFxuIDE0MTpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgXFxcIk5cXFwiLlxcbiAxNDI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjU4OjMyLjU3MDU4OTUwNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQwNjU5MjMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEUk1fUkFTIGZvciBGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBgRFJNX1JBU2AgY29kZS4gSXQgaGluZ2VzIG9uIGBEUk1gIGFuZCBgTkVUYCwgYW5kIGl0IHByb3ZpZGVzIGEgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZS4gSSBrbm93IHRoaXMgaW50ZXJmYWNlIGlzIHJlYWNoYWJsZSwgc28gdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhbmQgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAsIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCBhbmQgYHNldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYXMgd2VsbDsgdGhleSdyZSBpbnRlcnR3aW5lZC4gSSdtIGRpc2NhcmRpbmcgdGhlIGB4ZWAgZHJpdmVyIGZ1bmN0aW9ucyAoYHhlX3Jhc19nZXRfdGhyZXNob2xkYCwgYHhlX3Jhc19zZXRfdGhyZXNob2xkYCkgc2luY2UgdGhleSByZXF1aXJlIGhhcmR3YXJlIGFuZCBhcmUgdGh1cyBub3QgcmVhY2hhYmxlIGluIGEgZ2VuZXJhbCBmdXp6aW5nIGNvbnRleHQuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYERSTV9SQVNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgaXQgbG9va3MgbGlrZSBpdCdzIG5vdCDigJMgXCJJZiBpbiBkb3VidCwgc2F5IE5cIi4gU28sIEknbGwgbmVlZCB0byBhZGQgYERSTV9SQVNgIHRvIGBFbmFibGVDb25maWdzYCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBsb29rIGZvciBtb3JlLiBgbXNnX3JlcGx5X3RocmVzaG9sZGAgaXMgYWxzbyBhZGRlZC4gSXQncyBvbmx5IGNhbGxlZCBpZiBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCBzdWNjZWVkcywgd2hpY2ggbmVlZHMgYSByZWdpc3RlcmVkIG5vZGUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBoYXJkd2FyZS4gSG93ZXZlciwgYGRybV9yYXNfbmxfc2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YCBhY3R1YWxseSBjYWxscyBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCwgd2hpY2ggKnJldHVybnMqIGAtRU5PRU5UYCBpZiBubyBub2RlIGlzIHJlZ2lzdGVyZWQuIFNvLCBldmVuIHRob3VnaCBpdCByZXR1cm5zIGFuIGVycm9yLCBgZHJtX3Jhc19ubF9zZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgICppcyogcmVhY2hhYmxlLlxuXG5MZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHVzYWdlcyBvZiBgZHJtX3Jhc19ubF9nZXRfZXJyb3JfdGhyZXNob2xkX2RvaXRgLiBJdCdzIHJlZ2lzdGVyZWQgaW4gYGRybV9yYXNfbmxfb3BzYC4gVGhhdCBjb25maXJtcyB0aGF0IHRoZSBuZXRsaW5rIHBhcnNpbmcsIGBkcm1fcmFzX25sX2dldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAsIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGAsIGBkb2l0X3JlcGx5X3RocmVzaG9sZGAsIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgLCBhbmQgYHNldF9ub2RlX2Vycm9yX3RocmVzaG9sZGAgYXJlIGFsbCByZWFjaGFibGUuXG5cbkV2ZW4gdGhvdWdoIG1hbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGAtRU5PRU5UYCBvciBzaW1pbGFyIGluIHRoZSBhYnNlbmNlIG9mIHJlZ2lzdGVyZWQgaGFyZHdhcmUgb3IgdmFsaWQgaW5wdXRzLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHRoZSBhdHRyaWJ1dGUgdmFsaWRhdGlvbiwgYW5kIHRoZSBpbml0aWFsIGxvZ2ljIG9mIHRoZSBgZG9pdGAgaGFuZGxlcnMgKmFyZSogZXhlY3V0ZWQuIFNvLCBpdCdzIHdvcnRoIGZ1enppbmchXG5cblNwZWNpZmljYWxseSwgYGRvaXRfcmVwbHlfdGhyZXNob2xkYCBpcyBhbiBpbnRlcmVzdGluZyBwb2ludC4gSXQgYWxsb2NhdGVzIGEgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhlbiBjYW5jZWxzIGl0IGlmIGBnZXRfbm9kZV9lcnJvcl90aHJlc2hvbGRgIGZhaWxzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGJ1dCBpdCdzIGEgcGxhY2Ugd2hlcmUgbWVtb3J5IGxlYWtzIG9yIG90aGVyIGlzc3VlcyBjb3VsZCBhcmlzZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB1cCB0byBgZ2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYCByZXR1cm5pbmcgYC1FTk9FTlRgLCB0aGVuIGBjYW5jZWxfbXNnYCBhbmQgYGZyZWVfbXNnYCBhcmUgZXhlY3V0ZWQuXG5cblRoZXJlZm9yZSwgSSdsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgZm9jdXMgb246XG4qICAgYGRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0YFxuKiAgIGBkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdGBcbiogICBgZG9pdF9yZXBseV90aHJlc2hvbGRgXG4qICAgYGdldF9ub2RlX2Vycm9yX3RocmVzaG9sZGBcbiogICBgc2V0X25vZGVfZXJyb3JfdGhyZXNob2xkYFxuXG5UaGUgcmVxdWlyZWQgY29uZmlnIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYERSTV9SQVNgLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBgeGVgIGRyaXZlciwgYW5kLCBhcyBleHBlY3RlZCwgdGhlcmUncyBubyB3YXkgdG8gbW9jayBpdC4gVGhlIGB4ZWAgZHJpdmVyIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIG1lYW5pbmcgYHhlX3Jhc19nZXRfdGhyZXNob2xkYCBhbmQgYHhlX3Jhc19zZXRfdGhyZXNob2xkYCBhcmUgdW5yZWFjaGFibGUgaW4gYSBub24taGFyZHdhcmUgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzcxLCJPdXRwdXRUb2tlbnMiOjE5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDo1ODo0OC45NzcxODUwMjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc0NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFJNX1JBU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRybV9yYXNfbmxfZ2V0X2Vycm9yX3RocmVzaG9sZF9kb2l0XCIsXG4gICAgXCJkcm1fcmFzX25sX3NldF9lcnJvcl90aHJlc2hvbGRfZG9pdFwiLFxuICAgIFwiZG9pdF9yZXBseV90aHJlc2hvbGRcIixcbiAgICBcImdldF9ub2RlX2Vycm9yX3RocmVzaG9sZFwiLFxuICAgIFwic2V0X25vZGVfZXJyb3JfdGhyZXNob2xkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzIChHRVRfRVJST1JfVEhSRVNIT0xEIGFuZCBTRVRfRVJST1JfVEhSRVNIT0xEKSB0byB0aGUgRFJNIFJBUyBzdWJzeXN0ZW0uIFdoaWxlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYHhlYCBkcml2ZXIgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBJbnRlbCBHUFVzLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIHBhcnNpbmcsIG1lc3NhZ2UgYWxsb2NhdGlvbiwgYW5kIGluaXRpYWwgdmFsaWRhdGlvbiBsb2dpYyBpbiBgZHJtX3Jhcy5jYCBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[1] Phase: Succeeded StartedAt: 2026-06-23 10:59:01 +0000 UTC FinishedAt: 2026-06-23 10:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 10:59:01 +0000 UTC FinishedAt: 2026-06-23 10:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2] Phase: Succeeded StartedAt: 2026-06-23 10:59:01 +0000 UTC FinishedAt: 2026-06-23 13:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 10:59:01 +0000 UTC FinishedAt: 2026-06-23 13:51:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 10:59:01 +0000 UTC FinishedAt: 2026-06-23 10:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 10:59:01 +0000 UTC FinishedAt: 2026-06-23 10:59:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowcfpd8/series-workflowcfpd8-convert-artifact-3629008731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 10:59:12 +0000 UTC FinishedAt: 2026-06-23 11:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 10:59:12 +0000 UTC FinishedAt: 2026-06-23 11:41:55 +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:*e2b8b962-73b4-4183-a0b0-b224156b8acc,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-workflowcfpd8/series-workflowcfpd8-convert-artifact-3629008731/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": "d0d36439-eabb-4421-ba04-acd85d352e05", "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-workflowcfpd8/series-workflowcfpd8-build-action-506856601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 10:59:12 +0000 UTC FinishedAt: 2026-06-23 11:41:29 +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:*e2b8b962-73b4-4183-a0b0-b224156b8acc,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-workflowcfpd8/series-workflowcfpd8-convert-artifact-3629008731/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": "d0d36439-eabb-4421-ba04-acd85d352e05", "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-workflowcfpd8/series-workflowcfpd8-build-action-506856601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 11:41:55 +0000 UTC FinishedAt: 2026-06-23 11:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 11:41:55 +0000 UTC FinishedAt: 2026-06-23 11:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 11:41:55 +0000 UTC FinishedAt: 2026-06-23 11:42:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 11:41:55 +0000 UTC FinishedAt: 2026-06-23 11:42:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowcfpd8/series-workflowcfpd8-convert-artifact-518147506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 11:42:53 +0000 UTC FinishedAt: 2026-06-23 11:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 11:42:53 +0000 UTC FinishedAt: 2026-06-23 11:44:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d0d36439-eabb-4421-ba04-acd85d352e05,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-workflowcfpd8/series-workflowcfpd8-build-action-506856601/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-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 11:44:56 +0000 UTC FinishedAt: 2026-06-23 11:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 11:44:56 +0000 UTC FinishedAt: 2026-06-23 11:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 11:44:56 +0000 UTC FinishedAt: 2026-06-23 12:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 11:44:56 +0000 UTC FinishedAt: 2026-06-23 12:11:17 +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:*e2b8b962-73b4-4183-a0b0-b224156b8acc,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-workflowcfpd8/series-workflowcfpd8-convert-artifact-518147506/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": "5c782c87-b721-4b28-a967-c0ddc2f0eb29", "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-workflowcfpd8/series-workflowcfpd8-build-action-1159675718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 11:44:56 +0000 UTC FinishedAt: 2026-06-23 12:10:52 +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:*e2b8b962-73b4-4183-a0b0-b224156b8acc,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-workflowcfpd8/series-workflowcfpd8-convert-artifact-518147506/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": "5c782c87-b721-4b28-a967-c0ddc2f0eb29", "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-workflowcfpd8/series-workflowcfpd8-build-action-1159675718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 12:11:17 +0000 UTC FinishedAt: 2026-06-23 12:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 12:11:17 +0000 UTC FinishedAt: 2026-06-23 12:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 12:11:17 +0000 UTC FinishedAt: 2026-06-23 12:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 12:11:17 +0000 UTC FinishedAt: 2026-06-23 12:13:32 +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:*5c782c87-b721-4b28-a967-c0ddc2f0eb29,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-workflowcfpd8/series-workflowcfpd8-build-action-1159675718/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-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 12:13:42 +0000 UTC FinishedAt: 2026-06-23 13:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 12:13:42 +0000 UTC FinishedAt: 2026-06-23 13:51:14 +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":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"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:*d0d36439-eabb-4421-ba04-acd85d352e05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5c782c87-b721-4b28-a967-c0ddc2f0eb29,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-workflowcfpd8/series-workflowcfpd8-build-action-506856601/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-workflowcfpd8/series-workflowcfpd8-build-action-1159675718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 12:13:42 +0000 UTC FinishedAt: 2026-06-23 12:13:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 12:13:42 +0000 UTC FinishedAt: 2026-06-23 12:13:47 +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":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"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-workflowcfpd8/series-workflowcfpd8-convert-artifact-620117255/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 12:13:42 +0000 UTC FinishedAt: 2026-06-23 12:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 12:13:42 +0000 UTC FinishedAt: 2026-06-23 12:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 12:13:42 +0000 UTC FinishedAt: 2026-06-23 12:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 12:13:52 +0000 UTC FinishedAt: 2026-06-23 13:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfpd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["drm_ras_nl_get_error_threshold_doit","drm_ras_nl_set_error_threshold_doit","doit_reply_threshold","get_node_error_threshold","set_node_error_threshold"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"948efecf22e49aa4bf55bb73ec79a0ddcfd38571","config_name":"upstream-apparmor-kasan.config","enable_configs":["DRM_RAS"],"series_id":"185c64cf-4077-4eb3-bf74-ea82ed09b722","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 12:13:52 +0000 UTC FinishedAt: 2026-06-23 13:51:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d0d36439-eabb-4421-ba04-acd85d352e05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5c782c87-b721-4b28-a967-c0ddc2f0eb29,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-workflowcfpd8/series-workflowcfpd8-build-action-506856601/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-workflowcfpd8/series-workflowcfpd8-build-action-1159675718/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-workflowcfpd8/series-workflowcfpd8-convert-artifact-620117255/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,}