Name: series-workflow8q5b5 Phase: Failed StartedAt: 2026-07-01 15:36:21 +0000 UTC FinishedAt: 2026-07-01 15:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q5b5[0] Phase: Succeeded StartedAt: 2026-07-01 15:36:21 +0000 UTC FinishedAt: 2026-07-01 15:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q5b5[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 15:36:21 +0000 UTC FinishedAt: 2026-07-01 15:54:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBldmVudCBgZXJyb3ItZXZlbnRgIHRvIHRoZSBgZHJtX3Jhc2AgZmFtaWx5IGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlci4gVGhlIGV2ZW50IGlzIGJyb2FkY2FzdGVkIGJ5IHRoZSBrZXJuZWwgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIgKGhhbmRsZWQgaW4gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCkuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFuZCBzeXN0ZW0gY29udHJvbGxlciBldmVudHMsIHdoaWNoIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGZyb20gdXNlcnNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBjb2RlIGZvciBzeXprYWxsZXIgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NzUxOTQyYzg3YzU0ZmM5OTcyNWRjZjY2OThmZjU5ZjBiZTY5YzE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNTo1MzowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5pbmRleCA4M2MyMTg1M2I3NGI2MC4uNDA2ZTRjNDliYWMxZmQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICYjNDM7NTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLlxuIFxuIFlBTUwtYmFzZWQgSW50ZXJmYWNlXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0xMTEsMyAmIzQzOzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7e1wmIzM0O25vZGUtaWRcJiMzNDs6MCwgXCYjMzQ7ZXJyb3ItaWRcJiMzNDs6MX0mIzM5O1xuICAgICBOb25lXG4mIzQzO1xuJiM0MztFeGFtcGxlOiBTdWJzY3JpYmUgdG8gYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXBcbiYjNDM7XG4mIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4mIzQzO1xuJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGpzb25cbiYjNDM7XG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7ZXJyb3ItZXZlbnRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bXNnXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2RldmljZS1uYW1lXCYjMzQ7OiBcJiMzNDswMDAwOjAzOjAwLjBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtaWRcJiMzNDs6IDEsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtbmFtZVwmIzM0OzogXCYjMzQ7dW5jb3JyZWN0YWJsZS1lcnJvcnNcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OiAxLFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtlcnJvci1uYW1lXCYjMzQ7OiBcJiMzNDtlcnJvcl9uYW1lMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZXJyb3ItdmFsdWVcJiMzNDs6IDFcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICB9XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi44YWVkM2Q0NTE1ZTVhZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbkBAIC02OSw2ICYjNDM7NjksMzMgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGVycm9yLWV2ZW50LWF0dHJzXG4mIzQzOyAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZGV2aWNlLW5hbWVcbiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmdcbiYjNDM7ICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBub2RlLWlkXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWlkXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcbiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmdcbiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgJiM0MzsxNTEsMjQgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBlcnJvci1ldmVudFxuJiM0MzsgICAgICBkb2M6IFx1MDAzZS1cbiYjNDM7ICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLlxuJiM0MzsgICAgICAgICAgIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgZGV2aWNlLCBub2RlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxuJiM0MzsgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4mIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzXG4mIzQzOyAgICAgIG1jZ3JwOiBlcnJvci1yZXBvcnRcbiYjNDM7ICAgICAgZXZlbnQ6XG4mIzQzOyAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgIC0gZGV2aWNlLW5hbWVcbiYjNDM7ICAgICAgICAgIC0gbm9kZS1pZFxuJiM0MzsgICAgICAgICAgLSBub2RlLW5hbWVcbiYjNDM7ICAgICAgICAgIC0gZXJyb3ItaWRcbiYjNDM7ICAgICAgICAgIC0gZXJyb3ItbmFtZVxuJiM0MzsgICAgICAgICAgLSBlcnJvci12YWx1ZVxuJiM0MztcbiYjNDM7bWNhc3QtZ3JvdXBzOlxuJiM0MzsgIGxpc3Q6XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uNzdmOTEyYTRkMTAxZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5AQCAtNDEsNiAmIzQzOzQxLDExIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4mIzQzOyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzXG4mIzQzOyAqXG4mIzQzOyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlXG4mIzQzOyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4mIzQzOyAqXG4gICogTm9kZSByZWdpc3RyYXRpb246XG4gICpcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xuQEAgLTE4Niw2ICYjNDM7MTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcbiBcdFx0XHQgICB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtXHUwMDNlZGV2aWNlX25hbWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLVx1MDAzZW5vZGVfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRcdFx0ICAgIHUzMiBlcnJvcl9pZClcbiB7XG5AQCAtMjIyLDYgJiM0MzsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcbiYjNDM7ICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXG4mIzQzOyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yXG4mIzQzOyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvclxuJiM0MzsgKiBAdmFsdWU6IFZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3JcbiYjNDM7ICogQGZsYWdzOiBHRlAgZmxhZ3MgZm9yIG1lbW9yeSBhbGxvY2F0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xuJiM0MztcdHN0cnVjdCBza19idWZmICptc2c7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZXJyb3JfbmFtZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbmxfaGFzX2xpc3RlbmVycyhcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgXHUwMDI2aW5pdF9uZXQsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbiYjNDM7XG4mIzQzO1x0bXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGZsYWdzKTtcbiYjNDM7XHRpZiAoIW1zZylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRpZiAoIWhkcikge1xuJiM0MztcdFx0cmV0ID0gLUVNU0dTSVpFO1xuJiM0MztcdFx0Z290byBmcmVlX21zZztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGNhbmNlbF9tc2c7XG4mIzQzO1xuJiM0MztcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbiYjNDM7XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCwgZmxhZ3MpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2FuY2VsX21zZzpcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4mIzQzO2ZyZWVfbXNnOlxuJiM0MztcdG5sbXNnX2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7XG4mIzQzO1xuIC8qKlxuICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVyc1xuICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuaW5kZXggZGVhMWMxYjI0OTRlODEuLjlkMzEyM2NjOWY5Y2FhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuQEAgLTU4LDYgJiM0Mzs1OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XG4gXHR9LFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZHJtX3Jhc19ubF9tY2dycHNbXSA9IHtcbiYjNDM7XHRbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyBcJiMzNDtlcnJvci1yZXBvcnRcJiMzNDssIH0sXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubmFtZVx0XHQ9IERSTV9SQVNfRkFNSUxZX05BTUUsXG4gXHQudmVyc2lvblx0PSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLFxuQEAgLTY2LDQgJiM0Mzs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubW9kdWxlXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuc3BsaXRfb3BzXHQ9IGRybV9yYXNfbmxfb3BzLFxuIFx0Lm5fc3BsaXRfb3BzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9vcHMpLFxuJiM0MztcdC5tY2dycHNcdFx0PSBkcm1fcmFzX25sX21jZ3JwcyxcbiYjNDM7XHQubl9tY2dycHNcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uYmY3N2NjZTIxOTc0YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5AQCAtMTg1LDYgJiM0MzsxODUsMzggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG4mIzQzOyAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxuJiM0MzsgKiBAc2V2ZXJpdHk6IGVycm9yIHNldmVyaXR5IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxuJiM0MzsgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXJcbiYjNDM7ICogQGZsYWdzOiBmbGFncyBmb3IgYWxsb2NhdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4mIzQzO1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cbiYjNDM7XHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX2RybV9yYXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBcdTAwMjZyYXMtXHUwMDNlbm9kZVtzZXZlcml0eV07XG4mIzQzO1xuJiM0MztcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUsIGZsYWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwmIzM0O2RybV9yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcXG5cJiMzNDssIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeGVfZHJtX3Jhc19pbml0KCkgLSBJbml0aWFsaXplIERSTSBSQVNcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5pbmRleCAzNjVjNzBlOTNlODJmZC4uMmE2OTRiZjY5NDc4NDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5AQCAtNSwxMSAmIzQzOzUsMTQgQEBcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuIHN0cnVjdCB4ZV9kZXZpY2U7XG4gXG4gI2RlZmluZSBmb3JfZWFjaF9lcnJvcl9zZXZlcml0eShpKVx0XFxcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7IGkmIzQzOyYjNDM7KVxuIFxuIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuJiM0Mzt2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xuaW5kZXggNGE0YjM2M2ZjODQ0YjYuLmE4MzNjZWNjNzRlYzViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jXG5AQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lclxuIFx0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbiBcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBlcnJfc3JjO1xuLVx0dTMyIGVycl9iaXQ7XG4mIzQzO1x0dTMyIGVycl9iaXQsIHZhbHVlO1xuIFxuIFx0aWYgKCFJU19ER0ZYKHhlKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ5NSw2ICYjNDM7NDk1LDkgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJcbiBcdFx0XHRndF9od19lcnJvcl9oYW5kbGVyKHRpbGUsIGh3X2VyciwgZXJyb3JfaWQpO1xuIFx0XHRpZiAoZXJyX2JpdCA9PSBYRV9TT0NfRVJST1IpXG4gXHRcdFx0c29jX2h3X2Vycm9yX2hhbmRsZXIodGlsZSwgaHdfZXJyLCBlcnJvcl9pZCk7XG4mIzQzO1xuJiM0MztcdFx0dmFsdWUgPSBhdG9taWNfcmVhZChcdTAwMjZpbmZvW2Vycm9yX2lkXS5jb3VudGVyKTtcbiYjNDM7XHRcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGVycm9yX2lkLCBzZXZlcml0eSwgdmFsdWUsIEdGUF9BVE9NSUMpO1xuIFx0fVxuIFxuIGNsZWFyX3JlZzpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IDQ0ZjRlMWEzNDU1YjdjLi5iNzFkNTEyODU5NTQ1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5AQCAtNzcsNiAmIzQzOzc3LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHU4IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHNldmVyaXR5KSB7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRTtcbiYjNDM7XHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfVU5DT1JSRUNUQUJMRTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4ge1xuIFx0c3dpdGNoIChjb21wb25lbnQpIHtcbkBAIC05NSw2ICYjNDM7MTA3LDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjb21wb25lbnQpIHtcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX0RFVklDRV9NRU1PUlk6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9GQUJSSUM6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXG4ge1xuIFx0c3dpdGNoIChzdGF0dXMpIHtcbkBAIC0xMzEsMTQgJiM0MzsxNjEsNDEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjb21wX3RvX3N0cih1OCBjb21wb25lbnQpXG4gXHRyZXR1cm4geGVfcmFzX2NvbXBvbmVudHNbY29tcG9uZW50XTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0dTggZHJtX3NldmVyaXR5LCBkcm1fY29tcG9uZW50O1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcbiYjNDM7XHRpZiAoZHJtX3NldmVyaXR5ID09IERSTV9YRV9SQVNfRVJSX1NFVl9NQVgpIHtcbiYjNDM7XHRcdHhlX3dhcm4oeGUsIFwmIzM0O3N5c2N0cmw6IHVuZXhwZWN0ZWQgc2V2ZXJpdHkgJXVcXG5cJiMzNDssIHNldmVyaXR5KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuJiM0MztcdGlmIChkcm1fY29tcG9uZW50ID09IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XG4mIzQzO1x0XHR4ZV93YXJuKHhlLCBcJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGNvbXBvbmVudCAldVxcblwmIzM0OywgY29tcG9uZW50KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHhlX3Jhc19nZXRfY291bnRlcih4ZSwgZHJtX3NldmVyaXR5LCBkcm1fY29tcG9uZW50LCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcbiB7XG4gXHRzdHJ1Y3QgeGVfcmFzX3RocmVzaG9sZF9jcm9zc2VkICpwZW5kaW5nID0gKHZvaWQgKilcdTAwMjZyZXNwb25zZS1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqZXJyb3JzID0gcGVuZGluZy1cdTAwM2Vjb3VudGVycztcbiBcdHUzMiBpZCwgbmNvdW50ZXJzID0gcGVuZGluZy1cdTAwM2VuY291bnRlcnM7XG4mIzQzO1x0dTggc2VudCA9IDA7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJlc3BvbnNlLVx1MDAzZWRhdGEpIFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oWEVfUkFTX0NPTVBfTUFYIFx1MDAzZSAoQklUU19QRVJfQllURSAqIHNpemVvZihzZW50KSkpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0xNTQsNiAmIzQzOzIxMSwyNCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFxuIFx0XHR4ZV93YXJuKHhlLCBcJiMzNDtbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXG5cJiMzNDssXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXZlcml0eSAhPSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFKSB7XG4mIzQzO1x0XHRcdHhlX3dhcm4oeGUsIFwmIzM0O3N5c2N0cmw6IHVuZXhwZWN0ZWQgc2V2ZXJpdHkgJXMgKCV1KVxcblwmIzM0Oywgc2V2X3RvX3N0cihzZXZlcml0eSksXG4mIzQzO1x0XHRcdFx0c2V2ZXJpdHkpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50IFx1MDAzZT0gWEVfUkFTX0NPTVBfTUFYKSB7XG4mIzQzO1x0XHRcdHhlX3dhcm4oeGUsIFwmIzM0O3N5c2N0cmw6IHVuZXhwZWN0ZWQgY29tcG9uZW50ICV1XFxuXCYjMzQ7LCBjb21wb25lbnQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xuJiM0MztcdFx0aWYgKHNlbnQgXHUwMDI2IEJJVChjb21wb25lbnQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XG4mIzQzO1xuJiM0MztcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTRiLi44YWJmYjdkMjA3N2I1ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtODAsOSAmIzQzOzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxuIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4gdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuJiM0Mzt7IHJldHVybiAwOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuaW5kZXggMjE4YTNlZTg2ODA1MjcuLmVhYjgyMzFhYTg3Y2JmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzgsMTMgJiM0MzszOCwyOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsXG4mIzQzO1xuJiM0MztcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXG4gXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcbiBcdERSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsXG4mIzQzO1x0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXG4gXG4gXHRfX0RSTV9SQVNfQ01EX01BWCxcbiBcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVFx0XCYjMzQ7ZXJyb3ItcmVwb3J0XCYjMzQ7XG4mIzQzO1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQgYGVycm9yLWV2ZW50YCB0byB0aGUgYGRybV9yYXNgIGZhbWlseSBhbmQgaW50ZWdyYXRlcyBpdCBpbnRvIHRoZSBgeGVgIERSTSBkcml2ZXIuIFRoZSBldmVudCBpcyBicm9hZGNhc3RlZCBieSB0aGUga2VybmVsIHdoZW4gaGFyZHdhcmUgZXJyb3JzIG9jY3VyIChoYW5kbGVkIGluIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGApLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSB0cmlnZ2VyZWQgYnkgaGFyZHdhcmUgaW50ZXJydXB0cyBhbmQgc3lzdGVtIGNvbnRyb2xsZXIgZXZlbnRzLCB3aGljaCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBmcm9tIHVzZXJzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWxseSByZWFjaGFibGUgY29kZSBmb3Igc3l6a2FsbGVyIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NzUxOTQyYzg3YzU0ZmM5OTcyNWRjZjY2OThmZjU5ZjBiZTY5YzE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAxNTo1MzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QKaW5kZXggODNjMjE4NTNiNzRiNjAuLjQwNmU0YzQ5YmFjMWZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdApAQCAtNTYsNiAmIzQzOzU2LDcgQEAgVXNlciBzcGFjZSB0b29scyBjYW46CiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy4KICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aAogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLgogCiBZQU1MLWJhc2VkIEludGVyZmFjZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMSwzICYjNDM7MTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZQogCiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxfSYjMzk7CiAgICAgTm9uZQomIzQzOwomIzQzO0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cAomIzQzOwomIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoCiYjNDM7CiYjNDM7ICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnQKJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjoganNvbgomIzQzOwomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtlcnJvci1ldmVudCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttc2cmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7ZGV2aWNlLW5hbWUmIzM0OzogJiMzNDswMDAwOjAzOjAwLjAmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtaWQmIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtbmFtZSYjMzQ7OiAmIzM0O3VuY29ycmVjdGFibGUtZXJyb3JzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci1pZCYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItbmFtZSYjMzQ7OiAmIzM0O2Vycm9yX25hbWUxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci12YWx1ZSYjMzQ7OiAxCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCmluZGV4IGUxMTMwNTZmOGMwMTZjLi44YWVkM2Q0NTE1ZTVhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCkBAIC02OSw2ICYjNDM7NjksMzMgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IGVycm9yLXZhbHVlCiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLgomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBlcnJvci1ldmVudC1hdHRycwomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGRldmljZS1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBub2RlLWlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGRvYzogSUQgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbm9kZS1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLW5hbWUKJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZwomIzQzOyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBlcnJvci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci12YWx1ZQomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuCiAKIG9wZXJhdGlvbnM6CiAgIGxpc3Q6CkBAIC0xMjQsMyAmIzQzOzE1MSwyNCBAQCBvcGVyYXRpb25zOgogICAgICAgZG86CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBlcnJvci1ldmVudAomIzQzOyAgICAgIGRvYzogJmd0Oy0KJiM0MzsgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuCiYjNDM7ICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb24KJiM0MzsgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuCiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnMKJiM0MzsgICAgICBtY2dycDogZXJyb3ItcmVwb3J0CiYjNDM7ICAgICAgZXZlbnQ6CiYjNDM7ICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAtIGRldmljZS1uYW1lCiYjNDM7ICAgICAgICAgIC0gbm9kZS1pZAomIzQzOyAgICAgICAgICAtIG5vZGUtbmFtZQomIzQzOyAgICAgICAgICAtIGVycm9yLWlkCiYjNDM7ICAgICAgICAgIC0gZXJyb3ItbmFtZQomIzQzOyAgICAgICAgICAtIGVycm9yLXZhbHVlCiYjNDM7CiYjNDM7bWNhc3QtZ3JvdXBzOgomIzQzOyAgbGlzdDoKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMKaW5kZXggZDZlYWIyOWExMzk0Y2EuLjc3ZjkxMmE0ZDEwMWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMKQEAgLTQxLDYgJiM0Mzs0MSwxMSBAQAogICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC4KICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuCiAgKgomIzQzOyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzCiYjNDM7ICoKJiM0MzsgKiA1LiBFUlJPUl9FVkVOVDogUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS4gVGhlIGV2ZW50IGNvbnRhaW5zIGRldmljZSwgbm9kZQomIzQzOyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuCiYjNDM7ICoKICAqIE5vZGUgcmVnaXN0cmF0aW9uOgogICoKICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zCkBAIC0xODYsNiAmIzQzOzE5MSwzNCBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsCiAJCQkgICB2YWx1ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FLCBub2RlLSZndDtkZXZpY2VfbmFtZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLSZndDtpZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtJmd0O25vZGVfbmFtZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsCiAJCQkgICAgdTMyIGVycm9yX2lkKQogewpAQCAtMjIyLDYgJiM0MzsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLAogCXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnQKJiM0MzsgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAZXJyb3JfaWQ6IElEIG9mIHRoZSBlcnJvcgomIzQzOyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvcgomIzQzOyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvcgomIzQzOyAqIEBmbGFnczogR0ZQIGZsYWdzIGZvciBtZW1vcnkgYWxsb2NhdGlvbgomIzQzOyAqCiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwKJiM0MzsJCQkgICB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmxfaW5mbyBpbmZvOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpoZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZXJyb3JfbmFtZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoIWdlbmxfaGFzX2xpc3RlbmVycygmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCAmYW1wO2luaXRfbmV0LCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ2VubF9pbmZvX2luaXRfbnRmKCZhbXA7aW5mbywgJmFtcDtkcm1fcmFzX25sX2ZhbWlseSwgRFJNX1JBU19DTURfRVJST1JfRVZFTlQpOwomIzQzOwomIzQzOwltc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgZmxhZ3MpOwomIzQzOwlpZiAoIW1zZykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwloZHIgPSBnZW5sbXNnX2lwdXQobXNnLCAmYW1wO2luZm8pOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBmcmVlX21zZzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2FuY2VsX21zZzsKJiM0MzsKJiM0MzsJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwomIzQzOwlnZW5sbXNnX211bHRpY2FzdCgmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULCBmbGFncyk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NhbmNlbF9tc2c6CiYjNDM7CWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKJiM0MztmcmVlX21zZzoKJiM0MzsJbmxtc2dfZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpOwomIzQzOwogLyoqCiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnMKICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCmluZGV4IGRlYTFjMWIyNDk0ZTgxLi45ZDMxMjNjYzlmOWNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCkBAIC01OCw2ICYjNDM7NTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCX0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0gewomIzQzOwlbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyAmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7LCB9LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCS5uYW1lCQk9IERSTV9SQVNfRkFNSUxZX05BTUUsCiAJLnZlcnNpb24JPSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLApAQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCS5zcGxpdF9vcHMJPSBkcm1fcmFzX25sX29wcywKIAkubl9zcGxpdF9vcHMJPSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSwKJiM0MzsJLm1jZ3JwcwkJPSBkcm1fcmFzX25sX21jZ3JwcywKJiM0MzsJLm5fbWNncnBzCT0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAomIzQzO2VudW0gewomIzQzOwlEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCwKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTsKIAogI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwppbmRleCA3OTM3ZDhiYTBlZDljZS4uYmY3N2NjZTIxOTc0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwpAQCAtMTg1LDYgJiM0MzsxODUsMzggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlCiYjNDM7ICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSAmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSkKJiM0MzsgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXIKJiM0MzsgKiBAZmxhZ3M6IGZsYWdzIGZvciBhbGxvY2F0aW9uCiYjNDM7ICoKJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLgomIzQzOyAqLwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tzZXZlcml0eV07CiYjNDM7CXN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybV9yYXMgaXMgZW5hYmxlZCAqLwomIzQzOwlpZiAoIXhlLSZndDtpbmZvLmhhc19kcm1fcmFzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlub2RlID0gJmFtcDtyYXMtJmd0O25vZGVbc2V2ZXJpdHldOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkcm1fZXJyX3JhdGVsaW1pdGVkKCZhbXA7eGUtJmd0O2RybSwgJiMzNDtkcm1fcmFzIGVycm9yLWV2ZW50IGZhaWxlZDogJWQgZm9yICVzICVzXG4mIzM0OywgcmV0LAomIzQzOwkJCQkgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBUwogICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCmluZGV4IDM2NWM3MGU5M2U4MmZkLi4yYTY5NGJmNjk0Nzg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCkBAIC01LDExICYjNDM7NSwxNCBAQAogI2lmbmRlZiBfWEVfRFJNX1JBU19IXwogI2RlZmluZSBfWEVfRFJNX1JBU19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiBzdHJ1Y3QgeGVfZGV2aWNlOwogCiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpCVwKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspCiAKIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jCmluZGV4IDRhNGIzNjNmYzg0NGI2Li5hODMzY2VjYzc0ZWM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMKQEAgLTQzMiw3ICYjNDM7NDMyLDcgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXIKIAlzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gJmFtcDt4ZS0mZ3Q7cmFzOwogCXN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtJmd0O2luZm9bc2V2ZXJpdHldOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGVycl9zcmM7Ci0JdTMyIGVycl9iaXQ7CiYjNDM7CXUzMiBlcnJfYml0LCB2YWx1ZTsKIAogCWlmICghSVNfREdGWCh4ZSkpCiAJCXJldHVybjsKQEAgLTQ5NSw2ICYjNDM7NDk1LDkgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXIKIAkJCWd0X2h3X2Vycm9yX2hhbmRsZXIodGlsZSwgaHdfZXJyLCBlcnJvcl9pZCk7CiAJCWlmIChlcnJfYml0ID09IFhFX1NPQ19FUlJPUikKIAkJCXNvY19od19lcnJvcl9oYW5kbGVyKHRpbGUsIGh3X2VyciwgZXJyb3JfaWQpOwomIzQzOwomIzQzOwkJdmFsdWUgPSBhdG9taWNfcmVhZCgmYW1wO2luZm9bZXJyb3JfaWRdLmNvdW50ZXIpOwomIzQzOwkJeGVfZHJtX3Jhc19ldmVudCh4ZSwgZXJyb3JfaWQsIHNldmVyaXR5LCB2YWx1ZSwgR0ZQX0FUT01JQyk7CiAJfQogCiBjbGVhcl9yZWc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKaW5kZXggNDRmNGUxYTM0NTViN2MuLmI3MWQ1MTI4NTk1NDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC03Nyw2ICYjNDM7NzcsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpCiAJfQogfQogCiYjNDM7c3RhdGljIHU4IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHNldmVyaXR5KSB7CiYjNDM7CWNhc2UgWEVfUkFTX1NFVl9DT1JSRUNUQUJMRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7CiYjNDM7CWNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KQogewogCXN3aXRjaCAoY29tcG9uZW50KSB7CkBAIC05NSw2ICYjNDM7MTA3LDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpCiAJfQogfQogCiYjNDM7c3RhdGljIHU4IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoY29tcG9uZW50KSB7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0RFVklDRV9NRU1PUlk7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFOwomIzQzOwljYXNlIFhFX1JBU19DT01QX1BDSUU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9QQ0lFOwomIzQzOwljYXNlIFhFX1JBU19DT01QX0ZBQlJJQzoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0ZBQlJJQzsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9NQVg7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cykKIHsKIAlzd2l0Y2ggKHN0YXR1cykgewpAQCAtMTMxLDE0ICYjNDM7MTYxLDQxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY29tcF90b19zdHIodTggY29tcG9uZW50KQogCXJldHVybiB4ZV9yYXNfY29tcG9uZW50c1tjb21wb25lbnRdOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpCiYjNDM7ewomIzQzOwl1OCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQ7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7CiYjNDM7CWlmIChkcm1fc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkgewomIzQzOwkJeGVfd2Fybih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIHNldmVyaXR5ICV1XG4mIzM0Oywgc2V2ZXJpdHkpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpOwomIzQzOwlpZiAoZHJtX2NvbXBvbmVudCA9PSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkgewomIzQzOwkJeGVfd2Fybih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGNvbXBvbmVudCAldVxuJiMzNDssIGNvbXBvbmVudCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0geGVfcmFzX2dldF9jb3VudGVyKHhlLCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQsICZhbXA7dmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlLCBHRlBfS0VSTkVMKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCQkJCSAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSkKIHsKIAlzdHJ1Y3QgeGVfcmFzX3RocmVzaG9sZF9jcm9zc2VkICpwZW5kaW5nID0gKHZvaWQgKikmYW1wO3Jlc3BvbnNlLSZndDtkYXRhOwogCXN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctJmd0O2NvdW50ZXJzOwogCXUzMiBpZCwgbmNvdW50ZXJzID0gcGVuZGluZy0mZ3Q7bmNvdW50ZXJzOwomIzQzOwl1OCBzZW50ID0gMDsKIAogCUJVSUxEX0JVR19PTihzaXplb2YocmVzcG9uc2UtJmd0O2RhdGEpICZsdDsgc2l6ZW9mKCpwZW5kaW5nKSk7CiYjNDM7CUJVSUxEX0JVR19PTihYRV9SQVNfQ09NUF9NQVggJmd0OyAoQklUU19QRVJfQllURSAqIHNpemVvZihzZW50KSkpOwogCXhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7CiAKIAlpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgJmd0OyBYRV9SQVNfTlVNX0NPVU5URVJTKQpAQCAtMTU0LDYgJiM0MzsyMTEsMjQgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwKIAogCQl4ZV93YXJuKHhlLCAmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxuJiMzNDssCiAJCQljb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiYjNDM7CiYjNDM7CQlpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkgewomIzQzOwkJCXhlX3dhcm4oeGUsICYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXG4mIzM0Oywgc2V2X3RvX3N0cihzZXZlcml0eSksCiYjNDM7CQkJCXNldmVyaXR5KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChjb21wb25lbnQgJmd0Oz0gWEVfUkFTX0NPTVBfTUFYKSB7CiYjNDM7CQkJeGVfd2Fybih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGNvbXBvbmVudCAldVxuJiMzNDssIGNvbXBvbmVudCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJaWYgKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzZW50IHw9IEJJVChjb21wb25lbnQpOwomIzQzOwomIzQzOwkJcmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCmluZGV4IDBiZWVkZTNkZGM0ZTRiLi44YWJmYjdkMjA3N2I1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaApAQCAtODAsOSAmIzQzOzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpCiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpOwogdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTsKJiM0MztpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsCiYjNDM7CQkJICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKQomIzQzO3sgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKaW5kZXggMjE4YTNlZTg2ODA1MjcuLmVhYjgyMzFhYTg3Y2JmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaApAQCAtMzgsMTMgJiM0MzszOCwyOCBAQCBlbnVtIHsKIAlEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggLSAxKQogfTsKIAomIzQzO2VudW0gewomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUgPSAxLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLAomIzQzOwomIzQzOwlfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVgsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYIC0gMSkKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJRFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsCiAJRFJNX1JBU19DTURfR0VUX0VSUk9SX0NPVU5URVIsCiAJRFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUiwKJiM0MzsJRFJNX1JBU19DTURfRVJST1JfRVZFTlQsCiAKIAlfX0RSTV9SQVNfQ01EX01BWCwKIAlEUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKQogfTsKIAomIzQzOyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlQJJiMzNDtlcnJvci1yZXBvcnQmIzM0OwomIzQzOwogI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQ3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgRFJNIFJBUyBFcnJvciBFdmVudCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGFuIGBlcnJvci1ldmVudGAgbXVsdGljYXN0IGdyb3VwIHRvIHRoZSBgZHJtX3Jhc2AgbmV0bGluayBmYW1pbHkuIEl0IGFkZHMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgYW5kIHNlbmRzIHRoZXNlIG5ldGxpbmsgbXVsdGljYXN0IG1lc3NhZ2VzLiBUaGlzIGlzIGludGVncmF0ZWQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nPwoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCB0YWtlcyBhIGJ1bmNoIG9mIGFyZ3VtZW50cywgYnVpbGRzIGEgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhlbiB1c2VzIGBnZW5sbXNnX211bHRpY2FzdGAgdG8gc2VuZCBpdC4gVGhpcyBzb3VuZHMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyBpcyAqdHJpZ2dlcmVkKiBieSBoYXJkd2FyZSBlcnJvcnMgd2l0aGluIHRoZSBgeGVgIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIHJlbGlhYmx5IHRyaWdnZXIgdGhvc2UgaGFyZHdhcmUgZXJyb3JzPyBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGlzIGNhbGxlZCBvbiBhIGhhcmR3YXJlIGVycm9yLCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCBpcyBjYWxsZWQgb24gYSBzeXNjdHJsIGV2ZW50IHJlc3BvbnNlLiBUaGUgY29tcGxleGl0eSBoZXJlIGlzIHdoZXRoZXIgd2UgY2FuIGNvbnRyb2wgdGhvc2UgZXZlbnRzLiBMaWtlbHkgbm90IGRpcmVjdGx5LCBidXQgd2UgKmNhbiogc3Vic2NyaWJlIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXAuCgpUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIG11bHRpY2FzdCBncm91cCBjYWxsZWQgYGVycm9yLXJlcG9ydGAuIFdlIHN1YnNjcmliZSB0byBtdWx0aWNhc3QgZ3JvdXBzIHVzaW5nIGBzZXRzb2Nrb3B0KGZkLCBTT0xfTkVUTElOSywgTkVUTElOS19BRERfTUVNQkVSU0hJUCwgLi4uKWAuIENyaXRpY2FsbHksIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgKmFkZCogYW55IG5ldyBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiAqc2VuZCosIGV4Y2VwdCBtYXliZSBgZXJyb3ItZXZlbnRgIGlzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kLgoKV2FpdCwgbG9va2luZyBjbG9zZXIsIGBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVGAgaXMgaW5kZWVkIGFkZGVkLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiwgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxgLiBBaCwgaXQmIzM5O3MgZXhwbGljaXRseSBkZWZpbmVkIGFzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kIHVzZXJzcGFjZSBjYW4gc2VuZC4gSXQmIzM5O3MgYW4gZXZlbnQgdXNlcnNwYWNlICpyZWNlaXZlcyouIFRoZSBkZXNjcmlwdGlvbiBzYXlzIGl0IHJlcG9ydHMgYW4gZXJyb3IgZXZlbnQgaW5jbHVkaW5nIGRldmljZSwgbm9kZSwgYW5kIGVycm9yIGluZm9ybWF0aW9uLiBUaGUgWUFNTCBmaWxlIGNvbmZpcm1zIHRoZXJlIGFyZSBubyBgZG9gIG9yIGBkdW1wYCBvcGVyYXRpb25zIGRlZmluZWQgZm9yIGBlcnJvci1ldmVudGAsIG9ubHkgYGV2ZW50YC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUga2VybmVsIHNpZGUgZG9lc24mIzM5O3QgZXhwb3NlIHRoaXMgY29tbWFuZCBmb3Igc2VuZGluZyB2aWEgdXNlcnNwYWNlLiBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY2AgZm9yIGBkcm1fcmFzX25sX29wc2AuIEFuZCwgeWVzLCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBhZGQgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zLiBUaHVzLCB1c2Vyc3BhY2UgY2Fubm90ICpzZW5kKiB0aGlzIGNvbW1hbmQgdG8gdGhlIGtlcm5lbC4KClRoZXJlZm9yZSwgdGhlIG9ubHkgdGhpbmcgdXNlcnNwYWNlIGNhbiBkbyBpcyBzdWJzY3JpYmUgdG8gdGhlIGBlcnJvci1yZXBvcnRgIG11bHRpY2FzdCBncm91cC4gVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIG5ldGxpbmsgY29kZSwgd2hpY2ggaXMgd2VsbC10cm9kZGVuIGdyb3VuZC4gVGhlICpuZXcqIGNvZGUgaXMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyIHdoZW4gaGFyZHdhcmUgZXJyb3JzIG9jY3VyLgoKQ2FuIHN5emthbGxlciByZWxpYWJseSB0cmlnZ2VyIHRob3NlIGB4ZWAgaGFyZHdhcmUgZXJyb3JzPyBQcm9iYWJseSBub3QgZWFzaWx5LCB1bmxlc3MgdGhlcmUmIzM5O3MgYSB3YXkgdG8gaW5qZWN0IHRoZW0uIEV2ZW4gaWYgaXQgKmNhbiogdHJpZ2dlciB0aGVtLCBhbGwgdGhlIGFkZGVkIGNvZGUgZG9lcyBpcyBjb25zdHJ1Y3QgYW5kIGJyb2FkY2FzdCBhIG5ldGxpbmsgbWVzc2FnZS4KClNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBUaGUgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBpbiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgbG9va3MgcHJldHR5IHN0YW5kYXJkLiBUaGVyZSBpc24mIzM5O3QgbXVjaCBjb21wbGV4aXR5IHRoZXJlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBqdXN0IHBhY2thZ2luZyB1cCBkYXRhIHRoYXQgdGhlIGB4ZWAgZHJpdmVyIGFscmVhZHkga25vd3MuIExldCBtZSBjaGVjayBpZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgdHJpZ2dlcmVkIGJ5IGFueSB1c2Vyc3BhY2UgYWN0aW9uLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9yYXNfbmxfZXJyb3JfZXZlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYz0yMjI9c3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjU4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNTk6ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2MC0gKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2OS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6MjcwOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjcxLVx0XHRcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0zMDktfVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzozMTA6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzExLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM9MTk4PXZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMjEzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoyMTQ6XHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxNS1cdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTgyPXZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODM6aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg0LVx0XHRcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODktXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGB4ZV9kcm1fcmFzX2V2ZW50YCBDYWxsZXJzKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGB4ZV9kcm1fcmFzX2V2ZW50YCwgaXMgb25seSBjYWxsZWQgZnJvbSBvbmUgcGxhY2UuIFRoYXQmIzM5O3MgYWN0dWFsbHkgYSBwcmV0dHkgZ29vZCBzdGFydGluZyBwb2ludCwgc2F2ZXMgbWUgc29tZSB0aW1lLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBgeGVfZHJtX3Jhc19ldmVudGAgaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIHRoZSBmbG93IGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgbG9jYXRpb24gb2YgdGhhdCBzaW5nbGUgY2FsbCB0byBwcm9wZXJseSBhbmFseXplIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGVfZHJtX3Jhc19ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jPTE1Nz1zdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxODk6ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5MC0gKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5Ny0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTk4OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTkte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmg9MTU9aW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oOjE2OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmgtMTctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NDI3PXN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2Vycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy00OTktXHRcdHZhbHVlID0gYXRvbWljX3JlYWQoXHUwMDI2aW5mb1tlcnJvcl9pZF0uY291bnRlcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MDA6XHRcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGVycm9yX2lkLCBzZXZlcml0eSwgdmFsdWUsIEdGUF9BVE9NSUMpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTAxLVx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xNjQ9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE4NS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoxODY6XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xODctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTI1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIEVycm9yIFNpZ25hbCoqCgpSaWdodCwgc28gdGhpcyBmdW5jdGlvbiwgdGhlIG9uZSBpbiBxdWVzdGlvbiwgaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBsaWtlbHkgYSBjZW50cmFsIHBvaW50IGZvciBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZXJyb3JzLCBlaXRoZXIgZGlyZWN0bHkgZnJvbSB0aGUgc291cmNlIGl0c2VsZiBvciBmcm9tIHRoZSBSQVMgKFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSkgc2lkZSBvZiB0aGluZ3MuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgY2FsbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEl0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBmaW5kIHRoZSByb290IGNhdXNlIG9mIHRoZXNlIGVycm9ycyBieSB1bmRlcnN0YW5kaW5nIHRoZSBzb3VyY2Ugb2YgdGhlIGNhbGxzLiBJcyBpdCBjb21pbmcgZGlyZWN0bHkgZnJvbSBhbiBpbnRlcnJ1cHQ/IE1heWJlIGEgc29mdHdhcmUtaW5pdGlhdGVkIGNoZWNrPyBJcyB0aGlzIGEgaGlnaC1wcmlvcml0eSBpbnRlcnJ1cHQgaGFuZGxlcj8gQWxsIG9mIHRoZXNlIHF1ZXN0aW9ucyBhcmUgdml0YWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod19lcnJvcl9zb3VyY2VfaGFuZGxlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0zNzA9c3RhdGljIHZvaWQgc29jX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyNi1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjQyNzpzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy00Mjgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjctXHRcdGlmIChtYXN0ZXJfY3RsIFx1MDAyNiBFUlJPUl9JUlEoaHdfZXJyKSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyODpcdFx0XHRod19lcnJvcl9zb3VyY2VfaGFuZGxlcih0aWxlLCBod19lcnIpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTI5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjg4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEVycm9yIEhhbmRsaW5nIFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSBzdGFydGluZyBhdCBgeGVfaHdfZXJyb3JfaXJxX2hhbmRsZXJgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIHRyaWdnZXIgY29tZXMgZnJvbS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBwcm9jZXNzLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgYHJhc19zZW5kX2Vycm9yX2V2ZW50YCBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIGZyb20gaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGVycm9yIHJlcG9ydGluZyBhbmQgaGFuZGxpbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBmaXRzIGludG8gdGhlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jhc19zZW5kX2Vycm9yX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xNTY9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjb21wX3RvX3N0cih1OCBjb21wb25lbnQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE2My1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoxNjQ6c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTY1LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MTg5PXZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTIzMC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyMzE6XHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0yMzItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb3VudGVyIFRocmVzaG9sZCBDcm9zcyBFdmVudCoqCgpBbHJpZ2h0LCBzbyBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGlzIHRoZSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIuIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBldmVyeSBjYWxsIHNpdGUgZm9yIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAuIFVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgY3JpdGljYWwgZm9yIGdyYXNwaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGV2ZW50IOKAkyBJIG5lZWQgdG8ga25vdyAqd2hhdCogaXMgbW9uaXRvcmluZyAqd2hhdCosIGFuZCBzcGVjaWZpY2FsbHkgKndoeSogdGhpcyB0aHJlc2hvbGQgd2FzIGNyb3NzZWQuIERpdmluZyBpbnRvIHRoZSBjYWxsIGdyYXBoIGlzIHRoZSBiZXN0IHdheSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgcHJvY2VzcyBmbG93IGFuZCBwaW5wb2ludGluZyB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGFsZXJ0LiBUaGlzIGlzIGFsbCBhYm91dCBnYXRoZXJpbmcgdGhlIGluaXRpYWwgdGVsZW1ldHJ5IHRvIGZvcm0gYSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MTY0PXN0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xODgtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MTg5OnZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTkwLVx0XHRcdFx0ICAgICAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMj1zdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0xMy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaDoxNDp2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE1LVx0XHRcdFx0ICAgICAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jPTE1PXN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMzgtXHRcdGlmIChyZXNwb25zZS1cdTAwM2VldmVudCA9PSBYRV9TWVNDVFJMX0VWRU5UX1RIUkVTSE9MRF9DUk9TU0VEKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzozOTpcdFx0XHR4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZCh4ZSwgcmVzcG9uc2UpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy00MC1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc0MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgWGUgU3lzdGVtIENvbnRyb2wgRXZlbnRzKioKClJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB4ZV9zeXNjdHJsX2V2ZW50LmNgIGZpbGUgYWdhaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggdG8gdGhpcyBgZ2V0X3BlbmRpbmdfZXZlbnRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIHNvIEkgY2FuIGdyYXNwIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBhbmQgaWRlbnRpZnkgdGhlIHJvb3QgY2F1c2UuIExldCYjMzk7cyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBgZ2V0X3BlbmRpbmdfZXZlbnRgIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCB3YXkgdG8gb3JpZW50IG15c2VsZiB3aGVuIGRlYnVnZ2luZyBzdWNoIGEgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9wZW5kaW5nX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjE1OnN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xNi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz03MD12b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtODYtXHRndWFyZChtdXRleCkoXHUwMDI2c2MtXHUwMDNlZXZlbnRfbG9jayk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjg3Olx0Z2V0X3BlbmRpbmdfZXZlbnQoc2MsIFx1MDAyNmNvbW1hbmQpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy04OC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYz0zODc5PXN0YXRpYyB2b2lkIHFlZF9pb3ZfcHJvY2Vzc19tYnhfcmVxKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmMtNDAwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmM6NDAwNDpzdGF0aWMgdm9pZCBxZWRfaW92X3BmX2dldF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbiwgdTY0ICpldmVudHMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQwMDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmM9NDkzMj1zdGF0aWMgdm9pZCBxZWRfaGFuZGxlX3ZmX21zZyhzdHJ1Y3QgcWVkX2h3Zm4gKmh3Zm4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYy00OTQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYzo0OTQ2Olx0cWVkX2lvdl9wZl9nZXRfcGVuZGluZ19ldmVudHMoaHdmbiwgZXZlbnRzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmMtNDk0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgeGVfc3lzY3RybF9ldmVudGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB4ZV9zeXNjdHJsX2V2ZW50YCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3Igc3lzdGVtIGNvbnRyb2wgZXZlbnRzLiBUaGUgZnVuY3Rpb24gY2FsbCB0cmVlIHN1Z2dlc3RzIGl0IGluaXRpYXRlcyBhIGNhbGwgdG8gYGdldF9wZW5kaW5nX2V2ZW50YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcHJvYmFibHkgZ3JhYmJpbmcgdGhlIG5leHQgY29udHJvbCBhY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQuIE15IG5leHQgc3RlcCBoZXJlIGlzIGRlZmluaXRlbHkgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgeGVfc3lzY3RybF9ldmVudGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20uIEtub3dpbmcgdGhlIGVudHJ5IHBvaW50cyB3aWxsIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBzaG91bGQgaGlnaGxpZ2h0IHRoZSBldmVudCBzb3VyY2UgYW5kIHRoZSBicm9hZGVyIGZ1bmN0aW9uYWxpdHkgYWZmZWN0ZWQgYnkgdGhlIGV2ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZV9zeXNjdHJsX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZT0zNT14ZS15ICYjNDM7PSB4ZV9iYi5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTEyOC1cdHhlX3N5c2N0cmwubyBcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjEyOTpcdHhlX3N5c2N0cmxfZXZlbnQubyBcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTEzMC1cdHhlX3N5c2N0cmxfbWFpbGJveC5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTEyLSNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmwuaFwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjEzOiNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaFwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE0LSNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmxfbWFpbGJveC5oXCYjMzQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jPTE4OT12b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjE5MDpcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xOTEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMT1zdHJ1Y3QgeGVfZGV2aWNlO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjEyOnN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTEzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oPTE0PXZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg6MTU6XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE2LWludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmM9NDE9c3RhdGljIHZvaWQgeGVfc3lzY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5jLTQ2LVx0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYzo0NzpcdHhlX3N5c2N0cmxfZXZlbnQoc2MpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYy00OC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuaD0xND1zdGF0aWMgaW5saW5lIHN0cnVjdCB4ZV9kZXZpY2UgKnNjX3RvX3hlKHN0cnVjdCB4ZV9zeXNjdHJsICpzYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5oLTE4LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuaDoxOTp2b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmgtMjAtaW50IHhlX3N5c2N0cmxfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xMC0jaW5jbHVkZSBcJiMzNDt4ZV9zeXNjdHJsLmhcJiMzNDtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6MTE6I2luY2x1ZGUgXCYjMzQ7eGVfc3lzY3RybF9ldmVudF90eXBlcy5oXCYjMzQ7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTEyLSNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmxfbWFpbGJveC5oXCYjMzQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz0xNT1zdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCAqY29tbWFuZClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTYte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzoxNzpcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSA9IGNvbW1hbmQtXHUwMDNlZGF0YV9vdXQ7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTE4LVx0c3RydWN0IHhlX2RldmljZSAqeGUgPSBzY190b194ZShzYyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz01Mj1zdGF0aWMgdm9pZCBldmVudF9yZXF1ZXN0X3ByZXBhcmUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyICpoZWFkZXIsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjUzOlx0XHRcdFx0ICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy01NC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy02NC0vKipcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NjU6ICogeGVfc3lzY3RybF9ldmVudCgpIC0gSGFuZGxlciBmb3IgU3lzdGVtIENvbnRyb2xsZXIgZXZlbnRzXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTY2LSAqIEBzYzogU3lzdGVtIENvbnRyb2xsZXIgaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTY5LSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzo3MDp2b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03MS17XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTcyLVx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NzM6XHRzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzo3NDpcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03NS1cdHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyIGhlYWRlciA9IHt9O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMTYtLyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjE3OiAqIGVudW0geGVfc3lzY3RybF9ldmVudCAtIEV2ZW50cyByZXBvcnRlZCBieSBTeXN0ZW0gQ29udHJvbGxlclxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0xOC0gKlxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMjAtICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjIxOmVudW0geGVfc3lzY3RybF9ldmVudCB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTIyLVx0WEVfU1lTQ1RSTF9FVkVOVF9USFJFU0hPTERfQ1JPU1NFRFx0PSAweDAxLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMjUtLyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjI2OiAqIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgcGVuZGluZyBldmVudFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yNy0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6Mjg6c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTI5LVx0LyoqIEB2ZWN0b3I6IE1TSS1YIHZlY3RvciB0aGF0IHdhcyB0cmlnZ2VyZWQgKi9cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTM5LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaDo0MDogKiBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3IgcGVuZGluZyBldmVudFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC00MS0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6NDI6c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2Uge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC00My1cdC8qKiBAY291bnQ6IFBlbmRpbmcgZXZlbnQgY291bnQgYWZ0ZXIgdGhpcyByZXNwb25zZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB4ZV9zeXNjdHJsX2V2ZW50YCBQYXRod2F5IGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgeGVfc3lzY3RybF9ldmVudGAgaXMgY2FsbGVkIGZyb20gYHhlX3N5c2N0cmxfd29ya2AsIHdoaWNoIGlzIGEgd29ya3F1ZXVlIGl0ZW0uIFRoYXQgd29yayBpcyBpbml0aWF0ZWQgYnkgdGhlIFN5c3RlbSBDb250cm9sbGVyIGhhcmR3YXJlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIHBvaW50PyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIG5ldGxpbmsgbWVzc2FnZXMsIGJ1dCBpbiB0aGlzIHNjZW5hcmlvLCB0aGUgbmV0bGluayBtZXNzYWdlICh0aGUgZW5kIGdvYWwgaGVyZSkgaXMgc2VudCAqYnkqIHRoZSBrZXJuZWwgaXRzZWxmLCBhcyBhIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQuIFNvLCBjYW4gc3l6a2FsbGVyIGRpcmVjdGx5IHRyaWdnZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZXZlbnQ/IFByb2JhYmx5IG5vdDsgdXN1YWxseSwgaXQgZG9lc24mIzM5O3QgaGF2ZSB0aGF0IGxldmVsIG9mIGNvbnRyb2wgdW5sZXNzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgZGV2aWNlIG9yIGNhbiBzb21laG93IGluamVjdCB0aGUgZXZlbnQuCgpNeSBwcmltYXJ5IGZvY3VzIHNoaWZ0cyB0byBmaW5kaW5nIGFsdGVybmF0ZSBwYXRocy4gQXJlIHRoZXJlIG90aGVyIHdheXMgdG8gdHJpZ2dlciBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGA/IEhtbSwgbm8sIGl0JiMzOTtzIHByZXR0eSBsb2NrZWQgZG93bi4gSXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgeGVfZHJtX3Jhc19ldmVudGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAuIFRoZXNlIGFyZSBib3RoIGhhcmR3YXJlIGVycm9yIGhhbmRsZXJzIOKAkyB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSByZXNwb25kaW5nIHRvIHNwZWNpZmljIGhhcmR3YXJlIGVycm9ycy4KClNvLCB0aGUgbmV3IGNvZGUgcGF0aCBib2lscyBkb3duIHRvOgoKMS4gIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YDogY29uc3RydWN0cyBhbmQgYnJvYWRjYXN0cyBhIG5ldGxpbmsgbWVzc2FnZS4KMi4gIGB4ZV9kcm1fcmFzX2V2ZW50YDogY2FsbHMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLgozLiAgYHJhc19zZW5kX2Vycm9yX2V2ZW50YDogY2FsbHMgYHhlX2RybV9yYXNfZXZlbnRgLgo0LiAgYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYDogYWxzbyBjYWxscyBgeGVfZHJtX3Jhc19ldmVudGAuCjUuICBUaGVyZSYjMzk7cyBhbHNvIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwIHJlZ2lzdHJhdGlvbi4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IElmIHN5emthbGxlciBjYW4mIzM5O3QgdHJpZ2dlciB0aGUgaGFyZHdhcmUgZXJyb3JzIGRpcmVjdGx5LCB0aGVuIHdlJiMzOTtyZSBuZXZlciBnb2luZyB0byBoaXQgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLiBUaGF0IG1ha2VzIGl0IGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgdW5sZXNzIHdlIGNhbiBzb21laG93IGZvcmNlIG9yIGluamVjdCB0aGUgZXJyb3IgY29uZGl0aW9ucy4KCldhaXQgYSBzZWNvbmQuLi5pcyB0aGVyZSBhbnkga2luZCBvZiBkZWJ1Z2ZzIGludGVyZmFjZSwgb3IgYW55dGhpbmcgbGlrZSB0aGF0LCBpbiB0aGUgYHhlYCBzdWJzeXN0ZW0gdGhhdCBtaWdodCBsZXQgbWUgaW5qZWN0IHRoZXNlIGtpbmRzIG9mIGVycm9ycz8gVGhhdCB3b3VsZCBjaGFuZ2UgZXZlcnl0aGluZy4gVGltZSB0byBjaGVjayBmb3IgZXJyb3IgaW5qZWN0aW9uIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3X2Vycm9yX3NvdXJjZV9oYW5kbGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTM3MD1zdGF0aWMgdm9pZCBzb2NfaHdfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNDI2LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6NDI3OnN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycilcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyOC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NTE5PXZvaWQgeGVfaHdfZXJyb3JfaXJxX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IHUzMiBtYXN0ZXJfY3RsKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyNy1cdFx0aWYgKG1hc3Rlcl9jdGwgXHUwMDI2IEVSUk9SX0lSUShod19lcnIpKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6NTI4Olx0XHRcdGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHRpbGUsIGh3X2Vycik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEluamVjdGlvbiBWZWN0b3JzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpbmplY3Rpb24gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHN5c3RlbWF0aWNhbGx5IHByb2JlIHRoZSBzeXN0ZW0gZm9yIHZ1bG5lcmFiaWxpdGllcyB3aGVyZSB1bnRydXN0ZWQgaW5wdXQgY291bGQgYmUgaW5qZWN0ZWQgYW5kIGV4ZWN1dGVkIG9yIGludGVycHJldGVkIGluIGFuIHVuaW50ZW5kZWQgbWFubmVyLiBUaGlzIG1lYW5zIGxvb2tpbmcgYmV5b25kIHRoZSBvYnZpb3VzIGFuZCBjb25zaWRlcmluZyBhbGwgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdXNlciBpbnB1dCBmaWVsZHMsIEFQSSBjYWxscywgZGF0YSBpbXBvcnRzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZXZlbiBzZWVtaW5nbHkgYmVuaWduIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBjcml0aWNhbGx5IGFib3V0IGhvdyBkaWZmZXJlbnQgY29tcG9uZW50cyBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIgYW5kIHdoZXJlIGRhdGEgbWlnaHQgYmUgcGFzc2VkLCB0cmFuc2Zvcm1lZCwgYW5kIHVsdGltYXRlbHkgdXRpbGl6ZWQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgbm90IHRvIGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZDsgdGhlIG1vc3Qgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBhcmUgb2Z0ZW4gdGhlIG1vc3Qgb3Zlcmxvb2tlZC4gSSBoYXZlIHRvIHRoaW5rIGxpa2UgYW4gYXR0YWNrZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luamVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYzo5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jPTQxPURFQ0xBUkVfRkFVTFRfQVRUUihndF9yZXNldF9mYWlsdXJlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NDI6REVDTEFSRV9GQVVMVF9BVFRSKGluamVjdF9jc2NfaHdfZXJyb3IpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy00My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jPTU0Nz12b2lkIHhlX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy01NjUtXHRcdFx0XHRcdCByb290LCBtaW5vcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jOjU2NjpcdFx0ZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cihcJiMzNDtpbmplY3RfY3NjX2h3X2Vycm9yXCYjMzQ7LCByb290LFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYzo1Njc6XHRcdFx0XHRcdCAgXHUwMDI2aW5qZWN0X2NzY19od19lcnJvcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jLTU2OC1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6MTA6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC91bml0cy5oXHUwMDNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oPTIwNj12b2lkIHhlX2ZpbGVfcHV0KHN0cnVjdCB4ZV9maWxlICp4ZWYpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oLTIwNy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuaDoyMDg6aW50IHhlX2lzX2luamVjdGlvbl9hY3RpdmUodm9pZCk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmgtMjA5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2VfdHlwZXMuaD05MD1zdHJ1Y3QgeGVfZGV2aWNlIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTMwLVx0LyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTMxOlx0ICogQHZtX2luamVjdF9lcnJvcl9wb3NpdGlvbjogaW5qZWN0IGVycm9ycyBhdCBkaWZmZXJlbnQgcGxhY2VzIGluIFZNXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTMyLVx0ICogYmluZCBJT0NUTCBiYXNlZCBvbiB0aGlzIHZhbHVlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTMzLVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTM0Olx0dTggdm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oLTUzNS0jZW5kaWZcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTgtI2luY2x1ZGUgXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jOjk6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWxvLWhpLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYz05MTE9c3RhdGljIHZvaWQgZ3RfcmVzZXRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05MjUtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYzo5MjY6XHRpZiAoeGVfZmF1bHRfaW5qZWN0X2d0X3Jlc2V0KCkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jLTkyNy1cdFx0ZXJyID0gLUVDQU5DRUxFRDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYz05Nzg9dm9pZCB4ZV9ndF9yZXNldF9hc3luYyhzdHJ1Y3QgeGVfZ3QgKmd0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jLTk4Mi1cdC8qIERvbiYjMzk7dCBkbyBhIHJlc2V0IHdoaWxlIG9uZSBpcyBhbHJlYWR5IGluIGZsaWdodCAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0LmM6OTgzOlx0aWYgKCF4ZV9mYXVsdF9pbmplY3RfZ3RfcmVzZXQoKSBcdTAwMjZcdTAwMjYgeGVfdWNfcmVzZXRfcHJlcGFyZShcdTAwMjZndC1cdTAwM2V1YykpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05ODQtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaC04LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0LmgtMTAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg9NDE9ZXh0ZXJuIHN0cnVjdCBmYXVsdF9hdHRyIGd0X3Jlc2V0X2ZhaWx1cmU7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaDo0MjpzdGF0aWMgaW5saW5lIGJvb2wgeGVfZmF1bHRfaW5qZWN0X2d0X3Jlc2V0KHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaC00My17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmM9NDU9ZW51bSBWRl9NSUdSQVRJT05fV0FJVF9QT0lOVFMge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTUyLSNkZWZpbmUgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVNcdDEwMDBcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jOjUzOnN0YXRpYyB2b2lkIHZmX3Bvc3RfbWlncmF0aW9uX2luamVjdF93YWl0KHN0cnVjdCB4ZV9ndCAqZ3QsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy01NC1cdFx0XHRcdFx0ICBlbnVtIFZGX01JR1JBVElPTl9XQUlUX1BPSU5UUyB3YWl0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTU3LVx0XHR4ZV9ndF9kYmcoZ3QsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYzo1ODpcdFx0XHQgIFwmIzM0OypURVNUSU5HKiBpbmplY3RpbmcgJXUgbXMgZGVsYXkgZHVlIHRvIHJlc2ZpeF9zdG9wcGVycz0lI3gsIHRvIGNvbnRpbnVlIGNsZWFyICUjeFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTU5LVx0XHRcdCAgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmMtNjctXHRzdHJ1Y3QgeGVfZ3QgKl9fZ3QgPSAoZ3QpO1x0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYzo2ODpcdHZmX3Bvc3RfbWlncmF0aW9uX2luamVjdF93YWl0KF9fZ3QsIFZGX01JR1JBVElPTl9XQUlUXyMjX1BPUyk7XHRcdFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy02OS1cdH0pXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy03LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jLTktXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEyLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYz0yMTUwPXZvaWQgeGVfZ3VjX2N0X3ByaW50KHN0cnVjdCB4ZV9ndWNfY3QgKmN0LCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIGJvb2wgd2FudF9jdGIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxNjMtICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB3aGljaCBhc3Npc3RzIHRoZSBkcml2ZXIgaW4gaWRlbnRpZnlpbmcgaWYgYSBmYXVsdFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxNjQ6ICogaW5qZWN0aW9uIHRlc3QgaXMgY3VycmVudGx5IGFjdGl2ZSwgYWxsb3dpbmcgaXQgdG8gcmVkdWNlIHVubmVjZXNzYXJ5IGRlYnVnXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NTogKiBvdXRwdXQuIFR5cGljYWxseSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgemVybywgYnV0IHRoZSBmYXVsdCBpbmplY3Rpb25cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTY2OiAqIGZyYW1ld29yayBjYW4gYWx0ZXIgdGhpcyB0byByZXR1cm4gYW4gZXJyb3IuIFNpbmNlIGZhdWx0cyBhcmUgaW5qZWN0ZWRcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTY3LSAqIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgY29tcGlsZXIgZG9lc24mIzM5O3Qgb3B0aW1pemVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE3MS0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTcyOm5vaW5saW5lIGludCB4ZV9pc19pbmplY3Rpb25fYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTczOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9pc19pbmplY3Rpb25fYWN0aXZlLCBFUlJOTyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE3NC0jZWxzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxNzU6aW50IHhlX2lzX2luamVjdGlvbl9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxNzYtI2VuZGlmXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTIxNzg9c3RhdGljIHZvaWQgY3RfZGVhZF9jYXB0dXJlKHN0cnVjdCB4ZV9ndWNfY3QgKmN0LCBzdHJ1Y3QgZ3VjX2N0YiAqY3RiLCB1MzIgcmVhc29uX2NvZGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxODgtXHQvKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxODk6XHQgKiBIdWdlIGR1bXAgaXMgZ2V0dGluZyBnZW5lcmF0ZWQgd2hlbiBpbmplY3RpbmcgZXJyb3IgZm9yIGd1YyBDVC9NTUlPXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE5MDpcdCAqIGZ1bmN0aW9ucy4gU28sIGxldCB1cyBzdXBwcmVzcyB0aGUgZHVtcCB3aGVuIGZhdWx0IGlzIGluamVjdGVkLlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxOTEtXHQgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTkyOlx0aWYgKHhlX2lzX2luamVjdGlvbl9hY3RpdmUoKSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTkzLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19sb2cuYy03LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19sb2cuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jLTktXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19yZWxheS5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19yZWxheS5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy05LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjctXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoyODpleHRlcm4gc3RydWN0IGZhdWx0X2F0dHIgaW5qZWN0X2NzY19od19lcnJvcjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTI5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTE2ND1zdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUocHZjX21hc3Rlcl9sb2NhbF9ub25mYXRhbF9lcnJfcmVnKSA9PSBYRV9SQVNfUkVHX1NJWkUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTE2OS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3MDpzdGF0aWMgYm9vbCBmYXVsdF9pbmplY3RfY3NjX2h3X2Vycm9yKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0xNzEte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6MTcyOlx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgc2hvdWxkX2ZhaWwoXHUwMDI2aW5qZWN0X2NzY19od19lcnJvciwgMSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0xNzMtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MjM6XHRpZiAoZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcigpKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTI0LVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnRpbGUtXHUwMDNlY3NjX2h3X2Vycm9yX3dvcmspO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYz0xMDQzPXN0YXRpYyB2b2lkIHhlX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNTktICpcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYwOiAqIEZhdWx0IGluamVjdGlvbiBpcyB1c2VkIHRvIHRlc3QgdGhlIGVycm9yIHBhdGhzIG9mIHNvbWUgaW5pdGlhbGl6YXRpb25cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYxLSAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYyLSAqIGV4YW1wbGUgdGhyb3VnaCB4ZV9kZXZpY2VfcHJvYmUoKS4gVGhvc2UgZnVuY3Rpb25zIHVzZSB0aGUga2VybmVsIGZhdWx0XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTA2MzogKiBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIGluZnJhc3RydWN0dXJlLCBzZWVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY0OiAqIERvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi5yc3QgZm9yIGRldGFpbHMuIFRoZSBtYWNyb1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNjUtICogQUxMT1dfRVJST1JfSU5KRUNUSU9OKCkgaXMgdXNlZCB0byBjb25kaXRpb25hbGx5IHNraXAgZnVuY3Rpb24gZXhlY3V0aW9uXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2Ni0gKiBhdCBydW50aW1lIGFuZCB1c2UgYSBwcm92aWRlZCByZXR1cm4gdmFsdWUuIFRoZSBmaXJzdCByZXF1aXJlbWVudCBmb3JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY3OiAqIGVycm9yIGluamVjdGFibGUgZnVuY3Rpb25zIGlzIHByb3BlciBoYW5kbGluZyBvZiB0aGUgZXJyb3IgY29kZSBieSB0aGVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDY4LSAqIGNhbGxlciBmb3IgcmVjb3ZlcnksIHdoaWNoIGlzIGFsd2F5cyB0aGUgY2FzZSBoZXJlLiBUaGUgc2Vjb25kXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzMtICogY2FsbGVyLiBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gY29uc2VxdWVuY2Ugb24gdGhvc2Ugc3BlY2lmaWMgY2FsbGVycyB3aGVuXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTA3NDogKiBmdW5jdGlvbiBlcnJvciBpbmplY3Rpb24gc2tpcHMgdGhlIHdob2xlIGZ1bmN0aW9uLlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzUtICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNvZGUuYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmMtMTEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BtLmMtNy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTA3OD1zdGF0aWMgdm9pZCB4ZV9wdF9jb21taXRfbG9ja3NfYXNzZXJ0KHN0cnVjdCB4ZV92bWEgKnZtYSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xMDg4LVx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxMDg5Olx0XHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTA5MC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTM5Nj1zdGF0aWMgaW50IHhlX3B0X3ByZV9jb21taXQoc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlICpwdF91cGRhdGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQxMi0gKiBkZWZhdWx0OyB3cml0ZSBtb2RlIHdoZW4gQ09ORklHX0RSTV9YRV9VU0VSUFRSX0lOVkFMX0lOSkVDVCBpcyBvbixcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0MTM6ICogYmVjYXVzZSBhIHVzZXJwdHIgb3AgaW4gdGhpcyBjcml0aWNhbCBzZWN0aW9uIG1heSBpbnZva2UgdGhlIGluamVjdGVkXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDE0LSAqIHhlX3ZtYV91c2VycHRyX2ZvcmNlX2ludmFsaWRhdGUoKSBwYXRoIHRoYXQgY2FsbHNcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xNDI3PXN0YXRpYyB2b2lkIHhlX3B0X3N2bV91c2VycHRyX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MzgtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxNDM5OnN0YXRpYyBib29sIHhlX3B0X3VzZXJwdHJfaW5qZWN0X2VhZ2FpbihzdHJ1Y3QgeGVfdXNlcnB0cl92bWEgKnV2bWEpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDQwLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDUzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NDpzdGF0aWMgYm9vbCB4ZV9wdF91c2VycHRyX2luamVjdF9lYWdhaW4oc3RydWN0IHhlX3VzZXJwdHJfdm1hICp1dm1hKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ1NS17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTQ2MT1zdGF0aWMgaW50IHZtYV9jaGVja191c2VycHRyKHN0cnVjdCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV92bWEgKnZtYSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDY2LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ2NzpcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDY4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NzItXHR1dm1hID0gdG9fdXNlcnB0cl92bWEodm1hKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0NzM6XHRpZiAoeGVfcHRfdXNlcnB0cl9pbmplY3RfZWFnYWluKHV2bWEpKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ3NC1cdFx0eGVfdm1hX3VzZXJwdHJfZm9yY2VfaW52YWxpZGF0ZSh1dm1hKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xNDkyPXN0YXRpYyBpbnQgb3BfY2hlY2tfc3ZtX3VzZXJwdHIoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3ZtYV9vcCAqb3AsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ5Ni1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0OTc6XHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ5OC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yMzczPWludCB4ZV9wdF91cGRhdGVfb3BzX3ByZXBhcmUoc3RydWN0IHhlX3RpbGUgKnRpbGUsIHN0cnVjdCB4ZV92bWFfb3BzICp2b3BzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0MDEtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNDAyOlx0aWYgKHZvcHMtXHUwMDNlaW5qZWN0X2Vycm9yIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQwMzpcdCAgICB2b3BzLVx1MDAzZXZtLVx1MDAzZXhlLVx1MDAzZXZtX2luamVjdF9lcnJvcl9wb3NpdGlvbiA9PSBGT1JDRV9PUF9FUlJPUl9QUkVQQVJFKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjQwNC1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjQxMT1zdGF0aWMgdm9pZCBiaW5kX29wX2NvbW1pdChzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDM4LVx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI0Mzk6XHRcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDQwLVx0XHR0b191c2VycHRyX3ZtYSh2bWEpLVx1MDAzZXVzZXJwdHIuaW5pdGlhbF9iaW5kID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNDUzPXN0YXRpYyB2b2lkIHVuYmluZF9vcF9jb21taXQoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3RpbGUgKnRpbGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjQ3NC1cdFx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI0NzU6XHRcdFx0eGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0NzYtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjYwOT14ZV9wdF91cGRhdGVfb3BzX3J1bihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgc3RydWN0IHhlX3ZtYV9vcHMgKnZvcHMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjYzNy0jaWZkZWYgVEVTVF9WTV9PUFNfRVJST1JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI2Mzg6XHRpZiAodm9wcy1cdTAwM2VpbmplY3RfZXJyb3IgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNjM5Olx0ICAgIHZtLVx1MDAzZXhlLVx1MDAzZXZtX2luamVjdF9lcnJvcl9wb3NpdGlvbiA9PSBGT1JDRV9PUF9FUlJPUl9SVU4pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNjQwLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy01LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92LmM6NjojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92LmMtNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9Mzg1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kcm1fcGFnZW1hcF9mcm9tX2ZkKGludCBmZCwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDAzLSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fWEVfVVNFUlBUUl9JTlZBTF9JTkpFQ1QpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDA0OiNkZWZpbmUgeGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtX18pIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDA1LVx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjYodm1fXyktXHUwMDNlc3ZtLmdwdXN2bS5ub3RpZmllcl9sb2NrKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQwNi0jZWxzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjQwNzojZGVmaW5lIHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bV9fKSBcXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQwOC1cdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcdTAwMjYodm1fXyktXHUwMDNlc3ZtLmdwdXN2bS5ub3RpZmllcl9sb2NrKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MjItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCB4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUoc3RydWN0IHhlX3ZtICp2bSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MjQte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmMtNS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmM6NjojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy03LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYz0xMjU9aW50IHhlX3ZhbGlkYXRpb25fY3R4X2luaXQoc3RydWN0IHhlX3ZhbGlkYXRpb25fY3R4ICpjdHgsIHN0cnVjdCB4ZV92YWxpZGF0aW9uX2RldmljZSAqdmFsLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTY0LSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYzoxNjU6c3RhdGljIGJvb2wgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKHN0cnVjdCBkcm1fZXhlYyAqZXhlYylcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTY2LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE3MS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmM6MTcyOnN0YXRpYyBib29sIHhlX3ZhbGlkYXRpb25fY29udGVudGlvbl9pbmplY3RlZChzdHJ1Y3QgZHJtX2V4ZWMgKmV4ZWMpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE3My17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYz0xNzk9c3RhdGljIGJvb2wgX194ZV92YWxpZGF0aW9uX3Nob3VsZF9yZXRyeShzdHJ1Y3QgeGVfdmFsaWRhdGlvbl9jdHggKmN0eCwgaW50IHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE4Mi1cdCAgICAoKGN0eC1cdTAwM2VyZXF1ZXN0X2V4Y2x1c2l2ZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmM6MTgzOlx0ICAgICAgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKGN0eC1cdTAwM2VleGVjKSkgfHxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTg0LVx0ICAgICAhY3R4LVx1MDAzZXJlcXVlc3RfZXhjbHVzaXZlKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jPTMyOTE9c3RhdGljIGludCB2bV9iaW5kX2lvY3RsX29wc19sb2NrX2FuZF9wcmVwKHN0cnVjdCBkcm1fZXhlYyAqZXhlYyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zMzA4LSNpZmRlZiBURVNUX1ZNX09QU19FUlJPUlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzMwOTpcdGlmICh2b3BzLVx1MDAzZWluamVjdF9lcnJvciBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjMzMTA6XHQgICAgdm0tXHUwMDNleGUtXHUwMDNldm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uID09IEZPUkNFX09QX0VSUk9SX0xPQ0spXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zMzExLVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz0zODUzPWludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00MDI2LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEZPUkNFX09QX0VSUk9SKSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzo0MDI3Olx0XHRcdHZvcHMuaW5qZWN0X2Vycm9yID0gdHJ1ZTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQwMjg6XHRcdFx0dm0tXHUwMDNleGUtXHUwMDNldm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uID1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQwMjk6XHRcdFx0XHQodm0tXHUwMDNleGUtXHUwMDNldm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uICYjNDM7IDEpICVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQwMzAtXHRcdFx0XHRGT1JDRV9PUF9FUlJPUl9DT1VOVDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaD01MzA9c3RydWN0IHhlX3ZtYV9vcHMge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oLTU1MC0jaWZkZWYgVEVTVF9WTV9PUFNfRVJST1JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oOjU1MTpcdC8qKiBAaW5qZWN0X2Vycm9yOiBpbmplY3QgZXJyb3IgdG8gdGVzdCBlcnJvciBoYW5kbGluZyAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtX3R5cGVzLmg6NTUyOlx0Ym9vbCBpbmplY3RfZXJyb3I7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaC01NTMtI2VuZGlmXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXJfdHlwZXMuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93YS5jLTEyLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jLTctXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYy05LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg4OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDU0MgSGFyZHdhcmUgRXJyb3IgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgc3R1bWJsZWQgdXBvbiBgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcmAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBDU0MgaGFyZHdhcmUgZXJyb3IuIFNwZWNpZmljYWxseSwgaXQmIzM5O3Mgc2NoZWR1bGluZyBhIHdvcmsgaXRlbTogYHNjaGVkdWxlX3dvcmsoJmFtcDt0aWxlLSZndDtjc2NfaHdfZXJyb3Jfd29yayk7YC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgb2J2aW91c2x5LCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCB3b3JrIGl0ZW0sIGBjc2NfaHdfZXJyb3Jfd29ya2AsICphY3R1YWxseSogZG9lcy4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGVycm9yIGhhbmRsaW5nIGZsb3cgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhhdCB3b3JrIGZ1bmN0aW9uIGFuZCBzZWUgaG93IGl0IHJlYWN0cyB0bywgYW5kIGRlYWxzIHdpdGgsIHRoZSBwcmVzdW1lZCBoYXJkd2FyZSBmYXVsdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjc2NfaHdfZXJyb3Jfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0xNzA9c3RhdGljIGJvb2wgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcih2b2lkKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTE3NC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3NTpzdGF0aWMgdm9pZCBjc2NfaHdfZXJyb3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0xNzYte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6MTc3Olx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp0aWxlKSwgY3NjX2h3X2Vycm9yX3dvcmspO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTc4LVx0c3RydWN0IHhlX2RldmljZSAqeGUgPSB0aWxlX3RvX3hlKHRpbGUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTE4Mz1zdGF0aWMgdm9pZCBjc2NfaHdfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjExLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6MjEyOlx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGlsZS1cdTAwM2Vjc2NfaHdfZXJyb3Jfd29yayk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0yMTMtXHRcdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz01MTk9dm9pZCB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgdTMyIG1hc3Rlcl9jdGwpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTIzLVx0aWYgKGZhdWx0X2luamVjdF9jc2NfaHdfZXJyb3IoKSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyNDpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aWxlLVx1MDAzZWNzY19od19lcnJvcl93b3JrKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz01NTU9dm9pZCB4ZV9od19lcnJvcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTU2MS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjU2MjpcdElOSVRfV09SSyhcdTAwMjZ0aWxlLVx1MDAzZWNzY19od19lcnJvcl93b3JrLCBjc2NfaHdfZXJyb3Jfd29yayk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01NjMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaD0zNz1zdHJ1Y3QgeGVfdGlsZSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaC0xMTYtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZV90eXBlcy5oOjExNzpcdC8qKiBAY3NjX2h3X2Vycm9yX3dvcms6IHdvcmtlciB0byByZXBvcnQgQ1NDIEhXIGVycm9ycyAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaDoxMTg6XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3NjX2h3X2Vycm9yX3dvcms7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZV90eXBlcy5oLTExOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4ODQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkRlYnVnZ2luZyBDU0MgSGFyZHdhcmUgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggb2YgYSBDU0MgKHByZXN1bWFibHkgQ29sb3IgU3BhY2UgQ29udmVyc2lvbikgaGFyZHdhcmUgZXJyb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBjc2NfaHdfZXJyb3Jfd29ya2AgaXMgbGlrZWx5IGNhbGxpbmcgc29tZSBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLCBtYXliZSBzb21ldGhpbmcgbGlrZSBgY3NjX2h3X2Vycm9yX2hhbmRsZXJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSBgY3NjX2h3X2Vycm9yX3dvcmtgIGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb246CmBgYGMKc3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQp7CglzdHJ1Y3QgeGVfdGlsZSAqdGlsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnRpbGUpLCBjc2NfaHdfZXJyb3Jfd29yayk7Ci4uLgpgYGAKT2theSwgc28gaXQgdGFrZXMgYSBgd29ya19zdHJ1Y3RgIGFzIGlucHV0LCBhbmQgaXQgbG9va3MgbGlrZSBpdCBnZXRzIGEgYHhlX3RpbGVgIHN0cnVjdHVyZSBmcm9tIGl0IHVzaW5nIGBjb250YWluZXJfb2ZgLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIGEgZGVmZXJyZWQgd29yayBxdWV1ZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdGlsZSBvbiB0aGUgaGFyZHdhcmUuIEl0JiMzOTtzIG5vdCBhIGRpcmVjdCBjYWxsLCBpdCBpcyBwcm9iYWJseSBhIHJlZ2lzdGVyZWQgdGFzayB3aXRoIHRoZSBrZXJuZWwuCgpOb3cgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgYGNzY19od19lcnJvcl93b3JrYCB0byB1bmRlcnN0YW5kIHdoYXQgYWN0aW9ucyBhcmUgdGFrZW4gd2hlbiB0aGlzIGVycm9yIG9jY3Vycy4gSSB3aWxsIGhhdmUgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGB3b3JrX3N0cnVjdGAgaXMgcXVldWVkL3NjaGVkdWxlZCwgYW5kIHdoYXQgdGhhdCBjYWxsIHBhdGggZG9lcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IGVycm9yIGhhbmRsaW5nIGlzIGludm9sdmVkIGluIHRoZSB3b3JrJiMzOTtzIGJvZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdHN0YXRpYyBib29sIGZhdWx0X2luamVjdF9jc2NfaHdfZXJyb3Iodm9pZClcbiAxNzE6XHR7XG4gMTcyOlx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBzaG91bGRfZmFpbChcdTAwMjZpbmplY3RfY3NjX2h3X2Vycm9yLCAxKTtcbiAxNzM6XHR9XG4gMTc0Olx0XG4gMTc1Olx0c3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDE3NjpcdHtcbiAxNzc6XHRcdHN0cnVjdCB4ZV90aWxlICp0aWxlID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqdGlsZSksIGNzY19od19lcnJvcl93b3JrKTtcbiAxNzg6XHRcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gdGlsZV90b194ZSh0aWxlKTtcbiAxNzk6XHRcbiAxODA6XHRcdHhlX3N1cnZpdmFiaWxpdHlfbW9kZV9ydW50aW1lX2VuYWJsZSh4ZSk7XG4gMTgxOlx0fVxuIDE4MjpcdFxuIDE4MzpcdHN0YXRpYyB2b2lkIGNzY19od19lcnJvcl9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycilcbiAxODQ6XHR7XG4gMTg1Olx0XHRjb25zdCBlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkgc2V2ZXJpdHkgPSBod19lcnJfdG9fc2V2ZXJpdHkoaHdfZXJyKTtcbiAxODY6XHRcdGNvbnN0IGNoYXIgKnNldmVyaXR5X3N0ciA9IGVycm9yX3NldmVyaXR5W3NldmVyaXR5XTtcbiAxODc6XHRcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gdGlsZV90b194ZSh0aWxlKTtcbiAxODg6XHRcdHN0cnVjdCB4ZV9tbWlvICptbWlvID0gXHUwMDI2dGlsZS1cdTAwM2VtbWlvO1xuIDE4OTpcdFx0dTMyIGJhc2UsIGVycl9iaXQsIGVycl9zcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRXZhbHVhdGlvbjogRmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtBaGEsIGBjc2NfaHdfZXJyb3Jfd29ya2AgZG9lc24mIzM5O3QgZGlyZWN0bHkgdHJpZ2dlciBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgLiYjMzQ7IFRoYXQgaGFuZGxlciBpcyB0aGUga2V5LCBhbmQgaXQgbG9va3MgbGlrZSBpdCBnZXRzIGNhbGxlZCBmcm9tIGB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcmAuIFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGF0PyBJdCYjMzk7cyBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgbWVhbmluZyBpdCYjMzk7cyBoYXJkd2FyZS10cmlnZ2VyZWQuIFN5emthbGxlciYjMzk7cyBub3QgZ29pbmcgdG8gaW5qZWN0IGhhcmR3YXJlIGludGVycnVwdHMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHNvZnR3YXJlIGludGVyZmFjZSB0byBkbyBzby4KCkkgdGhlbiB0cmFjZWQgdGhlIGNhbGwgY2hhaW4gdG8gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLiBUaGF0IGxlYWRzIHRvIGEgYnVuY2ggb2YgaW50ZXJuYWwgY2FsbHM6IGB4ZV9kcm1fcmFzX2V2ZW50YCwgYHJhc19zZW5kX2Vycm9yX2V2ZW50YCwgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCwgYGdldF9wZW5kaW5nX2V2ZW50YCB2aWEgYHhlX3N5c2N0cmxfZXZlbnQuY2AsIGFuZCBmaW5hbGx5IHRvIGB4ZV9zeXNjdHJsX3dvcmtgLCB3aGljaCBpcyBhIHdvcmtxdWV1ZSBpdGVtLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgYHhlX3N5c2N0cmxfaXJxX2hhbmRsZXJgLiBTbywgaXQmIzM5O3MgYWxsIGhhcmR3YXJlLWRlcGVuZGVudCwgb3IgYSBzb2Z0d2FyZSBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIHRyaWdnZXJlZC4KClRoZSBjb25jbHVzaW9uIGlzIHRoYXQgc3l6a2FsbGVyIGxpa2VseSB3b24mIzM5O3QgYmUgYWJsZSB0byB0cmlnZ2VyIHRoZXNlIHBhdGhzIGVhc2lseSB1bmxlc3MgaXQmIzM5O3MgZnV6emluZyBhIHZpcnR1YWwgZGV2aWNlIHRoYXQgZW11bGF0ZXMgdGhlIGhhcmR3YXJlIGludGVycnVwdHMsIG9yIGlmIHRoZXJlJiMzOTtzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCBpdCBjYW4gd3JpdGUgdG8uIFRoZSBwcm9tcHQgbWVudGlvbmVkIGRlYnVnZnMsIGFuZCBJIGtub3cgc3l6a2FsbGVyIGNhbiB1c2UgZGVidWdmcyBpZiBpdCYjMzk7cyBhdmFpbGFibGUuIEhvd2V2ZXIsIGV2ZW4gaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdCwgdGhpcyBwYXRjaCBqdXN0IGFkZHMgYSBuZXRsaW5rIGV2ZW50IGJyb2FkY2FzdC4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQmIzM5O3MganVzdCBhIHN0YW5kYXJkIG5ldGxpbmsgZXZlbnQgYnJvYWRjYXN0LiBUaGUgb3RoZXIgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgc2VuZGluZyB0aGUgZXJyb3IgZXZlbnQgYmFzZWQgb24gc29tZSBjb25kaXRpb25zIGFuZCBjb3VudGVyIHZhbHVlcy4gVGhpcyBhbGwgZmVlbHMgdmVyeSBzaW1wbGUsIGFuZCBkZWZpbml0ZWx5IGluYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB3aXRob3V0IGhhcmR3YXJlIGVycm9ycy4KClNpbmNlIHRoZSBwcm9tcHQgc3RhdGVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OywgYW5kIGB4ZWAgaXMgYSByZWFsIGhhcmR3YXJlIGRyaXZlciAoSW50ZWwgWGUgZ3JhcGhpY3MpLCB0aGlzIGNvZGUgd2lsbCBiZSBpbXBvc3NpYmxlIHRvIHRyaWdnZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHN5emthbGxlciBRRU1VL0dDRSBzZXR1cCB3aWxsIG5vdCBoYXZlIHRoZSByZXF1aXJlZCBoYXJkd2FyZSBlcnJvciBlbXVsYXRpb24uIEkga25vdyB0aGF0IHN5emthbGxlciBoYXMgc29tZSBzdXBwb3J0IGZvciBgdmttc2AgKFZpcnR1YWwgS01TKSwgYnV0IGB4ZWAgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgYW5kIHdpbGwgbm90IGJlIGxvYWRlZCB1bmxlc3MgdGhlIGhhcmR3YXJlIGlzIHByZXNlbnQgb3IgbW9ja2VkIGFuZCB0aGUgc2V0dXAgaXMgbm90IHNldCB1cCB0byBkbyB0aGF0LiBFdmVuIGlmIGl0JiMzOTtzIGxvYWRlZCwgaGFyZHdhcmUgZXJyb3JzIGFyZSBub3QgdHJpZ2dlcmFibGUgZnJvbSB1c2Vyc3BhY2UuIFNvLCBpdCBhcHBlYXJzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIGxhc3QgdGltZSB0aGF0IHRoZXJlJiMzOTtzIG5vIG90aGVyIHdheSB0byByZWFjaCBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIGdpdmVuIGl0IGlzIGBFWFBPUlRfU1lNQk9MYC4gSSYjMzk7bGwgbG9vayB0byBzZWUgaWYgYW55IG90aGVyIGRyaXZlcnMgbWlnaHQgYmUgdXNpbmcgaXQuIEJ1dCBmb3Igbm93LCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogKipXb3J0aEZ1enppbmc9ZmFsc2UqKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3Jhc19ubF9lcnJvcl9ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jPTIyMj1zdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNTgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI1OTogKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjYwLSAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjY5LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNzA6aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzEtXHRcdFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTMwOS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjMxMDpFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0zMTEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTg9dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTMtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxNDpcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUsIGZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMjE1LVx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg9ODI9dm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODQtXHRcdFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTg3PXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4ODpzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC04OS1cdFx0XHRcdFx0IGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzY2CgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSYjMzk7dmUgY29tZSB0byBhIGZpcm0gY29uY2x1c2lvbi4gVGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIFN5emthbGxlciBuZWVkcyB0byB3b3JyeSBhYm91dC4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGlzOiBvbmx5IGB4ZWAgaXMgZXZlbiAqdXNpbmcqIHRoaXMgbmV3IG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50LiBBbmQsIGNydWNpYWxseSwgYHhlYCAqb25seSogY2FsbHMgaXQgZnJvbSBpdHMgaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMuIFRoYXQgbWVhbnMsIHJlYWxpc3RpY2FsbHksIGl0JiMzOTtzIHVucmVhY2hhYmxlLiBJdCYjMzk7cyBjb25maW5lZCB0byB0aGUgZGVwdGhzIG9mIGhhcmR3YXJlIGVycm9yIGhhbmRsaW5nLgoKVGhlIGV2ZW50LCBgZXJyb3ItZXZlbnRgLCB3aGljaCBpbnRlZ3JhdGVzIGludG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgaXMgdHJpZ2dlcmVkIGJ5IHRoaW5ncyBsaWtlIGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cy4gSSBrbm93IHRoYXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB3aGljaCBpcyB3aGVyZSBTeXprYWxsZXIgdHlwaWNhbGx5IGRvZXMgaXRzIHdvcmssIHRob3NlIHRyaWdnZXJzIGFyZSBqdXN0IG5vdCBnb2luZyB0byBoYXBwZW4uIFlvdSYjMzk7ZCBuZWVkIHNvbWUgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24gdG8gZXZlbiAqdGhpbmsqIGFib3V0IHJlYWNoaW5nIHRoYXQgY29kZS4gU28sIHJlYWxseSwgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldywgZnV6emFibGUgZnVuY3Rpb25hbGl0eSB0aGF0IFN5emthbGxlciBjYW4gYWNjZXNzLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gTm8gbmVlZCB0byBkZXZvdGUgYW55IHJlc291cmNlcyB0byB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBldmVudCBgZXJyb3ItZXZlbnRgIHRvIHRoZSBgZHJtX3Jhc2AgZmFtaWx5IGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlci4gVGhlIGV2ZW50IGlzIGJyb2FkY2FzdGVkIGJ5IHRoZSBrZXJuZWwgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIgKGhhbmRsZWQgaW4gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCkuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFuZCBzeXN0ZW0gY29udHJvbGxlciBldmVudHMsIHdoaWNoIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGZyb20gdXNlcnNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBjb2RlIGZvciBzeXprYWxsZXIgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBldmVudCBgZXJyb3ItZXZlbnRgIHRvIHRoZSBgZHJtX3Jhc2AgZmFtaWx5IGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlci4gVGhlIGV2ZW50IGlzIGJyb2FkY2FzdGVkIGJ5IHRoZSBrZXJuZWwgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIgKGhhbmRsZWQgaW4gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCkuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFuZCBzeXN0ZW0gY29udHJvbGxlciBldmVudHMsIHdoaWNoIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGZyb20gdXNlcnNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBjb2RlIGZvciBzeXprYWxsZXIgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzowNC40NjE3MzI5MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzU2NDE3MDI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGBlcnJvci1ldmVudGAgdG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgYW5kIGludGVncmF0ZXMgaXQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLiBUaGUgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGhhcmR3YXJlIGVycm9ycyBvY2N1ciAoaGFuZGxlZCBpbiBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cywgd2hpY2ggYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZnJvbSB1c2Vyc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGNvZGUgZm9yIHN5emthbGxlciB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6MDQuNDYxNzQxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTE2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODc1MTk0MmM4N2M1NGZjOTk3MjVkY2Y2Njk4ZmY1OWYwYmU2OWMxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDE1OjUzOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG5pbmRleCA4M2MyMTg1M2I3NGI2MC4uNDA2ZTRjNDliYWMxZmQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4gKiBDbGVhciBzcGVjaWZpYyBlcnJvciBjb3VudGVycyB3aXRoIHRoZSBgYGNsZWFyLWVycm9yLWNvdW50ZXJgYCBjb21tYW5kLCB1c2luZyBib3RoXFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxcbisqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXFxuIFxcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0xMTEsMyArMTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxcbiBcXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjF9J1xcbiAgICAgTm9uZVxcbitcXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogYmFzaFxcbitcXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnRcXG4rXFxuKy4uIGNvZGUtYmxvY2s6OiBqc29uXFxuK1xcbisgICAge1xcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcImVycm9yLWV2ZW50XFxcIixcXG4rICAgICAgICBcXFwibXNnXFxcIjoge1xcbisgICAgICAgICAgICBcXFwiZGV2aWNlLW5hbWVcXFwiOiBcXFwiMDAwMDowMzowMC4wXFxcIixcXG4rICAgICAgICAgICAgXFxcIm5vZGUtaWRcXFwiOiAxLFxcbisgICAgICAgICAgICBcXFwibm9kZS1uYW1lXFxcIjogXFxcInVuY29ycmVjdGFibGUtZXJyb3JzXFxcIixcXG4rICAgICAgICAgICAgXFxcImVycm9yLWlkXFxcIjogMSxcXG4rICAgICAgICAgICAgXFxcImVycm9yLW5hbWVcXFwiOiBcXFwiZXJyb3JfbmFtZTFcXFwiLFxcbisgICAgICAgICAgICBcXFwiZXJyb3ItdmFsdWVcXFwiOiAxXFxuKyAgICAgICAgfVxcbisgICAgfVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi44YWVkM2Q0NTE1ZTVhZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbkBAIC02OSw2ICs2OSwzMyBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuXFxuKyAgLVxcbisgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcXG4rICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG5vZGUtaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogbm9kZS1uYW1lXFxuKyAgICAgICAgdHlwZTogc3RyaW5nXFxuKyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlci5cXG4gXFxuIG9wZXJhdGlvbnM6XFxuICAgbGlzdDpcXG5AQCAtMTI0LDMgKzE1MSwyNCBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGVycm9yLWV2ZW50XFxuKyAgICAgIGRvYzogXFx1MDAzZS1cXG4rICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLlxcbisgICAgICAgICAgIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgZGV2aWNlLCBub2RlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxcbisgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXFxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzXFxuKyAgICAgIG1jZ3JwOiBlcnJvci1yZXBvcnRcXG4rICAgICAgZXZlbnQ6XFxuKyAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgIC0gZGV2aWNlLW5hbWVcXG4rICAgICAgICAgIC0gbm9kZS1pZFxcbisgICAgICAgICAgLSBub2RlLW5hbWVcXG4rICAgICAgICAgIC0gZXJyb3ItaWRcXG4rICAgICAgICAgIC0gZXJyb3ItbmFtZVxcbisgICAgICAgICAgLSBlcnJvci12YWx1ZVxcbitcXG4rbWNhc3QtZ3JvdXBzOlxcbisgIGxpc3Q6XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi43N2Y5MTJhNGQxMDFmMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbkBAIC00MSw2ICs0MSwxMSBAQFxcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxcbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxcbiAgKlxcbisgKiA0LiBFUlJPUl9SRVBPUlQ6IFN1YnNjcmliZSB0byB0aGlzIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGVycm9yIGV2ZW50c1xcbisgKlxcbisgKiA1LiBFUlJPUl9FVkVOVDogUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS4gVGhlIGV2ZW50IGNvbnRhaW5zIGRldmljZSwgbm9kZVxcbisgKiAgICBhbmQgZXJyb3IgaW5mb3JtYXRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxcbisgKlxcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcXG4gICpcXG4gICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcXG5AQCAtMTg2LDYgKzE5MSwzNCBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXFxuIFxcdFxcdFxcdCAgIHZhbHVlKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FLCBub2RlLVxcdTAwM2VkZXZpY2VfbmFtZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLVxcdTAwM2VpZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXFx1MDAzZW5vZGVfbmFtZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbiBcXHRcXHRcXHQgICAgdTMyIGVycm9yX2lkKVxcbiB7XFxuQEAgLTIyMiw2ICsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbiBcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xcbiB9XFxuIFxcbisvKipcXG4rICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XFxuKyAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZVxcbisgKiBAZXJyb3JfaWQ6IElEIG9mIHRoZSBlcnJvclxcbisgKiBAZXJyb3JfbmFtZTogTmFtZSBvZiB0aGUgZXJyb3JcXG4rICogQHZhbHVlOiBWYWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yXFxuKyAqIEBmbGFnczogR0ZQIGZsYWdzIGZvciBtZW1vcnkgYWxsb2NhdGlvblxcbisgKlxcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlIHVzaW5nIHRoZSBlcnJvci1yZXBvcnQgbXVsdGljYXN0IGdyb3VwLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgZ2VubF9pbmZvIGluZm87XFxuK1xcdHN0cnVjdCBza19idWZmICptc2c7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmhkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZXJyb3JfbmFtZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoIWdlbmxfaGFzX2xpc3RlbmVycyhcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIFxcdTAwMjZpbml0X25ldCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGdlbmxfaW5mb19pbml0X250ZihcXHUwMDI2aW5mbywgXFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7XFxuK1xcbitcXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgZmxhZ3MpO1xcbitcXHRpZiAoIW1zZylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcXHUwMDI2aW5mbyk7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBmcmVlX21zZztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2FuY2VsX21zZztcXG4rXFxuK1xcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcXG4rXFx0Z2VubG1zZ19tdWx0aWNhc3QoXFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULCBmbGFncyk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2FuY2VsX21zZzpcXG4rXFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xcbitmcmVlX21zZzpcXG4rXFx0bmxtc2dfZnJlZShtc2cpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7XFxuK1xcbiAvKipcXG4gICogZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoKSAtIER1bXAgYWxsIEVycm9yIENvdW50ZXJzXFxuICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uOWQzMTIzY2M5ZjljYWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcXG5AQCAtNTgsNiArNTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xcbiBcXHR9LFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0ge1xcbitcXHRbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyBcXFwiZXJyb3ItcmVwb3J0XFxcIiwgfSxcXG4rfTtcXG4rXFxuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5uYW1lXFx0XFx0PSBEUk1fUkFTX0ZBTUlMWV9OQU1FLFxcbiBcXHQudmVyc2lvblxcdD0gRFJNX1JBU19GQU1JTFlfVkVSU0lPTixcXG5AQCAtNjYsNCArNzAsNiBAQCBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbiBcXHQubW9kdWxlXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gXFx0LnNwbGl0X29wc1xcdD0gZHJtX3Jhc19ubF9vcHMsXFxuIFxcdC5uX3NwbGl0X29wc1xcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX29wcyksXFxuK1xcdC5tY2dycHNcXHRcXHQ9IGRybV9yYXNfbmxfbWNncnBzLFxcbitcXHQubl9tY2dycHNcXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9tY2dycHMpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi4wM2VjMjc1YWNhOTI5MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbkBAIC0yMSw2ICsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBcXG4rZW51bSB7XFxuK1xcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxcbit9O1xcbitcXG4gZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTtcXG4gXFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi5iZjc3Y2NlMjE5NzRjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbkBAIC0xODUsNiArMTg1LDM4IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfbm9kZXMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtX3JhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2VcXG4rICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBjb21wb25lbnQ6IGVycm9yIGNvbXBvbmVudCAoc2VlIFxcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxcbisgKiBAc2V2ZXJpdHk6IGVycm9yIHNldmVyaXR5IChzZWUgXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcXG4rICogQHZhbHVlOiB2YWx1ZSBvZiBlcnJvciBjb3VudGVyXFxuKyAqIEBmbGFnczogZmxhZ3MgZm9yIGFsbG9jYXRpb25cXG4rICpcXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICovXFxuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzICpyYXMgPSBcXHUwMDI2eGUtXFx1MDAzZXJhcztcXG4rXFx0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy1cXHUwMDNlaW5mb1tzZXZlcml0eV07XFxuK1xcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cXG4rXFx0aWYgKCF4ZS1cXHUwMDNlaW5mby5oYXNfZHJtX3JhcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bm9kZSA9IFxcdTAwMjZyYXMtXFx1MDAzZW5vZGVbc2V2ZXJpdHldO1xcbitcXG4rXFx0aWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSwgZmxhZ3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkcm1fZXJyX3JhdGVsaW1pdGVkKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwiZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcXFxuXFxcIiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbmluZGV4IDM2NWM3MGU5M2U4MmZkLi4yYTY5NGJmNjk0Nzg0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbkBAIC01LDExICs1LDE0IEBAXFxuICNpZm5kZWYgX1hFX0RSTV9SQVNfSF9cXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xcbiBcXG4gI2RlZmluZSBmb3JfZWFjaF9lcnJvcl9zZXZlcml0eShpKVxcdFxcXFxcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7IGkrKylcXG4gXFxuIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xcbit2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xcbmluZGV4IDRhNGIzNjNmYzg0NGI2Li5hODMzY2VjYzc0ZWM1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jXFxuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lclxcbiBcXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXFx1MDAyNnhlLVxcdTAwM2VyYXM7XFxuIFxcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXFx1MDAzZWluZm9bc2V2ZXJpdHldO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBlcnJfc3JjO1xcbi1cXHR1MzIgZXJyX2JpdDtcXG4rXFx0dTMyIGVycl9iaXQsIHZhbHVlO1xcbiBcXG4gXFx0aWYgKCFJU19ER0ZYKHhlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC00OTUsNiArNDk1LDkgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJcXG4gXFx0XFx0XFx0Z3RfaHdfZXJyb3JfaGFuZGxlcih0aWxlLCBod19lcnIsIGVycm9yX2lkKTtcXG4gXFx0XFx0aWYgKGVycl9iaXQgPT0gWEVfU09DX0VSUk9SKVxcbiBcXHRcXHRcXHRzb2NfaHdfZXJyb3JfaGFuZGxlcih0aWxlLCBod19lcnIsIGVycm9yX2lkKTtcXG4rXFxuK1xcdFxcdHZhbHVlID0gYXRvbWljX3JlYWQoXFx1MDAyNmluZm9bZXJyb3JfaWRdLmNvdW50ZXIpO1xcbitcXHRcXHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBlcnJvcl9pZCwgc2V2ZXJpdHksIHZhbHVlLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbiBcXG4gY2xlYXJfcmVnOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG5pbmRleCA0NGY0ZTFhMzQ1NWI3Yy4uYjcxZDUxMjg1OTU0NTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuQEAgLTc3LDYgKzc3LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbit7XFxuK1xcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFO1xcbitcXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiB7XFxuIFxcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuQEAgLTk1LDYgKzEwNywyNCBAQCBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXFxuK3tcXG4rXFx0c3dpdGNoIChjb21wb25lbnQpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX1BDSUU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfU09DX0lOVEVSTkFMOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcXG4ge1xcbiBcXHRzd2l0Y2ggKHN0YXR1cykge1xcbkBAIC0xMzEsMTQgKzE2MSw0MSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmNvbXBfdG9fc3RyKHU4IGNvbXBvbmVudClcXG4gXFx0cmV0dXJuIHhlX3Jhc19jb21wb25lbnRzW2NvbXBvbmVudF07XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxcbit7XFxuK1xcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XFxuK1xcdGlmIChkcm1fc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkge1xcbitcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAldVxcXFxuXFxcIiwgc2V2ZXJpdHkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xcbitcXHRpZiAoZHJtX2NvbXBvbmVudCA9PSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkge1xcbitcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBjb21wb25lbnQgJXVcXFxcblxcXCIsIGNvbXBvbmVudCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0geGVfcmFzX2dldF9jb3VudGVyKHhlLCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQsIFxcdTAwMjZ2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUsIEdGUF9LRVJORUwpO1xcbit9XFxuK1xcbiB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpXFxuIHtcXG4gXFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXFx1MDAyNnJlc3BvbnNlLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVxcdTAwM2Vjb3VudGVycztcXG4gXFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVxcdTAwM2VuY291bnRlcnM7XFxuK1xcdHU4IHNlbnQgPSAwO1xcbiBcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cXHUwMDNlZGF0YSkgXFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcXG4rXFx0QlVJTERfQlVHX09OKFhFX1JBU19DT01QX01BWCBcXHUwMDNlIChCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHNlbnQpKSk7XFxuIFxcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XFxuIFxcbiBcXHRpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgXFx1MDAzZSBYRV9SQVNfTlVNX0NPVU5URVJTKVxcbkBAIC0xNTQsNiArMjExLDI0IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuIFxcbiBcXHRcXHR4ZV93YXJuKHhlLCBcXFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XFxuK1xcbitcXHRcXHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xcbitcXHRcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXFxcXG5cXFwiLCBzZXZfdG9fc3RyKHNldmVyaXR5KSxcXG4rXFx0XFx0XFx0XFx0c2V2ZXJpdHkpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKGNvbXBvbmVudCBcXHUwMDNlPSBYRV9SQVNfQ09NUF9NQVgpIHtcXG4rXFx0XFx0XFx0eGVfd2Fybih4ZSwgXFxcInN5c2N0cmw6IHVuZXhwZWN0ZWQgY29tcG9uZW50ICV1XFxcXG5cXFwiLCBjb21wb25lbnQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cXG4rXFx0XFx0aWYgKHNlbnQgXFx1MDAyNiBCSVQoY29tcG9uZW50KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XFxuK1xcbitcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggMGJlZWRlM2RkYzRlNGIuLjhhYmZiN2QyMDc3YjVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbisrKyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbkBAIC04MCw5ICs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXFxuIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XFxuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XFxuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcbit7IHJldHVybiAwOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcXG4rXFxuK1xcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxcbiBcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcXG4gXFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcXG4rXFx0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQ01EX01BWCxcXG4gXFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcXG4gfTtcXG4gXFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcXHRcXFwiZXJyb3ItcmVwb3J0XFxcIlxcbitcXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzowNC44OTY3OTM5NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MTI5MDkyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQgYGVycm9yLWV2ZW50YCB0byB0aGUgYGRybV9yYXNgIGZhbWlseSBhbmQgaW50ZWdyYXRlcyBpdCBpbnRvIHRoZSBgeGVgIERSTSBkcml2ZXIuIFRoZSBldmVudCBpcyBicm9hZGNhc3RlZCBieSB0aGUga2VybmVsIHdoZW4gaGFyZHdhcmUgZXJyb3JzIG9jY3VyIChoYW5kbGVkIGluIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGApLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSB0cmlnZ2VyZWQgYnkgaGFyZHdhcmUgaW50ZXJydXB0cyBhbmQgc3lzdGVtIGNvbnRyb2xsZXIgZXZlbnRzLCB3aGljaCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBmcm9tIHVzZXJzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWxseSByZWFjaGFibGUgY29kZSBmb3Igc3l6a2FsbGVyIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3NTE5NDJjODdjNTRmYzk5NzI1ZGNmNjY5OGZmNTlmMGJlNjljMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDE1OjUzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjQwNmU0YzQ5YmFjMWZkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5AQCAtNTYsNiArNTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbisqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXG4gXG4gWUFNTC1iYXNlZCBJbnRlcmZhY2VcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTExMSwzICsxMTIsMjMgQEAgRXhhbXBsZTogQ2xlYXIgYW4gZXJyb3IgY291bnRlciBmb3IgYSBnaXZlbiBub2RlXG4gXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1wibm9kZS1pZFwiOjAsIFwiZXJyb3ItaWRcIjoxfSdcbiAgICAgTm9uZVxuK1xuK0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cFxuK1xuKy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4rXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnRcbitcbisuLiBjb2RlLWJsb2NrOjoganNvblxuK1xuKyAgICB7XG4rICAgICAgICBcIm5hbWVcIjogXCJlcnJvci1ldmVudFwiLFxuKyAgICAgICAgXCJtc2dcIjoge1xuKyAgICAgICAgICAgIFwiZGV2aWNlLW5hbWVcIjogXCIwMDAwOjAzOjAwLjBcIixcbisgICAgICAgICAgICBcIm5vZGUtaWRcIjogMSxcbisgICAgICAgICAgICBcIm5vZGUtbmFtZVwiOiBcInVuY29ycmVjdGFibGUtZXJyb3JzXCIsXG4rICAgICAgICAgICAgXCJlcnJvci1pZFwiOiAxLFxuKyAgICAgICAgICAgIFwiZXJyb3ItbmFtZVwiOiBcImVycm9yX25hbWUxXCIsXG4rICAgICAgICAgICAgXCJlcnJvci12YWx1ZVwiOiAxXG4rICAgICAgICB9XG4rICAgIH1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuaW5kZXggZTExMzA1NmY4YzAxNmMuLjhhZWQzZDQ1MTVlNWFmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgKzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbisgIC1cbisgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogbm9kZS1pZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItaWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuIFxuIG9wZXJhdGlvbnM6XG4gICBsaXN0OlxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogZXJyb3ItZXZlbnRcbisgICAgICBkb2M6IFx1MDAzZS1cbisgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cbisgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4rICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XG4rICAgICAgZXZlbnQ6XG4rICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXG4rICAgICAgICAgIC0gbm9kZS1pZFxuKyAgICAgICAgICAtIG5vZGUtbmFtZVxuKyAgICAgICAgICAtIGVycm9yLWlkXG4rICAgICAgICAgIC0gZXJyb3ItbmFtZVxuKyAgICAgICAgICAtIGVycm9yLXZhbHVlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uNzdmOTEyYTRkMTAxZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5AQCAtNDEsNiArNDEsMTEgQEBcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXG4gICpcbisgKiA0LiBFUlJPUl9SRVBPUlQ6IFN1YnNjcmliZSB0byB0aGlzIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGVycm9yIGV2ZW50c1xuKyAqXG4rICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcbisgKiAgICBhbmQgZXJyb3IgaW5mb3JtYXRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxuKyAqXG4gICogTm9kZSByZWdpc3RyYXRpb246XG4gICpcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xuQEAgLTE4Niw2ICsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4rc3RhdGljIGludCBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsXG4rXHRcdFx0XHQgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cdTAwM2VkZXZpY2VfbmFtZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwgbm9kZS1cdTAwM2VpZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLVx1MDAzZW5vZGVfbmFtZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTtcbit9XG4rXG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0XHRcdCAgICB1MzIgZXJyb3JfaWQpXG4ge1xuQEAgLTIyMiw2ICsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbiB9XG4gXG4rLyoqXG4rICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XG4rICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXG4rICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcbisgKiBAZXJyb3JfbmFtZTogTmFtZSBvZiB0aGUgZXJyb3JcbisgKiBAdmFsdWU6IFZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3JcbisgKiBAZmxhZ3M6IEdGUCBmbGFncyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cbisgKlxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4rXHRcdFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgZ2VubF9pbmZvIGluZm87XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuK1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZXJyb3JfbmFtZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoIWdlbmxfaGFzX2xpc3RlbmVycyhcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgXHUwMDI2aW5pdF9uZXQsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbitcbitcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBmbGFncyk7XG4rXHRpZiAoIW1zZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcdTAwMjZpbmZvKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdHJldCA9IC1FTVNHU0laRTtcbitcdFx0Z290byBmcmVlX21zZztcbitcdH1cbitcbitcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuK1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuK1x0Z2VubG1zZ19tdWx0aWNhc3QoXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsIGZsYWdzKTtcbitcdHJldHVybiAwO1xuK1xuK2NhbmNlbF9tc2c6XG4rXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4rZnJlZV9tc2c6XG4rXHRubG1zZ19mcmVlKG1zZyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xuK1xuIC8qKlxuICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVyc1xuICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuaW5kZXggZGVhMWMxYjI0OTRlODEuLjlkMzEyM2NjOWY5Y2FhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuQEAgLTU4LDYgKzU4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGRybV9yYXNfbmxfbWNncnBzW10gPSB7XG4rXHRbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyBcImVycm9yLXJlcG9ydFwiLCB9LFxuK307XG4rXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5uYW1lXHRcdD0gRFJNX1JBU19GQU1JTFlfTkFNRSxcbiBcdC52ZXJzaW9uXHQ9IERSTV9SQVNfRkFNSUxZX1ZFUlNJT04sXG5AQCAtNjYsNCArNzAsNiBAQCBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lm1vZHVsZVx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LnNwbGl0X29wc1x0PSBkcm1fcmFzX25sX29wcyxcbiBcdC5uX3NwbGl0X29wc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSxcbitcdC5tY2dycHNcdFx0PSBkcm1fcmFzX25sX21jZ3JwcyxcbitcdC5uX21jZ3Jwc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfbWNncnBzKSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5pbmRleCBhMzk4NjQzNTcyYTVhMC4uMDNlYzI3NWFjYTkyOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5AQCAtMjEsNiArMjEsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuK2VudW0ge1xuK1x0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXG4rfTtcbitcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uYmY3N2NjZTIxOTc0YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5AQCAtMTg1LDYgKzE4NSwzOCBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG4rICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlXG4rICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbisgKiBAc2V2ZXJpdHk6IGVycm9yIHNldmVyaXR5IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxuKyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlclxuKyAqIEBmbGFnczogZmxhZ3MgZm9yIGFsbG9jYXRpb25cbisgKlxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuXG4rICovXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbitcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4rXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybV9yYXMgaXMgZW5hYmxlZCAqL1xuK1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19kcm1fcmFzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuK1xuK1x0aWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSwgZmxhZ3MpO1xuK1x0aWYgKHJldClcbitcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwiZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcblwiLCByZXQsXG4rXHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4rfVxuK1xuIC8qKlxuICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTXG4gICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuaW5kZXggMzY1YzcwZTkzZTgyZmQuLjJhNjk0YmY2OTQ3ODQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuQEAgLTUsMTEgKzUsMTQgQEBcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xuIFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcdFxcXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpKyspXG4gXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmNcbmluZGV4IDRhNGIzNjNmYzg0NGI2Li5hODMzY2VjYzc0ZWM1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lclxuIFx0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbiBcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBlcnJfc3JjO1xuLVx0dTMyIGVycl9iaXQ7XG4rXHR1MzIgZXJyX2JpdCwgdmFsdWU7XG4gXG4gXHRpZiAoIUlTX0RHRlgoeGUpKVxuIFx0XHRyZXR1cm47XG5AQCAtNDk1LDYgKzQ5NSw5IEBAIHN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2VyXG4gXHRcdFx0Z3RfaHdfZXJyb3JfaGFuZGxlcih0aWxlLCBod19lcnIsIGVycm9yX2lkKTtcbiBcdFx0aWYgKGVycl9iaXQgPT0gWEVfU09DX0VSUk9SKVxuIFx0XHRcdHNvY19od19lcnJvcl9oYW5kbGVyKHRpbGUsIGh3X2VyciwgZXJyb3JfaWQpO1xuK1xuK1x0XHR2YWx1ZSA9IGF0b21pY19yZWFkKFx1MDAyNmluZm9bZXJyb3JfaWRdLmNvdW50ZXIpO1xuK1x0XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBlcnJvcl9pZCwgc2V2ZXJpdHksIHZhbHVlLCBHRlBfQVRPTUlDKTtcbiBcdH1cbiBcbiBjbGVhcl9yZWc6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5pbmRleCA0NGY0ZTFhMzQ1NWI3Yy4uYjcxZDUxMjg1OTU0NTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuQEAgLTc3LDYgKzc3LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbit7XG4rXHRzd2l0Y2ggKHNldmVyaXR5KSB7XG4rXHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XG4rXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4ge1xuIFx0c3dpdGNoIChjb21wb25lbnQpIHtcbkBAIC05NSw2ICsxMDcsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHU4IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbit7XG4rXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0NPUkVfQ09NUFVURTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfUENJRTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4rXHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfU09DX0lOVEVSTkFMO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cykge1xuQEAgLTEzMSwxNCArMTYxLDQxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY29tcF90b19zdHIodTggY29tcG9uZW50KVxuIFx0cmV0dXJuIHhlX3Jhc19jb21wb25lbnRzW2NvbXBvbmVudF07XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuK3tcbitcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcbitcdGlmIChkcm1fc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkge1xuK1x0XHR4ZV93YXJuKHhlLCBcInN5c2N0cmw6IHVuZXhwZWN0ZWQgc2V2ZXJpdHkgJXVcXG5cIiwgc2V2ZXJpdHkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRkcm1fY29tcG9uZW50ID0geGVfdG9fZHJtX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTtcbitcdGlmIChkcm1fY29tcG9uZW50ID09IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XG4rXHRcdHhlX3dhcm4oeGUsIFwic3lzY3RybDogdW5leHBlY3RlZCBjb21wb25lbnQgJXVcXG5cIiwgY29tcG9uZW50KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmV0ID0geGVfcmFzX2dldF9jb3VudGVyKHhlLCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQsIFx1MDAyNnZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybjtcbitcbitcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUsIEdGUF9LRVJORUwpO1xuK31cbitcbiB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlKVxuIHtcbiBcdHN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKVx1MDAyNnJlc3BvbnNlLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVx1MDAzZWNvdW50ZXJzO1xuIFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVx1MDAzZW5jb3VudGVycztcbitcdHU4IHNlbnQgPSAwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cdTAwM2VkYXRhKSBcdTAwM2Mgc2l6ZW9mKCpwZW5kaW5nKSk7XG4rXHRCVUlMRF9CVUdfT04oWEVfUkFTX0NPTVBfTUFYIFx1MDAzZSAoQklUU19QRVJfQllURSAqIHNpemVvZihzZW50KSkpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0xNTQsNiArMjExLDI0IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXG4gXHRcdHhlX3dhcm4oeGUsIFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxuXCIsXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuK1xuK1x0XHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xuK1x0XHRcdHhlX3dhcm4oeGUsIFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXFxuXCIsIHNldl90b19zdHIoc2V2ZXJpdHkpLFxuK1x0XHRcdFx0c2V2ZXJpdHkpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChjb21wb25lbnQgXHUwMDNlPSBYRV9SQVNfQ09NUF9NQVgpIHtcbitcdFx0XHR4ZV93YXJuKHhlLCBcInN5c2N0cmw6IHVuZXhwZWN0ZWQgY29tcG9uZW50ICV1XFxuXCIsIGNvbXBvbmVudCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cbitcdFx0aWYgKHNlbnQgXHUwMDI2IEJJVChjb21wb25lbnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuK1xuK1x0XHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuaW5kZXggMGJlZWRlM2RkYzRlNGIuLjhhYmZiN2QyMDc3YjVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG4rKysgYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbkBAIC04MCw5ICs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuK1x0XHRcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuK3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuKysrIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XG4gXHREUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggLSAxKVxuIH07XG4gXG4rZW51bSB7XG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUgPSAxLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsXG4rXG4rXHRfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVgsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpXG4rfTtcbitcbiBlbnVtIHtcbiBcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxuIFx0RFJNX1JBU19DTURfR0VUX0VSUk9SX0NPVU5URVIsXG4gXHREUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLFxuK1x0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXG4gXG4gXHRfX0RSTV9SQVNfQ01EX01BWCxcbiBcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXG4gfTtcbiBcbisjZGVmaW5lIERSTV9SQVNfTUNHUlBfRVJST1JfUkVQT1JUXHRcImVycm9yLXJlcG9ydFwiXG4rXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6MDQuODk2Nzk2Mzk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxMDcyNTkxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBEUk0gUkFTIEVycm9yIEV2ZW50IFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhbiBgZXJyb3ItZXZlbnRgIG11bHRpY2FzdCBncm91cCB0byB0aGUgYGRybV9yYXNgIG5ldGxpbmsgZmFtaWx5LiBJdCBhZGRzIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCB3aGljaCBpcyBlc3NlbnRpYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBjb25zdHJ1Y3RzIGFuZCBzZW5kcyB0aGVzZSBuZXRsaW5rIG11bHRpY2FzdCBtZXNzYWdlcy4gVGhpcyBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNhbGxlZCBmcm9tIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz9cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIHRha2VzIGEgYnVuY2ggb2YgYXJndW1lbnRzLCBidWlsZHMgYSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCB0aGVuIHVzZXMgYGdlbmxtc2dfbXVsdGljYXN0YCB0byBzZW5kIGl0LiBUaGlzIHNvdW5kcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzICp0cmlnZ2VyZWQqIGJ5IGhhcmR3YXJlIGVycm9ycyB3aXRoaW4gdGhlIGB4ZWAgZHJpdmVyLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgcmVsaWFibHkgdHJpZ2dlciB0aG9zZSBoYXJkd2FyZSBlcnJvcnM/IGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgaXMgY2FsbGVkIG9uIGEgaGFyZHdhcmUgZXJyb3IsIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGlzIGNhbGxlZCBvbiBhIHN5c2N0cmwgZXZlbnQgcmVzcG9uc2UuIFRoZSBjb21wbGV4aXR5IGhlcmUgaXMgd2hldGhlciB3ZSBjYW4gY29udHJvbCB0aG9zZSBldmVudHMuIExpa2VseSBub3QgZGlyZWN0bHksIGJ1dCB3ZSAqY2FuKiBzdWJzY3JpYmUgdG8gdGhlIG11bHRpY2FzdCBncm91cC5cblxuVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBtdWx0aWNhc3QgZ3JvdXAgY2FsbGVkIGBlcnJvci1yZXBvcnRgLiBXZSBzdWJzY3JpYmUgdG8gbXVsdGljYXN0IGdyb3VwcyB1c2luZyBgc2V0c29ja29wdChmZCwgU09MX05FVExJTkssIE5FVExJTktfQUREX01FTUJFUlNISVAsIC4uLilgLiBDcml0aWNhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJ3QgKmFkZCogYW55IG5ldyBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiAqc2VuZCosIGV4Y2VwdCBtYXliZSBgZXJyb3ItZXZlbnRgIGlzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kLlxuXG5XYWl0LCBsb29raW5nIGNsb3NlciwgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCBpcyBpbmRlZWQgYWRkZWQuIExldCdzIGxvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24sIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sYC4gQWgsIGl0J3MgZXhwbGljaXRseSBkZWZpbmVkIGFzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kIHVzZXJzcGFjZSBjYW4gc2VuZC4gSXQncyBhbiBldmVudCB1c2Vyc3BhY2UgKnJlY2VpdmVzKi4gVGhlIGRlc2NyaXB0aW9uIHNheXMgaXQgcmVwb3J0cyBhbiBlcnJvciBldmVudCBpbmNsdWRpbmcgZGV2aWNlLCBub2RlLCBhbmQgZXJyb3IgaW5mb3JtYXRpb24uIFRoZSBZQU1MIGZpbGUgY29uZmlybXMgdGhlcmUgYXJlIG5vIGBkb2Agb3IgYGR1bXBgIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgYGVycm9yLWV2ZW50YCwgb25seSBgZXZlbnRgLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUga2VybmVsIHNpZGUgZG9lc24ndCBleHBvc2UgdGhpcyBjb21tYW5kIGZvciBzZW5kaW5nIHZpYSB1c2Vyc3BhY2UuIEknbGwgY2hlY2sgYGRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNgIGZvciBgZHJtX3Jhc19ubF9vcHNgLiBBbmQsIHllcywgdGhlIHBhdGNoICpkb2Vzbid0KiBhZGQgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zLiBUaHVzLCB1c2Vyc3BhY2UgY2Fubm90ICpzZW5kKiB0aGlzIGNvbW1hbmQgdG8gdGhlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCB0aGUgb25seSB0aGluZyB1c2Vyc3BhY2UgY2FuIGRvIGlzIHN1YnNjcmliZSB0byB0aGUgYGVycm9yLXJlcG9ydGAgbXVsdGljYXN0IGdyb3VwLiBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgbmV0bGluayBjb2RlLCB3aGljaCBpcyB3ZWxsLXRyb2RkZW4gZ3JvdW5kLiBUaGUgKm5ldyogY29kZSBpcyBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUgYHhlYCBkcml2ZXIgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIuXG5cbkNhbiBzeXprYWxsZXIgcmVsaWFibHkgdHJpZ2dlciB0aG9zZSBgeGVgIGhhcmR3YXJlIGVycm9ycz8gUHJvYmFibHkgbm90IGVhc2lseSwgdW5sZXNzIHRoZXJlJ3MgYSB3YXkgdG8gaW5qZWN0IHRoZW0uIEV2ZW4gaWYgaXQgKmNhbiogdHJpZ2dlciB0aGVtLCBhbGwgdGhlIGFkZGVkIGNvZGUgZG9lcyBpcyBjb25zdHJ1Y3QgYW5kIGJyb2FkY2FzdCBhIG5ldGxpbmsgbWVzc2FnZS5cblxuU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZSBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGluIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBsb29rcyBwcmV0dHkgc3RhbmRhcmQuIFRoZXJlIGlzbid0IG11Y2ggY29tcGxleGl0eSB0aGVyZS4gSXQncyBlc3NlbnRpYWxseSBqdXN0IHBhY2thZ2luZyB1cCBkYXRhIHRoYXQgdGhlIGB4ZWAgZHJpdmVyIGFscmVhZHkga25vd3MuIExldCBtZSBjaGVjayBpZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgdHJpZ2dlcmVkIGJ5IGFueSB1c2Vyc3BhY2UgYWN0aW9uLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzoxOC4wMDQwNjAwOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ3MTMxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9yYXNfbmxfZXJyb3JfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYz0yMjI9c3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNTgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNTk6ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNjAtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI3MDppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzEtXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzA5LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjMxMDpFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzExLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTg9dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxNDpcXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTUtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Mj12b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg0LVxcdFxcdFxcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTg3PXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg5LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzoyMi4wNTEyMDI2MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0NzY2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgeGVfZHJtX3Jhc19ldmVudGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGB4ZV9kcm1fcmFzX2V2ZW50YCwgaXMgb25seSBjYWxsZWQgZnJvbSBvbmUgcGxhY2UuIFRoYXQncyBhY3R1YWxseSBhIHByZXR0eSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzYXZlcyBtZSBzb21lIHRpbWUuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGB4ZV9kcm1fcmFzX2V2ZW50YCBpcyBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgZm9yIHRyYWNpbmcgdGhlIGZsb3cgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGF0IHNpbmdsZSBjYWxsIHRvIHByb3Blcmx5IGFuYWx5emUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjI1LjIyNjAwNjE2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMwMzA1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX2RybV9yYXNfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xNTc9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTg5OiAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm1fcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTkwLSAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTctICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxOTg6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTkte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaD0xNT1pbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oOjE2OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oLTE3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NDI3PXN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQ5OS1cXHRcXHR2YWx1ZSA9IGF0b21pY19yZWFkKFxcdTAwMjZpbmZvW2Vycm9yX2lkXS5jb3VudGVyKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MDA6XFx0XFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZXJyb3JfaWQsIHNldmVyaXR5LCB2YWx1ZSwgR0ZQX0FUT01JQyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTAxLVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xNjQ9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTg1LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoxODY6XFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE4Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjI3LjQ1NjMxOTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMjM1NDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIEVycm9yIFNpZ25hbCoqXG5cblJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCB0aGUgb25lIGluIHF1ZXN0aW9uLCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbGlrZWx5IGEgY2VudHJhbCBwb2ludCBmb3IgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGVycm9ycywgZWl0aGVyIGRpcmVjdGx5IGZyb20gdGhlIHNvdXJjZSBpdHNlbGYgb3IgZnJvbSB0aGUgUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5LCBhbmQgU2VydmljZWFiaWxpdHkpIHNpZGUgb2YgdGhpbmdzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGVzZSBlcnJvcnMgYnkgdW5kZXJzdGFuZGluZyB0aGUgc291cmNlIG9mIHRoZSBjYWxscy4gSXMgaXQgY29taW5nIGRpcmVjdGx5IGZyb20gYW4gaW50ZXJydXB0PyBNYXliZSBhIHNvZnR3YXJlLWluaXRpYXRlZCBjaGVjaz8gSXMgdGhpcyBhIGhpZ2gtcHJpb3JpdHkgaW50ZXJydXB0IGhhbmRsZXI/IEFsbCBvZiB0aGVzZSBxdWVzdGlvbnMgYXJlIHZpdGFsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6MzEuMTg4Njc2NDk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzc0ODc2MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9MzcwPXN0YXRpYyB2b2lkIHNvY19od19lcnJvcl9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyNi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo0Mjc6c3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyOC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz01MTk9dm9pZCB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgdTMyIG1hc3Rlcl9jdGwpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjctXFx0XFx0aWYgKG1hc3Rlcl9jdGwgXFx1MDAyNiBFUlJPUl9JUlEoaHdfZXJyKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1Mjg6XFx0XFx0XFx0aHdfZXJyb3Jfc291cmNlX2hhbmRsZXIodGlsZSwgaHdfZXJyKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzozMy4zMjYxNzQ5NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ1NTEyMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRXJyb3IgSGFuZGxpbmcgUGF0aCoqXG5cbkFscmlnaHQsIEknbSBzdGFydGluZyBhdCBgeGVfaHdfZXJyb3JfaXJxX2hhbmRsZXJgLiBUaGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgdHJpZ2dlciBjb21lcyBmcm9tLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkb3duc3RyZWFtIHByb2Nlc3MuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgIGlzIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGwgc3RhY2sgZnJvbSBoZXJlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZXJyb3IgcmVwb3J0aW5nIGFuZCBoYW5kbGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzozNi4yNzE2OTE2NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE3MDY3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmFzX3NlbmRfZXJyb3JfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jPTE1Nj1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmNvbXBfdG9fc3RyKHU4IGNvbXBvbmVudClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xNjMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjE2NDpzdGF0aWMgdm9pZCByYXNfc2VuZF9lcnJvcl9ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudClcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTY1LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xODk9dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0yMzAtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjIzMTpcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTIzMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjM4LjM3MzQwODYxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc4ODQxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvdW50ZXIgVGhyZXNob2xkIENyb3NzIEV2ZW50KipcblxuQWxyaWdodCwgc28gYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCBpcyB0aGUgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biBldmVyeSBjYWxsIHNpdGUgZm9yIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAuIFVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgY3JpdGljYWwgZm9yIGdyYXNwaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGV2ZW50IOKAkyBJIG5lZWQgdG8ga25vdyAqd2hhdCogaXMgbW9uaXRvcmluZyAqd2hhdCosIGFuZCBzcGVjaWZpY2FsbHkgKndoeSogdGhpcyB0aHJlc2hvbGQgd2FzIGNyb3NzZWQuIERpdmluZyBpbnRvIHRoZSBjYWxsIGdyYXBoIGlzIHRoZSBiZXN0IHdheSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgcHJvY2VzcyBmbG93IGFuZCBwaW5wb2ludGluZyB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGFsZXJ0LiBUaGlzIGlzIGFsbCBhYm91dCBnYXRoZXJpbmcgdGhlIGluaXRpYWwgdGVsZW1ldHJ5IHRvIGZvcm0gYSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjQxLjQ1MjI1MzQ0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNTQyNDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MTY0PXN0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE4OC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MTg5OnZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE5MC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg9MTI9c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2U7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTEzLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaDoxNDp2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0xNS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz0xNT1zdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCAqY29tbWFuZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMzgtXFx0XFx0aWYgKHJlc3BvbnNlLVxcdTAwM2VldmVudCA9PSBYRV9TWVNDVFJMX0VWRU5UX1RIUkVTSE9MRF9DUk9TU0VEKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6Mzk6XFx0XFx0XFx0eGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoeGUsIHJlc3BvbnNlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTQwLVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6NDMuNTY3Njg0OTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjYzODA3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgWGUgU3lzdGVtIENvbnRyb2wgRXZlbnRzKipcblxuUmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGVfc3lzY3RybF9ldmVudC5jYCBmaWxlIGFnYWluLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggdG8gdGhpcyBgZ2V0X3BlbmRpbmdfZXZlbnRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IGl0J3MgYmVpbmcgY2FsbGVkLCBzbyBJIGNhbiBncmFzcCB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSByb290IGNhdXNlLiBMZXQncyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBgZ2V0X3BlbmRpbmdfZXZlbnRgIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHdheSB0byBvcmllbnQgbXlzZWxmIHdoZW4gZGVidWdnaW5nIHN1Y2ggYSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1Mzo0Ny4zMzQwNzAwMDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTU2MTMxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3BlbmRpbmdfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xNC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjE1OnN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTYte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz03MD12b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy04Ni1cXHRndWFyZChtdXRleCkoXFx1MDAyNnNjLVxcdTAwM2VldmVudF9sb2NrKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjg3OlxcdGdldF9wZW5kaW5nX2V2ZW50KHNjLCBcXHUwMDI2Y29tbWFuZCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy04OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jPTM4Nzk9c3RhdGljIHZvaWQgcWVkX2lvdl9wcm9jZXNzX21ieF9yZXEoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQwMDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYzo0MDA0OnN0YXRpYyB2b2lkIHFlZF9pb3ZfcGZfZ2V0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLCB1NjQgKmV2ZW50cylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQwMDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYz00OTMyPXN0YXRpYyB2b2lkIHFlZF9oYW5kbGVfdmZfbXNnKHN0cnVjdCBxZWRfaHdmbiAqaHdmbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmMtNDk0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jOjQ5NDY6XFx0cWVkX2lvdl9wZl9nZXRfcGVuZGluZ19ldmVudHMoaHdmbiwgZXZlbnRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQ5NDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjQ5LjQ0OTY5MTEzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY2NzI2OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGVfc3lzY3RybF9ldmVudGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgeGVfc3lzY3RybF9ldmVudGAgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0aGUgZ2F0ZXdheSBmb3Igc3lzdGVtIGNvbnRyb2wgZXZlbnRzLiBUaGUgZnVuY3Rpb24gY2FsbCB0cmVlIHN1Z2dlc3RzIGl0IGluaXRpYXRlcyBhIGNhbGwgdG8gYGdldF9wZW5kaW5nX2V2ZW50YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBwcm9iYWJseSBncmFiYmluZyB0aGUgbmV4dCBjb250cm9sIGFjdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZC4gTXkgbmV4dCBzdGVwIGhlcmUgaXMgZGVmaW5pdGVseSB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIGB4ZV9zeXNjdHJsX2V2ZW50YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbS4gS25vd2luZyB0aGUgZW50cnkgcG9pbnRzIHdpbGwgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIHNob3VsZCBoaWdobGlnaHQgdGhlIGV2ZW50IHNvdXJjZSBhbmQgdGhlIGJyb2FkZXIgZnVuY3Rpb25hbGl0eSBhZmZlY3RlZCBieSB0aGUgZXZlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6NTIuNjE2NDIyMTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU4MjYyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX3N5c2N0cmxfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgKz0geGVfYmIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTI4LVxcdHhlX3N5c2N0cmwubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjEyOTpcXHR4ZV9zeXNjdHJsX2V2ZW50Lm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0xMzAtXFx0eGVfc3lzY3RybF9tYWlsYm94Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTEyLSNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsLmhcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjEzOiNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmhcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE0LSNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsX21haWxib3guaFxcXCJcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xODk9dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MTkwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTkxLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMT1zdHJ1Y3QgeGVfZGV2aWNlO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaDoxMjpzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgtMTMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oPTE0PXZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjE1OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE2LWludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYz00MT1zdGF0aWMgdm9pZCB4ZV9zeXNjdHJsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYy00Ni1cXHRndWFyZCh4ZV9wbV9ydW50aW1lKSh4ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYzo0NzpcXHR4ZV9zeXNjdHJsX2V2ZW50KHNjKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5jLTQ4LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmg9MTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgeGVfZGV2aWNlICpzY190b194ZShzdHJ1Y3QgeGVfc3lzY3RybCAqc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5oLTE4LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmg6MTk6dm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuaC0yMC1pbnQgeGVfc3lzY3RybF9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTAtI2luY2x1ZGUgXFxcInhlX3N5c2N0cmwuaFxcXCJcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjExOiNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmhcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xMi0jaW5jbHVkZSBcXFwieGVfc3lzY3RybF9tYWlsYm94LmhcXFwiXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jPTE1PXN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTYte1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6MTc6XFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlID0gY29tbWFuZC1cXHUwMDNlZGF0YV9vdXQ7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xOC1cXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHNjX3RvX3hlKHNjKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM9NTI9c3RhdGljIHZvaWQgZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfc3lzY3RybF9hcHBfbXNnX2hkciAqaGVhZGVyLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NTM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNTQte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy02NC0vKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjY1OiAqIHhlX3N5c2N0cmxfZXZlbnQoKSAtIEhhbmRsZXIgZm9yIFN5c3RlbSBDb250cm9sbGVyIGV2ZW50c1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNjYtICogQHNjOiBTeXN0ZW0gQ29udHJvbGxlciBpbnN0YW5jZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy02OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjcwOnZvaWQgeGVfc3lzY3RybF9ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03MS17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03Mi1cXHRzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9O1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NzM6XFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjc0OlxcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNzUtXFx0c3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgaGVhZGVyID0ge307XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTE2LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6MTc6ICogZW51bSB4ZV9zeXNjdHJsX2V2ZW50IC0gRXZlbnRzIHJlcG9ydGVkIGJ5IFN5c3RlbSBDb250cm9sbGVyXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0xOC0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yMC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjIxOmVudW0geGVfc3lzY3RybF9ldmVudCB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yMi1cXHRYRV9TWVNDVFJMX0VWRU5UX1RIUkVTSE9MRF9DUk9TU0VEXFx0PSAweDAxLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yNS0vKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjI2OiAqIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgcGVuZGluZyBldmVudFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMjctICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaDoyODpzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0IHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTI5LVxcdC8qKiBAdmVjdG9yOiBNU0ktWCB2ZWN0b3IgdGhhdCB3YXMgdHJpZ2dlcmVkICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTM5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6NDA6ICogc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIHBlbmRpbmcgZXZlbnRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTQxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6NDI6c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2Uge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtNDMtXFx0LyoqIEBjb3VudDogUGVuZGluZyBldmVudCBjb3VudCBhZnRlciB0aGlzIHJlc3BvbnNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjU0Ljc3NDY5MzA3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzE1MzcxMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHhlX3N5c2N0cmxfZXZlbnRgIFBhdGh3YXkgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgeGVfc3lzY3RybF9ldmVudGAgaXMgY2FsbGVkIGZyb20gYHhlX3N5c2N0cmxfd29ya2AsIHdoaWNoIGlzIGEgd29ya3F1ZXVlIGl0ZW0uIFRoYXQgd29yayBpcyBpbml0aWF0ZWQgYnkgdGhlIFN5c3RlbSBDb250cm9sbGVyIGhhcmR3YXJlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIHBvaW50PyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIG5ldGxpbmsgbWVzc2FnZXMsIGJ1dCBpbiB0aGlzIHNjZW5hcmlvLCB0aGUgbmV0bGluayBtZXNzYWdlICh0aGUgZW5kIGdvYWwgaGVyZSkgaXMgc2VudCAqYnkqIHRoZSBrZXJuZWwgaXRzZWxmLCBhcyBhIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQuIFNvLCBjYW4gc3l6a2FsbGVyIGRpcmVjdGx5IHRyaWdnZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZXZlbnQ/IFByb2JhYmx5IG5vdDsgdXN1YWxseSwgaXQgZG9lc24ndCBoYXZlIHRoYXQgbGV2ZWwgb2YgY29udHJvbCB1bmxlc3MgaXQncyBkZWFsaW5nIHdpdGggYSB2aXJ0dWFsIGRldmljZSBvciBjYW4gc29tZWhvdyBpbmplY3QgdGhlIGV2ZW50LlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNoaWZ0cyB0byBmaW5kaW5nIGFsdGVybmF0ZSBwYXRocy4gQXJlIHRoZXJlIG90aGVyIHdheXMgdG8gdHJpZ2dlciBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGA/IEhtbSwgbm8sIGl0J3MgcHJldHR5IGxvY2tlZCBkb3duLiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gYHhlX2RybV9yYXNfZXZlbnRgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLiBUaGVzZSBhcmUgYm90aCBoYXJkd2FyZSBlcnJvciBoYW5kbGVycyDigJMgd2hpY2ggbWVhbnMgdGhleSdyZSByZXNwb25kaW5nIHRvIHNwZWNpZmljIGhhcmR3YXJlIGVycm9ycy5cblxuU28sIHRoZSBuZXcgY29kZSBwYXRoIGJvaWxzIGRvd24gdG86XG5cbjEuICBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGA6IGNvbnN0cnVjdHMgYW5kIGJyb2FkY2FzdHMgYSBuZXRsaW5rIG1lc3NhZ2UuXG4yLiAgYHhlX2RybV9yYXNfZXZlbnRgOiBjYWxscyBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAuXG4zLiAgYHJhc19zZW5kX2Vycm9yX2V2ZW50YDogY2FsbHMgYHhlX2RybV9yYXNfZXZlbnRgLlxuNC4gIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmA6IGFsc28gY2FsbHMgYHhlX2RybV9yYXNfZXZlbnRgLlxuNS4gIFRoZXJlJ3MgYWxzbyBuZXRsaW5rIG11bHRpY2FzdCBncm91cCByZWdpc3RyYXRpb24uXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IElmIHN5emthbGxlciBjYW4ndCB0cmlnZ2VyIHRoZSBoYXJkd2FyZSBlcnJvcnMgZGlyZWN0bHksIHRoZW4gd2UncmUgbmV2ZXIgZ29pbmcgdG8gaGl0IGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YC4gVGhhdCBtYWtlcyBpdCBhIGRlYWQgZW5kIGZvciBmdXp6aW5nIHVubGVzcyB3ZSBjYW4gc29tZWhvdyBmb3JjZSBvciBpbmplY3QgdGhlIGVycm9yIGNvbmRpdGlvbnMuXG5cbldhaXQgYSBzZWNvbmQuLi5pcyB0aGVyZSBhbnkga2luZCBvZiBkZWJ1Z2ZzIGludGVyZmFjZSwgb3IgYW55dGhpbmcgbGlrZSB0aGF0LCBpbiB0aGUgYHhlYCBzdWJzeXN0ZW0gdGhhdCBtaWdodCBsZXQgbWUgaW5qZWN0IHRoZXNlIGtpbmRzIG9mIGVycm9ycz8gVGhhdCB3b3VsZCBjaGFuZ2UgZXZlcnl0aGluZy4gVGltZSB0byBjaGVjayBmb3IgZXJyb3IgaW5qZWN0aW9uIG1ldGhvZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjAyLjQ5MDA2NzM5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MjQyNTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod19lcnJvcl9zb3VyY2VfaGFuZGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0zNzA9c3RhdGljIHZvaWQgc29jX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNDI2LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjQyNzpzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNDI4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyNy1cXHRcXHRpZiAobWFzdGVyX2N0bCBcXHUwMDI2IEVSUk9SX0lSUShod19lcnIpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyODpcXHRcXHRcXHRod19lcnJvcl9zb3VyY2VfaGFuZGxlcih0aWxlLCBod19lcnIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyOS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjA0LjU1MjUwMjYyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDExMjA1NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW5qZWN0aW9uIFZlY3RvcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpbmplY3Rpb24gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHN5c3RlbWF0aWNhbGx5IHByb2JlIHRoZSBzeXN0ZW0gZm9yIHZ1bG5lcmFiaWxpdGllcyB3aGVyZSB1bnRydXN0ZWQgaW5wdXQgY291bGQgYmUgaW5qZWN0ZWQgYW5kIGV4ZWN1dGVkIG9yIGludGVycHJldGVkIGluIGFuIHVuaW50ZW5kZWQgbWFubmVyLiBUaGlzIG1lYW5zIGxvb2tpbmcgYmV5b25kIHRoZSBvYnZpb3VzIGFuZCBjb25zaWRlcmluZyBhbGwgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdXNlciBpbnB1dCBmaWVsZHMsIEFQSSBjYWxscywgZGF0YSBpbXBvcnRzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZXZlbiBzZWVtaW5nbHkgYmVuaWduIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHRoaW5rIGNyaXRpY2FsbHkgYWJvdXQgaG93IGRpZmZlcmVudCBjb21wb25lbnRzIGludGVyYWN0IHdpdGggZWFjaCBvdGhlciBhbmQgd2hlcmUgZGF0YSBtaWdodCBiZSBwYXNzZWQsIHRyYW5zZm9ybWVkLCBhbmQgdWx0aW1hdGVseSB1dGlsaXplZC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBub3QgdG8gbGVhdmUgYW55IHN0b25lIHVudHVybmVkOyB0aGUgbW9zdCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBvZnRlbiB0aGUgbW9zdCBvdmVybG9va2VkLiBJIGhhdmUgdG8gdGhpbmsgbGlrZSBhbiBhdHRhY2tlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NzUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDowNy45NjM3MTI5MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTgwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluamVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6OTojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nX2hlbHBlcnMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM9NDE9REVDTEFSRV9GQVVMVF9BVFRSKGd0X3Jlc2V0X2ZhaWx1cmUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NDI6REVDTEFSRV9GQVVMVF9BVFRSKGluamVjdF9jc2NfaHdfZXJyb3IpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmMtNDMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jPTU0Nz12b2lkIHhlX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jLTU2NS1cXHRcXHRcXHRcXHRcXHQgcm9vdCwgbWlub3IpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NTY2OlxcdFxcdGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoXFxcImluamVjdF9jc2NfaHdfZXJyb3JcXFwiLCByb290LFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NTY3OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmluamVjdF9jc2NfaHdfZXJyb3IpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmMtNTY4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYy05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYzoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91bml0cy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oPTIwNj12b2lkIHhlX2ZpbGVfcHV0KHN0cnVjdCB4ZV9maWxlICp4ZWYpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuaC0yMDctXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oOjIwODppbnQgeGVfaXNfaW5qZWN0aW9uX2FjdGl2ZSh2b2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmgtMjA5LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oPTkwPXN0cnVjdCB4ZV9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oLTUzMC1cXHQvKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTMxOlxcdCAqIEB2bV9pbmplY3RfZXJyb3JfcG9zaXRpb246IGluamVjdCBlcnJvcnMgYXQgZGlmZmVyZW50IHBsYWNlcyBpbiBWTVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2VfdHlwZXMuaC01MzItXFx0ICogYmluZCBJT0NUTCBiYXNlZCBvbiB0aGlzIHZhbHVlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oLTUzMy1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTM0OlxcdHU4IHZtX2luamVjdF9lcnJvcl9wb3NpdGlvbjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTM1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYy04LSNpbmNsdWRlIFxcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby02NC1ub25hdG9taWMtbG8taGkuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jPTkxMT1zdGF0aWMgdm9pZCBndF9yZXNldF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0LmMtOTI1LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jOjkyNjpcXHRpZiAoeGVfZmF1bHRfaW5qZWN0X2d0X3Jlc2V0KCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05MjctXFx0XFx0ZXJyID0gLUVDQU5DRUxFRDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jPTk3OD12b2lkIHhlX2d0X3Jlc2V0X2FzeW5jKHN0cnVjdCB4ZV9ndCAqZ3QpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05ODItXFx0LyogRG9uJ3QgZG8gYSByZXNldCB3aGlsZSBvbmUgaXMgYWxyZWFkeSBpbiBmbGlnaHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYzo5ODM6XFx0aWYgKCF4ZV9mYXVsdF9pbmplY3RfZ3RfcmVzZXQoKSBcXHUwMDI2XFx1MDAyNiB4ZV91Y19yZXNldF9wcmVwYXJlKFxcdTAwMjZndC1cXHUwMDNldWMpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jLTk4NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaC04LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5oOjk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5oLTEwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg9NDE9ZXh0ZXJuIHN0cnVjdCBmYXVsdF9hdHRyIGd0X3Jlc2V0X2ZhaWx1cmU7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg6NDI6c3RhdGljIGlubGluZSBib29sIHhlX2ZhdWx0X2luamVjdF9ndF9yZXNldCh2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5oLTQzLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jPTQ1PWVudW0gVkZfTUlHUkFUSU9OX1dBSVRfUE9JTlRTIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTUyLSNkZWZpbmUgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVNcXHQxMDAwXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmM6NTM6c3RhdGljIHZvaWQgdmZfcG9zdF9taWdyYXRpb25faW5qZWN0X3dhaXQoc3RydWN0IHhlX2d0ICpndCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy01NC1cXHRcXHRcXHRcXHRcXHQgIGVudW0gVkZfTUlHUkFUSU9OX1dBSVRfUE9JTlRTIHdhaXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy01Ny1cXHRcXHR4ZV9ndF9kYmcoZ3QsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmM6NTg6XFx0XFx0XFx0ICBcXFwiKlRFU1RJTkcqIGluamVjdGluZyAldSBtcyBkZWxheSBkdWUgdG8gcmVzZml4X3N0b3BwZXJzPSUjeCwgdG8gY29udGludWUgY2xlYXIgJSN4XFxcXG5cXFwiLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTU5LVxcdFxcdFxcdCAgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy02Ny1cXHRzdHJ1Y3QgeGVfZ3QgKl9fZ3QgPSAoZ3QpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYzo2ODpcXHR2Zl9wb3N0X21pZ3JhdGlvbl9pbmplY3Rfd2FpdChfX2d0LCBWRl9NSUdSQVRJT05fV0FJVF8jI19QT1MpO1xcdFxcdFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy02OS1cXHR9KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy03LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy05LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEyLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTIxNTA9dm9pZCB4ZV9ndWNfY3RfcHJpbnQoc3RydWN0IHhlX2d1Y19jdCAqY3QsIHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgYm9vbCB3YW50X2N0YilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTYzLSAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggYXNzaXN0cyB0aGUgZHJpdmVyIGluIGlkZW50aWZ5aW5nIGlmIGEgZmF1bHRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NDogKiBpbmplY3Rpb24gdGVzdCBpcyBjdXJyZW50bHkgYWN0aXZlLCBhbGxvd2luZyBpdCB0byByZWR1Y2UgdW5uZWNlc3NhcnkgZGVidWdcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NTogKiBvdXRwdXQuIFR5cGljYWxseSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgemVybywgYnV0IHRoZSBmYXVsdCBpbmplY3Rpb25cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NjogKiBmcmFtZXdvcmsgY2FuIGFsdGVyIHRoaXMgdG8gcmV0dXJuIGFuIGVycm9yLiBTaW5jZSBmYXVsdHMgYXJlIGluamVjdGVkXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxNjctICogdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCBpdCdzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgb3B0aW1pemVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTcxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTcyOm5vaW5saW5lIGludCB4ZV9pc19pbmplY3Rpb25fYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE3MzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfaXNfaW5qZWN0aW9uX2FjdGl2ZSwgRVJSTk8pO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTc0LSNlbHNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxNzU6aW50IHhlX2lzX2luamVjdGlvbl9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTc2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTIxNzg9c3RhdGljIHZvaWQgY3RfZGVhZF9jYXB0dXJlKHN0cnVjdCB4ZV9ndWNfY3QgKmN0LCBzdHJ1Y3QgZ3VjX2N0YiAqY3RiLCB1MzIgcmVhc29uX2NvZGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE4OC1cXHQvKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTg5OlxcdCAqIEh1Z2UgZHVtcCBpcyBnZXR0aW5nIGdlbmVyYXRlZCB3aGVuIGluamVjdGluZyBlcnJvciBmb3IgZ3VjIENUL01NSU9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE5MDpcXHQgKiBmdW5jdGlvbnMuIFNvLCBsZXQgdXMgc3VwcHJlc3MgdGhlIGR1bXAgd2hlbiBmYXVsdCBpcyBpbmplY3RlZC5cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE5MS1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE5MjpcXHRpZiAoeGVfaXNfaW5qZWN0aW9uX2FjdGl2ZSgpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTkzLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmMtNy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmMtOS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmMtOS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG1hcC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0yNy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoyODpleHRlcm4gc3RydWN0IGZhdWx0X2F0dHIgaW5qZWN0X2NzY19od19lcnJvcjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0yOS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTE2ND1zdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUocHZjX21hc3Rlcl9sb2NhbF9ub25mYXRhbF9lcnJfcmVnKSA9PSBYRV9SQVNfUkVHX1NJWkUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTY5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3MDpzdGF0aWMgYm9vbCBmYXVsdF9pbmplY3RfY3NjX2h3X2Vycm9yKHZvaWQpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTcxLXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoxNzI6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBzaG91bGRfZmFpbChcXHUwMDI2aW5qZWN0X2NzY19od19lcnJvciwgMSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTczLX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyMi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MjM6XFx0aWYgKGZhdWx0X2luamVjdF9jc2NfaHdfZXJyb3IoKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjQtXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGlsZS1cXHUwMDNlY3NjX2h3X2Vycm9yX3dvcmspO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTEwNDM9c3RhdGljIHZvaWQgeGVfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDU5LSAqXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEwNjA6ICogRmF1bHQgaW5qZWN0aW9uIGlzIHVzZWQgdG8gdGVzdCB0aGUgZXJyb3IgcGF0aHMgb2Ygc29tZSBpbml0aWFsaXphdGlvblxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYxLSAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2Mi0gKiBleGFtcGxlIHRocm91Z2ggeGVfZGV2aWNlX3Byb2JlKCkuIFRob3NlIGZ1bmN0aW9ucyB1c2UgdGhlIGtlcm5lbCBmYXVsdFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYzOiAqIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgaW5mcmFzdHJ1Y3R1cmUsIHNlZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY0OiAqIERvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi5yc3QgZm9yIGRldGFpbHMuIFRoZSBtYWNyb1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDY1LSAqIEFMTE9XX0VSUk9SX0lOSkVDVElPTigpIGlzIHVzZWQgdG8gY29uZGl0aW9uYWxseSBza2lwIGZ1bmN0aW9uIGV4ZWN1dGlvblxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDY2LSAqIGF0IHJ1bnRpbWUgYW5kIHVzZSBhIHByb3ZpZGVkIHJldHVybiB2YWx1ZS4gVGhlIGZpcnN0IHJlcXVpcmVtZW50IGZvclxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY3OiAqIGVycm9yIGluamVjdGFibGUgZnVuY3Rpb25zIGlzIHByb3BlciBoYW5kbGluZyBvZiB0aGUgZXJyb3IgY29kZSBieSB0aGVcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2OC0gKiBjYWxsZXIgZm9yIHJlY292ZXJ5LCB3aGljaCBpcyBhbHdheXMgdGhlIGNhc2UgaGVyZS4gVGhlIHNlY29uZFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzMtICogY2FsbGVyLiBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gY29uc2VxdWVuY2Ugb24gdGhvc2Ugc3BlY2lmaWMgY2FsbGVycyB3aGVuXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEwNzQ6ICogZnVuY3Rpb24gZXJyb3IgaW5qZWN0aW9uIHNraXBzIHRoZSB3aG9sZSBmdW5jdGlvbi5cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA3NS0gKi9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmM6MTA6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm9yLWluamVjdGlvbi5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTExLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BtLmMtNy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYy05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xMDc4PXN0YXRpYyB2b2lkIHhlX3B0X2NvbW1pdF9sb2Nrc19hc3NlcnQoc3RydWN0IHhlX3ZtYSAqdm1hKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTA4OC1cXHRpZiAoeGVfdm1hX2lzX3VzZXJwdHIodm1hKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxMDg5OlxcdFxcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTA5MC19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xMzk2PXN0YXRpYyBpbnQgeGVfcHRfcHJlX2NvbW1pdChzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGUgKnB0X3VwZGF0ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MTItICogZGVmYXVsdDsgd3JpdGUgbW9kZSB3aGVuIENPTkZJR19EUk1fWEVfVVNFUlBUUl9JTlZBTF9JTkpFQ1QgaXMgb24sXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQxMzogKiBiZWNhdXNlIGEgdXNlcnB0ciBvcCBpbiB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gbWF5IGludm9rZSB0aGUgaW5qZWN0ZWRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDE0LSAqIHhlX3ZtYV91c2VycHRyX2ZvcmNlX2ludmFsaWRhdGUoKSBwYXRoIHRoYXQgY2FsbHNcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0Mjc9c3RhdGljIHZvaWQgeGVfcHRfc3ZtX3VzZXJwdHJfbm90aWZpZXJfdW5sb2NrKHN0cnVjdCB4ZV92bSAqdm0pXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDM4LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0Mzk6c3RhdGljIGJvb2wgeGVfcHRfdXNlcnB0cl9pbmplY3RfZWFnYWluKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDQwLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NDpzdGF0aWMgYm9vbCB4ZV9wdF91c2VycHRyX2luamVjdF9lYWdhaW4oc3RydWN0IHhlX3VzZXJwdHJfdm1hICp1dm1hKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTUte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTQ2MT1zdGF0aWMgaW50IHZtYV9jaGVja191c2VycHRyKHN0cnVjdCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV92bWEgKnZtYSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NjYtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ2NzpcXHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NjgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDcyLVxcdHV2bWEgPSB0b191c2VycHRyX3ZtYSh2bWEpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0NzM6XFx0aWYgKHhlX3B0X3VzZXJwdHJfaW5qZWN0X2VhZ2Fpbih1dm1hKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDc0LVxcdFxcdHhlX3ZtYV91c2VycHRyX2ZvcmNlX2ludmFsaWRhdGUodXZtYSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xNDkyPXN0YXRpYyBpbnQgb3BfY2hlY2tfc3ZtX3VzZXJwdHIoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3ZtYV9vcCAqb3AsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDk2LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0OTc6XFx0eGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDk4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjM3Mz1pbnQgeGVfcHRfdXBkYXRlX29wc19wcmVwYXJlKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfdm1hX29wcyAqdm9wcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0MDEtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQwMjpcXHRpZiAodm9wcy1cXHUwMDNlaW5qZWN0X2Vycm9yIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQwMzpcXHQgICAgdm9wcy1cXHUwMDNldm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gPT0gRk9SQ0VfT1BfRVJST1JfUFJFUEFSRSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDA0LVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjQxMT1zdGF0aWMgdm9pZCBiaW5kX29wX2NvbW1pdChzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0MzgtXFx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNDM5OlxcdFxcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjQ0MC1cXHRcXHR0b191c2VycHRyX3ZtYSh2bWEpLVxcdTAwM2V1c2VycHRyLmluaXRpYWxfYmluZCA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNDUzPXN0YXRpYyB2b2lkIHVuYmluZF9vcF9jb21taXQoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3RpbGUgKnRpbGUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDc0LVxcdFxcdGlmICh4ZV92bWFfaXNfdXNlcnB0cih2bWEpKSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQ3NTpcXHRcXHRcXHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0NzYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNjA5PXhlX3B0X3VwZGF0ZV9vcHNfcnVuKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfdm1hX29wcyAqdm9wcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI2MzctI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjYzODpcXHRpZiAodm9wcy1cXHUwMDNlaW5qZWN0X2Vycm9yIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjYzOTpcXHQgICAgdm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gPT0gRk9SQ0VfT1BfRVJST1JfUlVOKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI2NDAtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy01LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jOjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jLTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9Mzg1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kcm1fcGFnZW1hcF9mcm9tX2ZkKGludCBmZCwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MDMtI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9YRV9VU0VSUFRSX0lOVkFMX0lOSkVDVClcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDA0OiNkZWZpbmUgeGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtX18pIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDA1LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNih2bV9fKS1cXHUwMDNlc3ZtLmdwdXN2bS5ub3RpZmllcl9sb2NrKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MDYtI2Vsc2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDA3OiNkZWZpbmUgeGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtX18pIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDA4LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcXHUwMDI2KHZtX18pLVxcdTAwM2Vzdm0uZ3B1c3ZtLm5vdGlmaWVyX2xvY2spXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDIyLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaDo0MjM6c3RhdGljIGlubGluZSB2b2lkIHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZShzdHJ1Y3QgeGVfdm0gKnZtKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MjQte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy01LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy03LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYzo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYz0xMjU9aW50IHhlX3ZhbGlkYXRpb25fY3R4X2luaXQoc3RydWN0IHhlX3ZhbGlkYXRpb25fY3R4ICpjdHgsIHN0cnVjdCB4ZV92YWxpZGF0aW9uX2RldmljZSAqdmFsLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYy0xNjQtICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYzoxNjU6c3RhdGljIGJvb2wgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKHN0cnVjdCBkcm1fZXhlYyAqZXhlYylcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE2Ni17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE3MS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jOjE3MjpzdGF0aWMgYm9vbCB4ZV92YWxpZGF0aW9uX2NvbnRlbnRpb25faW5qZWN0ZWQoc3RydWN0IGRybV9leGVjICpleGVjKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmM9MTc5PXN0YXRpYyBib29sIF9feGVfdmFsaWRhdGlvbl9zaG91bGRfcmV0cnkoc3RydWN0IHhlX3ZhbGlkYXRpb25fY3R4ICpjdHgsIGludCByZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE4Mi1cXHQgICAgKChjdHgtXFx1MDAzZXJlcXVlc3RfZXhjbHVzaXZlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYzoxODM6XFx0ICAgICAgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKGN0eC1cXHUwMDNlZXhlYykpIHx8XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYy0xODQtXFx0ICAgICAhY3R4LVxcdTAwM2VyZXF1ZXN0X2V4Y2x1c2l2ZSkpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jPTMyOTE9c3RhdGljIGludCB2bV9iaW5kX2lvY3RsX29wc19sb2NrX2FuZF9wcmVwKHN0cnVjdCBkcm1fZXhlYyAqZXhlYyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTMzMDgtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzMwOTpcXHRpZiAodm9wcy1cXHUwMDNlaW5qZWN0X2Vycm9yIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzMxMDpcXHQgICAgdm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gPT0gRk9SQ0VfT1BfRVJST1JfTE9DSylcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zMzExLVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM9Mzg1Mz1pbnQgeGVfdm1fYmluZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00MDI2LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEZPUkNFX09QX0VSUk9SKSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDAyNzpcXHRcXHRcXHR2b3BzLmluamVjdF9lcnJvciA9IHRydWU7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDAyODpcXHRcXHRcXHR2bS1cXHUwMDNleGUtXFx1MDAzZXZtX2luamVjdF9lcnJvcl9wb3NpdGlvbiA9XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDAyOTpcXHRcXHRcXHRcXHQodm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gKyAxKSAlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDAzMC1cXHRcXHRcXHRcXHRGT1JDRV9PUF9FUlJPUl9DT1VOVDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oPTUzMD1zdHJ1Y3QgeGVfdm1hX29wcyB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaC01NTAtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtX3R5cGVzLmg6NTUxOlxcdC8qKiBAaW5qZWN0X2Vycm9yOiBpbmplY3QgZXJyb3IgdG8gdGVzdCBlcnJvciBoYW5kbGluZyAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oOjU1MjpcXHRib29sIGluamVjdF9lcnJvcjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaC01NTMtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXJfdHlwZXMuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmMtMTItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYy03LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jLTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjA4LjAzNjcwMTg5N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjA3MTU2NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ1NDIEhhcmR3YXJlIEVycm9yIEhhbmRsaW5nKipcblxuQWxyaWdodCwgc28gSSd2ZSBzdHVtYmxlZCB1cG9uIGBmYXVsdF9pbmplY3RfY3NjX2h3X2Vycm9yYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhIENTQyBoYXJkd2FyZSBlcnJvci4gU3BlY2lmaWNhbGx5LCBpdCdzIHNjaGVkdWxpbmcgYSB3b3JrIGl0ZW06IGBzY2hlZHVsZV93b3JrKFx1MDAyNnRpbGUtXHUwMDNlY3NjX2h3X2Vycm9yX3dvcmspO2AuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIG9idmlvdXNseSwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgd29yayBpdGVtLCBgY3NjX2h3X2Vycm9yX3dvcmtgLCAqYWN0dWFsbHkqIGRvZXMuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGVycm9yIGhhbmRsaW5nIGZsb3cgaGVyZS4gSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHdvcmsgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQgcmVhY3RzIHRvLCBhbmQgZGVhbHMgd2l0aCwgdGhlIHByZXN1bWVkIGhhcmR3YXJlIGZhdWx0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjM4ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDoxMy4yNDM4NjE3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTIzNDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjc2NfaHdfZXJyb3Jfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0xNzA9c3RhdGljIGJvb2wgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcih2b2lkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTc0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3NTpzdGF0aWMgdm9pZCBjc2NfaHdfZXJyb3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTc2LXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoxNzc6XFx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp0aWxlKSwgY3NjX2h3X2Vycm9yX3dvcmspO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTE3OC1cXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHRpbGVfdG9feGUodGlsZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0xODM9c3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjExLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjIxMjpcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ0aWxlLVxcdTAwM2Vjc2NfaHdfZXJyb3Jfd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjEzLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyMy1cXHRpZiAoZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcigpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyNDpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ0aWxlLVxcdTAwM2Vjc2NfaHdfZXJyb3Jfd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTI1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NTU1PXZvaWQgeGVfaHdfZXJyb3JfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTU2MS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1NjI6XFx0SU5JVF9XT1JLKFxcdTAwMjZ0aWxlLVxcdTAwM2Vjc2NfaHdfZXJyb3Jfd29yaywgY3NjX2h3X2Vycm9yX3dvcmspO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTU2My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlX3R5cGVzLmg9Mzc9c3RydWN0IHhlX3RpbGUge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaC0xMTYtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaDoxMTc6XFx0LyoqIEBjc2NfaHdfZXJyb3Jfd29yazogd29ya2VyIHRvIHJlcG9ydCBDU0MgSFcgZXJyb3JzICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaDoxMTg6XFx0c3RydWN0IHdvcmtfc3RydWN0IGNzY19od19lcnJvcl93b3JrO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlX3R5cGVzLmgtMTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDoxNS4zNTMxMDQ0NzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwOTIwNTk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OlxuXG4qKkRlYnVnZ2luZyBDU0MgSGFyZHdhcmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGEgQ1NDIChwcmVzdW1hYmx5IENvbG9yIFNwYWNlIENvbnZlcnNpb24pIGhhcmR3YXJlIGVycm9yLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY3NjX2h3X2Vycm9yX3dvcmtgIGlzIGxpa2VseSBjYWxsaW5nIHNvbWUgZXJyb3IgaGFuZGxlciBmdW5jdGlvbiwgbWF5YmUgc29tZXRoaW5nIGxpa2UgYGNzY19od19lcnJvcl9oYW5kbGVyYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy5cblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBjc2NfaHdfZXJyb3Jfd29ya2AgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbjpcbmBgYGNcbnN0YXRpYyB2b2lkIGNzY19od19lcnJvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbntcblx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp0aWxlKSwgY3NjX2h3X2Vycm9yX3dvcmspO1xuLi4uXG5gYGBcbk9rYXksIHNvIGl0IHRha2VzIGEgYHdvcmtfc3RydWN0YCBhcyBpbnB1dCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBhIGB4ZV90aWxlYCBzdHJ1Y3R1cmUgZnJvbSBpdCB1c2luZyBgY29udGFpbmVyX29mYC4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBwYXJ0IG9mIGEgZGVmZXJyZWQgd29yayBxdWV1ZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdGlsZSBvbiB0aGUgaGFyZHdhcmUuIEl0J3Mgbm90IGEgZGlyZWN0IGNhbGwsIGl0IGlzIHByb2JhYmx5IGEgcmVnaXN0ZXJlZCB0YXNrIHdpdGggdGhlIGtlcm5lbC5cblxuTm93IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIGBjc2NfaHdfZXJyb3Jfd29ya2AgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gdGhpcyBlcnJvciBvY2N1cnMuIEkgd2lsbCBoYXZlIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBgd29ya19zdHJ1Y3RgIGlzIHF1ZXVlZC9zY2hlZHVsZWQsIGFuZCB3aGF0IHRoYXQgY2FsbCBwYXRoIGRvZXMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IGVycm9yIGhhbmRsaW5nIGlzIGludm9sdmVkIGluIHRoZSB3b3JrJ3MgYm9keS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4ODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTQ6MjAuMDYyMzE0MTI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0c3RhdGljIGJvb2wgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcih2b2lkKVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBzaG91bGRfZmFpbChcXHUwMDI2aW5qZWN0X2NzY19od19lcnJvciwgMSk7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdHN0YXRpYyB2b2lkIGNzY19od19lcnJvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMTc2OlxcdHtcXG4gMTc3OlxcdFxcdHN0cnVjdCB4ZV90aWxlICp0aWxlID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqdGlsZSksIGNzY19od19lcnJvcl93b3JrKTtcXG4gMTc4OlxcdFxcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gdGlsZV90b194ZSh0aWxlKTtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0eGVfc3Vydml2YWJpbGl0eV9tb2RlX3J1bnRpbWVfZW5hYmxlKHhlKTtcXG4gMTgxOlxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0c3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyKVxcbiAxODQ6XFx0e1xcbiAxODU6XFx0XFx0Y29uc3QgZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5IHNldmVyaXR5ID0gaHdfZXJyX3RvX3NldmVyaXR5KGh3X2Vycik7XFxuIDE4NjpcXHRcXHRjb25zdCBjaGFyICpzZXZlcml0eV9zdHIgPSBlcnJvcl9zZXZlcml0eVtzZXZlcml0eV07XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHRpbGVfdG9feGUodGlsZSk7XFxuIDE4ODpcXHRcXHRzdHJ1Y3QgeGVfbW1pbyAqbW1pbyA9IFxcdTAwMjZ0aWxlLVxcdTAwM2VtbWlvO1xcbiAxODk6XFx0XFx0dTMyIGJhc2UsIGVycl9iaXQsIGVycl9zcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjIwLjA2MjQyMjg4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDI2NzYxMDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRXZhbHVhdGlvbjogRmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQWhhLCBgY3NjX2h3X2Vycm9yX3dvcmtgIGRvZXNuJ3QgZGlyZWN0bHkgdHJpZ2dlciBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgLlwiIFRoYXQgaGFuZGxlciBpcyB0aGUga2V5LCBhbmQgaXQgbG9va3MgbGlrZSBpdCBnZXRzIGNhbGxlZCBmcm9tIGB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcmAuIFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGF0PyBJdCdzIGFuIGludGVycnVwdCBoYW5kbGVyLCBtZWFuaW5nIGl0J3MgaGFyZHdhcmUtdHJpZ2dlcmVkLiBTeXprYWxsZXIncyBub3QgZ29pbmcgdG8gaW5qZWN0IGhhcmR3YXJlIGludGVycnVwdHMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgc29mdHdhcmUgaW50ZXJmYWNlIHRvIGRvIHNvLlxuXG5JIHRoZW4gdHJhY2VkIHRoZSBjYWxsIGNoYWluIHRvIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YC4gVGhhdCBsZWFkcyB0byBhIGJ1bmNoIG9mIGludGVybmFsIGNhbGxzOiBgeGVfZHJtX3Jhc19ldmVudGAsIGByYXNfc2VuZF9lcnJvcl9ldmVudGAsIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAsIGBnZXRfcGVuZGluZ19ldmVudGAgdmlhIGB4ZV9zeXNjdHJsX2V2ZW50LmNgLCBhbmQgZmluYWxseSB0byBgeGVfc3lzY3RybF93b3JrYCwgd2hpY2ggaXMgYSB3b3JrcXVldWUgaXRlbSwgcG90ZW50aWFsbHkgdHJpZ2dlcmVkIGJ5IGB4ZV9zeXNjdHJsX2lycV9oYW5kbGVyYC4gU28sIGl0J3MgYWxsIGhhcmR3YXJlLWRlcGVuZGVudCwgb3IgYSBzb2Z0d2FyZSBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIHRyaWdnZXJlZC5cblxuVGhlIGNvbmNsdXNpb24gaXMgdGhhdCBzeXprYWxsZXIgbGlrZWx5IHdvbid0IGJlIGFibGUgdG8gdHJpZ2dlciB0aGVzZSBwYXRocyBlYXNpbHkgdW5sZXNzIGl0J3MgZnV6emluZyBhIHZpcnR1YWwgZGV2aWNlIHRoYXQgZW11bGF0ZXMgdGhlIGhhcmR3YXJlIGludGVycnVwdHMsIG9yIGlmIHRoZXJlJ3MgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IGl0IGNhbiB3cml0ZSB0by4gVGhlIHByb21wdCBtZW50aW9uZWQgZGVidWdmcywgYW5kIEkga25vdyBzeXprYWxsZXIgY2FuIHVzZSBkZWJ1Z2ZzIGlmIGl0J3MgYXZhaWxhYmxlLiBIb3dldmVyLCBldmVuIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQsIHRoaXMgcGF0Y2gganVzdCBhZGRzIGEgbmV0bGluayBldmVudCBicm9hZGNhc3QuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQncyBqdXN0IGEgc3RhbmRhcmQgbmV0bGluayBldmVudCBicm9hZGNhc3QuIFRoZSBvdGhlciBsb2dpYyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzZW5kaW5nIHRoZSBlcnJvciBldmVudCBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbnMgYW5kIGNvdW50ZXIgdmFsdWVzLiBUaGlzIGFsbCBmZWVscyB2ZXJ5IHNpbXBsZSwgYW5kIGRlZmluaXRlbHkgaW5hY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHdpdGhvdXQgaGFyZHdhcmUgZXJyb3JzLlxuXG5TaW5jZSB0aGUgcHJvbXB0IHN0YXRlczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIsIGFuZCBgeGVgIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIgKEludGVsIFhlIGdyYXBoaWNzKSwgdGhpcyBjb2RlIHdpbGwgYmUgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBzeXprYWxsZXIgUUVNVS9HQ0Ugc2V0dXAgd2lsbCBub3QgaGF2ZSB0aGUgcmVxdWlyZWQgaGFyZHdhcmUgZXJyb3IgZW11bGF0aW9uLiBJIGtub3cgdGhhdCBzeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgYHZrbXNgIChWaXJ0dWFsIEtNUyksIGJ1dCBgeGVgIGlzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGFuZCB3aWxsIG5vdCBiZSBsb2FkZWQgdW5sZXNzIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IG9yIG1vY2tlZCBhbmQgdGhlIHNldHVwIGlzIG5vdCBzZXQgdXAgdG8gZG8gdGhhdC4gRXZlbiBpZiBpdCdzIGxvYWRlZCwgaGFyZHdhcmUgZXJyb3JzIGFyZSBub3QgdHJpZ2dlcmFibGUgZnJvbSB1c2Vyc3BhY2UuIFNvLCBpdCBhcHBlYXJzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbGFzdCB0aW1lIHRoYXQgdGhlcmUncyBubyBvdGhlciB3YXkgdG8gcmVhY2ggYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCBnaXZlbiBpdCBpcyBgRVhQT1JUX1NZTUJPTGAuIEknbGwgbG9vayB0byBzZWUgaWYgYW55IG90aGVyIGRyaXZlcnMgbWlnaHQgYmUgdXNpbmcgaXQuIEJ1dCBmb3Igbm93LCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogKipXb3J0aEZ1enppbmc9ZmFsc2UqKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTQ6MzQuMzMwMDM1OTE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyNDkwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9yYXNfbmxfZXJyb3JfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYz0yMjI9c3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNTgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNTk6ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNjAtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI3MDppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzEtXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzA5LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjMxMDpFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzExLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTg9dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxNDpcXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTUtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Mj12b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg0LVxcdFxcdFxcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTg3PXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg5LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDozNi40ODI1Mzc1NDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MzI4OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBJJ3ZlIGNvbWUgdG8gYSBmaXJtIGNvbmNsdXNpb24uIFRoaXMgaXNuJ3Qgc29tZXRoaW5nIFN5emthbGxlciBuZWVkcyB0byB3b3JyeSBhYm91dC4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGlzOiBvbmx5IGB4ZWAgaXMgZXZlbiAqdXNpbmcqIHRoaXMgbmV3IG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50LiBBbmQsIGNydWNpYWxseSwgYHhlYCAqb25seSogY2FsbHMgaXQgZnJvbSBpdHMgaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMuIFRoYXQgbWVhbnMsIHJlYWxpc3RpY2FsbHksIGl0J3MgdW5yZWFjaGFibGUuIEl0J3MgY29uZmluZWQgdG8gdGhlIGRlcHRocyBvZiBoYXJkd2FyZSBlcnJvciBoYW5kbGluZy5cblxuVGhlIGV2ZW50LCBgZXJyb3ItZXZlbnRgLCB3aGljaCBpbnRlZ3JhdGVzIGludG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgaXMgdHJpZ2dlcmVkIGJ5IHRoaW5ncyBsaWtlIGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cy4gSSBrbm93IHRoYXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB3aGljaCBpcyB3aGVyZSBTeXprYWxsZXIgdHlwaWNhbGx5IGRvZXMgaXRzIHdvcmssIHRob3NlIHRyaWdnZXJzIGFyZSBqdXN0IG5vdCBnb2luZyB0byBoYXBwZW4uIFlvdSdkIG5lZWQgc29tZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiB0byBldmVuICp0aGluayogYWJvdXQgcmVhY2hpbmcgdGhhdCBjb2RlLiBTbywgcmVhbGx5LCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcsIGZ1enphYmxlIGZ1bmN0aW9uYWxpdHkgdGhhdCBTeXprYWxsZXIgY2FuIGFjY2Vzcy4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gTm8gbmVlZCB0byBkZXZvdGUgYW55IHJlc291cmNlcyB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM2NiwiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTQ6NDIuMDI1ODMwNTY3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGBlcnJvci1ldmVudGAgdG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgYW5kIGludGVncmF0ZXMgaXQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLiBUaGUgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGhhcmR3YXJlIGVycm9ycyBvY2N1ciAoaGFuZGxlZCBpbiBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cywgd2hpY2ggYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZnJvbSB1c2Vyc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGNvZGUgZm9yIHN5emthbGxlciB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGBlcnJvci1ldmVudGAgdG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgYW5kIGludGVncmF0ZXMgaXQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLiBUaGUgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGhhcmR3YXJlIGVycm9ycyBvY2N1ciAoaGFuZGxlZCBpbiBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cywgd2hpY2ggYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZnJvbSB1c2Vyc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGNvZGUgZm9yIHN5emthbGxlciB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q5b5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 15:36:21 +0000 UTC FinishedAt: 2026-07-01 15:54:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBldmVudCBgZXJyb3ItZXZlbnRgIHRvIHRoZSBgZHJtX3Jhc2AgZmFtaWx5IGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlci4gVGhlIGV2ZW50IGlzIGJyb2FkY2FzdGVkIGJ5IHRoZSBrZXJuZWwgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIgKGhhbmRsZWQgaW4gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCkuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFuZCBzeXN0ZW0gY29udHJvbGxlciBldmVudHMsIHdoaWNoIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGZyb20gdXNlcnNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBjb2RlIGZvciBzeXprYWxsZXIgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NzUxOTQyYzg3YzU0ZmM5OTcyNWRjZjY2OThmZjU5ZjBiZTY5YzE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNTo1MzowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5pbmRleCA4M2MyMTg1M2I3NGI2MC4uNDA2ZTRjNDliYWMxZmQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICYjNDM7NTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLlxuIFxuIFlBTUwtYmFzZWQgSW50ZXJmYWNlXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0xMTEsMyAmIzQzOzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7e1wmIzM0O25vZGUtaWRcJiMzNDs6MCwgXCYjMzQ7ZXJyb3ItaWRcJiMzNDs6MX0mIzM5O1xuICAgICBOb25lXG4mIzQzO1xuJiM0MztFeGFtcGxlOiBTdWJzY3JpYmUgdG8gYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXBcbiYjNDM7XG4mIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4mIzQzO1xuJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGpzb25cbiYjNDM7XG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7ZXJyb3ItZXZlbnRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bXNnXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2RldmljZS1uYW1lXCYjMzQ7OiBcJiMzNDswMDAwOjAzOjAwLjBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtaWRcJiMzNDs6IDEsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtbmFtZVwmIzM0OzogXCYjMzQ7dW5jb3JyZWN0YWJsZS1lcnJvcnNcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OiAxLFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtlcnJvci1uYW1lXCYjMzQ7OiBcJiMzNDtlcnJvcl9uYW1lMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZXJyb3ItdmFsdWVcJiMzNDs6IDFcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICB9XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi44YWVkM2Q0NTE1ZTVhZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbkBAIC02OSw2ICYjNDM7NjksMzMgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGVycm9yLWV2ZW50LWF0dHJzXG4mIzQzOyAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZGV2aWNlLW5hbWVcbiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmdcbiYjNDM7ICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBub2RlLWlkXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWlkXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcbiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmdcbiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgJiM0MzsxNTEsMjQgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBlcnJvci1ldmVudFxuJiM0MzsgICAgICBkb2M6IFx1MDAzZS1cbiYjNDM7ICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLlxuJiM0MzsgICAgICAgICAgIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgZGV2aWNlLCBub2RlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxuJiM0MzsgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4mIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzXG4mIzQzOyAgICAgIG1jZ3JwOiBlcnJvci1yZXBvcnRcbiYjNDM7ICAgICAgZXZlbnQ6XG4mIzQzOyAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgIC0gZGV2aWNlLW5hbWVcbiYjNDM7ICAgICAgICAgIC0gbm9kZS1pZFxuJiM0MzsgICAgICAgICAgLSBub2RlLW5hbWVcbiYjNDM7ICAgICAgICAgIC0gZXJyb3ItaWRcbiYjNDM7ICAgICAgICAgIC0gZXJyb3ItbmFtZVxuJiM0MzsgICAgICAgICAgLSBlcnJvci12YWx1ZVxuJiM0MztcbiYjNDM7bWNhc3QtZ3JvdXBzOlxuJiM0MzsgIGxpc3Q6XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uNzdmOTEyYTRkMTAxZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5AQCAtNDEsNiAmIzQzOzQxLDExIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4mIzQzOyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzXG4mIzQzOyAqXG4mIzQzOyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlXG4mIzQzOyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4mIzQzOyAqXG4gICogTm9kZSByZWdpc3RyYXRpb246XG4gICpcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xuQEAgLTE4Niw2ICYjNDM7MTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcbiBcdFx0XHQgICB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtXHUwMDNlZGV2aWNlX25hbWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLVx1MDAzZW5vZGVfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRcdFx0ICAgIHUzMiBlcnJvcl9pZClcbiB7XG5AQCAtMjIyLDYgJiM0MzsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcbiYjNDM7ICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXG4mIzQzOyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yXG4mIzQzOyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvclxuJiM0MzsgKiBAdmFsdWU6IFZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3JcbiYjNDM7ICogQGZsYWdzOiBHRlAgZmxhZ3MgZm9yIG1lbW9yeSBhbGxvY2F0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xuJiM0MztcdHN0cnVjdCBza19idWZmICptc2c7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZXJyb3JfbmFtZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbmxfaGFzX2xpc3RlbmVycyhcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgXHUwMDI2aW5pdF9uZXQsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbiYjNDM7XG4mIzQzO1x0bXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGZsYWdzKTtcbiYjNDM7XHRpZiAoIW1zZylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRpZiAoIWhkcikge1xuJiM0MztcdFx0cmV0ID0gLUVNU0dTSVpFO1xuJiM0MztcdFx0Z290byBmcmVlX21zZztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGNhbmNlbF9tc2c7XG4mIzQzO1xuJiM0MztcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbiYjNDM7XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCwgZmxhZ3MpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2FuY2VsX21zZzpcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4mIzQzO2ZyZWVfbXNnOlxuJiM0MztcdG5sbXNnX2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7XG4mIzQzO1xuIC8qKlxuICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVyc1xuICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuaW5kZXggZGVhMWMxYjI0OTRlODEuLjlkMzEyM2NjOWY5Y2FhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuQEAgLTU4LDYgJiM0Mzs1OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XG4gXHR9LFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZHJtX3Jhc19ubF9tY2dycHNbXSA9IHtcbiYjNDM7XHRbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyBcJiMzNDtlcnJvci1yZXBvcnRcJiMzNDssIH0sXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubmFtZVx0XHQ9IERSTV9SQVNfRkFNSUxZX05BTUUsXG4gXHQudmVyc2lvblx0PSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLFxuQEAgLTY2LDQgJiM0Mzs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubW9kdWxlXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuc3BsaXRfb3BzXHQ9IGRybV9yYXNfbmxfb3BzLFxuIFx0Lm5fc3BsaXRfb3BzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9vcHMpLFxuJiM0MztcdC5tY2dycHNcdFx0PSBkcm1fcmFzX25sX21jZ3JwcyxcbiYjNDM7XHQubl9tY2dycHNcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uYmY3N2NjZTIxOTc0YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5AQCAtMTg1LDYgJiM0MzsxODUsMzggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG4mIzQzOyAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxuJiM0MzsgKiBAc2V2ZXJpdHk6IGVycm9yIHNldmVyaXR5IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxuJiM0MzsgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXJcbiYjNDM7ICogQGZsYWdzOiBmbGFncyBmb3IgYWxsb2NhdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4mIzQzO1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cbiYjNDM7XHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX2RybV9yYXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBcdTAwMjZyYXMtXHUwMDNlbm9kZVtzZXZlcml0eV07XG4mIzQzO1xuJiM0MztcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUsIGZsYWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwmIzM0O2RybV9yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcXG5cJiMzNDssIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeGVfZHJtX3Jhc19pbml0KCkgLSBJbml0aWFsaXplIERSTSBSQVNcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5pbmRleCAzNjVjNzBlOTNlODJmZC4uMmE2OTRiZjY5NDc4NDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5AQCAtNSwxMSAmIzQzOzUsMTQgQEBcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuIHN0cnVjdCB4ZV9kZXZpY2U7XG4gXG4gI2RlZmluZSBmb3JfZWFjaF9lcnJvcl9zZXZlcml0eShpKVx0XFxcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7IGkmIzQzOyYjNDM7KVxuIFxuIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuJiM0Mzt2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xuaW5kZXggNGE0YjM2M2ZjODQ0YjYuLmE4MzNjZWNjNzRlYzViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jXG5AQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lclxuIFx0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbiBcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBlcnJfc3JjO1xuLVx0dTMyIGVycl9iaXQ7XG4mIzQzO1x0dTMyIGVycl9iaXQsIHZhbHVlO1xuIFxuIFx0aWYgKCFJU19ER0ZYKHhlKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ5NSw2ICYjNDM7NDk1LDkgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJcbiBcdFx0XHRndF9od19lcnJvcl9oYW5kbGVyKHRpbGUsIGh3X2VyciwgZXJyb3JfaWQpO1xuIFx0XHRpZiAoZXJyX2JpdCA9PSBYRV9TT0NfRVJST1IpXG4gXHRcdFx0c29jX2h3X2Vycm9yX2hhbmRsZXIodGlsZSwgaHdfZXJyLCBlcnJvcl9pZCk7XG4mIzQzO1xuJiM0MztcdFx0dmFsdWUgPSBhdG9taWNfcmVhZChcdTAwMjZpbmZvW2Vycm9yX2lkXS5jb3VudGVyKTtcbiYjNDM7XHRcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGVycm9yX2lkLCBzZXZlcml0eSwgdmFsdWUsIEdGUF9BVE9NSUMpO1xuIFx0fVxuIFxuIGNsZWFyX3JlZzpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IDQ0ZjRlMWEzNDU1YjdjLi5iNzFkNTEyODU5NTQ1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5AQCAtNzcsNiAmIzQzOzc3LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHU4IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHNldmVyaXR5KSB7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRTtcbiYjNDM7XHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfVU5DT1JSRUNUQUJMRTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4ge1xuIFx0c3dpdGNoIChjb21wb25lbnQpIHtcbkBAIC05NSw2ICYjNDM7MTA3LDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjb21wb25lbnQpIHtcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX0RFVklDRV9NRU1PUlk6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9GQUJSSUM6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXG4ge1xuIFx0c3dpdGNoIChzdGF0dXMpIHtcbkBAIC0xMzEsMTQgJiM0MzsxNjEsNDEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjb21wX3RvX3N0cih1OCBjb21wb25lbnQpXG4gXHRyZXR1cm4geGVfcmFzX2NvbXBvbmVudHNbY29tcG9uZW50XTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0dTggZHJtX3NldmVyaXR5LCBkcm1fY29tcG9uZW50O1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcbiYjNDM7XHRpZiAoZHJtX3NldmVyaXR5ID09IERSTV9YRV9SQVNfRVJSX1NFVl9NQVgpIHtcbiYjNDM7XHRcdHhlX3dhcm4oeGUsIFwmIzM0O3N5c2N0cmw6IHVuZXhwZWN0ZWQgc2V2ZXJpdHkgJXVcXG5cJiMzNDssIHNldmVyaXR5KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuJiM0MztcdGlmIChkcm1fY29tcG9uZW50ID09IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XG4mIzQzO1x0XHR4ZV93YXJuKHhlLCBcJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGNvbXBvbmVudCAldVxcblwmIzM0OywgY29tcG9uZW50KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHhlX3Jhc19nZXRfY291bnRlcih4ZSwgZHJtX3NldmVyaXR5LCBkcm1fY29tcG9uZW50LCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcbiB7XG4gXHRzdHJ1Y3QgeGVfcmFzX3RocmVzaG9sZF9jcm9zc2VkICpwZW5kaW5nID0gKHZvaWQgKilcdTAwMjZyZXNwb25zZS1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqZXJyb3JzID0gcGVuZGluZy1cdTAwM2Vjb3VudGVycztcbiBcdHUzMiBpZCwgbmNvdW50ZXJzID0gcGVuZGluZy1cdTAwM2VuY291bnRlcnM7XG4mIzQzO1x0dTggc2VudCA9IDA7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJlc3BvbnNlLVx1MDAzZWRhdGEpIFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oWEVfUkFTX0NPTVBfTUFYIFx1MDAzZSAoQklUU19QRVJfQllURSAqIHNpemVvZihzZW50KSkpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0xNTQsNiAmIzQzOzIxMSwyNCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFxuIFx0XHR4ZV93YXJuKHhlLCBcJiMzNDtbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXG5cJiMzNDssXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXZlcml0eSAhPSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFKSB7XG4mIzQzO1x0XHRcdHhlX3dhcm4oeGUsIFwmIzM0O3N5c2N0cmw6IHVuZXhwZWN0ZWQgc2V2ZXJpdHkgJXMgKCV1KVxcblwmIzM0Oywgc2V2X3RvX3N0cihzZXZlcml0eSksXG4mIzQzO1x0XHRcdFx0c2V2ZXJpdHkpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50IFx1MDAzZT0gWEVfUkFTX0NPTVBfTUFYKSB7XG4mIzQzO1x0XHRcdHhlX3dhcm4oeGUsIFwmIzM0O3N5c2N0cmw6IHVuZXhwZWN0ZWQgY29tcG9uZW50ICV1XFxuXCYjMzQ7LCBjb21wb25lbnQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xuJiM0MztcdFx0aWYgKHNlbnQgXHUwMDI2IEJJVChjb21wb25lbnQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XG4mIzQzO1xuJiM0MztcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTRiLi44YWJmYjdkMjA3N2I1ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtODAsOSAmIzQzOzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxuIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4gdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuJiM0Mzt7IHJldHVybiAwOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuaW5kZXggMjE4YTNlZTg2ODA1MjcuLmVhYjgyMzFhYTg3Y2JmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzgsMTMgJiM0MzszOCwyOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsXG4mIzQzO1xuJiM0MztcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXG4gXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcbiBcdERSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsXG4mIzQzO1x0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXG4gXG4gXHRfX0RSTV9SQVNfQ01EX01BWCxcbiBcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVFx0XCYjMzQ7ZXJyb3ItcmVwb3J0XCYjMzQ7XG4mIzQzO1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQgYGVycm9yLWV2ZW50YCB0byB0aGUgYGRybV9yYXNgIGZhbWlseSBhbmQgaW50ZWdyYXRlcyBpdCBpbnRvIHRoZSBgeGVgIERSTSBkcml2ZXIuIFRoZSBldmVudCBpcyBicm9hZGNhc3RlZCBieSB0aGUga2VybmVsIHdoZW4gaGFyZHdhcmUgZXJyb3JzIG9jY3VyIChoYW5kbGVkIGluIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGApLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSB0cmlnZ2VyZWQgYnkgaGFyZHdhcmUgaW50ZXJydXB0cyBhbmQgc3lzdGVtIGNvbnRyb2xsZXIgZXZlbnRzLCB3aGljaCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBmcm9tIHVzZXJzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWxseSByZWFjaGFibGUgY29kZSBmb3Igc3l6a2FsbGVyIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NzUxOTQyYzg3YzU0ZmM5OTcyNWRjZjY2OThmZjU5ZjBiZTY5YzE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAxNTo1MzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QKaW5kZXggODNjMjE4NTNiNzRiNjAuLjQwNmU0YzQ5YmFjMWZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdApAQCAtNTYsNiAmIzQzOzU2LDcgQEAgVXNlciBzcGFjZSB0b29scyBjYW46CiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy4KICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aAogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLgogCiBZQU1MLWJhc2VkIEludGVyZmFjZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMSwzICYjNDM7MTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZQogCiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxfSYjMzk7CiAgICAgTm9uZQomIzQzOwomIzQzO0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cAomIzQzOwomIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoCiYjNDM7CiYjNDM7ICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnQKJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjoganNvbgomIzQzOwomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtlcnJvci1ldmVudCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttc2cmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7ZGV2aWNlLW5hbWUmIzM0OzogJiMzNDswMDAwOjAzOjAwLjAmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtaWQmIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtbmFtZSYjMzQ7OiAmIzM0O3VuY29ycmVjdGFibGUtZXJyb3JzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci1pZCYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItbmFtZSYjMzQ7OiAmIzM0O2Vycm9yX25hbWUxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci12YWx1ZSYjMzQ7OiAxCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCmluZGV4IGUxMTMwNTZmOGMwMTZjLi44YWVkM2Q0NTE1ZTVhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCkBAIC02OSw2ICYjNDM7NjksMzMgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IGVycm9yLXZhbHVlCiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLgomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBlcnJvci1ldmVudC1hdHRycwomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGRldmljZS1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBub2RlLWlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGRvYzogSUQgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbm9kZS1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLW5hbWUKJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZwomIzQzOyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBlcnJvci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci12YWx1ZQomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuCiAKIG9wZXJhdGlvbnM6CiAgIGxpc3Q6CkBAIC0xMjQsMyAmIzQzOzE1MSwyNCBAQCBvcGVyYXRpb25zOgogICAgICAgZG86CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBlcnJvci1ldmVudAomIzQzOyAgICAgIGRvYzogJmd0Oy0KJiM0MzsgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuCiYjNDM7ICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb24KJiM0MzsgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuCiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnMKJiM0MzsgICAgICBtY2dycDogZXJyb3ItcmVwb3J0CiYjNDM7ICAgICAgZXZlbnQ6CiYjNDM7ICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAtIGRldmljZS1uYW1lCiYjNDM7ICAgICAgICAgIC0gbm9kZS1pZAomIzQzOyAgICAgICAgICAtIG5vZGUtbmFtZQomIzQzOyAgICAgICAgICAtIGVycm9yLWlkCiYjNDM7ICAgICAgICAgIC0gZXJyb3ItbmFtZQomIzQzOyAgICAgICAgICAtIGVycm9yLXZhbHVlCiYjNDM7CiYjNDM7bWNhc3QtZ3JvdXBzOgomIzQzOyAgbGlzdDoKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMKaW5kZXggZDZlYWIyOWExMzk0Y2EuLjc3ZjkxMmE0ZDEwMWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMKQEAgLTQxLDYgJiM0Mzs0MSwxMSBAQAogICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC4KICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuCiAgKgomIzQzOyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzCiYjNDM7ICoKJiM0MzsgKiA1LiBFUlJPUl9FVkVOVDogUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS4gVGhlIGV2ZW50IGNvbnRhaW5zIGRldmljZSwgbm9kZQomIzQzOyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuCiYjNDM7ICoKICAqIE5vZGUgcmVnaXN0cmF0aW9uOgogICoKICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zCkBAIC0xODYsNiAmIzQzOzE5MSwzNCBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsCiAJCQkgICB2YWx1ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FLCBub2RlLSZndDtkZXZpY2VfbmFtZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLSZndDtpZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtJmd0O25vZGVfbmFtZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsCiAJCQkgICAgdTMyIGVycm9yX2lkKQogewpAQCAtMjIyLDYgJiM0MzsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLAogCXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnQKJiM0MzsgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAZXJyb3JfaWQ6IElEIG9mIHRoZSBlcnJvcgomIzQzOyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvcgomIzQzOyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvcgomIzQzOyAqIEBmbGFnczogR0ZQIGZsYWdzIGZvciBtZW1vcnkgYWxsb2NhdGlvbgomIzQzOyAqCiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwKJiM0MzsJCQkgICB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmxfaW5mbyBpbmZvOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpoZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZXJyb3JfbmFtZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoIWdlbmxfaGFzX2xpc3RlbmVycygmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCAmYW1wO2luaXRfbmV0LCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ2VubF9pbmZvX2luaXRfbnRmKCZhbXA7aW5mbywgJmFtcDtkcm1fcmFzX25sX2ZhbWlseSwgRFJNX1JBU19DTURfRVJST1JfRVZFTlQpOwomIzQzOwomIzQzOwltc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgZmxhZ3MpOwomIzQzOwlpZiAoIW1zZykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwloZHIgPSBnZW5sbXNnX2lwdXQobXNnLCAmYW1wO2luZm8pOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBmcmVlX21zZzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2FuY2VsX21zZzsKJiM0MzsKJiM0MzsJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwomIzQzOwlnZW5sbXNnX211bHRpY2FzdCgmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULCBmbGFncyk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NhbmNlbF9tc2c6CiYjNDM7CWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKJiM0MztmcmVlX21zZzoKJiM0MzsJbmxtc2dfZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpOwomIzQzOwogLyoqCiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnMKICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCmluZGV4IGRlYTFjMWIyNDk0ZTgxLi45ZDMxMjNjYzlmOWNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCkBAIC01OCw2ICYjNDM7NTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCX0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0gewomIzQzOwlbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyAmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7LCB9LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCS5uYW1lCQk9IERSTV9SQVNfRkFNSUxZX05BTUUsCiAJLnZlcnNpb24JPSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLApAQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCS5zcGxpdF9vcHMJPSBkcm1fcmFzX25sX29wcywKIAkubl9zcGxpdF9vcHMJPSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSwKJiM0MzsJLm1jZ3JwcwkJPSBkcm1fcmFzX25sX21jZ3JwcywKJiM0MzsJLm5fbWNncnBzCT0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAomIzQzO2VudW0gewomIzQzOwlEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCwKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTsKIAogI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwppbmRleCA3OTM3ZDhiYTBlZDljZS4uYmY3N2NjZTIxOTc0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwpAQCAtMTg1LDYgJiM0MzsxODUsMzggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlCiYjNDM7ICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSAmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSkKJiM0MzsgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXIKJiM0MzsgKiBAZmxhZ3M6IGZsYWdzIGZvciBhbGxvY2F0aW9uCiYjNDM7ICoKJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLgomIzQzOyAqLwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tzZXZlcml0eV07CiYjNDM7CXN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybV9yYXMgaXMgZW5hYmxlZCAqLwomIzQzOwlpZiAoIXhlLSZndDtpbmZvLmhhc19kcm1fcmFzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlub2RlID0gJmFtcDtyYXMtJmd0O25vZGVbc2V2ZXJpdHldOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkcm1fZXJyX3JhdGVsaW1pdGVkKCZhbXA7eGUtJmd0O2RybSwgJiMzNDtkcm1fcmFzIGVycm9yLWV2ZW50IGZhaWxlZDogJWQgZm9yICVzICVzXG4mIzM0OywgcmV0LAomIzQzOwkJCQkgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBUwogICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCmluZGV4IDM2NWM3MGU5M2U4MmZkLi4yYTY5NGJmNjk0Nzg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCkBAIC01LDExICYjNDM7NSwxNCBAQAogI2lmbmRlZiBfWEVfRFJNX1JBU19IXwogI2RlZmluZSBfWEVfRFJNX1JBU19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiBzdHJ1Y3QgeGVfZGV2aWNlOwogCiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpCVwKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspCiAKIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jCmluZGV4IDRhNGIzNjNmYzg0NGI2Li5hODMzY2VjYzc0ZWM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMKQEAgLTQzMiw3ICYjNDM7NDMyLDcgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXIKIAlzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gJmFtcDt4ZS0mZ3Q7cmFzOwogCXN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtJmd0O2luZm9bc2V2ZXJpdHldOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGVycl9zcmM7Ci0JdTMyIGVycl9iaXQ7CiYjNDM7CXUzMiBlcnJfYml0LCB2YWx1ZTsKIAogCWlmICghSVNfREdGWCh4ZSkpCiAJCXJldHVybjsKQEAgLTQ5NSw2ICYjNDM7NDk1LDkgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXIKIAkJCWd0X2h3X2Vycm9yX2hhbmRsZXIodGlsZSwgaHdfZXJyLCBlcnJvcl9pZCk7CiAJCWlmIChlcnJfYml0ID09IFhFX1NPQ19FUlJPUikKIAkJCXNvY19od19lcnJvcl9oYW5kbGVyKHRpbGUsIGh3X2VyciwgZXJyb3JfaWQpOwomIzQzOwomIzQzOwkJdmFsdWUgPSBhdG9taWNfcmVhZCgmYW1wO2luZm9bZXJyb3JfaWRdLmNvdW50ZXIpOwomIzQzOwkJeGVfZHJtX3Jhc19ldmVudCh4ZSwgZXJyb3JfaWQsIHNldmVyaXR5LCB2YWx1ZSwgR0ZQX0FUT01JQyk7CiAJfQogCiBjbGVhcl9yZWc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKaW5kZXggNDRmNGUxYTM0NTViN2MuLmI3MWQ1MTI4NTk1NDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC03Nyw2ICYjNDM7NzcsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpCiAJfQogfQogCiYjNDM7c3RhdGljIHU4IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHNldmVyaXR5KSB7CiYjNDM7CWNhc2UgWEVfUkFTX1NFVl9DT1JSRUNUQUJMRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7CiYjNDM7CWNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KQogewogCXN3aXRjaCAoY29tcG9uZW50KSB7CkBAIC05NSw2ICYjNDM7MTA3LDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpCiAJfQogfQogCiYjNDM7c3RhdGljIHU4IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoY29tcG9uZW50KSB7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0RFVklDRV9NRU1PUlk7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFOwomIzQzOwljYXNlIFhFX1JBU19DT01QX1BDSUU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9QQ0lFOwomIzQzOwljYXNlIFhFX1JBU19DT01QX0ZBQlJJQzoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0ZBQlJJQzsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9NQVg7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cykKIHsKIAlzd2l0Y2ggKHN0YXR1cykgewpAQCAtMTMxLDE0ICYjNDM7MTYxLDQxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY29tcF90b19zdHIodTggY29tcG9uZW50KQogCXJldHVybiB4ZV9yYXNfY29tcG9uZW50c1tjb21wb25lbnRdOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpCiYjNDM7ewomIzQzOwl1OCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQ7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7CiYjNDM7CWlmIChkcm1fc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkgewomIzQzOwkJeGVfd2Fybih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIHNldmVyaXR5ICV1XG4mIzM0Oywgc2V2ZXJpdHkpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpOwomIzQzOwlpZiAoZHJtX2NvbXBvbmVudCA9PSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkgewomIzQzOwkJeGVfd2Fybih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGNvbXBvbmVudCAldVxuJiMzNDssIGNvbXBvbmVudCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0geGVfcmFzX2dldF9jb3VudGVyKHhlLCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQsICZhbXA7dmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlLCBHRlBfS0VSTkVMKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCQkJCSAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSkKIHsKIAlzdHJ1Y3QgeGVfcmFzX3RocmVzaG9sZF9jcm9zc2VkICpwZW5kaW5nID0gKHZvaWQgKikmYW1wO3Jlc3BvbnNlLSZndDtkYXRhOwogCXN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctJmd0O2NvdW50ZXJzOwogCXUzMiBpZCwgbmNvdW50ZXJzID0gcGVuZGluZy0mZ3Q7bmNvdW50ZXJzOwomIzQzOwl1OCBzZW50ID0gMDsKIAogCUJVSUxEX0JVR19PTihzaXplb2YocmVzcG9uc2UtJmd0O2RhdGEpICZsdDsgc2l6ZW9mKCpwZW5kaW5nKSk7CiYjNDM7CUJVSUxEX0JVR19PTihYRV9SQVNfQ09NUF9NQVggJmd0OyAoQklUU19QRVJfQllURSAqIHNpemVvZihzZW50KSkpOwogCXhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7CiAKIAlpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgJmd0OyBYRV9SQVNfTlVNX0NPVU5URVJTKQpAQCAtMTU0LDYgJiM0MzsyMTEsMjQgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwKIAogCQl4ZV93YXJuKHhlLCAmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxuJiMzNDssCiAJCQljb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiYjNDM7CiYjNDM7CQlpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkgewomIzQzOwkJCXhlX3dhcm4oeGUsICYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXG4mIzM0Oywgc2V2X3RvX3N0cihzZXZlcml0eSksCiYjNDM7CQkJCXNldmVyaXR5KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChjb21wb25lbnQgJmd0Oz0gWEVfUkFTX0NPTVBfTUFYKSB7CiYjNDM7CQkJeGVfd2Fybih4ZSwgJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIGNvbXBvbmVudCAldVxuJiMzNDssIGNvbXBvbmVudCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJaWYgKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzZW50IHw9IEJJVChjb21wb25lbnQpOwomIzQzOwomIzQzOwkJcmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCmluZGV4IDBiZWVkZTNkZGM0ZTRiLi44YWJmYjdkMjA3N2I1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaApAQCAtODAsOSAmIzQzOzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpCiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpOwogdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTsKJiM0MztpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsCiYjNDM7CQkJICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKQomIzQzO3sgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKaW5kZXggMjE4YTNlZTg2ODA1MjcuLmVhYjgyMzFhYTg3Y2JmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaApAQCAtMzgsMTMgJiM0MzszOCwyOCBAQCBlbnVtIHsKIAlEUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggLSAxKQogfTsKIAomIzQzO2VudW0gewomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUgPSAxLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLAomIzQzOwomIzQzOwlfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVgsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYIC0gMSkKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJRFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsCiAJRFJNX1JBU19DTURfR0VUX0VSUk9SX0NPVU5URVIsCiAJRFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUiwKJiM0MzsJRFJNX1JBU19DTURfRVJST1JfRVZFTlQsCiAKIAlfX0RSTV9SQVNfQ01EX01BWCwKIAlEUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKQogfTsKIAomIzQzOyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlQJJiMzNDtlcnJvci1yZXBvcnQmIzM0OwomIzQzOwogI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQ3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgRFJNIFJBUyBFcnJvciBFdmVudCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGFuIGBlcnJvci1ldmVudGAgbXVsdGljYXN0IGdyb3VwIHRvIHRoZSBgZHJtX3Jhc2AgbmV0bGluayBmYW1pbHkuIEl0IGFkZHMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgYW5kIHNlbmRzIHRoZXNlIG5ldGxpbmsgbXVsdGljYXN0IG1lc3NhZ2VzLiBUaGlzIGlzIGludGVncmF0ZWQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nPwoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCB0YWtlcyBhIGJ1bmNoIG9mIGFyZ3VtZW50cywgYnVpbGRzIGEgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhlbiB1c2VzIGBnZW5sbXNnX211bHRpY2FzdGAgdG8gc2VuZCBpdC4gVGhpcyBzb3VuZHMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyBpcyAqdHJpZ2dlcmVkKiBieSBoYXJkd2FyZSBlcnJvcnMgd2l0aGluIHRoZSBgeGVgIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIHJlbGlhYmx5IHRyaWdnZXIgdGhvc2UgaGFyZHdhcmUgZXJyb3JzPyBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGlzIGNhbGxlZCBvbiBhIGhhcmR3YXJlIGVycm9yLCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCBpcyBjYWxsZWQgb24gYSBzeXNjdHJsIGV2ZW50IHJlc3BvbnNlLiBUaGUgY29tcGxleGl0eSBoZXJlIGlzIHdoZXRoZXIgd2UgY2FuIGNvbnRyb2wgdGhvc2UgZXZlbnRzLiBMaWtlbHkgbm90IGRpcmVjdGx5LCBidXQgd2UgKmNhbiogc3Vic2NyaWJlIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXAuCgpUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIG11bHRpY2FzdCBncm91cCBjYWxsZWQgYGVycm9yLXJlcG9ydGAuIFdlIHN1YnNjcmliZSB0byBtdWx0aWNhc3QgZ3JvdXBzIHVzaW5nIGBzZXRzb2Nrb3B0KGZkLCBTT0xfTkVUTElOSywgTkVUTElOS19BRERfTUVNQkVSU0hJUCwgLi4uKWAuIENyaXRpY2FsbHksIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgKmFkZCogYW55IG5ldyBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiAqc2VuZCosIGV4Y2VwdCBtYXliZSBgZXJyb3ItZXZlbnRgIGlzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kLgoKV2FpdCwgbG9va2luZyBjbG9zZXIsIGBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVGAgaXMgaW5kZWVkIGFkZGVkLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiwgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxgLiBBaCwgaXQmIzM5O3MgZXhwbGljaXRseSBkZWZpbmVkIGFzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kIHVzZXJzcGFjZSBjYW4gc2VuZC4gSXQmIzM5O3MgYW4gZXZlbnQgdXNlcnNwYWNlICpyZWNlaXZlcyouIFRoZSBkZXNjcmlwdGlvbiBzYXlzIGl0IHJlcG9ydHMgYW4gZXJyb3IgZXZlbnQgaW5jbHVkaW5nIGRldmljZSwgbm9kZSwgYW5kIGVycm9yIGluZm9ybWF0aW9uLiBUaGUgWUFNTCBmaWxlIGNvbmZpcm1zIHRoZXJlIGFyZSBubyBgZG9gIG9yIGBkdW1wYCBvcGVyYXRpb25zIGRlZmluZWQgZm9yIGBlcnJvci1ldmVudGAsIG9ubHkgYGV2ZW50YC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUga2VybmVsIHNpZGUgZG9lc24mIzM5O3QgZXhwb3NlIHRoaXMgY29tbWFuZCBmb3Igc2VuZGluZyB2aWEgdXNlcnNwYWNlLiBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY2AgZm9yIGBkcm1fcmFzX25sX29wc2AuIEFuZCwgeWVzLCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBhZGQgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zLiBUaHVzLCB1c2Vyc3BhY2UgY2Fubm90ICpzZW5kKiB0aGlzIGNvbW1hbmQgdG8gdGhlIGtlcm5lbC4KClRoZXJlZm9yZSwgdGhlIG9ubHkgdGhpbmcgdXNlcnNwYWNlIGNhbiBkbyBpcyBzdWJzY3JpYmUgdG8gdGhlIGBlcnJvci1yZXBvcnRgIG11bHRpY2FzdCBncm91cC4gVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIG5ldGxpbmsgY29kZSwgd2hpY2ggaXMgd2VsbC10cm9kZGVuIGdyb3VuZC4gVGhlICpuZXcqIGNvZGUgaXMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyIHdoZW4gaGFyZHdhcmUgZXJyb3JzIG9jY3VyLgoKQ2FuIHN5emthbGxlciByZWxpYWJseSB0cmlnZ2VyIHRob3NlIGB4ZWAgaGFyZHdhcmUgZXJyb3JzPyBQcm9iYWJseSBub3QgZWFzaWx5LCB1bmxlc3MgdGhlcmUmIzM5O3MgYSB3YXkgdG8gaW5qZWN0IHRoZW0uIEV2ZW4gaWYgaXQgKmNhbiogdHJpZ2dlciB0aGVtLCBhbGwgdGhlIGFkZGVkIGNvZGUgZG9lcyBpcyBjb25zdHJ1Y3QgYW5kIGJyb2FkY2FzdCBhIG5ldGxpbmsgbWVzc2FnZS4KClNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBUaGUgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBpbiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgbG9va3MgcHJldHR5IHN0YW5kYXJkLiBUaGVyZSBpc24mIzM5O3QgbXVjaCBjb21wbGV4aXR5IHRoZXJlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBqdXN0IHBhY2thZ2luZyB1cCBkYXRhIHRoYXQgdGhlIGB4ZWAgZHJpdmVyIGFscmVhZHkga25vd3MuIExldCBtZSBjaGVjayBpZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgdHJpZ2dlcmVkIGJ5IGFueSB1c2Vyc3BhY2UgYWN0aW9uLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9yYXNfbmxfZXJyb3JfZXZlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYz0yMjI9c3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjU4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNTk6ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2MC0gKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2OS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6MjcwOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjcxLVx0XHRcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0zMDktfVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzozMTA6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzExLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM9MTk4PXZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMjEzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoyMTQ6XHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxNS1cdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTgyPXZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODM6aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg0LVx0XHRcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODktXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGB4ZV9kcm1fcmFzX2V2ZW50YCBDYWxsZXJzKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGB4ZV9kcm1fcmFzX2V2ZW50YCwgaXMgb25seSBjYWxsZWQgZnJvbSBvbmUgcGxhY2UuIFRoYXQmIzM5O3MgYWN0dWFsbHkgYSBwcmV0dHkgZ29vZCBzdGFydGluZyBwb2ludCwgc2F2ZXMgbWUgc29tZSB0aW1lLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBgeGVfZHJtX3Jhc19ldmVudGAgaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIHRoZSBmbG93IGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgbG9jYXRpb24gb2YgdGhhdCBzaW5nbGUgY2FsbCB0byBwcm9wZXJseSBhbmFseXplIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGVfZHJtX3Jhc19ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jPTE1Nz1zdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxODk6ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5MC0gKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5Ny0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTk4OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTkte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmg9MTU9aW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oOjE2OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmgtMTctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NDI3PXN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2Vycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy00OTktXHRcdHZhbHVlID0gYXRvbWljX3JlYWQoXHUwMDI2aW5mb1tlcnJvcl9pZF0uY291bnRlcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MDA6XHRcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGVycm9yX2lkLCBzZXZlcml0eSwgdmFsdWUsIEdGUF9BVE9NSUMpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTAxLVx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xNjQ9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE4NS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoxODY6XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xODctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTI1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIEVycm9yIFNpZ25hbCoqCgpSaWdodCwgc28gdGhpcyBmdW5jdGlvbiwgdGhlIG9uZSBpbiBxdWVzdGlvbiwgaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBsaWtlbHkgYSBjZW50cmFsIHBvaW50IGZvciBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZXJyb3JzLCBlaXRoZXIgZGlyZWN0bHkgZnJvbSB0aGUgc291cmNlIGl0c2VsZiBvciBmcm9tIHRoZSBSQVMgKFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSkgc2lkZSBvZiB0aGluZ3MuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgY2FsbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEl0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBmaW5kIHRoZSByb290IGNhdXNlIG9mIHRoZXNlIGVycm9ycyBieSB1bmRlcnN0YW5kaW5nIHRoZSBzb3VyY2Ugb2YgdGhlIGNhbGxzLiBJcyBpdCBjb21pbmcgZGlyZWN0bHkgZnJvbSBhbiBpbnRlcnJ1cHQ/IE1heWJlIGEgc29mdHdhcmUtaW5pdGlhdGVkIGNoZWNrPyBJcyB0aGlzIGEgaGlnaC1wcmlvcml0eSBpbnRlcnJ1cHQgaGFuZGxlcj8gQWxsIG9mIHRoZXNlIHF1ZXN0aW9ucyBhcmUgdml0YWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod19lcnJvcl9zb3VyY2VfaGFuZGxlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0zNzA9c3RhdGljIHZvaWQgc29jX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyNi1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjQyNzpzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy00Mjgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjctXHRcdGlmIChtYXN0ZXJfY3RsIFx1MDAyNiBFUlJPUl9JUlEoaHdfZXJyKSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyODpcdFx0XHRod19lcnJvcl9zb3VyY2VfaGFuZGxlcih0aWxlLCBod19lcnIpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTI5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjg4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEVycm9yIEhhbmRsaW5nIFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSBzdGFydGluZyBhdCBgeGVfaHdfZXJyb3JfaXJxX2hhbmRsZXJgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIHRyaWdnZXIgY29tZXMgZnJvbS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBwcm9jZXNzLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgYHJhc19zZW5kX2Vycm9yX2V2ZW50YCBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIGZyb20gaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGVycm9yIHJlcG9ydGluZyBhbmQgaGFuZGxpbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBmaXRzIGludG8gdGhlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jhc19zZW5kX2Vycm9yX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xNTY9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjb21wX3RvX3N0cih1OCBjb21wb25lbnQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE2My1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoxNjQ6c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTY1LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MTg5PXZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTIzMC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyMzE6XHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0yMzItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb3VudGVyIFRocmVzaG9sZCBDcm9zcyBFdmVudCoqCgpBbHJpZ2h0LCBzbyBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGlzIHRoZSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIuIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBldmVyeSBjYWxsIHNpdGUgZm9yIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAuIFVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgY3JpdGljYWwgZm9yIGdyYXNwaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGV2ZW50IOKAkyBJIG5lZWQgdG8ga25vdyAqd2hhdCogaXMgbW9uaXRvcmluZyAqd2hhdCosIGFuZCBzcGVjaWZpY2FsbHkgKndoeSogdGhpcyB0aHJlc2hvbGQgd2FzIGNyb3NzZWQuIERpdmluZyBpbnRvIHRoZSBjYWxsIGdyYXBoIGlzIHRoZSBiZXN0IHdheSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgcHJvY2VzcyBmbG93IGFuZCBwaW5wb2ludGluZyB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGFsZXJ0LiBUaGlzIGlzIGFsbCBhYm91dCBnYXRoZXJpbmcgdGhlIGluaXRpYWwgdGVsZW1ldHJ5IHRvIGZvcm0gYSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MTY0PXN0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xODgtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MTg5OnZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTkwLVx0XHRcdFx0ICAgICAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMj1zdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0xMy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaDoxNDp2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE1LVx0XHRcdFx0ICAgICAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jPTE1PXN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMzgtXHRcdGlmIChyZXNwb25zZS1cdTAwM2VldmVudCA9PSBYRV9TWVNDVFJMX0VWRU5UX1RIUkVTSE9MRF9DUk9TU0VEKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzozOTpcdFx0XHR4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZCh4ZSwgcmVzcG9uc2UpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy00MC1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc0MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgWGUgU3lzdGVtIENvbnRyb2wgRXZlbnRzKioKClJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB4ZV9zeXNjdHJsX2V2ZW50LmNgIGZpbGUgYWdhaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggdG8gdGhpcyBgZ2V0X3BlbmRpbmdfZXZlbnRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIHNvIEkgY2FuIGdyYXNwIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBhbmQgaWRlbnRpZnkgdGhlIHJvb3QgY2F1c2UuIExldCYjMzk7cyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBgZ2V0X3BlbmRpbmdfZXZlbnRgIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCB3YXkgdG8gb3JpZW50IG15c2VsZiB3aGVuIGRlYnVnZ2luZyBzdWNoIGEgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9wZW5kaW5nX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjE1OnN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xNi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz03MD12b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtODYtXHRndWFyZChtdXRleCkoXHUwMDI2c2MtXHUwMDNlZXZlbnRfbG9jayk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjg3Olx0Z2V0X3BlbmRpbmdfZXZlbnQoc2MsIFx1MDAyNmNvbW1hbmQpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy04OC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYz0zODc5PXN0YXRpYyB2b2lkIHFlZF9pb3ZfcHJvY2Vzc19tYnhfcmVxKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmMtNDAwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmM6NDAwNDpzdGF0aWMgdm9pZCBxZWRfaW92X3BmX2dldF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbiwgdTY0ICpldmVudHMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQwMDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmM9NDkzMj1zdGF0aWMgdm9pZCBxZWRfaGFuZGxlX3ZmX21zZyhzdHJ1Y3QgcWVkX2h3Zm4gKmh3Zm4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYy00OTQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYzo0OTQ2Olx0cWVkX2lvdl9wZl9nZXRfcGVuZGluZ19ldmVudHMoaHdmbiwgZXZlbnRzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmMtNDk0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgeGVfc3lzY3RybF9ldmVudGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB4ZV9zeXNjdHJsX2V2ZW50YCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3Igc3lzdGVtIGNvbnRyb2wgZXZlbnRzLiBUaGUgZnVuY3Rpb24gY2FsbCB0cmVlIHN1Z2dlc3RzIGl0IGluaXRpYXRlcyBhIGNhbGwgdG8gYGdldF9wZW5kaW5nX2V2ZW50YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcHJvYmFibHkgZ3JhYmJpbmcgdGhlIG5leHQgY29udHJvbCBhY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQuIE15IG5leHQgc3RlcCBoZXJlIGlzIGRlZmluaXRlbHkgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgeGVfc3lzY3RybF9ldmVudGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20uIEtub3dpbmcgdGhlIGVudHJ5IHBvaW50cyB3aWxsIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBzaG91bGQgaGlnaGxpZ2h0IHRoZSBldmVudCBzb3VyY2UgYW5kIHRoZSBicm9hZGVyIGZ1bmN0aW9uYWxpdHkgYWZmZWN0ZWQgYnkgdGhlIGV2ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZV9zeXNjdHJsX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZT0zNT14ZS15ICYjNDM7PSB4ZV9iYi5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTEyOC1cdHhlX3N5c2N0cmwubyBcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjEyOTpcdHhlX3N5c2N0cmxfZXZlbnQubyBcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTEzMC1cdHhlX3N5c2N0cmxfbWFpbGJveC5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTEyLSNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmwuaFwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjEzOiNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaFwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE0LSNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmxfbWFpbGJveC5oXCYjMzQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jPTE4OT12b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjE5MDpcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xOTEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMT1zdHJ1Y3QgeGVfZGV2aWNlO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjEyOnN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTEzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oPTE0PXZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg6MTU6XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE2LWludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmM9NDE9c3RhdGljIHZvaWQgeGVfc3lzY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5jLTQ2LVx0Z3VhcmQoeGVfcG1fcnVudGltZSkoeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYzo0NzpcdHhlX3N5c2N0cmxfZXZlbnQoc2MpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYy00OC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuaD0xND1zdGF0aWMgaW5saW5lIHN0cnVjdCB4ZV9kZXZpY2UgKnNjX3RvX3hlKHN0cnVjdCB4ZV9zeXNjdHJsICpzYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5oLTE4LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuaDoxOTp2b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmgtMjAtaW50IHhlX3N5c2N0cmxfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xMC0jaW5jbHVkZSBcJiMzNDt4ZV9zeXNjdHJsLmhcJiMzNDtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6MTE6I2luY2x1ZGUgXCYjMzQ7eGVfc3lzY3RybF9ldmVudF90eXBlcy5oXCYjMzQ7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTEyLSNpbmNsdWRlIFwmIzM0O3hlX3N5c2N0cmxfbWFpbGJveC5oXCYjMzQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz0xNT1zdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCAqY29tbWFuZClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTYte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzoxNzpcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSA9IGNvbW1hbmQtXHUwMDNlZGF0YV9vdXQ7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTE4LVx0c3RydWN0IHhlX2RldmljZSAqeGUgPSBzY190b194ZShzYyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz01Mj1zdGF0aWMgdm9pZCBldmVudF9yZXF1ZXN0X3ByZXBhcmUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyICpoZWFkZXIsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjUzOlx0XHRcdFx0ICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy01NC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy02NC0vKipcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NjU6ICogeGVfc3lzY3RybF9ldmVudCgpIC0gSGFuZGxlciBmb3IgU3lzdGVtIENvbnRyb2xsZXIgZXZlbnRzXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTY2LSAqIEBzYzogU3lzdGVtIENvbnRyb2xsZXIgaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTY5LSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzo3MDp2b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03MS17XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTcyLVx0c3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kIGNvbW1hbmQgPSB7fTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NzM6XHRzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSByZXNwb25zZSA9IHt9O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzo3NDpcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03NS1cdHN0cnVjdCB4ZV9zeXNjdHJsX2FwcF9tc2dfaGRyIGhlYWRlciA9IHt9O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMTYtLyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjE3OiAqIGVudW0geGVfc3lzY3RybF9ldmVudCAtIEV2ZW50cyByZXBvcnRlZCBieSBTeXN0ZW0gQ29udHJvbGxlclxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0xOC0gKlxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMjAtICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjIxOmVudW0geGVfc3lzY3RybF9ldmVudCB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTIyLVx0WEVfU1lTQ1RSTF9FVkVOVF9USFJFU0hPTERfQ1JPU1NFRFx0PSAweDAxLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMjUtLyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjI2OiAqIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgcGVuZGluZyBldmVudFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yNy0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6Mjg6c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVxdWVzdCB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTI5LVx0LyoqIEB2ZWN0b3I6IE1TSS1YIHZlY3RvciB0aGF0IHdhcyB0cmlnZ2VyZWQgKi9cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTM5LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaDo0MDogKiBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAtIFJlc3BvbnNlIHN0cnVjdHVyZSBmb3IgcGVuZGluZyBldmVudFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC00MS0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6NDI6c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2Uge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC00My1cdC8qKiBAY291bnQ6IFBlbmRpbmcgZXZlbnQgY291bnQgYWZ0ZXIgdGhpcyByZXNwb25zZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB4ZV9zeXNjdHJsX2V2ZW50YCBQYXRod2F5IGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgeGVfc3lzY3RybF9ldmVudGAgaXMgY2FsbGVkIGZyb20gYHhlX3N5c2N0cmxfd29ya2AsIHdoaWNoIGlzIGEgd29ya3F1ZXVlIGl0ZW0uIFRoYXQgd29yayBpcyBpbml0aWF0ZWQgYnkgdGhlIFN5c3RlbSBDb250cm9sbGVyIGhhcmR3YXJlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIHBvaW50PyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIG5ldGxpbmsgbWVzc2FnZXMsIGJ1dCBpbiB0aGlzIHNjZW5hcmlvLCB0aGUgbmV0bGluayBtZXNzYWdlICh0aGUgZW5kIGdvYWwgaGVyZSkgaXMgc2VudCAqYnkqIHRoZSBrZXJuZWwgaXRzZWxmLCBhcyBhIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQuIFNvLCBjYW4gc3l6a2FsbGVyIGRpcmVjdGx5IHRyaWdnZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZXZlbnQ/IFByb2JhYmx5IG5vdDsgdXN1YWxseSwgaXQgZG9lc24mIzM5O3QgaGF2ZSB0aGF0IGxldmVsIG9mIGNvbnRyb2wgdW5sZXNzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgZGV2aWNlIG9yIGNhbiBzb21laG93IGluamVjdCB0aGUgZXZlbnQuCgpNeSBwcmltYXJ5IGZvY3VzIHNoaWZ0cyB0byBmaW5kaW5nIGFsdGVybmF0ZSBwYXRocy4gQXJlIHRoZXJlIG90aGVyIHdheXMgdG8gdHJpZ2dlciBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGA/IEhtbSwgbm8sIGl0JiMzOTtzIHByZXR0eSBsb2NrZWQgZG93bi4gSXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgeGVfZHJtX3Jhc19ldmVudGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAuIFRoZXNlIGFyZSBib3RoIGhhcmR3YXJlIGVycm9yIGhhbmRsZXJzIOKAkyB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSByZXNwb25kaW5nIHRvIHNwZWNpZmljIGhhcmR3YXJlIGVycm9ycy4KClNvLCB0aGUgbmV3IGNvZGUgcGF0aCBib2lscyBkb3duIHRvOgoKMS4gIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YDogY29uc3RydWN0cyBhbmQgYnJvYWRjYXN0cyBhIG5ldGxpbmsgbWVzc2FnZS4KMi4gIGB4ZV9kcm1fcmFzX2V2ZW50YDogY2FsbHMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLgozLiAgYHJhc19zZW5kX2Vycm9yX2V2ZW50YDogY2FsbHMgYHhlX2RybV9yYXNfZXZlbnRgLgo0LiAgYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYDogYWxzbyBjYWxscyBgeGVfZHJtX3Jhc19ldmVudGAuCjUuICBUaGVyZSYjMzk7cyBhbHNvIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwIHJlZ2lzdHJhdGlvbi4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IElmIHN5emthbGxlciBjYW4mIzM5O3QgdHJpZ2dlciB0aGUgaGFyZHdhcmUgZXJyb3JzIGRpcmVjdGx5LCB0aGVuIHdlJiMzOTtyZSBuZXZlciBnb2luZyB0byBoaXQgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLiBUaGF0IG1ha2VzIGl0IGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgdW5sZXNzIHdlIGNhbiBzb21laG93IGZvcmNlIG9yIGluamVjdCB0aGUgZXJyb3IgY29uZGl0aW9ucy4KCldhaXQgYSBzZWNvbmQuLi5pcyB0aGVyZSBhbnkga2luZCBvZiBkZWJ1Z2ZzIGludGVyZmFjZSwgb3IgYW55dGhpbmcgbGlrZSB0aGF0LCBpbiB0aGUgYHhlYCBzdWJzeXN0ZW0gdGhhdCBtaWdodCBsZXQgbWUgaW5qZWN0IHRoZXNlIGtpbmRzIG9mIGVycm9ycz8gVGhhdCB3b3VsZCBjaGFuZ2UgZXZlcnl0aGluZy4gVGltZSB0byBjaGVjayBmb3IgZXJyb3IgaW5qZWN0aW9uIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3X2Vycm9yX3NvdXJjZV9oYW5kbGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTM3MD1zdGF0aWMgdm9pZCBzb2NfaHdfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNDI2LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6NDI3OnN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycilcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyOC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NTE5PXZvaWQgeGVfaHdfZXJyb3JfaXJxX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IHUzMiBtYXN0ZXJfY3RsKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyNy1cdFx0aWYgKG1hc3Rlcl9jdGwgXHUwMDI2IEVSUk9SX0lSUShod19lcnIpKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6NTI4Olx0XHRcdGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHRpbGUsIGh3X2Vycik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEluamVjdGlvbiBWZWN0b3JzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpbmplY3Rpb24gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHN5c3RlbWF0aWNhbGx5IHByb2JlIHRoZSBzeXN0ZW0gZm9yIHZ1bG5lcmFiaWxpdGllcyB3aGVyZSB1bnRydXN0ZWQgaW5wdXQgY291bGQgYmUgaW5qZWN0ZWQgYW5kIGV4ZWN1dGVkIG9yIGludGVycHJldGVkIGluIGFuIHVuaW50ZW5kZWQgbWFubmVyLiBUaGlzIG1lYW5zIGxvb2tpbmcgYmV5b25kIHRoZSBvYnZpb3VzIGFuZCBjb25zaWRlcmluZyBhbGwgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdXNlciBpbnB1dCBmaWVsZHMsIEFQSSBjYWxscywgZGF0YSBpbXBvcnRzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZXZlbiBzZWVtaW5nbHkgYmVuaWduIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBjcml0aWNhbGx5IGFib3V0IGhvdyBkaWZmZXJlbnQgY29tcG9uZW50cyBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIgYW5kIHdoZXJlIGRhdGEgbWlnaHQgYmUgcGFzc2VkLCB0cmFuc2Zvcm1lZCwgYW5kIHVsdGltYXRlbHkgdXRpbGl6ZWQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgbm90IHRvIGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZDsgdGhlIG1vc3Qgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBhcmUgb2Z0ZW4gdGhlIG1vc3Qgb3Zlcmxvb2tlZC4gSSBoYXZlIHRvIHRoaW5rIGxpa2UgYW4gYXR0YWNrZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luamVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYzo5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jPTQxPURFQ0xBUkVfRkFVTFRfQVRUUihndF9yZXNldF9mYWlsdXJlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NDI6REVDTEFSRV9GQVVMVF9BVFRSKGluamVjdF9jc2NfaHdfZXJyb3IpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy00My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jPTU0Nz12b2lkIHhlX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy01NjUtXHRcdFx0XHRcdCByb290LCBtaW5vcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jOjU2NjpcdFx0ZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cihcJiMzNDtpbmplY3RfY3NjX2h3X2Vycm9yXCYjMzQ7LCByb290LFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYzo1Njc6XHRcdFx0XHRcdCAgXHUwMDI2aW5qZWN0X2NzY19od19lcnJvcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jLTU2OC1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmM6MTA6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC91bml0cy5oXHUwMDNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oPTIwNj12b2lkIHhlX2ZpbGVfcHV0KHN0cnVjdCB4ZV9maWxlICp4ZWYpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oLTIwNy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuaDoyMDg6aW50IHhlX2lzX2luamVjdGlvbl9hY3RpdmUodm9pZCk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmgtMjA5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2VfdHlwZXMuaD05MD1zdHJ1Y3QgeGVfZGV2aWNlIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTMwLVx0LyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTMxOlx0ICogQHZtX2luamVjdF9lcnJvcl9wb3NpdGlvbjogaW5qZWN0IGVycm9ycyBhdCBkaWZmZXJlbnQgcGxhY2VzIGluIFZNXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTMyLVx0ICogYmluZCBJT0NUTCBiYXNlZCBvbiB0aGlzIHZhbHVlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTMzLVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTM0Olx0dTggdm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oLTUzNS0jZW5kaWZcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTgtI2luY2x1ZGUgXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jOjk6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9nZ3R0LmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWxvLWhpLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYz05MTE9c3RhdGljIHZvaWQgZ3RfcmVzZXRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05MjUtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYzo5MjY6XHRpZiAoeGVfZmF1bHRfaW5qZWN0X2d0X3Jlc2V0KCkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jLTkyNy1cdFx0ZXJyID0gLUVDQU5DRUxFRDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYz05Nzg9dm9pZCB4ZV9ndF9yZXNldF9hc3luYyhzdHJ1Y3QgeGVfZ3QgKmd0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jLTk4Mi1cdC8qIERvbiYjMzk7dCBkbyBhIHJlc2V0IHdoaWxlIG9uZSBpcyBhbHJlYWR5IGluIGZsaWdodCAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0LmM6OTgzOlx0aWYgKCF4ZV9mYXVsdF9pbmplY3RfZ3RfcmVzZXQoKSBcdTAwMjZcdTAwMjYgeGVfdWNfcmVzZXRfcHJlcGFyZShcdTAwMjZndC1cdTAwM2V1YykpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05ODQtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaC04LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0LmgtMTAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg9NDE9ZXh0ZXJuIHN0cnVjdCBmYXVsdF9hdHRyIGd0X3Jlc2V0X2ZhaWx1cmU7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaDo0MjpzdGF0aWMgaW5saW5lIGJvb2wgeGVfZmF1bHRfaW5qZWN0X2d0X3Jlc2V0KHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaC00My17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmM9NDU9ZW51bSBWRl9NSUdSQVRJT05fV0FJVF9QT0lOVFMge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTUyLSNkZWZpbmUgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVNcdDEwMDBcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jOjUzOnN0YXRpYyB2b2lkIHZmX3Bvc3RfbWlncmF0aW9uX2luamVjdF93YWl0KHN0cnVjdCB4ZV9ndCAqZ3QsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy01NC1cdFx0XHRcdFx0ICBlbnVtIFZGX01JR1JBVElPTl9XQUlUX1BPSU5UUyB3YWl0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTU3LVx0XHR4ZV9ndF9kYmcoZ3QsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYzo1ODpcdFx0XHQgIFwmIzM0OypURVNUSU5HKiBpbmplY3RpbmcgJXUgbXMgZGVsYXkgZHVlIHRvIHJlc2ZpeF9zdG9wcGVycz0lI3gsIHRvIGNvbnRpbnVlIGNsZWFyICUjeFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTU5LVx0XHRcdCAgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmMtNjctXHRzdHJ1Y3QgeGVfZ3QgKl9fZ3QgPSAoZ3QpO1x0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYzo2ODpcdHZmX3Bvc3RfbWlncmF0aW9uX2luamVjdF93YWl0KF9fZ3QsIFZGX01JR1JBVElPTl9XQUlUXyMjX1BPUyk7XHRcdFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy02OS1cdH0pXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy03LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jLTktXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEyLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYz0yMTUwPXZvaWQgeGVfZ3VjX2N0X3ByaW50KHN0cnVjdCB4ZV9ndWNfY3QgKmN0LCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIGJvb2wgd2FudF9jdGIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxNjMtICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB3aGljaCBhc3Npc3RzIHRoZSBkcml2ZXIgaW4gaWRlbnRpZnlpbmcgaWYgYSBmYXVsdFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxNjQ6ICogaW5qZWN0aW9uIHRlc3QgaXMgY3VycmVudGx5IGFjdGl2ZSwgYWxsb3dpbmcgaXQgdG8gcmVkdWNlIHVubmVjZXNzYXJ5IGRlYnVnXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NTogKiBvdXRwdXQuIFR5cGljYWxseSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgemVybywgYnV0IHRoZSBmYXVsdCBpbmplY3Rpb25cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTY2OiAqIGZyYW1ld29yayBjYW4gYWx0ZXIgdGhpcyB0byByZXR1cm4gYW4gZXJyb3IuIFNpbmNlIGZhdWx0cyBhcmUgaW5qZWN0ZWRcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTY3LSAqIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgY29tcGlsZXIgZG9lc24mIzM5O3Qgb3B0aW1pemVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE3MS0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTcyOm5vaW5saW5lIGludCB4ZV9pc19pbmplY3Rpb25fYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTczOkFMTE9XX0VSUk9SX0lOSkVDVElPTih4ZV9pc19pbmplY3Rpb25fYWN0aXZlLCBFUlJOTyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE3NC0jZWxzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxNzU6aW50IHhlX2lzX2luamVjdGlvbl9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxNzYtI2VuZGlmXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTIxNzg9c3RhdGljIHZvaWQgY3RfZGVhZF9jYXB0dXJlKHN0cnVjdCB4ZV9ndWNfY3QgKmN0LCBzdHJ1Y3QgZ3VjX2N0YiAqY3RiLCB1MzIgcmVhc29uX2NvZGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxODgtXHQvKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxODk6XHQgKiBIdWdlIGR1bXAgaXMgZ2V0dGluZyBnZW5lcmF0ZWQgd2hlbiBpbmplY3RpbmcgZXJyb3IgZm9yIGd1YyBDVC9NTUlPXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE5MDpcdCAqIGZ1bmN0aW9ucy4gU28sIGxldCB1cyBzdXBwcmVzcyB0aGUgZHVtcCB3aGVuIGZhdWx0IGlzIGluamVjdGVkLlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxOTEtXHQgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTkyOlx0aWYgKHhlX2lzX2luamVjdGlvbl9hY3RpdmUoKSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTkzLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19sb2cuYy03LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19sb2cuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jLTktXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19yZWxheS5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19yZWxheS5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy05LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjctXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoyODpleHRlcm4gc3RydWN0IGZhdWx0X2F0dHIgaW5qZWN0X2NzY19od19lcnJvcjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTI5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTE2ND1zdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUocHZjX21hc3Rlcl9sb2NhbF9ub25mYXRhbF9lcnJfcmVnKSA9PSBYRV9SQVNfUkVHX1NJWkUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTE2OS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3MDpzdGF0aWMgYm9vbCBmYXVsdF9pbmplY3RfY3NjX2h3X2Vycm9yKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0xNzEte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6MTcyOlx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgc2hvdWxkX2ZhaWwoXHUwMDI2aW5qZWN0X2NzY19od19lcnJvciwgMSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0xNzMtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MjM6XHRpZiAoZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcigpKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTI0LVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnRpbGUtXHUwMDNlY3NjX2h3X2Vycm9yX3dvcmspO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYz0xMDQzPXN0YXRpYyB2b2lkIHhlX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNTktICpcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYwOiAqIEZhdWx0IGluamVjdGlvbiBpcyB1c2VkIHRvIHRlc3QgdGhlIGVycm9yIHBhdGhzIG9mIHNvbWUgaW5pdGlhbGl6YXRpb25cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYxLSAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYyLSAqIGV4YW1wbGUgdGhyb3VnaCB4ZV9kZXZpY2VfcHJvYmUoKS4gVGhvc2UgZnVuY3Rpb25zIHVzZSB0aGUga2VybmVsIGZhdWx0XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTA2MzogKiBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIGluZnJhc3RydWN0dXJlLCBzZWVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY0OiAqIERvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi5yc3QgZm9yIGRldGFpbHMuIFRoZSBtYWNyb1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNjUtICogQUxMT1dfRVJST1JfSU5KRUNUSU9OKCkgaXMgdXNlZCB0byBjb25kaXRpb25hbGx5IHNraXAgZnVuY3Rpb24gZXhlY3V0aW9uXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2Ni0gKiBhdCBydW50aW1lIGFuZCB1c2UgYSBwcm92aWRlZCByZXR1cm4gdmFsdWUuIFRoZSBmaXJzdCByZXF1aXJlbWVudCBmb3JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY3OiAqIGVycm9yIGluamVjdGFibGUgZnVuY3Rpb25zIGlzIHByb3BlciBoYW5kbGluZyBvZiB0aGUgZXJyb3IgY29kZSBieSB0aGVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDY4LSAqIGNhbGxlciBmb3IgcmVjb3ZlcnksIHdoaWNoIGlzIGFsd2F5cyB0aGUgY2FzZSBoZXJlLiBUaGUgc2Vjb25kXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzMtICogY2FsbGVyLiBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gY29uc2VxdWVuY2Ugb24gdGhvc2Ugc3BlY2lmaWMgY2FsbGVycyB3aGVuXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTA3NDogKiBmdW5jdGlvbiBlcnJvciBpbmplY3Rpb24gc2tpcHMgdGhlIHdob2xlIGZ1bmN0aW9uLlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzUtICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNvZGUuYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmMtMTEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BtLmMtNy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wbS5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTA3OD1zdGF0aWMgdm9pZCB4ZV9wdF9jb21taXRfbG9ja3NfYXNzZXJ0KHN0cnVjdCB4ZV92bWEgKnZtYSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xMDg4LVx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxMDg5Olx0XHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTA5MC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTM5Nj1zdGF0aWMgaW50IHhlX3B0X3ByZV9jb21taXQoc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlICpwdF91cGRhdGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQxMi0gKiBkZWZhdWx0OyB3cml0ZSBtb2RlIHdoZW4gQ09ORklHX0RSTV9YRV9VU0VSUFRSX0lOVkFMX0lOSkVDVCBpcyBvbixcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0MTM6ICogYmVjYXVzZSBhIHVzZXJwdHIgb3AgaW4gdGhpcyBjcml0aWNhbCBzZWN0aW9uIG1heSBpbnZva2UgdGhlIGluamVjdGVkXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDE0LSAqIHhlX3ZtYV91c2VycHRyX2ZvcmNlX2ludmFsaWRhdGUoKSBwYXRoIHRoYXQgY2FsbHNcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xNDI3PXN0YXRpYyB2b2lkIHhlX3B0X3N2bV91c2VycHRyX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MzgtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxNDM5OnN0YXRpYyBib29sIHhlX3B0X3VzZXJwdHJfaW5qZWN0X2VhZ2FpbihzdHJ1Y3QgeGVfdXNlcnB0cl92bWEgKnV2bWEpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDQwLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDUzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NDpzdGF0aWMgYm9vbCB4ZV9wdF91c2VycHRyX2luamVjdF9lYWdhaW4oc3RydWN0IHhlX3VzZXJwdHJfdm1hICp1dm1hKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ1NS17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTQ2MT1zdGF0aWMgaW50IHZtYV9jaGVja191c2VycHRyKHN0cnVjdCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV92bWEgKnZtYSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDY2LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ2NzpcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDY4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NzItXHR1dm1hID0gdG9fdXNlcnB0cl92bWEodm1hKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0NzM6XHRpZiAoeGVfcHRfdXNlcnB0cl9pbmplY3RfZWFnYWluKHV2bWEpKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ3NC1cdFx0eGVfdm1hX3VzZXJwdHJfZm9yY2VfaW52YWxpZGF0ZSh1dm1hKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xNDkyPXN0YXRpYyBpbnQgb3BfY2hlY2tfc3ZtX3VzZXJwdHIoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3ZtYV9vcCAqb3AsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ5Ni1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0OTc6XHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQ5OC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yMzczPWludCB4ZV9wdF91cGRhdGVfb3BzX3ByZXBhcmUoc3RydWN0IHhlX3RpbGUgKnRpbGUsIHN0cnVjdCB4ZV92bWFfb3BzICp2b3BzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0MDEtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNDAyOlx0aWYgKHZvcHMtXHUwMDNlaW5qZWN0X2Vycm9yIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQwMzpcdCAgICB2b3BzLVx1MDAzZXZtLVx1MDAzZXhlLVx1MDAzZXZtX2luamVjdF9lcnJvcl9wb3NpdGlvbiA9PSBGT1JDRV9PUF9FUlJPUl9QUkVQQVJFKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjQwNC1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjQxMT1zdGF0aWMgdm9pZCBiaW5kX29wX2NvbW1pdChzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDM4LVx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI0Mzk6XHRcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDQwLVx0XHR0b191c2VycHRyX3ZtYSh2bWEpLVx1MDAzZXVzZXJwdHIuaW5pdGlhbF9iaW5kID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNDUzPXN0YXRpYyB2b2lkIHVuYmluZF9vcF9jb21taXQoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3RpbGUgKnRpbGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjQ3NC1cdFx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI0NzU6XHRcdFx0eGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0NzYtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjYwOT14ZV9wdF91cGRhdGVfb3BzX3J1bihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgc3RydWN0IHhlX3ZtYV9vcHMgKnZvcHMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjYzNy0jaWZkZWYgVEVTVF9WTV9PUFNfRVJST1JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI2Mzg6XHRpZiAodm9wcy1cdTAwM2VpbmplY3RfZXJyb3IgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNjM5Olx0ICAgIHZtLVx1MDAzZXhlLVx1MDAzZXZtX2luamVjdF9lcnJvcl9wb3NpdGlvbiA9PSBGT1JDRV9PUF9FUlJPUl9SVU4pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNjQwLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy01LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92LmM6NjojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92LmMtNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9Mzg1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kcm1fcGFnZW1hcF9mcm9tX2ZkKGludCBmZCwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDAzLSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fWEVfVVNFUlBUUl9JTlZBTF9JTkpFQ1QpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDA0OiNkZWZpbmUgeGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtX18pIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDA1LVx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjYodm1fXyktXHUwMDNlc3ZtLmdwdXN2bS5ub3RpZmllcl9sb2NrKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQwNi0jZWxzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjQwNzojZGVmaW5lIHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bV9fKSBcXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQwOC1cdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcdTAwMjYodm1fXyktXHUwMDNlc3ZtLmdwdXN2bS5ub3RpZmllcl9sb2NrKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MjItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCB4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUoc3RydWN0IHhlX3ZtICp2bSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MjQte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmMtNS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmM6NjojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy03LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91Y19mdy5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYz0xMjU9aW50IHhlX3ZhbGlkYXRpb25fY3R4X2luaXQoc3RydWN0IHhlX3ZhbGlkYXRpb25fY3R4ICpjdHgsIHN0cnVjdCB4ZV92YWxpZGF0aW9uX2RldmljZSAqdmFsLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTY0LSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYzoxNjU6c3RhdGljIGJvb2wgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKHN0cnVjdCBkcm1fZXhlYyAqZXhlYylcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTY2LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE3MS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmM6MTcyOnN0YXRpYyBib29sIHhlX3ZhbGlkYXRpb25fY29udGVudGlvbl9pbmplY3RlZChzdHJ1Y3QgZHJtX2V4ZWMgKmV4ZWMpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE3My17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYz0xNzk9c3RhdGljIGJvb2wgX194ZV92YWxpZGF0aW9uX3Nob3VsZF9yZXRyeShzdHJ1Y3QgeGVfdmFsaWRhdGlvbl9jdHggKmN0eCwgaW50IHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE4Mi1cdCAgICAoKGN0eC1cdTAwM2VyZXF1ZXN0X2V4Y2x1c2l2ZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmM6MTgzOlx0ICAgICAgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKGN0eC1cdTAwM2VleGVjKSkgfHxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTg0LVx0ICAgICAhY3R4LVx1MDAzZXJlcXVlc3RfZXhjbHVzaXZlKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jPTMyOTE9c3RhdGljIGludCB2bV9iaW5kX2lvY3RsX29wc19sb2NrX2FuZF9wcmVwKHN0cnVjdCBkcm1fZXhlYyAqZXhlYyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zMzA4LSNpZmRlZiBURVNUX1ZNX09QU19FUlJPUlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzMwOTpcdGlmICh2b3BzLVx1MDAzZWluamVjdF9lcnJvciBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjMzMTA6XHQgICAgdm0tXHUwMDNleGUtXHUwMDNldm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uID09IEZPUkNFX09QX0VSUk9SX0xPQ0spXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zMzExLVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz0zODUzPWludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00MDI2LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEZPUkNFX09QX0VSUk9SKSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzo0MDI3Olx0XHRcdHZvcHMuaW5qZWN0X2Vycm9yID0gdHJ1ZTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQwMjg6XHRcdFx0dm0tXHUwMDNleGUtXHUwMDNldm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uID1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQwMjk6XHRcdFx0XHQodm0tXHUwMDNleGUtXHUwMDNldm1faW5qZWN0X2Vycm9yX3Bvc2l0aW9uICYjNDM7IDEpICVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQwMzAtXHRcdFx0XHRGT1JDRV9PUF9FUlJPUl9DT1VOVDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaD01MzA9c3RydWN0IHhlX3ZtYV9vcHMge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oLTU1MC0jaWZkZWYgVEVTVF9WTV9PUFNfRVJST1JcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oOjU1MTpcdC8qKiBAaW5qZWN0X2Vycm9yOiBpbmplY3QgZXJyb3IgdG8gdGVzdCBlcnJvciBoYW5kbGluZyAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtX3R5cGVzLmg6NTUyOlx0Ym9vbCBpbmplY3RfZXJyb3I7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaC01NTMtI2VuZGlmXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXJfdHlwZXMuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93YS5jLTEyLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jLTctXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYy05LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg4OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDU0MgSGFyZHdhcmUgRXJyb3IgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgc3R1bWJsZWQgdXBvbiBgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcmAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBDU0MgaGFyZHdhcmUgZXJyb3IuIFNwZWNpZmljYWxseSwgaXQmIzM5O3Mgc2NoZWR1bGluZyBhIHdvcmsgaXRlbTogYHNjaGVkdWxlX3dvcmsoJmFtcDt0aWxlLSZndDtjc2NfaHdfZXJyb3Jfd29yayk7YC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgb2J2aW91c2x5LCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCB3b3JrIGl0ZW0sIGBjc2NfaHdfZXJyb3Jfd29ya2AsICphY3R1YWxseSogZG9lcy4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGVycm9yIGhhbmRsaW5nIGZsb3cgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhhdCB3b3JrIGZ1bmN0aW9uIGFuZCBzZWUgaG93IGl0IHJlYWN0cyB0bywgYW5kIGRlYWxzIHdpdGgsIHRoZSBwcmVzdW1lZCBoYXJkd2FyZSBmYXVsdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjc2NfaHdfZXJyb3Jfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0xNzA9c3RhdGljIGJvb2wgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcih2b2lkKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTE3NC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3NTpzdGF0aWMgdm9pZCBjc2NfaHdfZXJyb3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0xNzYte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6MTc3Olx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp0aWxlKSwgY3NjX2h3X2Vycm9yX3dvcmspO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTc4LVx0c3RydWN0IHhlX2RldmljZSAqeGUgPSB0aWxlX3RvX3hlKHRpbGUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTE4Mz1zdGF0aWMgdm9pZCBjc2NfaHdfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjExLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM6MjEyOlx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGlsZS1cdTAwM2Vjc2NfaHdfZXJyb3Jfd29yayk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0yMTMtXHRcdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz01MTk9dm9pZCB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgdTMyIG1hc3Rlcl9jdGwpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTIzLVx0aWYgKGZhdWx0X2luamVjdF9jc2NfaHdfZXJyb3IoKSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyNDpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aWxlLVx1MDAzZWNzY19od19lcnJvcl93b3JrKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz01NTU9dm9pZCB4ZV9od19lcnJvcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTU2MS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjU2MjpcdElOSVRfV09SSyhcdTAwMjZ0aWxlLVx1MDAzZWNzY19od19lcnJvcl93b3JrLCBjc2NfaHdfZXJyb3Jfd29yayk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01NjMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaD0zNz1zdHJ1Y3QgeGVfdGlsZSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaC0xMTYtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZV90eXBlcy5oOjExNzpcdC8qKiBAY3NjX2h3X2Vycm9yX3dvcms6IHdvcmtlciB0byByZXBvcnQgQ1NDIEhXIGVycm9ycyAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaDoxMTg6XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3NjX2h3X2Vycm9yX3dvcms7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdGlsZV90eXBlcy5oLTExOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4ODQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkRlYnVnZ2luZyBDU0MgSGFyZHdhcmUgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggb2YgYSBDU0MgKHByZXN1bWFibHkgQ29sb3IgU3BhY2UgQ29udmVyc2lvbikgaGFyZHdhcmUgZXJyb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBjc2NfaHdfZXJyb3Jfd29ya2AgaXMgbGlrZWx5IGNhbGxpbmcgc29tZSBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLCBtYXliZSBzb21ldGhpbmcgbGlrZSBgY3NjX2h3X2Vycm9yX2hhbmRsZXJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSBgY3NjX2h3X2Vycm9yX3dvcmtgIGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb246CmBgYGMKc3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQp7CglzdHJ1Y3QgeGVfdGlsZSAqdGlsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnRpbGUpLCBjc2NfaHdfZXJyb3Jfd29yayk7Ci4uLgpgYGAKT2theSwgc28gaXQgdGFrZXMgYSBgd29ya19zdHJ1Y3RgIGFzIGlucHV0LCBhbmQgaXQgbG9va3MgbGlrZSBpdCBnZXRzIGEgYHhlX3RpbGVgIHN0cnVjdHVyZSBmcm9tIGl0IHVzaW5nIGBjb250YWluZXJfb2ZgLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIGEgZGVmZXJyZWQgd29yayBxdWV1ZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdGlsZSBvbiB0aGUgaGFyZHdhcmUuIEl0JiMzOTtzIG5vdCBhIGRpcmVjdCBjYWxsLCBpdCBpcyBwcm9iYWJseSBhIHJlZ2lzdGVyZWQgdGFzayB3aXRoIHRoZSBrZXJuZWwuCgpOb3cgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgYGNzY19od19lcnJvcl93b3JrYCB0byB1bmRlcnN0YW5kIHdoYXQgYWN0aW9ucyBhcmUgdGFrZW4gd2hlbiB0aGlzIGVycm9yIG9jY3Vycy4gSSB3aWxsIGhhdmUgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGB3b3JrX3N0cnVjdGAgaXMgcXVldWVkL3NjaGVkdWxlZCwgYW5kIHdoYXQgdGhhdCBjYWxsIHBhdGggZG9lcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IGVycm9yIGhhbmRsaW5nIGlzIGludm9sdmVkIGluIHRoZSB3b3JrJiMzOTtzIGJvZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdHN0YXRpYyBib29sIGZhdWx0X2luamVjdF9jc2NfaHdfZXJyb3Iodm9pZClcbiAxNzE6XHR7XG4gMTcyOlx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBzaG91bGRfZmFpbChcdTAwMjZpbmplY3RfY3NjX2h3X2Vycm9yLCAxKTtcbiAxNzM6XHR9XG4gMTc0Olx0XG4gMTc1Olx0c3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDE3NjpcdHtcbiAxNzc6XHRcdHN0cnVjdCB4ZV90aWxlICp0aWxlID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqdGlsZSksIGNzY19od19lcnJvcl93b3JrKTtcbiAxNzg6XHRcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gdGlsZV90b194ZSh0aWxlKTtcbiAxNzk6XHRcbiAxODA6XHRcdHhlX3N1cnZpdmFiaWxpdHlfbW9kZV9ydW50aW1lX2VuYWJsZSh4ZSk7XG4gMTgxOlx0fVxuIDE4MjpcdFxuIDE4MzpcdHN0YXRpYyB2b2lkIGNzY19od19lcnJvcl9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycilcbiAxODQ6XHR7XG4gMTg1Olx0XHRjb25zdCBlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkgc2V2ZXJpdHkgPSBod19lcnJfdG9fc2V2ZXJpdHkoaHdfZXJyKTtcbiAxODY6XHRcdGNvbnN0IGNoYXIgKnNldmVyaXR5X3N0ciA9IGVycm9yX3NldmVyaXR5W3NldmVyaXR5XTtcbiAxODc6XHRcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gdGlsZV90b194ZSh0aWxlKTtcbiAxODg6XHRcdHN0cnVjdCB4ZV9tbWlvICptbWlvID0gXHUwMDI2dGlsZS1cdTAwM2VtbWlvO1xuIDE4OTpcdFx0dTMyIGJhc2UsIGVycl9iaXQsIGVycl9zcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRXZhbHVhdGlvbjogRmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtBaGEsIGBjc2NfaHdfZXJyb3Jfd29ya2AgZG9lc24mIzM5O3QgZGlyZWN0bHkgdHJpZ2dlciBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgLiYjMzQ7IFRoYXQgaGFuZGxlciBpcyB0aGUga2V5LCBhbmQgaXQgbG9va3MgbGlrZSBpdCBnZXRzIGNhbGxlZCBmcm9tIGB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcmAuIFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGF0PyBJdCYjMzk7cyBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgbWVhbmluZyBpdCYjMzk7cyBoYXJkd2FyZS10cmlnZ2VyZWQuIFN5emthbGxlciYjMzk7cyBub3QgZ29pbmcgdG8gaW5qZWN0IGhhcmR3YXJlIGludGVycnVwdHMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHNvZnR3YXJlIGludGVyZmFjZSB0byBkbyBzby4KCkkgdGhlbiB0cmFjZWQgdGhlIGNhbGwgY2hhaW4gdG8gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLiBUaGF0IGxlYWRzIHRvIGEgYnVuY2ggb2YgaW50ZXJuYWwgY2FsbHM6IGB4ZV9kcm1fcmFzX2V2ZW50YCwgYHJhc19zZW5kX2Vycm9yX2V2ZW50YCwgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCwgYGdldF9wZW5kaW5nX2V2ZW50YCB2aWEgYHhlX3N5c2N0cmxfZXZlbnQuY2AsIGFuZCBmaW5hbGx5IHRvIGB4ZV9zeXNjdHJsX3dvcmtgLCB3aGljaCBpcyBhIHdvcmtxdWV1ZSBpdGVtLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgYHhlX3N5c2N0cmxfaXJxX2hhbmRsZXJgLiBTbywgaXQmIzM5O3MgYWxsIGhhcmR3YXJlLWRlcGVuZGVudCwgb3IgYSBzb2Z0d2FyZSBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIHRyaWdnZXJlZC4KClRoZSBjb25jbHVzaW9uIGlzIHRoYXQgc3l6a2FsbGVyIGxpa2VseSB3b24mIzM5O3QgYmUgYWJsZSB0byB0cmlnZ2VyIHRoZXNlIHBhdGhzIGVhc2lseSB1bmxlc3MgaXQmIzM5O3MgZnV6emluZyBhIHZpcnR1YWwgZGV2aWNlIHRoYXQgZW11bGF0ZXMgdGhlIGhhcmR3YXJlIGludGVycnVwdHMsIG9yIGlmIHRoZXJlJiMzOTtzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCBpdCBjYW4gd3JpdGUgdG8uIFRoZSBwcm9tcHQgbWVudGlvbmVkIGRlYnVnZnMsIGFuZCBJIGtub3cgc3l6a2FsbGVyIGNhbiB1c2UgZGVidWdmcyBpZiBpdCYjMzk7cyBhdmFpbGFibGUuIEhvd2V2ZXIsIGV2ZW4gaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdCwgdGhpcyBwYXRjaCBqdXN0IGFkZHMgYSBuZXRsaW5rIGV2ZW50IGJyb2FkY2FzdC4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQmIzM5O3MganVzdCBhIHN0YW5kYXJkIG5ldGxpbmsgZXZlbnQgYnJvYWRjYXN0LiBUaGUgb3RoZXIgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgc2VuZGluZyB0aGUgZXJyb3IgZXZlbnQgYmFzZWQgb24gc29tZSBjb25kaXRpb25zIGFuZCBjb3VudGVyIHZhbHVlcy4gVGhpcyBhbGwgZmVlbHMgdmVyeSBzaW1wbGUsIGFuZCBkZWZpbml0ZWx5IGluYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB3aXRob3V0IGhhcmR3YXJlIGVycm9ycy4KClNpbmNlIHRoZSBwcm9tcHQgc3RhdGVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OywgYW5kIGB4ZWAgaXMgYSByZWFsIGhhcmR3YXJlIGRyaXZlciAoSW50ZWwgWGUgZ3JhcGhpY3MpLCB0aGlzIGNvZGUgd2lsbCBiZSBpbXBvc3NpYmxlIHRvIHRyaWdnZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHN5emthbGxlciBRRU1VL0dDRSBzZXR1cCB3aWxsIG5vdCBoYXZlIHRoZSByZXF1aXJlZCBoYXJkd2FyZSBlcnJvciBlbXVsYXRpb24uIEkga25vdyB0aGF0IHN5emthbGxlciBoYXMgc29tZSBzdXBwb3J0IGZvciBgdmttc2AgKFZpcnR1YWwgS01TKSwgYnV0IGB4ZWAgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgYW5kIHdpbGwgbm90IGJlIGxvYWRlZCB1bmxlc3MgdGhlIGhhcmR3YXJlIGlzIHByZXNlbnQgb3IgbW9ja2VkIGFuZCB0aGUgc2V0dXAgaXMgbm90IHNldCB1cCB0byBkbyB0aGF0LiBFdmVuIGlmIGl0JiMzOTtzIGxvYWRlZCwgaGFyZHdhcmUgZXJyb3JzIGFyZSBub3QgdHJpZ2dlcmFibGUgZnJvbSB1c2Vyc3BhY2UuIFNvLCBpdCBhcHBlYXJzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIGxhc3QgdGltZSB0aGF0IHRoZXJlJiMzOTtzIG5vIG90aGVyIHdheSB0byByZWFjaCBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIGdpdmVuIGl0IGlzIGBFWFBPUlRfU1lNQk9MYC4gSSYjMzk7bGwgbG9vayB0byBzZWUgaWYgYW55IG90aGVyIGRyaXZlcnMgbWlnaHQgYmUgdXNpbmcgaXQuIEJ1dCBmb3Igbm93LCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogKipXb3J0aEZ1enppbmc9ZmFsc2UqKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3Jhc19ubF9lcnJvcl9ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jPTIyMj1zdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNTgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI1OTogKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjYwLSAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjY5LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNzA6aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzEtXHRcdFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTMwOS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjMxMDpFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0zMTEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTg9dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTMtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxNDpcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUsIGZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMjE1LVx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg9ODI9dm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODQtXHRcdFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTg3PXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4ODpzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC04OS1cdFx0XHRcdFx0IGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzY2CgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSYjMzk7dmUgY29tZSB0byBhIGZpcm0gY29uY2x1c2lvbi4gVGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIFN5emthbGxlciBuZWVkcyB0byB3b3JyeSBhYm91dC4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGlzOiBvbmx5IGB4ZWAgaXMgZXZlbiAqdXNpbmcqIHRoaXMgbmV3IG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50LiBBbmQsIGNydWNpYWxseSwgYHhlYCAqb25seSogY2FsbHMgaXQgZnJvbSBpdHMgaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMuIFRoYXQgbWVhbnMsIHJlYWxpc3RpY2FsbHksIGl0JiMzOTtzIHVucmVhY2hhYmxlLiBJdCYjMzk7cyBjb25maW5lZCB0byB0aGUgZGVwdGhzIG9mIGhhcmR3YXJlIGVycm9yIGhhbmRsaW5nLgoKVGhlIGV2ZW50LCBgZXJyb3ItZXZlbnRgLCB3aGljaCBpbnRlZ3JhdGVzIGludG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgaXMgdHJpZ2dlcmVkIGJ5IHRoaW5ncyBsaWtlIGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cy4gSSBrbm93IHRoYXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB3aGljaCBpcyB3aGVyZSBTeXprYWxsZXIgdHlwaWNhbGx5IGRvZXMgaXRzIHdvcmssIHRob3NlIHRyaWdnZXJzIGFyZSBqdXN0IG5vdCBnb2luZyB0byBoYXBwZW4uIFlvdSYjMzk7ZCBuZWVkIHNvbWUgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24gdG8gZXZlbiAqdGhpbmsqIGFib3V0IHJlYWNoaW5nIHRoYXQgY29kZS4gU28sIHJlYWxseSwgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldywgZnV6emFibGUgZnVuY3Rpb25hbGl0eSB0aGF0IFN5emthbGxlciBjYW4gYWNjZXNzLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gTm8gbmVlZCB0byBkZXZvdGUgYW55IHJlc291cmNlcyB0byB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBldmVudCBgZXJyb3ItZXZlbnRgIHRvIHRoZSBgZHJtX3Jhc2AgZmFtaWx5IGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlci4gVGhlIGV2ZW50IGlzIGJyb2FkY2FzdGVkIGJ5IHRoZSBrZXJuZWwgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIgKGhhbmRsZWQgaW4gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCkuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFuZCBzeXN0ZW0gY29udHJvbGxlciBldmVudHMsIHdoaWNoIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGZyb20gdXNlcnNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBjb2RlIGZvciBzeXprYWxsZXIgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBldmVudCBgZXJyb3ItZXZlbnRgIHRvIHRoZSBgZHJtX3Jhc2AgZmFtaWx5IGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlci4gVGhlIGV2ZW50IGlzIGJyb2FkY2FzdGVkIGJ5IHRoZSBrZXJuZWwgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIgKGhhbmRsZWQgaW4gYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBhbmQgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCkuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFuZCBzeXN0ZW0gY29udHJvbGxlciBldmVudHMsIHdoaWNoIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGZyb20gdXNlcnNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBjb2RlIGZvciBzeXprYWxsZXIgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzowNC40NjE3MzI5MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzU2NDE3MDI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGBlcnJvci1ldmVudGAgdG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgYW5kIGludGVncmF0ZXMgaXQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLiBUaGUgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGhhcmR3YXJlIGVycm9ycyBvY2N1ciAoaGFuZGxlZCBpbiBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cywgd2hpY2ggYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZnJvbSB1c2Vyc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGNvZGUgZm9yIHN5emthbGxlciB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6MDQuNDYxNzQxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTE2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODc1MTk0MmM4N2M1NGZjOTk3MjVkY2Y2Njk4ZmY1OWYwYmU2OWMxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDE1OjUzOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG5pbmRleCA4M2MyMTg1M2I3NGI2MC4uNDA2ZTRjNDliYWMxZmQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4gKiBDbGVhciBzcGVjaWZpYyBlcnJvciBjb3VudGVycyB3aXRoIHRoZSBgYGNsZWFyLWVycm9yLWNvdW50ZXJgYCBjb21tYW5kLCB1c2luZyBib3RoXFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxcbisqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXFxuIFxcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0xMTEsMyArMTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxcbiBcXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjF9J1xcbiAgICAgTm9uZVxcbitcXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogYmFzaFxcbitcXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnRcXG4rXFxuKy4uIGNvZGUtYmxvY2s6OiBqc29uXFxuK1xcbisgICAge1xcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcImVycm9yLWV2ZW50XFxcIixcXG4rICAgICAgICBcXFwibXNnXFxcIjoge1xcbisgICAgICAgICAgICBcXFwiZGV2aWNlLW5hbWVcXFwiOiBcXFwiMDAwMDowMzowMC4wXFxcIixcXG4rICAgICAgICAgICAgXFxcIm5vZGUtaWRcXFwiOiAxLFxcbisgICAgICAgICAgICBcXFwibm9kZS1uYW1lXFxcIjogXFxcInVuY29ycmVjdGFibGUtZXJyb3JzXFxcIixcXG4rICAgICAgICAgICAgXFxcImVycm9yLWlkXFxcIjogMSxcXG4rICAgICAgICAgICAgXFxcImVycm9yLW5hbWVcXFwiOiBcXFwiZXJyb3JfbmFtZTFcXFwiLFxcbisgICAgICAgICAgICBcXFwiZXJyb3ItdmFsdWVcXFwiOiAxXFxuKyAgICAgICAgfVxcbisgICAgfVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbmluZGV4IGUxMTMwNTZmOGMwMTZjLi44YWVkM2Q0NTE1ZTVhZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbkBAIC02OSw2ICs2OSwzMyBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuXFxuKyAgLVxcbisgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcXG4rICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG5vZGUtaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogbm9kZS1uYW1lXFxuKyAgICAgICAgdHlwZTogc3RyaW5nXFxuKyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlci5cXG4gXFxuIG9wZXJhdGlvbnM6XFxuICAgbGlzdDpcXG5AQCAtMTI0LDMgKzE1MSwyNCBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGVycm9yLWV2ZW50XFxuKyAgICAgIGRvYzogXFx1MDAzZS1cXG4rICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLlxcbisgICAgICAgICAgIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgZGV2aWNlLCBub2RlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxcbisgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXFxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzXFxuKyAgICAgIG1jZ3JwOiBlcnJvci1yZXBvcnRcXG4rICAgICAgZXZlbnQ6XFxuKyAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgIC0gZGV2aWNlLW5hbWVcXG4rICAgICAgICAgIC0gbm9kZS1pZFxcbisgICAgICAgICAgLSBub2RlLW5hbWVcXG4rICAgICAgICAgIC0gZXJyb3ItaWRcXG4rICAgICAgICAgIC0gZXJyb3ItbmFtZVxcbisgICAgICAgICAgLSBlcnJvci12YWx1ZVxcbitcXG4rbWNhc3QtZ3JvdXBzOlxcbisgIGxpc3Q6XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi43N2Y5MTJhNGQxMDFmMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbkBAIC00MSw2ICs0MSwxMSBAQFxcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxcbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxcbiAgKlxcbisgKiA0LiBFUlJPUl9SRVBPUlQ6IFN1YnNjcmliZSB0byB0aGlzIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGVycm9yIGV2ZW50c1xcbisgKlxcbisgKiA1LiBFUlJPUl9FVkVOVDogUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS4gVGhlIGV2ZW50IGNvbnRhaW5zIGRldmljZSwgbm9kZVxcbisgKiAgICBhbmQgZXJyb3IgaW5mb3JtYXRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxcbisgKlxcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcXG4gICpcXG4gICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcXG5AQCAtMTg2LDYgKzE5MSwzNCBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXFxuIFxcdFxcdFxcdCAgIHZhbHVlKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FLCBub2RlLVxcdTAwM2VkZXZpY2VfbmFtZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLVxcdTAwM2VpZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXFx1MDAzZW5vZGVfbmFtZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbiBcXHRcXHRcXHQgICAgdTMyIGVycm9yX2lkKVxcbiB7XFxuQEAgLTIyMiw2ICsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbiBcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xcbiB9XFxuIFxcbisvKipcXG4rICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XFxuKyAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZVxcbisgKiBAZXJyb3JfaWQ6IElEIG9mIHRoZSBlcnJvclxcbisgKiBAZXJyb3JfbmFtZTogTmFtZSBvZiB0aGUgZXJyb3JcXG4rICogQHZhbHVlOiBWYWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yXFxuKyAqIEBmbGFnczogR0ZQIGZsYWdzIGZvciBtZW1vcnkgYWxsb2NhdGlvblxcbisgKlxcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlIHVzaW5nIHRoZSBlcnJvci1yZXBvcnQgbXVsdGljYXN0IGdyb3VwLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgZ2VubF9pbmZvIGluZm87XFxuK1xcdHN0cnVjdCBza19idWZmICptc2c7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmhkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZXJyb3JfbmFtZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoIWdlbmxfaGFzX2xpc3RlbmVycyhcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIFxcdTAwMjZpbml0X25ldCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGdlbmxfaW5mb19pbml0X250ZihcXHUwMDI2aW5mbywgXFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7XFxuK1xcbitcXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgZmxhZ3MpO1xcbitcXHRpZiAoIW1zZylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcXHUwMDI2aW5mbyk7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBmcmVlX21zZztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2FuY2VsX21zZztcXG4rXFxuK1xcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcXG4rXFx0Z2VubG1zZ19tdWx0aWNhc3QoXFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULCBmbGFncyk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2FuY2VsX21zZzpcXG4rXFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xcbitmcmVlX21zZzpcXG4rXFx0bmxtc2dfZnJlZShtc2cpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7XFxuK1xcbiAvKipcXG4gICogZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoKSAtIER1bXAgYWxsIEVycm9yIENvdW50ZXJzXFxuICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uOWQzMTIzY2M5ZjljYWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcXG5AQCAtNTgsNiArNTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xcbiBcXHR9LFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0ge1xcbitcXHRbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyBcXFwiZXJyb3ItcmVwb3J0XFxcIiwgfSxcXG4rfTtcXG4rXFxuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5uYW1lXFx0XFx0PSBEUk1fUkFTX0ZBTUlMWV9OQU1FLFxcbiBcXHQudmVyc2lvblxcdD0gRFJNX1JBU19GQU1JTFlfVkVSU0lPTixcXG5AQCAtNjYsNCArNzAsNiBAQCBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbiBcXHQubW9kdWxlXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gXFx0LnNwbGl0X29wc1xcdD0gZHJtX3Jhc19ubF9vcHMsXFxuIFxcdC5uX3NwbGl0X29wc1xcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX29wcyksXFxuK1xcdC5tY2dycHNcXHRcXHQ9IGRybV9yYXNfbmxfbWNncnBzLFxcbitcXHQubl9tY2dycHNcXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9tY2dycHMpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi4wM2VjMjc1YWNhOTI5MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbkBAIC0yMSw2ICsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBcXG4rZW51bSB7XFxuK1xcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxcbit9O1xcbitcXG4gZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTtcXG4gXFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi5iZjc3Y2NlMjE5NzRjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbkBAIC0xODUsNiArMTg1LDM4IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfbm9kZXMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtX3JhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2VcXG4rICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBjb21wb25lbnQ6IGVycm9yIGNvbXBvbmVudCAoc2VlIFxcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxcbisgKiBAc2V2ZXJpdHk6IGVycm9yIHNldmVyaXR5IChzZWUgXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcXG4rICogQHZhbHVlOiB2YWx1ZSBvZiBlcnJvciBjb3VudGVyXFxuKyAqIEBmbGFnczogZmxhZ3MgZm9yIGFsbG9jYXRpb25cXG4rICpcXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICovXFxuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzICpyYXMgPSBcXHUwMDI2eGUtXFx1MDAzZXJhcztcXG4rXFx0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy1cXHUwMDNlaW5mb1tzZXZlcml0eV07XFxuK1xcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cXG4rXFx0aWYgKCF4ZS1cXHUwMDNlaW5mby5oYXNfZHJtX3JhcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bm9kZSA9IFxcdTAwMjZyYXMtXFx1MDAzZW5vZGVbc2V2ZXJpdHldO1xcbitcXG4rXFx0aWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSwgZmxhZ3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkcm1fZXJyX3JhdGVsaW1pdGVkKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwiZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcXFxuXFxcIiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbmluZGV4IDM2NWM3MGU5M2U4MmZkLi4yYTY5NGJmNjk0Nzg0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbkBAIC01LDExICs1LDE0IEBAXFxuICNpZm5kZWYgX1hFX0RSTV9SQVNfSF9cXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xcbiBcXG4gI2RlZmluZSBmb3JfZWFjaF9lcnJvcl9zZXZlcml0eShpKVxcdFxcXFxcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7IGkrKylcXG4gXFxuIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xcbit2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xcbmluZGV4IDRhNGIzNjNmYzg0NGI2Li5hODMzY2VjYzc0ZWM1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jXFxuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lclxcbiBcXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXFx1MDAyNnhlLVxcdTAwM2VyYXM7XFxuIFxcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXFx1MDAzZWluZm9bc2V2ZXJpdHldO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBlcnJfc3JjO1xcbi1cXHR1MzIgZXJyX2JpdDtcXG4rXFx0dTMyIGVycl9iaXQsIHZhbHVlO1xcbiBcXG4gXFx0aWYgKCFJU19ER0ZYKHhlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC00OTUsNiArNDk1LDkgQEAgc3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJcXG4gXFx0XFx0XFx0Z3RfaHdfZXJyb3JfaGFuZGxlcih0aWxlLCBod19lcnIsIGVycm9yX2lkKTtcXG4gXFx0XFx0aWYgKGVycl9iaXQgPT0gWEVfU09DX0VSUk9SKVxcbiBcXHRcXHRcXHRzb2NfaHdfZXJyb3JfaGFuZGxlcih0aWxlLCBod19lcnIsIGVycm9yX2lkKTtcXG4rXFxuK1xcdFxcdHZhbHVlID0gYXRvbWljX3JlYWQoXFx1MDAyNmluZm9bZXJyb3JfaWRdLmNvdW50ZXIpO1xcbitcXHRcXHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBlcnJvcl9pZCwgc2V2ZXJpdHksIHZhbHVlLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbiBcXG4gY2xlYXJfcmVnOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG5pbmRleCA0NGY0ZTFhMzQ1NWI3Yy4uYjcxZDUxMjg1OTU0NTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuQEAgLTc3LDYgKzc3LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbit7XFxuK1xcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFO1xcbitcXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiB7XFxuIFxcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuQEAgLTk1LDYgKzEwNywyNCBAQCBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXFxuK3tcXG4rXFx0c3dpdGNoIChjb21wb25lbnQpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX1BDSUU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfU09DX0lOVEVSTkFMOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcXG4ge1xcbiBcXHRzd2l0Y2ggKHN0YXR1cykge1xcbkBAIC0xMzEsMTQgKzE2MSw0MSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmNvbXBfdG9fc3RyKHU4IGNvbXBvbmVudClcXG4gXFx0cmV0dXJuIHhlX3Jhc19jb21wb25lbnRzW2NvbXBvbmVudF07XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxcbit7XFxuK1xcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XFxuK1xcdGlmIChkcm1fc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkge1xcbitcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAldVxcXFxuXFxcIiwgc2V2ZXJpdHkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xcbitcXHRpZiAoZHJtX2NvbXBvbmVudCA9PSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkge1xcbitcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBjb21wb25lbnQgJXVcXFxcblxcXCIsIGNvbXBvbmVudCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0geGVfcmFzX2dldF9jb3VudGVyKHhlLCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQsIFxcdTAwMjZ2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUsIEdGUF9LRVJORUwpO1xcbit9XFxuK1xcbiB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpXFxuIHtcXG4gXFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXFx1MDAyNnJlc3BvbnNlLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVxcdTAwM2Vjb3VudGVycztcXG4gXFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVxcdTAwM2VuY291bnRlcnM7XFxuK1xcdHU4IHNlbnQgPSAwO1xcbiBcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cXHUwMDNlZGF0YSkgXFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcXG4rXFx0QlVJTERfQlVHX09OKFhFX1JBU19DT01QX01BWCBcXHUwMDNlIChCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHNlbnQpKSk7XFxuIFxcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XFxuIFxcbiBcXHRpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgXFx1MDAzZSBYRV9SQVNfTlVNX0NPVU5URVJTKVxcbkBAIC0xNTQsNiArMjExLDI0IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuIFxcbiBcXHRcXHR4ZV93YXJuKHhlLCBcXFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XFxuK1xcbitcXHRcXHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xcbitcXHRcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXFxcXG5cXFwiLCBzZXZfdG9fc3RyKHNldmVyaXR5KSxcXG4rXFx0XFx0XFx0XFx0c2V2ZXJpdHkpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKGNvbXBvbmVudCBcXHUwMDNlPSBYRV9SQVNfQ09NUF9NQVgpIHtcXG4rXFx0XFx0XFx0eGVfd2Fybih4ZSwgXFxcInN5c2N0cmw6IHVuZXhwZWN0ZWQgY29tcG9uZW50ICV1XFxcXG5cXFwiLCBjb21wb25lbnQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cXG4rXFx0XFx0aWYgKHNlbnQgXFx1MDAyNiBCSVQoY29tcG9uZW50KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XFxuK1xcbitcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggMGJlZWRlM2RkYzRlNGIuLjhhYmZiN2QyMDc3YjVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbisrKyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxcbkBAIC04MCw5ICs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXFxuIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XFxuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XFxuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncyk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcbit7IHJldHVybiAwOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcXG4rXFxuK1xcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxcbiBcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcXG4gXFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcXG4rXFx0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQ01EX01BWCxcXG4gXFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcXG4gfTtcXG4gXFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcXHRcXFwiZXJyb3ItcmVwb3J0XFxcIlxcbitcXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzowNC44OTY3OTM5NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MTI5MDkyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQgYGVycm9yLWV2ZW50YCB0byB0aGUgYGRybV9yYXNgIGZhbWlseSBhbmQgaW50ZWdyYXRlcyBpdCBpbnRvIHRoZSBgeGVgIERSTSBkcml2ZXIuIFRoZSBldmVudCBpcyBicm9hZGNhc3RlZCBieSB0aGUga2VybmVsIHdoZW4gaGFyZHdhcmUgZXJyb3JzIG9jY3VyIChoYW5kbGVkIGluIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGApLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSB0cmlnZ2VyZWQgYnkgaGFyZHdhcmUgaW50ZXJydXB0cyBhbmQgc3lzdGVtIGNvbnRyb2xsZXIgZXZlbnRzLCB3aGljaCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBmcm9tIHVzZXJzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWxseSByZWFjaGFibGUgY29kZSBmb3Igc3l6a2FsbGVyIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3NTE5NDJjODdjNTRmYzk5NzI1ZGNmNjY5OGZmNTlmMGJlNjljMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDE1OjUzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjQwNmU0YzQ5YmFjMWZkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5AQCAtNTYsNiArNTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbisqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXG4gXG4gWUFNTC1iYXNlZCBJbnRlcmZhY2VcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTExMSwzICsxMTIsMjMgQEAgRXhhbXBsZTogQ2xlYXIgYW4gZXJyb3IgY291bnRlciBmb3IgYSBnaXZlbiBub2RlXG4gXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1wibm9kZS1pZFwiOjAsIFwiZXJyb3ItaWRcIjoxfSdcbiAgICAgTm9uZVxuK1xuK0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cFxuK1xuKy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4rXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnRcbitcbisuLiBjb2RlLWJsb2NrOjoganNvblxuK1xuKyAgICB7XG4rICAgICAgICBcIm5hbWVcIjogXCJlcnJvci1ldmVudFwiLFxuKyAgICAgICAgXCJtc2dcIjoge1xuKyAgICAgICAgICAgIFwiZGV2aWNlLW5hbWVcIjogXCIwMDAwOjAzOjAwLjBcIixcbisgICAgICAgICAgICBcIm5vZGUtaWRcIjogMSxcbisgICAgICAgICAgICBcIm5vZGUtbmFtZVwiOiBcInVuY29ycmVjdGFibGUtZXJyb3JzXCIsXG4rICAgICAgICAgICAgXCJlcnJvci1pZFwiOiAxLFxuKyAgICAgICAgICAgIFwiZXJyb3ItbmFtZVwiOiBcImVycm9yX25hbWUxXCIsXG4rICAgICAgICAgICAgXCJlcnJvci12YWx1ZVwiOiAxXG4rICAgICAgICB9XG4rICAgIH1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuaW5kZXggZTExMzA1NmY4YzAxNmMuLjhhZWQzZDQ1MTVlNWFmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgKzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbisgIC1cbisgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogbm9kZS1pZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItaWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuIFxuIG9wZXJhdGlvbnM6XG4gICBsaXN0OlxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogZXJyb3ItZXZlbnRcbisgICAgICBkb2M6IFx1MDAzZS1cbisgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cbisgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4rICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XG4rICAgICAgZXZlbnQ6XG4rICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXG4rICAgICAgICAgIC0gbm9kZS1pZFxuKyAgICAgICAgICAtIG5vZGUtbmFtZVxuKyAgICAgICAgICAtIGVycm9yLWlkXG4rICAgICAgICAgIC0gZXJyb3ItbmFtZVxuKyAgICAgICAgICAtIGVycm9yLXZhbHVlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uNzdmOTEyYTRkMTAxZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5AQCAtNDEsNiArNDEsMTEgQEBcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXG4gICpcbisgKiA0LiBFUlJPUl9SRVBPUlQ6IFN1YnNjcmliZSB0byB0aGlzIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGVycm9yIGV2ZW50c1xuKyAqXG4rICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcbisgKiAgICBhbmQgZXJyb3IgaW5mb3JtYXRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxuKyAqXG4gICogTm9kZSByZWdpc3RyYXRpb246XG4gICpcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xuQEAgLTE4Niw2ICsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4rc3RhdGljIGludCBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsXG4rXHRcdFx0XHQgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cdTAwM2VkZXZpY2VfbmFtZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwgbm9kZS1cdTAwM2VpZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLVx1MDAzZW5vZGVfbmFtZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsIHZhbHVlKTtcbit9XG4rXG4gc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0XHRcdCAgICB1MzIgZXJyb3JfaWQpXG4ge1xuQEAgLTIyMiw2ICsyNTUsNjAgQEAgc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbiB9XG4gXG4rLyoqXG4rICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XG4rICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXG4rICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcbisgKiBAZXJyb3JfbmFtZTogTmFtZSBvZiB0aGUgZXJyb3JcbisgKiBAdmFsdWU6IFZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3JcbisgKiBAZmxhZ3M6IEdGUCBmbGFncyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cbisgKlxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4rXHRcdFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgZ2VubF9pbmZvIGluZm87XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuK1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZXJyb3JfbmFtZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoIWdlbmxfaGFzX2xpc3RlbmVycyhcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgXHUwMDI2aW5pdF9uZXQsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbitcbitcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBmbGFncyk7XG4rXHRpZiAoIW1zZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcdTAwMjZpbmZvKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdHJldCA9IC1FTVNHU0laRTtcbitcdFx0Z290byBmcmVlX21zZztcbitcdH1cbitcbitcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuK1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuK1x0Z2VubG1zZ19tdWx0aWNhc3QoXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsIGZsYWdzKTtcbitcdHJldHVybiAwO1xuK1xuK2NhbmNlbF9tc2c6XG4rXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XG4rZnJlZV9tc2c6XG4rXHRubG1zZ19mcmVlKG1zZyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xuK1xuIC8qKlxuICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVyc1xuICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuaW5kZXggZGVhMWMxYjI0OTRlODEuLjlkMzEyM2NjOWY5Y2FhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xuQEAgLTU4LDYgKzU4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGRybV9yYXNfbmxfbWNncnBzW10gPSB7XG4rXHRbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyBcImVycm9yLXJlcG9ydFwiLCB9LFxuK307XG4rXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5uYW1lXHRcdD0gRFJNX1JBU19GQU1JTFlfTkFNRSxcbiBcdC52ZXJzaW9uXHQ9IERSTV9SQVNfRkFNSUxZX1ZFUlNJT04sXG5AQCAtNjYsNCArNzAsNiBAQCBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lm1vZHVsZVx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LnNwbGl0X29wc1x0PSBkcm1fcmFzX25sX29wcyxcbiBcdC5uX3NwbGl0X29wc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSxcbitcdC5tY2dycHNcdFx0PSBkcm1fcmFzX25sX21jZ3JwcyxcbitcdC5uX21jZ3Jwc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfbWNncnBzKSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5pbmRleCBhMzk4NjQzNTcyYTVhMC4uMDNlYzI3NWFjYTkyOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5AQCAtMjEsNiArMjEsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuK2VudW0ge1xuK1x0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXG4rfTtcbitcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljZS4uYmY3N2NjZTIxOTc0YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5AQCAtMTg1LDYgKzE4NSwzOCBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG4rICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlXG4rICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbisgKiBAc2V2ZXJpdHk6IGVycm9yIHNldmVyaXR5IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxuKyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlclxuKyAqIEBmbGFnczogZmxhZ3MgZm9yIGFsbG9jYXRpb25cbisgKlxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuXG4rICovXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbitcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4rXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybV9yYXMgaXMgZW5hYmxlZCAqL1xuK1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19kcm1fcmFzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuK1xuK1x0aWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSwgZmxhZ3MpO1xuK1x0aWYgKHJldClcbitcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwiZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcblwiLCByZXQsXG4rXHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4rfVxuK1xuIC8qKlxuICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTXG4gICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuaW5kZXggMzY1YzcwZTkzZTgyZmQuLjJhNjk0YmY2OTQ3ODQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuQEAgLTUsMTEgKzUsMTQgQEBcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xuIFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcdFxcXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpKyspXG4gXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmNcbmluZGV4IDRhNGIzNjNmYzg0NGI2Li5hODMzY2VjYzc0ZWM1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1xuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lclxuIFx0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbiBcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBlcnJfc3JjO1xuLVx0dTMyIGVycl9iaXQ7XG4rXHR1MzIgZXJyX2JpdCwgdmFsdWU7XG4gXG4gXHRpZiAoIUlTX0RHRlgoeGUpKVxuIFx0XHRyZXR1cm47XG5AQCAtNDk1LDYgKzQ5NSw5IEBAIHN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2VyXG4gXHRcdFx0Z3RfaHdfZXJyb3JfaGFuZGxlcih0aWxlLCBod19lcnIsIGVycm9yX2lkKTtcbiBcdFx0aWYgKGVycl9iaXQgPT0gWEVfU09DX0VSUk9SKVxuIFx0XHRcdHNvY19od19lcnJvcl9oYW5kbGVyKHRpbGUsIGh3X2VyciwgZXJyb3JfaWQpO1xuK1xuK1x0XHR2YWx1ZSA9IGF0b21pY19yZWFkKFx1MDAyNmluZm9bZXJyb3JfaWRdLmNvdW50ZXIpO1xuK1x0XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBlcnJvcl9pZCwgc2V2ZXJpdHksIHZhbHVlLCBHRlBfQVRPTUlDKTtcbiBcdH1cbiBcbiBjbGVhcl9yZWc6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5pbmRleCA0NGY0ZTFhMzQ1NWI3Yy4uYjcxZDUxMjg1OTU0NTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuQEAgLTc3LDYgKzc3LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbit7XG4rXHRzd2l0Y2ggKHNldmVyaXR5KSB7XG4rXHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XG4rXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4ge1xuIFx0c3dpdGNoIChjb21wb25lbnQpIHtcbkBAIC05NSw2ICsxMDcsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHU4IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbit7XG4rXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0NPUkVfQ09NUFVURTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfUENJRTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4rXHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfU09DX0lOVEVSTkFMO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cykge1xuQEAgLTEzMSwxNCArMTYxLDQxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY29tcF90b19zdHIodTggY29tcG9uZW50KVxuIFx0cmV0dXJuIHhlX3Jhc19jb21wb25lbnRzW2NvbXBvbmVudF07XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuK3tcbitcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcbitcdGlmIChkcm1fc2V2ZXJpdHkgPT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkge1xuK1x0XHR4ZV93YXJuKHhlLCBcInN5c2N0cmw6IHVuZXhwZWN0ZWQgc2V2ZXJpdHkgJXVcXG5cIiwgc2V2ZXJpdHkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRkcm1fY29tcG9uZW50ID0geGVfdG9fZHJtX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTtcbitcdGlmIChkcm1fY29tcG9uZW50ID09IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XG4rXHRcdHhlX3dhcm4oeGUsIFwic3lzY3RybDogdW5leHBlY3RlZCBjb21wb25lbnQgJXVcXG5cIiwgY29tcG9uZW50KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmV0ID0geGVfcmFzX2dldF9jb3VudGVyKHhlLCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQsIFx1MDAyNnZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybjtcbitcbitcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUsIEdGUF9LRVJORUwpO1xuK31cbitcbiB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlKVxuIHtcbiBcdHN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKVx1MDAyNnJlc3BvbnNlLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVx1MDAzZWNvdW50ZXJzO1xuIFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVx1MDAzZW5jb3VudGVycztcbitcdHU4IHNlbnQgPSAwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cdTAwM2VkYXRhKSBcdTAwM2Mgc2l6ZW9mKCpwZW5kaW5nKSk7XG4rXHRCVUlMRF9CVUdfT04oWEVfUkFTX0NPTVBfTUFYIFx1MDAzZSAoQklUU19QRVJfQllURSAqIHNpemVvZihzZW50KSkpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0xNTQsNiArMjExLDI0IEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXG4gXHRcdHhlX3dhcm4oeGUsIFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxuXCIsXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuK1xuK1x0XHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xuK1x0XHRcdHhlX3dhcm4oeGUsIFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXFxuXCIsIHNldl90b19zdHIoc2V2ZXJpdHkpLFxuK1x0XHRcdFx0c2V2ZXJpdHkpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChjb21wb25lbnQgXHUwMDNlPSBYRV9SQVNfQ09NUF9NQVgpIHtcbitcdFx0XHR4ZV93YXJuKHhlLCBcInN5c2N0cmw6IHVuZXhwZWN0ZWQgY29tcG9uZW50ICV1XFxuXCIsIGNvbXBvbmVudCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cbitcdFx0aWYgKHNlbnQgXHUwMDI2IEJJVChjb21wb25lbnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuK1xuK1x0XHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuaW5kZXggMGJlZWRlM2RkYzRlNGIuLjhhYmZiN2QyMDc3YjVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG4rKysgYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbkBAIC04MCw5ICs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuK1x0XHRcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxuK3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuKysrIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XG4gXHREUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfQ09VTlRFUl9BVFRSU19NQVggLSAxKVxuIH07XG4gXG4rZW51bSB7XG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUgPSAxLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsXG4rXG4rXHRfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVgsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpXG4rfTtcbitcbiBlbnVtIHtcbiBcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxuIFx0RFJNX1JBU19DTURfR0VUX0VSUk9SX0NPVU5URVIsXG4gXHREUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLFxuK1x0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXG4gXG4gXHRfX0RSTV9SQVNfQ01EX01BWCxcbiBcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXG4gfTtcbiBcbisjZGVmaW5lIERSTV9SQVNfTUNHUlBfRVJST1JfUkVQT1JUXHRcImVycm9yLXJlcG9ydFwiXG4rXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6MDQuODk2Nzk2Mzk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxMDcyNTkxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBEUk0gUkFTIEVycm9yIEV2ZW50IFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhbiBgZXJyb3ItZXZlbnRgIG11bHRpY2FzdCBncm91cCB0byB0aGUgYGRybV9yYXNgIG5ldGxpbmsgZmFtaWx5LiBJdCBhZGRzIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCB3aGljaCBpcyBlc3NlbnRpYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBjb25zdHJ1Y3RzIGFuZCBzZW5kcyB0aGVzZSBuZXRsaW5rIG11bHRpY2FzdCBtZXNzYWdlcy4gVGhpcyBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGB4ZWAgRFJNIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNhbGxlZCBmcm9tIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz9cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIHRha2VzIGEgYnVuY2ggb2YgYXJndW1lbnRzLCBidWlsZHMgYSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCB0aGVuIHVzZXMgYGdlbmxtc2dfbXVsdGljYXN0YCB0byBzZW5kIGl0LiBUaGlzIHNvdW5kcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzICp0cmlnZ2VyZWQqIGJ5IGhhcmR3YXJlIGVycm9ycyB3aXRoaW4gdGhlIGB4ZWAgZHJpdmVyLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgcmVsaWFibHkgdHJpZ2dlciB0aG9zZSBoYXJkd2FyZSBlcnJvcnM/IGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgaXMgY2FsbGVkIG9uIGEgaGFyZHdhcmUgZXJyb3IsIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGlzIGNhbGxlZCBvbiBhIHN5c2N0cmwgZXZlbnQgcmVzcG9uc2UuIFRoZSBjb21wbGV4aXR5IGhlcmUgaXMgd2hldGhlciB3ZSBjYW4gY29udHJvbCB0aG9zZSBldmVudHMuIExpa2VseSBub3QgZGlyZWN0bHksIGJ1dCB3ZSAqY2FuKiBzdWJzY3JpYmUgdG8gdGhlIG11bHRpY2FzdCBncm91cC5cblxuVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBtdWx0aWNhc3QgZ3JvdXAgY2FsbGVkIGBlcnJvci1yZXBvcnRgLiBXZSBzdWJzY3JpYmUgdG8gbXVsdGljYXN0IGdyb3VwcyB1c2luZyBgc2V0c29ja29wdChmZCwgU09MX05FVExJTkssIE5FVExJTktfQUREX01FTUJFUlNISVAsIC4uLilgLiBDcml0aWNhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJ3QgKmFkZCogYW55IG5ldyBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiAqc2VuZCosIGV4Y2VwdCBtYXliZSBgZXJyb3ItZXZlbnRgIGlzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kLlxuXG5XYWl0LCBsb29raW5nIGNsb3NlciwgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCBpcyBpbmRlZWQgYWRkZWQuIExldCdzIGxvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24sIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sYC4gQWgsIGl0J3MgZXhwbGljaXRseSBkZWZpbmVkIGFzIGFuIGV2ZW50LCBub3QgYSBjb21tYW5kIHVzZXJzcGFjZSBjYW4gc2VuZC4gSXQncyBhbiBldmVudCB1c2Vyc3BhY2UgKnJlY2VpdmVzKi4gVGhlIGRlc2NyaXB0aW9uIHNheXMgaXQgcmVwb3J0cyBhbiBlcnJvciBldmVudCBpbmNsdWRpbmcgZGV2aWNlLCBub2RlLCBhbmQgZXJyb3IgaW5mb3JtYXRpb24uIFRoZSBZQU1MIGZpbGUgY29uZmlybXMgdGhlcmUgYXJlIG5vIGBkb2Agb3IgYGR1bXBgIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgYGVycm9yLWV2ZW50YCwgb25seSBgZXZlbnRgLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUga2VybmVsIHNpZGUgZG9lc24ndCBleHBvc2UgdGhpcyBjb21tYW5kIGZvciBzZW5kaW5nIHZpYSB1c2Vyc3BhY2UuIEknbGwgY2hlY2sgYGRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNgIGZvciBgZHJtX3Jhc19ubF9vcHNgLiBBbmQsIHllcywgdGhlIHBhdGNoICpkb2Vzbid0KiBhZGQgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zLiBUaHVzLCB1c2Vyc3BhY2UgY2Fubm90ICpzZW5kKiB0aGlzIGNvbW1hbmQgdG8gdGhlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCB0aGUgb25seSB0aGluZyB1c2Vyc3BhY2UgY2FuIGRvIGlzIHN1YnNjcmliZSB0byB0aGUgYGVycm9yLXJlcG9ydGAgbXVsdGljYXN0IGdyb3VwLiBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgbmV0bGluayBjb2RlLCB3aGljaCBpcyB3ZWxsLXRyb2RkZW4gZ3JvdW5kLiBUaGUgKm5ldyogY29kZSBpcyBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUgYHhlYCBkcml2ZXIgd2hlbiBoYXJkd2FyZSBlcnJvcnMgb2NjdXIuXG5cbkNhbiBzeXprYWxsZXIgcmVsaWFibHkgdHJpZ2dlciB0aG9zZSBgeGVgIGhhcmR3YXJlIGVycm9ycz8gUHJvYmFibHkgbm90IGVhc2lseSwgdW5sZXNzIHRoZXJlJ3MgYSB3YXkgdG8gaW5qZWN0IHRoZW0uIEV2ZW4gaWYgaXQgKmNhbiogdHJpZ2dlciB0aGVtLCBhbGwgdGhlIGFkZGVkIGNvZGUgZG9lcyBpcyBjb25zdHJ1Y3QgYW5kIGJyb2FkY2FzdCBhIG5ldGxpbmsgbWVzc2FnZS5cblxuU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZSBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGluIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBsb29rcyBwcmV0dHkgc3RhbmRhcmQuIFRoZXJlIGlzbid0IG11Y2ggY29tcGxleGl0eSB0aGVyZS4gSXQncyBlc3NlbnRpYWxseSBqdXN0IHBhY2thZ2luZyB1cCBkYXRhIHRoYXQgdGhlIGB4ZWAgZHJpdmVyIGFscmVhZHkga25vd3MuIExldCBtZSBjaGVjayBpZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgdHJpZ2dlcmVkIGJ5IGFueSB1c2Vyc3BhY2UgYWN0aW9uLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzoxOC4wMDQwNjAwOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ3MTMxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9yYXNfbmxfZXJyb3JfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYz0yMjI9c3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNTgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNTk6ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNjAtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI3MDppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzEtXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzA5LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjMxMDpFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzExLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTg9dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxNDpcXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTUtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Mj12b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg0LVxcdFxcdFxcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTg3PXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg5LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzoyMi4wNTEyMDI2MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0NzY2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgeGVfZHJtX3Jhc19ldmVudGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGB4ZV9kcm1fcmFzX2V2ZW50YCwgaXMgb25seSBjYWxsZWQgZnJvbSBvbmUgcGxhY2UuIFRoYXQncyBhY3R1YWxseSBhIHByZXR0eSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzYXZlcyBtZSBzb21lIHRpbWUuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGB4ZV9kcm1fcmFzX2V2ZW50YCBpcyBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgZm9yIHRyYWNpbmcgdGhlIGZsb3cgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGF0IHNpbmdsZSBjYWxsIHRvIHByb3Blcmx5IGFuYWx5emUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjI1LjIyNjAwNjE2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMwMzA1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX2RybV9yYXNfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xNTc9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTg5OiAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm1fcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTkwLSAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTctICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxOTg6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTkte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaD0xNT1pbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oOjE2OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oLTE3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NDI3PXN0YXRpYyB2b2lkIGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQ5OS1cXHRcXHR2YWx1ZSA9IGF0b21pY19yZWFkKFxcdTAwMjZpbmZvW2Vycm9yX2lkXS5jb3VudGVyKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MDA6XFx0XFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZXJyb3JfaWQsIHNldmVyaXR5LCB2YWx1ZSwgR0ZQX0FUT01JQyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTAxLVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xNjQ9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTg1LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoxODY6XFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE4Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjI3LjQ1NjMxOTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMjM1NDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIEVycm9yIFNpZ25hbCoqXG5cblJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCB0aGUgb25lIGluIHF1ZXN0aW9uLCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbGlrZWx5IGEgY2VudHJhbCBwb2ludCBmb3IgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGVycm9ycywgZWl0aGVyIGRpcmVjdGx5IGZyb20gdGhlIHNvdXJjZSBpdHNlbGYgb3IgZnJvbSB0aGUgUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5LCBhbmQgU2VydmljZWFiaWxpdHkpIHNpZGUgb2YgdGhpbmdzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGh3X2Vycm9yX3NvdXJjZV9oYW5kbGVyYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGVzZSBlcnJvcnMgYnkgdW5kZXJzdGFuZGluZyB0aGUgc291cmNlIG9mIHRoZSBjYWxscy4gSXMgaXQgY29taW5nIGRpcmVjdGx5IGZyb20gYW4gaW50ZXJydXB0PyBNYXliZSBhIHNvZnR3YXJlLWluaXRpYXRlZCBjaGVjaz8gSXMgdGhpcyBhIGhpZ2gtcHJpb3JpdHkgaW50ZXJydXB0IGhhbmRsZXI/IEFsbCBvZiB0aGVzZSBxdWVzdGlvbnMgYXJlIHZpdGFsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6MzEuMTg4Njc2NDk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzc0ODc2MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9MzcwPXN0YXRpYyB2b2lkIHNvY19od19lcnJvcl9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCBlbnVtIGhhcmR3YXJlX2Vycm9yIGh3X2VycixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyNi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo0Mjc6c3RhdGljIHZvaWQgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTQyOC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz01MTk9dm9pZCB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgdTMyIG1hc3Rlcl9jdGwpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjctXFx0XFx0aWYgKG1hc3Rlcl9jdGwgXFx1MDAyNiBFUlJPUl9JUlEoaHdfZXJyKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1Mjg6XFx0XFx0XFx0aHdfZXJyb3Jfc291cmNlX2hhbmRsZXIodGlsZSwgaHdfZXJyKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzozMy4zMjYxNzQ5NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ1NTEyMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRXJyb3IgSGFuZGxpbmcgUGF0aCoqXG5cbkFscmlnaHQsIEknbSBzdGFydGluZyBhdCBgeGVfaHdfZXJyb3JfaXJxX2hhbmRsZXJgLiBUaGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgdHJpZ2dlciBjb21lcyBmcm9tLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkb3duc3RyZWFtIHByb2Nlc3MuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgIGlzIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGwgc3RhY2sgZnJvbSBoZXJlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZXJyb3IgcmVwb3J0aW5nIGFuZCBoYW5kbGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1MzozNi4yNzE2OTE2NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE3MDY3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmFzX3NlbmRfZXJyb3JfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jPTE1Nj1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmNvbXBfdG9fc3RyKHU4IGNvbXBvbmVudClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0xNjMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjE2NDpzdGF0aWMgdm9pZCByYXNfc2VuZF9lcnJvcl9ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudClcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTY1LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xODk9dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0yMzAtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjIzMTpcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTIzMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjM4LjM3MzQwODYxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc4ODQxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvdW50ZXIgVGhyZXNob2xkIENyb3NzIEV2ZW50KipcblxuQWxyaWdodCwgc28gYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCBpcyB0aGUgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biBldmVyeSBjYWxsIHNpdGUgZm9yIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAuIFVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgY3JpdGljYWwgZm9yIGdyYXNwaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGV2ZW50IOKAkyBJIG5lZWQgdG8ga25vdyAqd2hhdCogaXMgbW9uaXRvcmluZyAqd2hhdCosIGFuZCBzcGVjaWZpY2FsbHkgKndoeSogdGhpcyB0aHJlc2hvbGQgd2FzIGNyb3NzZWQuIERpdmluZyBpbnRvIHRoZSBjYWxsIGdyYXBoIGlzIHRoZSBiZXN0IHdheSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgcHJvY2VzcyBmbG93IGFuZCBwaW5wb2ludGluZyB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGFsZXJ0LiBUaGlzIGlzIGFsbCBhYm91dCBnYXRoZXJpbmcgdGhlIGluaXRpYWwgdGVsZW1ldHJ5IHRvIGZvcm0gYSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjQxLjQ1MjI1MzQ0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNTQyNDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MTY0PXN0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE4OC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MTg5OnZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE5MC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg9MTI9c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2U7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTEzLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaDoxNDp2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0xNS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZSAqcmVzcG9uc2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz0xNT1zdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCAqY29tbWFuZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMzgtXFx0XFx0aWYgKHJlc3BvbnNlLVxcdTAwM2VldmVudCA9PSBYRV9TWVNDVFJMX0VWRU5UX1RIUkVTSE9MRF9DUk9TU0VEKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6Mzk6XFx0XFx0XFx0eGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoeGUsIHJlc3BvbnNlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTQwLVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6NDMuNTY3Njg0OTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjYzODA3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgWGUgU3lzdGVtIENvbnRyb2wgRXZlbnRzKipcblxuUmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGVfc3lzY3RybF9ldmVudC5jYCBmaWxlIGFnYWluLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggdG8gdGhpcyBgZ2V0X3BlbmRpbmdfZXZlbnRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IGl0J3MgYmVpbmcgY2FsbGVkLCBzbyBJIGNhbiBncmFzcCB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSByb290IGNhdXNlLiBMZXQncyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBgZ2V0X3BlbmRpbmdfZXZlbnRgIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHdheSB0byBvcmllbnQgbXlzZWxmIHdoZW4gZGVidWdnaW5nIHN1Y2ggYSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1Mzo0Ny4zMzQwNzAwMDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTU2MTMxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3BlbmRpbmdfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xNC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjE1OnN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTYte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz03MD12b2lkIHhlX3N5c2N0cmxfZXZlbnQoc3RydWN0IHhlX3N5c2N0cmwgKnNjKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy04Ni1cXHRndWFyZChtdXRleCkoXFx1MDAyNnNjLVxcdTAwM2VldmVudF9sb2NrKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjg3OlxcdGdldF9wZW5kaW5nX2V2ZW50KHNjLCBcXHUwMDI2Y29tbWFuZCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy04OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jPTM4Nzk9c3RhdGljIHZvaWQgcWVkX2lvdl9wcm9jZXNzX21ieF9yZXEoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQwMDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYzo0MDA0OnN0YXRpYyB2b2lkIHFlZF9pb3ZfcGZfZ2V0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLCB1NjQgKmV2ZW50cylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQwMDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3Jpb3YuYz00OTMyPXN0YXRpYyB2b2lkIHFlZF9oYW5kbGVfdmZfbXNnKHN0cnVjdCBxZWRfaHdmbiAqaHdmbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NyaW92LmMtNDk0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jOjQ5NDY6XFx0cWVkX2lvdl9wZl9nZXRfcGVuZGluZ19ldmVudHMoaHdmbiwgZXZlbnRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcmlvdi5jLTQ5NDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjQ5LjQ0OTY5MTEzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY2NzI2OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGVfc3lzY3RybF9ldmVudGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgeGVfc3lzY3RybF9ldmVudGAgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0aGUgZ2F0ZXdheSBmb3Igc3lzdGVtIGNvbnRyb2wgZXZlbnRzLiBUaGUgZnVuY3Rpb24gY2FsbCB0cmVlIHN1Z2dlc3RzIGl0IGluaXRpYXRlcyBhIGNhbGwgdG8gYGdldF9wZW5kaW5nX2V2ZW50YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBwcm9iYWJseSBncmFiYmluZyB0aGUgbmV4dCBjb250cm9sIGFjdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZC4gTXkgbmV4dCBzdGVwIGhlcmUgaXMgZGVmaW5pdGVseSB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIGB4ZV9zeXNjdHJsX2V2ZW50YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbS4gS25vd2luZyB0aGUgZW50cnkgcG9pbnRzIHdpbGwgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIHNob3VsZCBoaWdobGlnaHQgdGhlIGV2ZW50IHNvdXJjZSBhbmQgdGhlIGJyb2FkZXIgZnVuY3Rpb25hbGl0eSBhZmZlY3RlZCBieSB0aGUgZXZlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTM6NTIuNjE2NDIyMTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU4MjYyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX3N5c2N0cmxfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgKz0geGVfYmIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTI4LVxcdHhlX3N5c2N0cmwubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjEyOTpcXHR4ZV9zeXNjdHJsX2V2ZW50Lm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0xMzAtXFx0eGVfc3lzY3RybF9tYWlsYm94Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTEyLSNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsLmhcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjEzOiNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmhcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTE0LSNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsX21haWxib3guaFxcXCJcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0xODk9dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MTkwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMTkxLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMT1zdHJ1Y3QgeGVfZGV2aWNlO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaDoxMjpzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgtMTMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oPTE0PXZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjE1OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE2LWludCB4ZV9yYXNfZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQsIHUzMiAqdmFsdWUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYz00MT1zdGF0aWMgdm9pZCB4ZV9zeXNjdHJsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYy00Ni1cXHRndWFyZCh4ZV9wbV9ydW50aW1lKSh4ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuYzo0NzpcXHR4ZV9zeXNjdHJsX2V2ZW50KHNjKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5jLTQ4LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmg9MTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgeGVfZGV2aWNlICpzY190b194ZShzdHJ1Y3QgeGVfc3lzY3RybCAqc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybC5oLTE4LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsLmg6MTk6dm9pZCB4ZV9zeXNjdHJsX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmwuaC0yMC1pbnQgeGVfc3lzY3RybF9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTAtI2luY2x1ZGUgXFxcInhlX3N5c2N0cmwuaFxcXCJcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjExOiNpbmNsdWRlIFxcXCJ4ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmhcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xMi0jaW5jbHVkZSBcXFwieGVfc3lzY3RybF9tYWlsYm94LmhcXFwiXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jPTE1PXN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtMTYte1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6MTc6XFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgKnJlc3BvbnNlID0gY29tbWFuZC1cXHUwMDNlZGF0YV9vdXQ7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0xOC1cXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHNjX3RvX3hlKHNjKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM9NTI9c3RhdGljIHZvaWQgZXZlbnRfcmVxdWVzdF9wcmVwYXJlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfc3lzY3RybF9hcHBfbXNnX2hkciAqaGVhZGVyLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NTM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0ICpyZXF1ZXN0KVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNTQte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy02NC0vKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjY1OiAqIHhlX3N5c2N0cmxfZXZlbnQoKSAtIEhhbmRsZXIgZm9yIFN5c3RlbSBDb250cm9sbGVyIGV2ZW50c1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNjYtICogQHNjOiBTeXN0ZW0gQ29udHJvbGxlciBpbnN0YW5jZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy02OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjcwOnZvaWQgeGVfc3lzY3RybF9ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03MS17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy03Mi1cXHRzdHJ1Y3QgeGVfc3lzY3RybF9tYWlsYm94X2NvbW1hbmQgY29tbWFuZCA9IHt9O1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6NzM6XFx0c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2UgPSB7fTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jOjc0OlxcdHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgcmVxdWVzdCA9IHt9O1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNzUtXFx0c3RydWN0IHhlX3N5c2N0cmxfYXBwX21zZ19oZHIgaGVhZGVyID0ge307XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTE2LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6MTc6ICogZW51bSB4ZV9zeXNjdHJsX2V2ZW50IC0gRXZlbnRzIHJlcG9ydGVkIGJ5IFN5c3RlbSBDb250cm9sbGVyXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0xOC0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yMC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjIxOmVudW0geGVfc3lzY3RybF9ldmVudCB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yMi1cXHRYRV9TWVNDVFJMX0VWRU5UX1RIUkVTSE9MRF9DUk9TU0VEXFx0PSAweDAxLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaC0yNS0vKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oOjI2OiAqIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3JlcXVlc3QgLSBSZXF1ZXN0IHN0cnVjdHVyZSBmb3IgcGVuZGluZyBldmVudFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtMjctICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnRfdHlwZXMuaDoyODpzdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXF1ZXN0IHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTI5LVxcdC8qKiBAdmVjdG9yOiBNU0ktWCB2ZWN0b3IgdGhhdCB3YXMgdHJpZ2dlcmVkICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTM5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6NDA6ICogc3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2UgLSBSZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIHBlbmRpbmcgZXZlbnRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudF90eXBlcy5oLTQxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmg6NDI6c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2Uge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50X3R5cGVzLmgtNDMtXFx0LyoqIEBjb3VudDogUGVuZGluZyBldmVudCBjb3VudCBhZnRlciB0aGlzIHJlc3BvbnNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjUzOjU0Ljc3NDY5MzA3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzE1MzcxMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHhlX3N5c2N0cmxfZXZlbnRgIFBhdGh3YXkgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgeGVfc3lzY3RybF9ldmVudGAgaXMgY2FsbGVkIGZyb20gYHhlX3N5c2N0cmxfd29ya2AsIHdoaWNoIGlzIGEgd29ya3F1ZXVlIGl0ZW0uIFRoYXQgd29yayBpcyBpbml0aWF0ZWQgYnkgdGhlIFN5c3RlbSBDb250cm9sbGVyIGhhcmR3YXJlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIHBvaW50PyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIG5ldGxpbmsgbWVzc2FnZXMsIGJ1dCBpbiB0aGlzIHNjZW5hcmlvLCB0aGUgbmV0bGluayBtZXNzYWdlICh0aGUgZW5kIGdvYWwgaGVyZSkgaXMgc2VudCAqYnkqIHRoZSBrZXJuZWwgaXRzZWxmLCBhcyBhIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQuIFNvLCBjYW4gc3l6a2FsbGVyIGRpcmVjdGx5IHRyaWdnZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZXZlbnQ/IFByb2JhYmx5IG5vdDsgdXN1YWxseSwgaXQgZG9lc24ndCBoYXZlIHRoYXQgbGV2ZWwgb2YgY29udHJvbCB1bmxlc3MgaXQncyBkZWFsaW5nIHdpdGggYSB2aXJ0dWFsIGRldmljZSBvciBjYW4gc29tZWhvdyBpbmplY3QgdGhlIGV2ZW50LlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNoaWZ0cyB0byBmaW5kaW5nIGFsdGVybmF0ZSBwYXRocy4gQXJlIHRoZXJlIG90aGVyIHdheXMgdG8gdHJpZ2dlciBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGA/IEhtbSwgbm8sIGl0J3MgcHJldHR5IGxvY2tlZCBkb3duLiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gYHhlX2RybV9yYXNfZXZlbnRgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLiBUaGVzZSBhcmUgYm90aCBoYXJkd2FyZSBlcnJvciBoYW5kbGVycyDigJMgd2hpY2ggbWVhbnMgdGhleSdyZSByZXNwb25kaW5nIHRvIHNwZWNpZmljIGhhcmR3YXJlIGVycm9ycy5cblxuU28sIHRoZSBuZXcgY29kZSBwYXRoIGJvaWxzIGRvd24gdG86XG5cbjEuICBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGA6IGNvbnN0cnVjdHMgYW5kIGJyb2FkY2FzdHMgYSBuZXRsaW5rIG1lc3NhZ2UuXG4yLiAgYHhlX2RybV9yYXNfZXZlbnRgOiBjYWxscyBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAuXG4zLiAgYHJhc19zZW5kX2Vycm9yX2V2ZW50YDogY2FsbHMgYHhlX2RybV9yYXNfZXZlbnRgLlxuNC4gIGBod19lcnJvcl9zb3VyY2VfaGFuZGxlcmA6IGFsc28gY2FsbHMgYHhlX2RybV9yYXNfZXZlbnRgLlxuNS4gIFRoZXJlJ3MgYWxzbyBuZXRsaW5rIG11bHRpY2FzdCBncm91cCByZWdpc3RyYXRpb24uXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IElmIHN5emthbGxlciBjYW4ndCB0cmlnZ2VyIHRoZSBoYXJkd2FyZSBlcnJvcnMgZGlyZWN0bHksIHRoZW4gd2UncmUgbmV2ZXIgZ29pbmcgdG8gaGl0IGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YC4gVGhhdCBtYWtlcyBpdCBhIGRlYWQgZW5kIGZvciBmdXp6aW5nIHVubGVzcyB3ZSBjYW4gc29tZWhvdyBmb3JjZSBvciBpbmplY3QgdGhlIGVycm9yIGNvbmRpdGlvbnMuXG5cbldhaXQgYSBzZWNvbmQuLi5pcyB0aGVyZSBhbnkga2luZCBvZiBkZWJ1Z2ZzIGludGVyZmFjZSwgb3IgYW55dGhpbmcgbGlrZSB0aGF0LCBpbiB0aGUgYHhlYCBzdWJzeXN0ZW0gdGhhdCBtaWdodCBsZXQgbWUgaW5qZWN0IHRoZXNlIGtpbmRzIG9mIGVycm9ycz8gVGhhdCB3b3VsZCBjaGFuZ2UgZXZlcnl0aGluZy4gVGltZSB0byBjaGVjayBmb3IgZXJyb3IgaW5qZWN0aW9uIG1ldGhvZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjAyLjQ5MDA2NzM5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MjQyNTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod19lcnJvcl9zb3VyY2VfaGFuZGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0zNzA9c3RhdGljIHZvaWQgc29jX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNDI2LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjQyNzpzdGF0aWMgdm9pZCBod19lcnJvcl9zb3VyY2VfaGFuZGxlcihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgY29uc3QgZW51bSBoYXJkd2FyZV9lcnJvciBod19lcnIpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNDI4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyNy1cXHRcXHRpZiAobWFzdGVyX2N0bCBcXHUwMDI2IEVSUk9SX0lSUShod19lcnIpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyODpcXHRcXHRcXHRod19lcnJvcl9zb3VyY2VfaGFuZGxlcih0aWxlLCBod19lcnIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyOS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjA0LjU1MjUwMjYyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDExMjA1NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW5qZWN0aW9uIFZlY3RvcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpbmplY3Rpb24gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHN5c3RlbWF0aWNhbGx5IHByb2JlIHRoZSBzeXN0ZW0gZm9yIHZ1bG5lcmFiaWxpdGllcyB3aGVyZSB1bnRydXN0ZWQgaW5wdXQgY291bGQgYmUgaW5qZWN0ZWQgYW5kIGV4ZWN1dGVkIG9yIGludGVycHJldGVkIGluIGFuIHVuaW50ZW5kZWQgbWFubmVyLiBUaGlzIG1lYW5zIGxvb2tpbmcgYmV5b25kIHRoZSBvYnZpb3VzIGFuZCBjb25zaWRlcmluZyBhbGwgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdXNlciBpbnB1dCBmaWVsZHMsIEFQSSBjYWxscywgZGF0YSBpbXBvcnRzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZXZlbiBzZWVtaW5nbHkgYmVuaWduIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHRoaW5rIGNyaXRpY2FsbHkgYWJvdXQgaG93IGRpZmZlcmVudCBjb21wb25lbnRzIGludGVyYWN0IHdpdGggZWFjaCBvdGhlciBhbmQgd2hlcmUgZGF0YSBtaWdodCBiZSBwYXNzZWQsIHRyYW5zZm9ybWVkLCBhbmQgdWx0aW1hdGVseSB1dGlsaXplZC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBub3QgdG8gbGVhdmUgYW55IHN0b25lIHVudHVybmVkOyB0aGUgbW9zdCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBvZnRlbiB0aGUgbW9zdCBvdmVybG9va2VkLiBJIGhhdmUgdG8gdGhpbmsgbGlrZSBhbiBhdHRhY2tlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NzUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDowNy45NjM3MTI5MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTgwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluamVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6OTojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RlYnVnZnMuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nX2hlbHBlcnMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM9NDE9REVDTEFSRV9GQVVMVF9BVFRSKGd0X3Jlc2V0X2ZhaWx1cmUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NDI6REVDTEFSRV9GQVVMVF9BVFRSKGluamVjdF9jc2NfaHdfZXJyb3IpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmMtNDMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jPTU0Nz12b2lkIHhlX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGVidWdmcy5jLTU2NS1cXHRcXHRcXHRcXHRcXHQgcm9vdCwgbWlub3IpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NTY2OlxcdFxcdGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoXFxcImluamVjdF9jc2NfaHdfZXJyb3JcXFwiLCByb290LFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmM6NTY3OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmluamVjdF9jc2NfaHdfZXJyb3IpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZWJ1Z2ZzLmMtNTY4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYy05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYzoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91bml0cy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oPTIwNj12b2lkIHhlX2ZpbGVfcHV0KHN0cnVjdCB4ZV9maWxlICp4ZWYpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuaC0yMDctXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5oOjIwODppbnQgeGVfaXNfaW5qZWN0aW9uX2FjdGl2ZSh2b2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmgtMjA5LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oPTkwPXN0cnVjdCB4ZV9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oLTUzMC1cXHQvKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTMxOlxcdCAqIEB2bV9pbmplY3RfZXJyb3JfcG9zaXRpb246IGluamVjdCBlcnJvcnMgYXQgZGlmZmVyZW50IHBsYWNlcyBpbiBWTVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2VfdHlwZXMuaC01MzItXFx0ICogYmluZCBJT0NUTCBiYXNlZCBvbiB0aGlzIHZhbHVlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZV90eXBlcy5oLTUzMy1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmg6NTM0OlxcdHU4IHZtX2luamVjdF9lcnJvcl9wb3NpdGlvbjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlX3R5cGVzLmgtNTM1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYy04LSNpbmNsdWRlIFxcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2dndHQuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ2d0dC5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby02NC1ub25hdG9taWMtbG8taGkuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jPTkxMT1zdGF0aWMgdm9pZCBndF9yZXNldF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0LmMtOTI1LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jOjkyNjpcXHRpZiAoeGVfZmF1bHRfaW5qZWN0X2d0X3Jlc2V0KCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05MjctXFx0XFx0ZXJyID0gLUVDQU5DRUxFRDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jPTk3OD12b2lkIHhlX2d0X3Jlc2V0X2FzeW5jKHN0cnVjdCB4ZV9ndCAqZ3QpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYy05ODItXFx0LyogRG9uJ3QgZG8gYSByZXNldCB3aGlsZSBvbmUgaXMgYWxyZWFkeSBpbiBmbGlnaHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYzo5ODM6XFx0aWYgKCF4ZV9mYXVsdF9pbmplY3RfZ3RfcmVzZXQoKSBcXHUwMDI2XFx1MDAyNiB4ZV91Y19yZXNldF9wcmVwYXJlKFxcdTAwMjZndC1cXHUwMDNldWMpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jLTk4NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuaC04LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5oOjk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5oLTEwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg9NDE9ZXh0ZXJuIHN0cnVjdCBmYXVsdF9hdHRyIGd0X3Jlc2V0X2ZhaWx1cmU7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0Lmg6NDI6c3RhdGljIGlubGluZSBib29sIHhlX2ZhdWx0X2luamVjdF9ndF9yZXNldCh2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5oLTQzLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jPTQ1PWVudW0gVkZfTUlHUkFUSU9OX1dBSVRfUE9JTlRTIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTUyLSNkZWZpbmUgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVNcXHQxMDAwXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmM6NTM6c3RhdGljIHZvaWQgdmZfcG9zdF9taWdyYXRpb25faW5qZWN0X3dhaXQoc3RydWN0IHhlX2d0ICpndCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy01NC1cXHRcXHRcXHRcXHRcXHQgIGVudW0gVkZfTUlHUkFUSU9OX1dBSVRfUE9JTlRTIHdhaXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy01Ny1cXHRcXHR4ZV9ndF9kYmcoZ3QsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3NyaW92X3ZmLmM6NTg6XFx0XFx0XFx0ICBcXFwiKlRFU1RJTkcqIGluamVjdGluZyAldSBtcyBkZWxheSBkdWUgdG8gcmVzZml4X3N0b3BwZXJzPSUjeCwgdG8gY29udGludWUgY2xlYXIgJSN4XFxcXG5cXFwiLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9zcmlvdl92Zi5jLTU5LVxcdFxcdFxcdCAgVkZfTUlHUkFUSU9OX1dBSVRfREVMQVlfSU5fTVMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy02Ny1cXHRzdHJ1Y3QgeGVfZ3QgKl9fZ3QgPSAoZ3QpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYzo2ODpcXHR2Zl9wb3N0X21pZ3JhdGlvbl9pbmplY3Rfd2FpdChfX2d0LCBWRl9NSUdSQVRJT05fV0FJVF8jI19QT1MpO1xcdFxcdFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rfc3Jpb3ZfdmYuYy02OS1cXHR9KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy03LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYy05LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTEyLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTIxNTA9dm9pZCB4ZV9ndWNfY3RfcHJpbnQoc3RydWN0IHhlX2d1Y19jdCAqY3QsIHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgYm9vbCB3YW50X2N0YilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTYzLSAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggYXNzaXN0cyB0aGUgZHJpdmVyIGluIGlkZW50aWZ5aW5nIGlmIGEgZmF1bHRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NDogKiBpbmplY3Rpb24gdGVzdCBpcyBjdXJyZW50bHkgYWN0aXZlLCBhbGxvd2luZyBpdCB0byByZWR1Y2UgdW5uZWNlc3NhcnkgZGVidWdcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NTogKiBvdXRwdXQuIFR5cGljYWxseSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgemVybywgYnV0IHRoZSBmYXVsdCBpbmplY3Rpb25cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE2NjogKiBmcmFtZXdvcmsgY2FuIGFsdGVyIHRoaXMgdG8gcmV0dXJuIGFuIGVycm9yLiBTaW5jZSBmYXVsdHMgYXJlIGluamVjdGVkXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jLTIxNjctICogdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCBpdCdzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgb3B0aW1pemVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTcxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTcyOm5vaW5saW5lIGludCB4ZV9pc19pbmplY3Rpb25fYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE3MzpBTExPV19FUlJPUl9JTkpFQ1RJT04oeGVfaXNfaW5qZWN0aW9uX2FjdGl2ZSwgRVJSTk8pO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTc0LSNlbHNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jOjIxNzU6aW50IHhlX2lzX2luamVjdGlvbl9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTc2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jdC5jPTIxNzg9c3RhdGljIHZvaWQgY3RfZGVhZF9jYXB0dXJlKHN0cnVjdCB4ZV9ndWNfY3QgKmN0LCBzdHJ1Y3QgZ3VjX2N0YiAqY3RiLCB1MzIgcmVhc29uX2NvZGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE4OC1cXHQvKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYzoyMTg5OlxcdCAqIEh1Z2UgZHVtcCBpcyBnZXR0aW5nIGdlbmVyYXRlZCB3aGVuIGluamVjdGluZyBlcnJvciBmb3IgZ3VjIENUL01NSU9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE5MDpcXHQgKiBmdW5jdGlvbnMuIFNvLCBsZXQgdXMgc3VwcHJlc3MgdGhlIGR1bXAgd2hlbiBmYXVsdCBpcyBpbmplY3RlZC5cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmMtMjE5MS1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2N0LmM6MjE5MjpcXHRpZiAoeGVfaXNfaW5qZWN0aW9uX2FjdGl2ZSgpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY3QuYy0yMTkzLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmMtNy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2xvZy5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfbG9nLmMtOS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYy03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfcmVsYXkuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3JlbGF5LmMtOS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG1hcC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0yNy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoyODpleHRlcm4gc3RydWN0IGZhdWx0X2F0dHIgaW5qZWN0X2NzY19od19lcnJvcjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy0yOS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTE2ND1zdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUocHZjX21hc3Rlcl9sb2NhbF9ub25mYXRhbF9lcnJfcmVnKSA9PSBYRV9SQVNfUkVHX1NJWkUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTY5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3MDpzdGF0aWMgYm9vbCBmYXVsdF9pbmplY3RfY3NjX2h3X2Vycm9yKHZvaWQpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTcxLXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoxNzI6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBzaG91bGRfZmFpbChcXHUwMDI2aW5qZWN0X2NzY19od19lcnJvciwgMSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTczLX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyMi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1MjM6XFx0aWYgKGZhdWx0X2luamVjdF9jc2NfaHdfZXJyb3IoKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYy01MjQtXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGlsZS1cXHUwMDNlY3NjX2h3X2Vycm9yX3dvcmspO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTEwNDM9c3RhdGljIHZvaWQgeGVfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDU5LSAqXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEwNjA6ICogRmF1bHQgaW5qZWN0aW9uIGlzIHVzZWQgdG8gdGVzdCB0aGUgZXJyb3IgcGF0aHMgb2Ygc29tZSBpbml0aWFsaXphdGlvblxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDYxLSAqIGZ1bmN0aW9ucyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20geGVfcGNpX3Byb2JlKCkgb3IgaW5kaXJlY3RseSBmb3JcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2Mi0gKiBleGFtcGxlIHRocm91Z2ggeGVfZGV2aWNlX3Byb2JlKCkuIFRob3NlIGZ1bmN0aW9ucyB1c2UgdGhlIGtlcm5lbCBmYXVsdFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDYzOiAqIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgaW5mcmFzdHJ1Y3R1cmUsIHNlZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY0OiAqIERvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi5yc3QgZm9yIGRldGFpbHMuIFRoZSBtYWNyb1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDY1LSAqIEFMTE9XX0VSUk9SX0lOSkVDVElPTigpIGlzIHVzZWQgdG8gY29uZGl0aW9uYWxseSBza2lwIGZ1bmN0aW9uIGV4ZWN1dGlvblxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xMDY2LSAqIGF0IHJ1bnRpbWUgYW5kIHVzZSBhIHByb3ZpZGVkIHJldHVybiB2YWx1ZS4gVGhlIGZpcnN0IHJlcXVpcmVtZW50IGZvclxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxMDY3OiAqIGVycm9yIGluamVjdGFibGUgZnVuY3Rpb25zIGlzIHByb3BlciBoYW5kbGluZyBvZiB0aGUgZXJyb3IgY29kZSBieSB0aGVcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA2OC0gKiBjYWxsZXIgZm9yIHJlY292ZXJ5LCB3aGljaCBpcyBhbHdheXMgdGhlIGNhc2UgaGVyZS4gVGhlIHNlY29uZFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEwNzMtICogY2FsbGVyLiBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gY29uc2VxdWVuY2Ugb24gdGhvc2Ugc3BlY2lmaWMgY2FsbGVycyB3aGVuXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjEwNzQ6ICogZnVuY3Rpb24gZXJyb3IgaW5qZWN0aW9uIHNraXBzIHRoZSB3aG9sZSBmdW5jdGlvbi5cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTA3NS0gKi9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Bjb2RlLmM6MTA6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm9yLWluamVjdGlvbi5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY29kZS5jLTExLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BtLmMtNy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcG0uYy05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xMDc4PXN0YXRpYyB2b2lkIHhlX3B0X2NvbW1pdF9sb2Nrc19hc3NlcnQoc3RydWN0IHhlX3ZtYSAqdm1hKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTA4OC1cXHRpZiAoeGVfdm1hX2lzX3VzZXJwdHIodm1hKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxMDg5OlxcdFxcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTA5MC19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xMzk2PXN0YXRpYyBpbnQgeGVfcHRfcHJlX2NvbW1pdChzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGUgKnB0X3VwZGF0ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MTItICogZGVmYXVsdDsgd3JpdGUgbW9kZSB3aGVuIENPTkZJR19EUk1fWEVfVVNFUlBUUl9JTlZBTF9JTkpFQ1QgaXMgb24sXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQxMzogKiBiZWNhdXNlIGEgdXNlcnB0ciBvcCBpbiB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gbWF5IGludm9rZSB0aGUgaW5qZWN0ZWRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDE0LSAqIHhlX3ZtYV91c2VycHRyX2ZvcmNlX2ludmFsaWRhdGUoKSBwYXRoIHRoYXQgY2FsbHNcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0Mjc9c3RhdGljIHZvaWQgeGVfcHRfc3ZtX3VzZXJwdHJfbm90aWZpZXJfdW5sb2NrKHN0cnVjdCB4ZV92bSAqdm0pXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDM4LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0Mzk6c3RhdGljIGJvb2wgeGVfcHRfdXNlcnB0cl9pbmplY3RfZWFnYWluKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDQwLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NDpzdGF0aWMgYm9vbCB4ZV9wdF91c2VycHRyX2luamVjdF9lYWdhaW4oc3RydWN0IHhlX3VzZXJwdHJfdm1hICp1dm1hKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTUte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MTQ2MT1zdGF0aWMgaW50IHZtYV9jaGVja191c2VycHRyKHN0cnVjdCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV92bWEgKnZtYSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NjYtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ2NzpcXHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NjgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDcyLVxcdHV2bWEgPSB0b191c2VycHRyX3ZtYSh2bWEpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0NzM6XFx0aWYgKHhlX3B0X3VzZXJwdHJfaW5qZWN0X2VhZ2Fpbih1dm1hKSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDc0LVxcdFxcdHhlX3ZtYV91c2VycHRyX2ZvcmNlX2ludmFsaWRhdGUodXZtYSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0xNDkyPXN0YXRpYyBpbnQgb3BfY2hlY2tfc3ZtX3VzZXJwdHIoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3ZtYV9vcCAqb3AsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDk2LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjE0OTc6XFx0eGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDk4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjM3Mz1pbnQgeGVfcHRfdXBkYXRlX29wc19wcmVwYXJlKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfdm1hX29wcyAqdm9wcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0MDEtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQwMjpcXHRpZiAodm9wcy1cXHUwMDNlaW5qZWN0X2Vycm9yIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQwMzpcXHQgICAgdm9wcy1cXHUwMDNldm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gPT0gRk9SQ0VfT1BfRVJST1JfUFJFUEFSRSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDA0LVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjQxMT1zdGF0aWMgdm9pZCBiaW5kX29wX2NvbW1pdChzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0MzgtXFx0aWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNDM5OlxcdFxcdHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZSh2bSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjQ0MC1cXHRcXHR0b191c2VycHRyX3ZtYSh2bWEpLVxcdTAwM2V1c2VycHRyLmluaXRpYWxfYmluZCA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNDUzPXN0YXRpYyB2b2lkIHVuYmluZF9vcF9jb21taXQoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3RpbGUgKnRpbGUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNDc0LVxcdFxcdGlmICh4ZV92bWFfaXNfdXNlcnB0cih2bWEpKSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjQ3NTpcXHRcXHRcXHR4ZV9zdm1fYXNzZXJ0X2hlbGRfcmVhZF9vcl9pbmplY3Rfd3JpdGUodm0pO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI0NzYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNjA5PXhlX3B0X3VwZGF0ZV9vcHNfcnVuKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBzdHJ1Y3QgeGVfdm1hX29wcyAqdm9wcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI2MzctI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjYzODpcXHRpZiAodm9wcy1cXHUwMDNlaW5qZWN0X2Vycm9yIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjYzOTpcXHQgICAgdm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gPT0gRk9SQ0VfT1BfRVJST1JfUlVOKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI2NDAtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3YuYy01LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jOjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdi5jLTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9Mzg1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kcm1fcGFnZW1hcF9mcm9tX2ZkKGludCBmZCwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MDMtI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9YRV9VU0VSUFRSX0lOVkFMX0lOSkVDVClcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDA0OiNkZWZpbmUgeGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtX18pIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDA1LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNih2bV9fKS1cXHUwMDNlc3ZtLmdwdXN2bS5ub3RpZmllcl9sb2NrKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MDYtI2Vsc2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDA3OiNkZWZpbmUgeGVfc3ZtX2Fzc2VydF9oZWxkX3JlYWRfb3JfaW5qZWN0X3dyaXRlKHZtX18pIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDA4LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcXHUwMDI2KHZtX18pLVxcdTAwM2Vzdm0uZ3B1c3ZtLm5vdGlmaWVyX2xvY2spXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDIyLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaDo0MjM6c3RhdGljIGlubGluZSB2b2lkIHhlX3N2bV9hc3NlcnRfaGVsZF9yZWFkX29yX2luamVjdF93cml0ZShzdHJ1Y3QgeGVfdm0gKnZtKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC00MjQte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy01LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlLmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGUuYy03LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VjX2Z3LmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYzo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdWNfZncuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYz0xMjU9aW50IHhlX3ZhbGlkYXRpb25fY3R4X2luaXQoc3RydWN0IHhlX3ZhbGlkYXRpb25fY3R4ICpjdHgsIHN0cnVjdCB4ZV92YWxpZGF0aW9uX2RldmljZSAqdmFsLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYy0xNjQtICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYzoxNjU6c3RhdGljIGJvb2wgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKHN0cnVjdCBkcm1fZXhlYyAqZXhlYylcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE2Ni17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE3MS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jOjE3MjpzdGF0aWMgYm9vbCB4ZV92YWxpZGF0aW9uX2NvbnRlbnRpb25faW5qZWN0ZWQoc3RydWN0IGRybV9leGVjICpleGVjKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92YWxpZGF0aW9uLmM9MTc5PXN0YXRpYyBib29sIF9feGVfdmFsaWRhdGlvbl9zaG91bGRfcmV0cnkoc3RydWN0IHhlX3ZhbGlkYXRpb25fY3R4ICpjdHgsIGludCByZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdmFsaWRhdGlvbi5jLTE4Mi1cXHQgICAgKChjdHgtXFx1MDAzZXJlcXVlc3RfZXhjbHVzaXZlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYzoxODM6XFx0ICAgICAgeGVfdmFsaWRhdGlvbl9jb250ZW50aW9uX2luamVjdGVkKGN0eC1cXHUwMDNlZXhlYykpIHx8XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZhbGlkYXRpb24uYy0xODQtXFx0ICAgICAhY3R4LVxcdTAwM2VyZXF1ZXN0X2V4Y2x1c2l2ZSkpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jPTMyOTE9c3RhdGljIGludCB2bV9iaW5kX2lvY3RsX29wc19sb2NrX2FuZF9wcmVwKHN0cnVjdCBkcm1fZXhlYyAqZXhlYyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTMzMDgtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzMwOTpcXHRpZiAodm9wcy1cXHUwMDNlaW5qZWN0X2Vycm9yIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzMxMDpcXHQgICAgdm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gPT0gRk9SQ0VfT1BfRVJST1JfTE9DSylcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zMzExLVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM9Mzg1Mz1pbnQgeGVfdm1fYmluZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00MDI2LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEZPUkNFX09QX0VSUk9SKSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDAyNzpcXHRcXHRcXHR2b3BzLmluamVjdF9lcnJvciA9IHRydWU7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDAyODpcXHRcXHRcXHR2bS1cXHUwMDNleGUtXFx1MDAzZXZtX2luamVjdF9lcnJvcl9wb3NpdGlvbiA9XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDAyOTpcXHRcXHRcXHRcXHQodm0tXFx1MDAzZXhlLVxcdTAwM2V2bV9pbmplY3RfZXJyb3JfcG9zaXRpb24gKyAxKSAlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDAzMC1cXHRcXHRcXHRcXHRGT1JDRV9PUF9FUlJPUl9DT1VOVDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oPTUzMD1zdHJ1Y3QgeGVfdm1hX29wcyB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaC01NTAtI2lmZGVmIFRFU1RfVk1fT1BTX0VSUk9SXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtX3R5cGVzLmg6NTUxOlxcdC8qKiBAaW5qZWN0X2Vycm9yOiBpbmplY3QgZXJyb3IgdG8gdGVzdCBlcnJvciBoYW5kbGluZyAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5oOjU1MjpcXHRib29sIGluamVjdF9lcnJvcjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaC01NTMtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXJfdHlwZXMuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd2EuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3dhLmMtMTItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfd29wY20uYy03LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV93b3BjbS5jLTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjA4LjAzNjcwMTg5N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjA3MTU2NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ1NDIEhhcmR3YXJlIEVycm9yIEhhbmRsaW5nKipcblxuQWxyaWdodCwgc28gSSd2ZSBzdHVtYmxlZCB1cG9uIGBmYXVsdF9pbmplY3RfY3NjX2h3X2Vycm9yYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhIENTQyBoYXJkd2FyZSBlcnJvci4gU3BlY2lmaWNhbGx5LCBpdCdzIHNjaGVkdWxpbmcgYSB3b3JrIGl0ZW06IGBzY2hlZHVsZV93b3JrKFx1MDAyNnRpbGUtXHUwMDNlY3NjX2h3X2Vycm9yX3dvcmspO2AuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIG9idmlvdXNseSwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgd29yayBpdGVtLCBgY3NjX2h3X2Vycm9yX3dvcmtgLCAqYWN0dWFsbHkqIGRvZXMuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGVycm9yIGhhbmRsaW5nIGZsb3cgaGVyZS4gSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHdvcmsgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQgcmVhY3RzIHRvLCBhbmQgZGVhbHMgd2l0aCwgdGhlIHByZXN1bWVkIGhhcmR3YXJlIGZhdWx0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjM4ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDoxMy4yNDM4NjE3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTIzNDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjc2NfaHdfZXJyb3Jfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0xNzA9c3RhdGljIGJvb2wgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcih2b2lkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTc0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjE3NTpzdGF0aWMgdm9pZCBjc2NfaHdfZXJyb3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMTc2LXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzoxNzc6XFx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp0aWxlKSwgY3NjX2h3X2Vycm9yX3dvcmspO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTE3OC1cXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHRpbGVfdG9feGUodGlsZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYz0xODM9c3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjExLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjIxMjpcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ0aWxlLVxcdTAwM2Vjc2NfaHdfZXJyb3Jfd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtMjEzLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jPTUxOT12b2lkIHhlX2h3X2Vycm9yX2lycV9oYW5kbGVyKHN0cnVjdCB4ZV90aWxlICp0aWxlLCBjb25zdCB1MzIgbWFzdGVyX2N0bClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTUyMy1cXHRpZiAoZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcigpKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jOjUyNDpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ0aWxlLVxcdTAwM2Vjc2NfaHdfZXJyb3Jfd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmMtNTI1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2Vycm9yLmM9NTU1PXZvaWQgeGVfaHdfZXJyb3JfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTU2MS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuYzo1NjI6XFx0SU5JVF9XT1JLKFxcdTAwMjZ0aWxlLVxcdTAwM2Vjc2NfaHdfZXJyb3Jfd29yaywgY3NjX2h3X2Vycm9yX3dvcmspO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lcnJvci5jLTU2My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlX3R5cGVzLmg9Mzc9c3RydWN0IHhlX3RpbGUge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaC0xMTYtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaDoxMTc6XFx0LyoqIEBjc2NfaHdfZXJyb3Jfd29yazogd29ya2VyIHRvIHJlcG9ydCBDU0MgSFcgZXJyb3JzICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RpbGVfdHlwZXMuaDoxMTg6XFx0c3RydWN0IHdvcmtfc3RydWN0IGNzY19od19lcnJvcl93b3JrO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90aWxlX3R5cGVzLmgtMTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDoxNS4zNTMxMDQ0NzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwOTIwNTk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OlxuXG4qKkRlYnVnZ2luZyBDU0MgSGFyZHdhcmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGEgQ1NDIChwcmVzdW1hYmx5IENvbG9yIFNwYWNlIENvbnZlcnNpb24pIGhhcmR3YXJlIGVycm9yLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY3NjX2h3X2Vycm9yX3dvcmtgIGlzIGxpa2VseSBjYWxsaW5nIHNvbWUgZXJyb3IgaGFuZGxlciBmdW5jdGlvbiwgbWF5YmUgc29tZXRoaW5nIGxpa2UgYGNzY19od19lcnJvcl9oYW5kbGVyYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy5cblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBjc2NfaHdfZXJyb3Jfd29ya2AgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbjpcbmBgYGNcbnN0YXRpYyB2b2lkIGNzY19od19lcnJvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbntcblx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp0aWxlKSwgY3NjX2h3X2Vycm9yX3dvcmspO1xuLi4uXG5gYGBcbk9rYXksIHNvIGl0IHRha2VzIGEgYHdvcmtfc3RydWN0YCBhcyBpbnB1dCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBhIGB4ZV90aWxlYCBzdHJ1Y3R1cmUgZnJvbSBpdCB1c2luZyBgY29udGFpbmVyX29mYC4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBwYXJ0IG9mIGEgZGVmZXJyZWQgd29yayBxdWV1ZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdGlsZSBvbiB0aGUgaGFyZHdhcmUuIEl0J3Mgbm90IGEgZGlyZWN0IGNhbGwsIGl0IGlzIHByb2JhYmx5IGEgcmVnaXN0ZXJlZCB0YXNrIHdpdGggdGhlIGtlcm5lbC5cblxuTm93IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIGBjc2NfaHdfZXJyb3Jfd29ya2AgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gdGhpcyBlcnJvciBvY2N1cnMuIEkgd2lsbCBoYXZlIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBgd29ya19zdHJ1Y3RgIGlzIHF1ZXVlZC9zY2hlZHVsZWQsIGFuZCB3aGF0IHRoYXQgY2FsbCBwYXRoIGRvZXMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IGVycm9yIGhhbmRsaW5nIGlzIGludm9sdmVkIGluIHRoZSB3b3JrJ3MgYm9keS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4ODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTQ6MjAuMDYyMzE0MTI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZXJyb3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0c3RhdGljIGJvb2wgZmF1bHRfaW5qZWN0X2NzY19od19lcnJvcih2b2lkKVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBzaG91bGRfZmFpbChcXHUwMDI2aW5qZWN0X2NzY19od19lcnJvciwgMSk7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdHN0YXRpYyB2b2lkIGNzY19od19lcnJvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMTc2OlxcdHtcXG4gMTc3OlxcdFxcdHN0cnVjdCB4ZV90aWxlICp0aWxlID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqdGlsZSksIGNzY19od19lcnJvcl93b3JrKTtcXG4gMTc4OlxcdFxcdHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gdGlsZV90b194ZSh0aWxlKTtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0eGVfc3Vydml2YWJpbGl0eV9tb2RlX3J1bnRpbWVfZW5hYmxlKHhlKTtcXG4gMTgxOlxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0c3RhdGljIHZvaWQgY3NjX2h3X2Vycm9yX2hhbmRsZXIoc3RydWN0IHhlX3RpbGUgKnRpbGUsIGNvbnN0IGVudW0gaGFyZHdhcmVfZXJyb3IgaHdfZXJyKVxcbiAxODQ6XFx0e1xcbiAxODU6XFx0XFx0Y29uc3QgZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5IHNldmVyaXR5ID0gaHdfZXJyX3RvX3NldmVyaXR5KGh3X2Vycik7XFxuIDE4NjpcXHRcXHRjb25zdCBjaGFyICpzZXZlcml0eV9zdHIgPSBlcnJvcl9zZXZlcml0eVtzZXZlcml0eV07XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IHRpbGVfdG9feGUodGlsZSk7XFxuIDE4ODpcXHRcXHRzdHJ1Y3QgeGVfbW1pbyAqbW1pbyA9IFxcdTAwMjZ0aWxlLVxcdTAwM2VtbWlvO1xcbiAxODk6XFx0XFx0dTMyIGJhc2UsIGVycl9iaXQsIGVycl9zcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE1OjU0OjIwLjA2MjQyMjg4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDI2NzYxMDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRXZhbHVhdGlvbjogRmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQWhhLCBgY3NjX2h3X2Vycm9yX3dvcmtgIGRvZXNuJ3QgZGlyZWN0bHkgdHJpZ2dlciBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgLlwiIFRoYXQgaGFuZGxlciBpcyB0aGUga2V5LCBhbmQgaXQgbG9va3MgbGlrZSBpdCBnZXRzIGNhbGxlZCBmcm9tIGB4ZV9od19lcnJvcl9pcnFfaGFuZGxlcmAuIFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGF0PyBJdCdzIGFuIGludGVycnVwdCBoYW5kbGVyLCBtZWFuaW5nIGl0J3MgaGFyZHdhcmUtdHJpZ2dlcmVkLiBTeXprYWxsZXIncyBub3QgZ29pbmcgdG8gaW5qZWN0IGhhcmR3YXJlIGludGVycnVwdHMgZGlyZWN0bHksIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgc29mdHdhcmUgaW50ZXJmYWNlIHRvIGRvIHNvLlxuXG5JIHRoZW4gdHJhY2VkIHRoZSBjYWxsIGNoYWluIHRvIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YC4gVGhhdCBsZWFkcyB0byBhIGJ1bmNoIG9mIGludGVybmFsIGNhbGxzOiBgeGVfZHJtX3Jhc19ldmVudGAsIGByYXNfc2VuZF9lcnJvcl9ldmVudGAsIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAsIGBnZXRfcGVuZGluZ19ldmVudGAgdmlhIGB4ZV9zeXNjdHJsX2V2ZW50LmNgLCBhbmQgZmluYWxseSB0byBgeGVfc3lzY3RybF93b3JrYCwgd2hpY2ggaXMgYSB3b3JrcXVldWUgaXRlbSwgcG90ZW50aWFsbHkgdHJpZ2dlcmVkIGJ5IGB4ZV9zeXNjdHJsX2lycV9oYW5kbGVyYC4gU28sIGl0J3MgYWxsIGhhcmR3YXJlLWRlcGVuZGVudCwgb3IgYSBzb2Z0d2FyZSBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIHRyaWdnZXJlZC5cblxuVGhlIGNvbmNsdXNpb24gaXMgdGhhdCBzeXprYWxsZXIgbGlrZWx5IHdvbid0IGJlIGFibGUgdG8gdHJpZ2dlciB0aGVzZSBwYXRocyBlYXNpbHkgdW5sZXNzIGl0J3MgZnV6emluZyBhIHZpcnR1YWwgZGV2aWNlIHRoYXQgZW11bGF0ZXMgdGhlIGhhcmR3YXJlIGludGVycnVwdHMsIG9yIGlmIHRoZXJlJ3MgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IGl0IGNhbiB3cml0ZSB0by4gVGhlIHByb21wdCBtZW50aW9uZWQgZGVidWdmcywgYW5kIEkga25vdyBzeXprYWxsZXIgY2FuIHVzZSBkZWJ1Z2ZzIGlmIGl0J3MgYXZhaWxhYmxlLiBIb3dldmVyLCBldmVuIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQsIHRoaXMgcGF0Y2gganVzdCBhZGRzIGEgbmV0bGluayBldmVudCBicm9hZGNhc3QuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQncyBqdXN0IGEgc3RhbmRhcmQgbmV0bGluayBldmVudCBicm9hZGNhc3QuIFRoZSBvdGhlciBsb2dpYyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzZW5kaW5nIHRoZSBlcnJvciBldmVudCBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbnMgYW5kIGNvdW50ZXIgdmFsdWVzLiBUaGlzIGFsbCBmZWVscyB2ZXJ5IHNpbXBsZSwgYW5kIGRlZmluaXRlbHkgaW5hY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHdpdGhvdXQgaGFyZHdhcmUgZXJyb3JzLlxuXG5TaW5jZSB0aGUgcHJvbXB0IHN0YXRlczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIsIGFuZCBgeGVgIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIgKEludGVsIFhlIGdyYXBoaWNzKSwgdGhpcyBjb2RlIHdpbGwgYmUgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBzeXprYWxsZXIgUUVNVS9HQ0Ugc2V0dXAgd2lsbCBub3QgaGF2ZSB0aGUgcmVxdWlyZWQgaGFyZHdhcmUgZXJyb3IgZW11bGF0aW9uLiBJIGtub3cgdGhhdCBzeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgYHZrbXNgIChWaXJ0dWFsIEtNUyksIGJ1dCBgeGVgIGlzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGFuZCB3aWxsIG5vdCBiZSBsb2FkZWQgdW5sZXNzIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IG9yIG1vY2tlZCBhbmQgdGhlIHNldHVwIGlzIG5vdCBzZXQgdXAgdG8gZG8gdGhhdC4gRXZlbiBpZiBpdCdzIGxvYWRlZCwgaGFyZHdhcmUgZXJyb3JzIGFyZSBub3QgdHJpZ2dlcmFibGUgZnJvbSB1c2Vyc3BhY2UuIFNvLCBpdCBhcHBlYXJzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbGFzdCB0aW1lIHRoYXQgdGhlcmUncyBubyBvdGhlciB3YXkgdG8gcmVhY2ggYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCBnaXZlbiBpdCBpcyBgRVhQT1JUX1NZTUJPTGAuIEknbGwgbG9vayB0byBzZWUgaWYgYW55IG90aGVyIGRyaXZlcnMgbWlnaHQgYmUgdXNpbmcgaXQuIEJ1dCBmb3Igbm93LCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogKipXb3J0aEZ1enppbmc9ZmFsc2UqKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTQ6MzQuMzMwMDM1OTE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyNDkwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9yYXNfbmxfZXJyb3JfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYz0yMjI9c3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNTgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzoyNTk6ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNjAtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI3MDppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzEtXFx0XFx0XFx0ICAgdTMyIHZhbHVlLCBnZnBfdCBmbGFncylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzA5LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjMxMDpFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzExLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xOTg9dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxNDpcXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlLCBmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTUtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Mj12b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbmluY2x1ZGUvZHJtL2RybV9yYXMuaDo4MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg0LVxcdFxcdFxcdCAgIHUzMiB2YWx1ZSwgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTg3PXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oLTg5LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUsIGdmcF90IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNTo1NDozNi40ODI1Mzc1NDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MzI4OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBJJ3ZlIGNvbWUgdG8gYSBmaXJtIGNvbmNsdXNpb24uIFRoaXMgaXNuJ3Qgc29tZXRoaW5nIFN5emthbGxlciBuZWVkcyB0byB3b3JyeSBhYm91dC4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGlzOiBvbmx5IGB4ZWAgaXMgZXZlbiAqdXNpbmcqIHRoaXMgbmV3IG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50LiBBbmQsIGNydWNpYWxseSwgYHhlYCAqb25seSogY2FsbHMgaXQgZnJvbSBpdHMgaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMuIFRoYXQgbWVhbnMsIHJlYWxpc3RpY2FsbHksIGl0J3MgdW5yZWFjaGFibGUuIEl0J3MgY29uZmluZWQgdG8gdGhlIGRlcHRocyBvZiBoYXJkd2FyZSBlcnJvciBoYW5kbGluZy5cblxuVGhlIGV2ZW50LCBgZXJyb3ItZXZlbnRgLCB3aGljaCBpbnRlZ3JhdGVzIGludG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgaXMgdHJpZ2dlcmVkIGJ5IHRoaW5ncyBsaWtlIGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cy4gSSBrbm93IHRoYXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB3aGljaCBpcyB3aGVyZSBTeXprYWxsZXIgdHlwaWNhbGx5IGRvZXMgaXRzIHdvcmssIHRob3NlIHRyaWdnZXJzIGFyZSBqdXN0IG5vdCBnb2luZyB0byBoYXBwZW4uIFlvdSdkIG5lZWQgc29tZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiB0byBldmVuICp0aGluayogYWJvdXQgcmVhY2hpbmcgdGhhdCBjb2RlLiBTbywgcmVhbGx5LCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcsIGZ1enphYmxlIGZ1bmN0aW9uYWxpdHkgdGhhdCBTeXprYWxsZXIgY2FuIGFjY2Vzcy4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gTm8gbmVlZCB0byBkZXZvdGUgYW55IHJlc291cmNlcyB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM2NiwiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTU6NTQ6NDIuMDI1ODMwNTY3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGBlcnJvci1ldmVudGAgdG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgYW5kIGludGVncmF0ZXMgaXQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLiBUaGUgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGhhcmR3YXJlIGVycm9ycyBvY2N1ciAoaGFuZGxlZCBpbiBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cywgd2hpY2ggYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZnJvbSB1c2Vyc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGNvZGUgZm9yIHN5emthbGxlciB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGBlcnJvci1ldmVudGAgdG8gdGhlIGBkcm1fcmFzYCBmYW1pbHkgYW5kIGludGVncmF0ZXMgaXQgaW50byB0aGUgYHhlYCBEUk0gZHJpdmVyLiBUaGUgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGhhcmR3YXJlIGVycm9ycyBvY2N1ciAoaGFuZGxlZCBpbiBgaHdfZXJyb3Jfc291cmNlX2hhbmRsZXJgIGFuZCBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGludGVycnVwdHMgYW5kIHN5c3RlbSBjb250cm9sbGVyIGV2ZW50cywgd2hpY2ggYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZnJvbSB1c2Vyc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGNvZGUgZm9yIHN5emthbGxlciB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q5b5[1] Phase: Running StartedAt: 2026-07-01 15:54:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q5b5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 15:54:53 +0000 UTC FinishedAt: 2026-07-01 15:54:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}