Name: series-workflow9rd5v Phase: Failed StartedAt: 2026-07-14 08:43:00 +0000 UTC FinishedAt: 2026-07-14 08:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rd5v[0] Phase: Succeeded StartedAt: 2026-07-14 08:43:00 +0000 UTC FinishedAt: 2026-07-14 08:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rd5v[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 08:43:00 +0000 UTC FinishedAt: 2026-07-14 08:54:21 +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+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0IGxheW91dCByZW9yZGVyaW5nIHRvIGdyb3VwIHB1YmxpYy9wcml2YXRlIGZpZWxkcyBmb3Iga2VybmVsLWRvYywgYW5kIGEgcHVyZSByZWZhY3RvcmluZyBpbiBtbS9kYW1vbi9zeXNmcy5jIHRoYXQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVlY2QyZjk0Y2RkOGQ3NDNhMTI4ZDFiY2I1OGIxMzdhZGU4MGI4NDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAwODo1MjozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IGY2OTQ0MmE5ZDQzMTI4Li4zMjdmNTM0Njk2YWE4NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtNDYsNyAmIzQzOzQ2LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBzYW1wbGluZ19hZGRyOlx0QWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suXG4gICogQG5yX2FjY2Vzc2VzOlx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cbiAgKiBAcHJvYmVfaGl0czpcdFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBhZ2U6XHRcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cbiAgKlxuICAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcbkBAIC02OCw5ICYjNDM7NjcsMTEgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsaW5nX2FkZHI7XG4gXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIHByb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgYWdlO1xuLS8qIHByaXZhdGU6IEludGVybmFsIHZhbHVlIGZvciBhZ2UgY2FsY3VsYXRpb24uICovXG4mIzQzOy8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5LiAqL1xuJiM0MztcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdC8qIGZvciBhZ2UgY2FsY3VsYXRpb24uICovXG4gXHR1bnNpZ25lZCBpbnQgbGFzdF9ucl9hY2Nlc3NlcztcbiBcdHVuc2lnbmVkIGNoYXIgbGFzdF9wcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xuIH07XG5AQCAtNzgsOSAmIzQzOzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gLyoqXG4gICogc3RydWN0IGRhbW9uX3RhcmdldCAtIFJlcHJlc2VudHMgYSBtb25pdG9yaW5nIHRhcmdldC5cbiAgKiBAcGlkOlx0XHRUaGUgUElEIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gbW9uaXRvci5cbi0gKiBAbnJfcmVnaW9uczpcdFx0TnVtYmVyIG9mIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQHJlZ2lvbnNfbGlzdDpcdEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICogQG9ic29sZXRlOlx0XHRXaGV0aGVyIHRoZSBjb21taXQgZGVzdGluYXRpb24gdGFyZ2V0IGlzIG9ic29sZXRlLlxuICAqXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxuQEAgLTk0LDEwICYjNDM7OTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gICovXG4gc3RydWN0IGRhbW9uX3RhcmdldCB7XG4gXHRzdHJ1Y3QgcGlkICpwaWQ7XG4mIzQzO1x0Ym9vbCBvYnNvbGV0ZTtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cbiBcdHVuc2lnbmVkIGludCBucl9yZWdpb25zO1xuJiM0MztcdC8qIEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDtcbiYjNDM7XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0Ym9vbCBvYnNvbGV0ZTtcbiB9O1xuIFxuIC8qKlxuQEAgLTE3MywxMCAmIzQzOzE3NSw4IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuICAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4gICogQHRhcmdldF92YWx1ZTpcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxuICAqIEBjdXJyZW50X3ZhbHVlOlx0Q3VycmVudCB2YWx1ZSBvZiBAbWV0cmljLlxuLSAqIEBsYXN0X3BzaV90b3RhbDpcdExhc3QgbWVhc3VyZWQgdG90YWwgUFNJXG4gICogQG5pZDpcdFx0Tm9kZSBpZC5cbiAgKiBAbWVtY2dfaWQ6XHRcdE1lbWNnIGlkLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXG4gICogc2NvcmUgaXMgY2FsY3VsYXRlZCBieSBob3cgY2xvc2UgQGN1cnJlbnRfdmFsdWUgYW5kIEB0YXJnZXRfdmFsdWUgYXJlLiAgVGhlblxuQEAgLTE5OSwxMiAmIzQzOzE5OSwxNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG4gXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XG4gXHQvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqL1xuIFx0dW5pb24ge1xuLVx0XHR1NjQgbGFzdF9wc2lfdG90YWw7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0aW50IG5pZDtcbiBcdFx0XHR1NjQgbWVtY2dfaWQ7XG4gXHRcdH07XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0XHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xuJiM0MztcdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuJiM0MztcbiBcdH07XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTIyMyw3ICYjNDM7MjI4LDYgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxuICAqIEBtczpcdFx0XHRNYXhpbXVtIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBzY2hlbWUgY2FuIHVzZS5cbiAgKiBAc3o6XHRcdFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxuLSAqIEBnb2FsczpcdFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFx1MDAyNmRhbW9zX3F1b3RhX2dvYWwpIGxpc3QuXG4gICogQGdvYWxfdHVuZXI6XHRcdEdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS5cbiAgKiBAZXN6Olx0XHRFZmZlY3RpdmUgc2l6ZSBxdW90YSBpbiBieXRlcy5cbiAgKiBAZmFpbF9jaGFyZ2VfbnVtOlx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxuQEAgLTI1MCw3ICYjNDM7MjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiB0aGUgc2NoZW1lJiMzOTtzIGFjdGlvbi4gIERBTU9OIHRoZW4gY29tcGFyZXMgaXQgYWdhaW5zdCBcdTAwMjZzeiBhbmQgdXNlcyBzbWFsbGVyXG4gICogb25lIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG4gICpcbi0gKiBJZiBAZ29hbHMgaXMgbm90IGVtcHR5LCBEQU1PTiBjYWxjdWxhdGVzIHlldCBhbm90aGVyIHNpemUgcXVvdGEgYmFzZWQgb24gdGhlXG4mIzQzOyAqIElmIGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuICAqIGdvYWxzIHVzaW5nIGl0cyBpbnRlcm5hbCBmZWVkYmFjayBsb29wIGFsZ29yaXRobSwgZm9yIGV2ZXJ5IEByZXNldF9pbnRlcnZhbC5cbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXG4gICogbmV3IHNpemUgcXVvdGEgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbkBAIC0yNzEsNyAmIzQzOzI3NSw3IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xuIFx0dW5zaWduZWQgbG9uZyBtcztcbiBcdHVuc2lnbmVkIGxvbmcgc3o7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuJiM0MztcbiBcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyO1xuIFx0dW5zaWduZWQgbG9uZyBlc3o7XG4gXG5AQCAtMjgzLDYgJiM0MzsyODcsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF9hZ2U7XG4gXG4gLyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBIZWFkIG9mIHF1b3RhIHR1bmluZyBnb2FscyAoXHUwMDI2ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuIFx0LyogRm9yIHRocm91Z2hwdXQgZXN0aW1hdGlvbiAqL1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX3N6O1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX25zO1xuQEAgLTQyNiw3ICYjNDM7NDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuLSAqIEBsaXN0Olx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDQ0LDYgJiM0Mzs0NDksOCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuIFx0fTtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNTE1LDEyICYjNDM7NTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqIEB3bWFya3M6XHRcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWlncmF0ZV9kZXN0czpcdERlc3RpbmF0aW9uIG5vZGVzIGlmIEBhY3Rpb24gaXMgXCYjMzQ7bWlncmF0ZV97aG90LGNvbGR9XCYjMzQ7LlxuICAqIEB0YXJnZXRfbmlkOlx0XHREZXN0aW5hdGlvbiBub2RlIGlmIEBhY3Rpb24gaXMgXCYjMzQ7bWlncmF0ZV97aG90LGNvbGR9XCYjMzQ7LlxuLSAqIEBjb3JlX2ZpbHRlcnM6XHRBZGRpdGlvbmFsIHNldCBvZiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcdTAwMjZhY3Rpb24uXG4tICogQG9wc19maWx0ZXJzOlx0b3BzIGxheWVyIGhhbmRsaW5nIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LlxuLSAqIEBsYXN0X2FwcGxpZWQ6XHRMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxuICAqIEBzdGF0Olx0XHRTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLlxuICAqIEBtYXhfbnJfc25hcHNob3RzOlx0VXBwZXIgbGltaXQgb2YgbnJfc25hcHNob3RzIHN0YXQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBGb3IgZWFjaCBAYXBwbHlfaW50ZXJ2YWxfdXMsIERBTU9OIGZpbmRzIHJlZ2lvbnMgd2hpY2ggZml0IGluIHRoZVxuICAqIFx1MDAyNnBhdHRlcm4gYW5kIGFwcGxpZXMgXHUwMDI2YWN0aW9uIHRvIHRob3NlLiBUbyBhdm9pZCBjb25zdW1pbmcgdG9vIG11Y2hcbkBAIC01NDIsMTYgJiM0Mzs1NDUsNyBAQCBzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyB7XG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcdTAwMjZhY3Rpb24gdG8gcmVzcGVjdFxuLSAqIFx1MDAyNmNvcmVfZmlsdGVyc1xuLSAqXG4tICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nXG4tICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWQgd2l0aCB0aGUgY29yZSBsYXllclxuLSAqIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHlcbi0gKiBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLiAgTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvblxuLSAqIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb24gb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFx1MDAyNnN0cnVjdFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXG4tICogdW5zZXRzIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuLSAqIGZpbmlzaGVkLlxuJiM0MzsgKiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxuICAqXG4gICogQWZ0ZXIgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXHUwMDI2c3RhdCBpcyB1cGRhdGVkLlxuICAqXG5AQCAtNTYyLDYgJiM0Mzs1NTYsMTYgQEAgc3RydWN0IGRhbW9zIHtcbiBcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuO1xuIFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xuIFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cztcbiYjNDM7XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdGludCB0YXJnZXRfbmlkO1xuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyBtaWdyYXRlX2Rlc3RzO1xuJiM0MztcdFx0fTtcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xuIC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXG4gXHQvKlxuIFx0ICogbnVtYmVyIG9mIHNhbXBsZSBpbnRlcnZhbHMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGJlZm9yZSBhcHBseWluZ1xuQEAgLTU3OCwyMCAmIzQzOzU4MiwyNSBAQCBzdHJ1Y3QgZGFtb3Mge1xuIFx0Lyogd2hldGhlciB0byByZWplY3QgY29yZS9vcHMgZmlsdGVycyB1bWF0Y2hlZCByZWdpb25zICovXG4gXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcbiBcdGJvb2wgb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4tLyogcHVibGljOiAqL1xuLVx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuLVx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuLVx0dW5pb24ge1xuLVx0XHRzdHJ1Y3Qge1xuLVx0XHRcdGludCB0YXJnZXRfbmlkO1xuLVx0XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7XG4tXHRcdH07XG4tXHR9O1xuJiM0MztcdC8qIEFkZGl0aW9uYWwgc2V0IG9mIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFx1MDAyNmFjdGlvbi4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzO1xuJiM0MztcdC8qIG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgb3BzX2ZpbHRlcnM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZVxuJiM0MztcdCAqIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWRcbiYjNDM7XHQgKiB3aXRoIHRoZSBjb3JlIGxheWVyIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0XG4mIzQzO1x0ICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLlxuJiM0MztcdCAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgXHUwMDI2c3RydWN0IGRhbW9uIHJlZ2lvblxuJiM0MztcdCAqIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cbiYjNDM7XHQgKiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpYyB1bnNldHNcbiYjNDM7XHQgKiBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcbiYjNDM7XHQgKiBmaW5pc2hlZC5cbiYjNDM7XHQgKi9cbiBcdHZvaWQgKmxhc3RfYXBwbGllZDtcbi1cdHN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7XG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTc0OSw3ICYjNDM7NzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XG4gICogQG1hdGNoaW5nOlx0V2hldGhlciB0aGlzIGZpbHRlciBpcyBmb3IgdGhlIHR5cGUtbWF0Y2hpbmcgb25lcy5cbiAgKiBAYWxsb3c6XHRXaGV0aGVyIHRoZSBAdHlwZS1AbWF0Y2hpbmcgb25lcyBzaG91bGQgcGFzcyB0aGlzIGZpbHRlci5cbiAgKiBAbWVtY2dfaWQ6XHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxuLSAqIEBsaXN0Olx0U2libGluZ3MgbGlzdC5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiBcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbkBAIC03NTgsNiAmIzQzOzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuIFx0dW5pb24ge1xuIFx0XHR1NjQgbWVtY2dfaWQ7XG4gXHR9O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIFNpYmxpbmdzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NjUsMTIgJiM0Mzs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLlxuICAqXG4gICogQHdlaWdodDpcdFJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuXG4tICogQGZpbHRlcnM6XHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXG4tICogQGxpc3Q6XHRTaWJsaW5ncyBsaXN0LlxuICAqL1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbiYjNDM7XHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtODM3LDE0ICYjNDM7ODQ4LDkgQEAgc3RydWN0IGRhbW9uX2F0dHJzIHtcbiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsXG4gICogaW5jbHVkaW5nIGRhbW9uX2NhbGwoKSBhbmQgZGFtb3Nfd2FsaygpLlxuICAqXG4tICogQG9wczpcdFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy5cbi0gKiBAcHJvYmVzOlx0SGVhZCBvZiBwcm9iZXMgKFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LlxuICAqIEBhZGRyX3VuaXQ6XHRTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi5cbiAgKiBAbWluX3JlZ2lvbl9zejpcdE1pbmltdW0gcmVnaW9uIHNpemUuXG4gICogQHBhdXNlOlx0UGF1c2Uga2RhbW9uZCBtYWluIGxvb3AuXG4tICogQGFkYXB0aXZlX3RhcmdldHM6XHRIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXHUwMDI2ZGFtb25fdGFyZ2V0KSBsaXN0LlxuLSAqIEBzY2hlbWVzOlx0XHRIZWFkIG9mIHNjaGVtZXMgKFx1MDAyNmRhbW9zKSBsaXN0LlxuLSAqIEBybmRfc3RhdGU6XHRQZXItY3R4IFBSTkcgc3RhdGUgZm9yIGRhbW9uX3JhbmQoKS5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fY3R4IHtcbiBcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcbkBAIC04OTMsMTUgJiM0Mzs4OTksMjEgQEAgc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgbXV0ZXgga2RhbW9uZF9sb2NrO1xuIFxuIC8qIHB1YmxpYzogKi9cbi1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcztcbi1cdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XG4gXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3o7XG4gXHRib29sIHBhdXNlO1xuIFxuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi9cbiYjNDM7XHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4mIzQzO1x0LyogSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWRhcHRpdmVfdGFyZ2V0cztcbiYjNDM7XHQvKiBIZWFkIG9mIHByb2JlcyAoXHUwMDI2ZGFtb25fcHJvYmUpIGxpc3QuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7XG4mIzQzO1x0LyogSGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcbiBcbiYjNDM7XHQvKiBAcm5kX3N0YXRlOlx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovXG4gXHRzdHJ1Y3Qgcm5kX3N0YXRlIHJuZF9zdGF0ZTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMjA1MSw3ICYjNDM7MjA1MSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0aW50IGksIGVycjtcbiBcbiBcdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXG4tXHRpZiAoY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG4mIzQzO1x0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c2ZzX3RhcmdldHMtXHUwMDNlbnI7IGkmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3QgbGF5b3V0IHJlb3JkZXJpbmcgdG8gZ3JvdXAgcHVibGljL3ByaXZhdGUgZmllbGRzIGZvciBrZXJuZWwtZG9jLCBhbmQgYSBwdXJlIHJlZmFjdG9yaW5nIGluIG1tL2RhbW9uL3N5c2ZzLmMgdGhhdCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWNkMmY5NGNkZDhkNzQzYTEyOGQxYmNiNThiMTM3YWRlODBiODQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMDg6NTI6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggZjY5NDQyYTlkNDMxMjguLjMyN2Y1MzQ2OTZhYTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC00Niw3ICYjNDM7NDYsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7CiAgKiBAc2FtcGxpbmdfYWRkcjoJQWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suCiAgKiBAbnJfYWNjZXNzZXM6CUFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uCiAgKiBAcHJvYmVfaGl0czoJCU51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqIEBhZ2U6CQlBZ2Ugb2YgdGhpcyByZWdpb24uCiAgKgogICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKQpAQCAtNjgsOSAmIzQzOzY3LDExIEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gewogCXVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7CiAJdW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBpbnQgYWdlOwotLyogcHJpdmF0ZTogSW50ZXJuYWwgdmFsdWUgZm9yIGFnZSBjYWxjdWxhdGlvbi4gKi8KJiM0MzsvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi8KJiM0MzsJLyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwkvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqLwogCXVuc2lnbmVkIGludCBsYXN0X25yX2FjY2Vzc2VzOwogCXVuc2lnbmVkIGNoYXIgbGFzdF9wcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdOwogfTsKQEAgLTc4LDkgJiM0Mzs3OSw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gewogLyoqCiAgKiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0LgogICogQHBpZDoJCVRoZSBQSUQgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBtb25pdG9yLgotICogQG5yX3JlZ2lvbnM6CQlOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4KLSAqIEByZWdpb25zX2xpc3Q6CUhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuCi0gKiBAbGlzdDoJCUxpc3QgaGVhZCBmb3Igc2libGluZ3MuCiAgKiBAb2Jzb2xldGU6CQlXaGV0aGVyIHRoZSBjb21taXQgZGVzdGluYXRpb24gdGFyZ2V0IGlzIG9ic29sZXRlLgogICoKICAqIEVhY2ggbW9uaXRvcmluZyBjb250ZXh0IGNvdWxkIGhhdmUgbXVsdGlwbGUgdGFyZ2V0cy4gIEZvciBleGFtcGxlLCBhIGNvbnRleHQKQEAgLTk0LDEwICYjNDM7OTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7CiAgKi8KIHN0cnVjdCBkYW1vbl90YXJnZXQgewogCXN0cnVjdCBwaWQgKnBpZDsKJiM0MzsJYm9vbCBvYnNvbGV0ZTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi8KIAl1bnNpZ25lZCBpbnQgbnJfcmVnaW9uczsKJiM0MzsJLyogSGVhZCBvZiB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDsKJiM0MzsJLyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JYm9vbCBvYnNvbGV0ZTsKIH07CiAKIC8qKgpAQCAtMTczLDEwICYjNDM7MTc1LDggQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7CiAgKiBAbWV0cmljOgkJTWV0cmljIHRvIGJlIHVzZWQgZm9yIHJlcHJlc2VudGluZyB0aGUgZ29hbC4KICAqIEB0YXJnZXRfdmFsdWU6CVRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLgogICogQGN1cnJlbnRfdmFsdWU6CUN1cnJlbnQgdmFsdWUgb2YgQG1ldHJpYy4KLSAqIEBsYXN0X3BzaV90b3RhbDoJTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kKICAqIEBuaWQ6CQlOb2RlIGlkLgogICogQG1lbWNnX2lkOgkJTWVtY2cgaWQuCi0gKiBAbGlzdDoJCUxpc3QgaGVhZCBmb3Igc2libGluZ3MuCiAgKgogICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlCiAgKiBzY29yZSBpcyBjYWxjdWxhdGVkIGJ5IGhvdyBjbG9zZSBAY3VycmVudF92YWx1ZSBhbmQgQHRhcmdldF92YWx1ZSBhcmUuICBUaGVuCkBAIC0xOTksMTIgJiM0MzsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgewogCXVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTsKIAkvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqLwogCXVuaW9uIHsKLQkJdTY0IGxhc3RfcHNpX3RvdGFsOwogCQlzdHJ1Y3QgewogCQkJaW50IG5pZDsKIAkJCXU2NCBtZW1jZ19pZDsKIAkJfTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkJLyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi8KJiM0MzsJCXU2NCBsYXN0X3BzaV90b3RhbDsKJiM0MzsKIAl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtMjIzLDcgJiM0MzsyMjgsNiBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgewogICogQHJlc2V0X2ludGVydmFsOglDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLgogICogQG1zOgkJCU1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLgogICogQHN6OgkJCU1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC4KLSAqIEBnb2FsczoJCUhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzICgmYW1wO2RhbW9zX3F1b3RhX2dvYWwpIGxpc3QuCiAgKiBAZ29hbF90dW5lcjoJCUdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS4KICAqIEBlc3o6CQlFZmZlY3RpdmUgc2l6ZSBxdW90YSBpbiBieXRlcy4KICAqIEBmYWlsX2NoYXJnZV9udW06CUZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci4KQEAgLTI1MCw3ICYjNDM7MjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHsKICAqIHRoZSBzY2hlbWUmIzM5O3MgYWN0aW9uLiAgREFNT04gdGhlbiBjb21wYXJlcyBpdCBhZ2FpbnN0ICZhbXA7c3ogYW5kIHVzZXMgc21hbGxlcgogICogb25lIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuCiAgKgotICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZQomIzQzOyAqIElmIGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZQogICogZ29hbHMgdXNpbmcgaXRzIGludGVybmFsIGZlZWRiYWNrIGxvb3AgYWxnb3JpdGhtLCBmb3IgZXZlcnkgQHJlc2V0X2ludGVydmFsLgogICogVGhlbiwgaWYgdGhlIG5ldyBzaXplIHF1b3RhIGlzIHNtYWxsZXIgdGhhbiB0aGUgZWZmZWN0aXZlIHF1b3RhLCBpdCB1c2VzIHRoZQogICogbmV3IHNpemUgcXVvdGEgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS4KQEAgLTI3MSw3ICYjNDM7Mjc1LDcgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHsKIAl1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsOwogCXVuc2lnbmVkIGxvbmcgbXM7CiAJdW5zaWduZWQgbG9uZyBzejsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzOwomIzQzOwogCWVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyOwogCXVuc2lnbmVkIGxvbmcgZXN6OwogCkBAIC0yODMsNiAmIzQzOzI4Nyw4IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAJdW5zaWduZWQgaW50IHdlaWdodF9hZ2U7CiAKIC8qIHByaXZhdGU6ICovCiYjNDM7CS8qIEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzICgmYW1wO2RhbW9zX3F1b3RhX2dvYWwpIGxpc3QuICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7CiAJLyogRm9yIHRocm91Z2hwdXQgZXN0aW1hdGlvbiAqLwogCXVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2NoYXJnZWRfbnM7CkBAIC00MjYsNyAmIzQzOzQzMiw2IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCi0gKiBAbGlzdDoJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqCiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlICZhbXA7ZGFtb3MtJmd0O2FjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoCiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlCkBAIC00NDQsNiAmIzQzOzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIgewogCQlpbnQgdGFyZ2V0X2lkeDsKIAkJc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiAJfTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTUxNSwxMiAmIzQzOzUyMiw4IEBAIHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIHsKICAqIEB3bWFya3M6CQlXYXRlcm1hcmtzIGZvciBhdXRvbWF0ZWQgKGluKWFjdGl2YXRpb24gb2YgdGhpcyBzY2hlbWUuCiAgKiBAbWlncmF0ZV9kZXN0czoJRGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyAmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfSYjMzQ7LgogICogQHRhcmdldF9uaWQ6CQlEZXN0aW5hdGlvbiBub2RlIGlmIEBhY3Rpb24gaXMgJiMzNDttaWdyYXRlX3tob3QsY29sZH0mIzM0Oy4KLSAqIEBjb3JlX2ZpbHRlcnM6CUFkZGl0aW9uYWwgc2V0IG9mICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgJmFtcDthY3Rpb24uCi0gKiBAb3BzX2ZpbHRlcnM6CW9wcyBsYXllciBoYW5kbGluZyAmYW1wO3N0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LgotICogQGxhc3RfYXBwbGllZDoJTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS4KICAqIEBzdGF0OgkJU3RhdGlzdGljcyBvZiB0aGlzIHNjaGVtZS4KICAqIEBtYXhfbnJfc25hcHNob3RzOglVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqCiAgKiBGb3IgZWFjaCBAYXBwbHlfaW50ZXJ2YWxfdXMsIERBTU9OIGZpbmRzIHJlZ2lvbnMgd2hpY2ggZml0IGluIHRoZQogICogJmFtcDtwYXR0ZXJuIGFuZCBhcHBsaWVzICZhbXA7YWN0aW9uIHRvIHRob3NlLiBUbyBhdm9pZCBjb25zdW1pbmcgdG9vIG11Y2gKQEAgLTU0MiwxNiAmIzQzOzU0NSw3IEBAIHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIHsKICAqCiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlICZhbXA7YWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucwogICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCAmYW1wO2FjdGlvbiB0byByZXNwZWN0Ci0gKiAmYW1wO2NvcmVfZmlsdGVycwotICoKLSAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZwotICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4gIFNpbmNlIGl0IG1heSBub3QgYmUgYWxpZ25lZCB3aXRoIHRoZSBjb3JlIGxheWVyCi0gKiBhYnN0cmFjdCwgbmFtZWx5ICZhbXA7c3RydWN0IGRhbW9uX3JlZ2lvbiwgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseQotICogQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy4gIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24KLSAqIG11bHRpcGxlICZhbXA7c3RydWN0IGRhbW9uIHJlZ2lvbiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgJmFtcDtzdHJ1Y3QKLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljCi0gKiB1bnNldHMgQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzCi0gKiBmaW5pc2hlZC4KJiM0MzsgKiAmYW1wO3N0cnVjdCBkYW1vc19maWx0ZXIuCiAgKgogICogQWZ0ZXIgYXBwbHlpbmcgdGhlICZhbXA7YWN0aW9uIHRvIGVhY2ggcmVnaW9uLCAmYW1wO3N0YXQgaXMgdXBkYXRlZC4KICAqCkBAIC01NjIsNiAmIzQzOzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3MgewogCXN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuOwogCWVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzOwomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7CiYjNDM7CXN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrczsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlpbnQgdGFyZ2V0X25pZDsKJiM0MzsJCQlzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyBtaWdyYXRlX2Rlc3RzOwomIzQzOwkJfTsKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGRhbW9zX3N0YXQgc3RhdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzOwogLyogcHJpdmF0ZTogaW50ZXJuYWwgdXNlIG9ubHkgKi8KIAkvKgogCSAqIG51bWJlciBvZiBzYW1wbGUgaW50ZXJ2YWxzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBiZWZvcmUgYXBwbHlpbmcKQEAgLTU3OCwyMCAmIzQzOzU4MiwyNSBAQCBzdHJ1Y3QgZGFtb3MgewogCS8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqLwogCWJvb2wgY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0OwogCWJvb2wgb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7Ci0vKiBwdWJsaWM6ICovCi0Jc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhOwotCXN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrczsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlpbnQgdGFyZ2V0X25pZDsKLQkJCXN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7Ci0JCX07Ci0JfTsKJiM0MzsJLyogQWRkaXRpb25hbCBzZXQgb2YgJmFtcDtzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciAmYW1wO2FjdGlvbi4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGNvcmVfZmlsdGVyczsKJiM0MzsJLyogb3BzIGxheWVyIGhhbmRsaW5nICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBvcHNfZmlsdGVyczsKJiM0MzsJLyoKJiM0MzsJICogTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS4KJiM0MzsJICoKJiM0MzsJICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZQomIzQzOwkgKiB1bmRlcmx5aW5nICZhbXA7c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWQKJiM0MzsJICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5ICZhbXA7c3RydWN0IGRhbW9uX3JlZ2lvbiwgJmFtcDtzdHJ1Y3QKJiM0MzsJICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLgomIzQzOwkgKiBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uIG11bHRpcGxlICZhbXA7c3RydWN0IGRhbW9uIHJlZ2lvbgomIzQzOwkgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW4KJiM0MzsJICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzCiYjNDM7CSAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpcwomIzQzOwkgKiBmaW5pc2hlZC4KJiM0MzsJICovCiAJdm9pZCAqbGFzdF9hcHBsaWVkOwotCXN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzOwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTc0OSw3ICYjNDM7NzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7CiAgKiBAbWF0Y2hpbmc6CVdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuCiAgKiBAYWxsb3c6CVdoZXRoZXIgdGhlIEB0eXBlLUBtYXRjaGluZyBvbmVzIHNob3VsZCBwYXNzIHRoaXMgZmlsdGVyLgogICogQG1lbWNnX2lkOglNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLgotICogQGxpc3Q6CVNpYmxpbmdzIGxpc3QuCiAgKi8KIHN0cnVjdCBkYW1vbl9maWx0ZXIgewogCWVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTsKQEAgLTc1OCw2ICYjNDM7NzY2LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7CiAJdW5pb24gewogCQl1NjQgbWVtY2dfaWQ7CiAJfTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBTaWJsaW5ncyBsaXN0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTc2NSwxMiAmIzQzOzc3NSwxMyBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHsKICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS4KICAqCiAgKiBAd2VpZ2h0OglSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLgotICogQGZpbHRlcnM6CUZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4KLSAqIEBsaXN0OglTaWJsaW5ncyBsaXN0LgogICovCiBzdHJ1Y3QgZGFtb25fcHJvYmUgewogCXVuc2lnbmVkIGludCB3ZWlnaHQ7CiYjNDM7LyogcHJpdmF0ZTogKi8KJiM0MzsJLyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZmlsdGVyczsKJiM0MzsJLyogU2libGluZ3MgbGlzdC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCkBAIC04MzcsMTQgJiM0Mzs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMgewogICogdGhyZWFkIG90aGVyIHRoYW4gdGhlIGtkYW1vbmQgc2hvdWxkIGJlIG1hZGUgdXNpbmcgc2FmZSBEQU1PTiBBUElzLAogICogaW5jbHVkaW5nIGRhbW9uX2NhbGwoKSBhbmQgZGFtb3Nfd2FsaygpLgogICoKLSAqIEBvcHM6CVNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4KLSAqIEBwcm9iZXM6CUhlYWQgb2YgcHJvYmVzICgmYW1wO2RhbW9uX3Byb2JlKSBsaXN0LgogICogQGFkZHJfdW5pdDoJU2NhbGUgZmFjdG9yIGZvciBjb3JlIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uCiAgKiBAbWluX3JlZ2lvbl9zejoJTWluaW11bSByZWdpb24gc2l6ZS4KICAqIEBwYXVzZToJUGF1c2Uga2RhbW9uZCBtYWluIGxvb3AuCi0gKiBAYWRhcHRpdmVfdGFyZ2V0czoJSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKCZhbXA7ZGFtb25fdGFyZ2V0KSBsaXN0LgotICogQHNjaGVtZXM6CQlIZWFkIG9mIHNjaGVtZXMgKCZhbXA7ZGFtb3MpIGxpc3QuCi0gKiBAcm5kX3N0YXRlOglQZXItY3R4IFBSTkcgc3RhdGUgZm9yIGRhbW9uX3JhbmQoKS4KICAqLwogc3RydWN0IGRhbW9uX2N0eCB7CiAJc3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzOwpAQCAtODkzLDE1ICYjNDM7ODk5LDIxIEBAIHN0cnVjdCBkYW1vbl9jdHggewogCXN0cnVjdCBtdXRleCBrZGFtb25kX2xvY2s7CiAKIC8qIHB1YmxpYzogKi8KLQlzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7CiAJdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7CiAJdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6OwogCWJvb2wgcGF1c2U7CiAKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuICovCiYjNDM7CXN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wczsKJiM0MzsJLyogSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKCZhbXA7ZGFtb25fdGFyZ2V0KSBsaXN0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgYWRhcHRpdmVfdGFyZ2V0czsKJiM0MzsJLyogSGVhZCBvZiBwcm9iZXMgKCZhbXA7ZGFtb25fcHJvYmUpIGxpc3QuICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzOwomIzQzOwkvKiBIZWFkIG9mIHNjaGVtZXMgKCZhbXA7ZGFtb3MpIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBzY2hlbWVzOwogCiYjNDM7CS8qIEBybmRfc3RhdGU6CVBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLiAqLwogCXN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggYjVmZTAzNmY3ODAxNTIuLjIwOGJiNjM5ZjUwZmZiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTIwNTEsNyAmIzQzOzIwNTEsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKIAlpbnQgaSwgZXJyOwogCiAJLyogTXVsdGlwbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbWFrZXMgbm8gc2Vuc2UgKi8KLQlpZiAoY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSICZhbXA7JmFtcDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxKQomIzQzOwlpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgJmFtcDsmYW1wOyBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHN5c2ZzX3RhcmdldHMtJmd0O25yOyBpJiM0MzsmIzQzOykgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyBzb21lIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGUgYGRhbW9uLmhgIGNoYW5nZXMgYXBwZWFyIHRvIGJlIG1vc3RseSBjb3NtZXRpYyAtIHJlLWFycmFuZ2luZyBjb21tZW50cyBhbmQgYWRkaW5nIHRob3NlIGAvKiBwcml2YXRlOiAqL2AgbWFya2VycyB0byBjb250cm9sIGtlcm5lbC1kb2MgdmlzaWJpbGl0eSwgcmUtb3JkZXJpbmcgdGhlIGZpZWxkcy4gTm90aGluZyBpbW1lZGlhdGVseSBjb25jZXJuaW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBzZWUgdGhlIGRpZmYuIEFoLCBoZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBjaGFuZ2U6IHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdpdGggYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHN0eWxlIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSBhbHRlcmVkIHRoZSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBtdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIGRvZXMuIElzIHRoaXMgYSBtb3JlIGdlbmVyYWwgY2hlY2sgdGhhbiB0aGUgc3BlY2lmaWMgYFBBRERSYCBjYXNlPyBJcyBpdCBhIGJ1ZyBmaXg/IE9yIGlzIGl0IGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3RhcmdldF9oYXNfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDcyPWludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTg3PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OTEtXG5tbS9kYW1vbi9jb3JlLmM6MTU5MjpcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSlcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jPTE2MDM9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxubW0vZGFtb24vY29yZS5jOjE2MTg6XHRcdFx0XHRcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXG5tbS9kYW1vbi9jb3JlLmM6MTYxOTpcdFx0XHRcdFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcbm1tL2RhbW9uL2NvcmUuYy0xNjIwLVx0XHRcdFx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4tLVxubW0vZGFtb24vY29yZS5jLTE2NTItXHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG5tbS9kYW1vbi9jb3JlLmMtMTY1NC1cdFx0XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM2LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xubW0vZGFtb24vc3lzZnMuYzoyMDM3Olx0aWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cdFx0dC1cdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cdTAwM2VwaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTMtXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMDU0Olx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgZGFtb25fdGFyZ2V0X2hhc19waWRgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHZhcmlhYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgcHJlY2lzZSByb2xlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcy4gSXMgaXQgYSBmbGFnLCBhbiBpbnRlZ2VyLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBXaGF0IGNvbnRleHQgZG9lcyBpdCBvcGVyYXRlIHdpdGhpbiDigJMgaXMgaXQgcmVsYXRlZCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHJlc291cmNlIGNvbnRyb2wsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBjb25uZWN0aW9uIHRvIGEgc3BlY2lmaWMgdGFyZ2V0IGFuZCB0aGUgUHJvY2VzcyBJRCAoUElEKS4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLCB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGludGVyYWN0IHdpdGggaXQsIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBpdCB0byBiZSBzZXQgb3IgdW5zZXQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbXBhY3RzIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJbiBzaG9ydCwgaG93IGRvZXMgdGhpcyBwaWVjZSBvZiBkYXRhIGZpdCBpbiB0byB0aGUgYmlnZ2VyIHBpY3R1cmU/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIGl0cyBkZWNsYXJhdGlvbiBhbmQgd2hlcmUgaXQmIzM5O3MgbW9kaWZpZWQgaW4gdGhlIGNvZGUsIGFuZCB0aGVuIHRyeSB0byB3b3JrIG15IHdheSB1cCBmcm9tIHRoZXJlLCBrZWVwaW5nIGluIG1pbmQgZWZmaWNpZW5jeSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mj1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDczLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzQ6c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQ3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBJbm5lciBXb3JraW5ncyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDEwNzQuIFRoYXQgYXJlYSBpcyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIGRlZmluZWQgaW4gYSBoZWFkZXIgZmlsZS4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGxpbmUgcHJvYmFibHkgZGVmaW5lcyBvbmUgb2YgdGhlIGltcG9ydGFudCBzdHJ1Y3RzIG9yIGVudW1zIHJlbGF0ZWQgdG8gRGF0YSBBY2Nlc3MgTU9OaXRvciAoREFNT04pLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uLiBEZXBlbmRpbmcgb24gd2hhdCB0aGF0IGxpbmUgaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IERBTU9OIG9wZXJhdGVzIGZyb20gYSBoaWdoIGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2NTpcdGludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcbjEwNjY6XHR2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbjEwNjc6XHRcdFx0XHRzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLCBzc2l6ZV90IG5yX3NjaGVtZXMpO1xuMTA2ODpcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKm9sZF9jdHgsIHN0cnVjdCBkYW1vbl9jdHggKm5ld19jdHgpO1xuMTA2OTpcdGludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZCk7XG4xMDcwOlx0Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZCk7XG4xMDcxOlx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcbjEwNzI6XHRpbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbjEwNzM6XHRcbjEwNzQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMTA3NTpcdHtcbjEwNzY6XHRcdHJldHVybiBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XG4xMDc3Olx0fVxuMTA3ODpcdFxuMTA3OTpcdC8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXG4xMDgwOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcbjEwODE6XHRcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbjEwODI6XHR7XG4xMDgzOlx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbjEwODQ6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjY0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUmIzM5O3Mgc3dpdGNoZWQgZnJvbSBkaXJlY3RseSBjaGVja2luZyBgY3R4LSZndDtvcHMuaWRgIGFnYWluc3QgYERBTU9OX09QU19QQUREUmAgYW5kIGBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDFgIHRvIHVzaW5nIHRoaXMgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBmdW5jdGlvbiBhbmQgbmVnYXRpbmcgaXRzIHJlc3VsdCwgc3RpbGwgY29tcGFyaW5nIHRvIGBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDFgLiBTbywgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBtdXN0IGJlIHRoZSBrZXkgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCBjaGVja3MgaWYgdGhlIGBjdHgtJmd0O29wcy5pZGAgaXMgZWl0aGVyIGBEQU1PTl9PUFNfVkFERFJgIG9yIGBEQU1PTl9PUFNfRlZBRERSYC4KCk5vdywgdGhlIGNydWNpYWwgcGFydDogaWYgYGN0eC0mZ3Q7b3BzLmlkYCAqaXMqIGBEQU1PTl9PUFNfUEFERFJgLCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHJldHVybnMgZmFsc2UsIHJpZ2h0PyBUaGVyZWZvcmUsIHRoZSBuZWdhdGlvbiBvZiB0aGF0IHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZSB3aGljaCBtaW1pY3MgdGhlIG9sZCBiZWhhdmlvciwgYXMgdGhlIG9sZGVyIGNvbXBhcmlzb24gb2Ygd2hldGhlciBgY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3b3VsZCBoYXZlIGJlZW4gdHJ1ZSBhcyB3ZWxsLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgc2hvdWxkIG1hdGNoIHVuZGVyIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGNhc2VzLCBhc3N1bWluZyBhbGwgb3RoZXIgY29kZS1wYXRocyBhcmUgdW5jaGFuZ2VkLgoKQnV0Li4uIHdoYXQgaWYgYGN0eC0mZ3Q7b3BzLmlkYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBEQU1PTl9PUFNfUEFERFJgLCBgREFNT05fT1BTX1ZBRERSYCwgb3IgYERBTU9OX09QU19GVkFERFJgPyBXaGF0IGlmIGl0JiMzOTtzLCBzYXksIGBEQU1PTl9PUFNfU0dgIG9yIHNvbWUgb3RoZXIgbmV3IG9wZXJhdGlvbiBJRCB3ZSYjMzk7dmUgYWRkZWQ/IFRoZSBiZWhhdmlvciBvZiB0aGUgb2xkIGNvZGUgd291bGQgaGF2ZSBub3QgcnVuIHRoaXMgcGF0aCwgbm93IGl0IG1pZ2h0LiBUaGUgbmVnYXRpb24gb2YgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBpcyBub3cgbW9yZSBjb21wbGV4LiBXZSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGBkYW1vbl9vcHNfaWRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgdGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB3aGF0IHRob3NlIHZhbHVlcyBjb3VsZCBiZSwgYW5kIHRoZW4gdGhpbmsgYWJvdXQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGNvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnVtIGRhbW9uX29wc19pZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTUtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE2OmVudW0gZGFtb25fb3BzX2lkIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTctXHREQU1PTl9PUFNfVkFERFIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzOTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgQ29yZTogRXhhbWluaW5nIGRhbW9uLmggQXJvdW5kIExpbmUgNjE2KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OLCB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyLCBoYW5kbGVzIGl0cyBtb25pdG9yaW5nIGxvb3BzLCBzcGVjaWZpY2FsbHkgdGhlaXIgY29udHJvbC4gTXkgbWluZCBpcyBkcmF3biB0byBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIEkgZmlndXJlIGxpbmUgNjE2IGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgY3J1Y2lhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBsb29wIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgY29udHJvbCBzdHJ1Y3RzLCBjcml0aWNhbCBpbmxpbmUgZnVuY3Rpb25zLCBvciB0aGUgbWFjcm9zIHRoYXQgZGVmaW5lIGxvb3AgaXRlcmF0aW9ucy4gRnJvbSBwcmlvciBleHBlcmllbmNlLCB0aGF0IGFyZWEgb2Z0ZW4gaG91c2VzIHRoZSBmb3VuZGF0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzICpob3cqIGFuZCAqd2hlbiogREFNT04gbW9uaXRvcnMgdGhlIG1lbW9yeSByZWdpb25zLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBmb3VuZGF0aW9uYWwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0ICogQERBTU9OX09QU19WQUREUjpcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xuIDYxMTpcdCAqIEBEQU1PTl9PUFNfRlZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXG4gNjEyOlx0ICpcdFx0XHRhZGRyZXNzIHNwYWNlc1xuIDYxMzpcdCAqIEBEQU1PTl9PUFNfUEFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXG4gNjE0Olx0ICogQE5SX0RBTU9OX09QUzpcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXG4gNjE1Olx0ICovXG4gNjE2Olx0ZW51bSBkYW1vbl9vcHNfaWQge1xuIDYxNzpcdFx0REFNT05fT1BTX1ZBRERSLFxuIDYxODpcdFx0REFNT05fT1BTX0ZWQUREUixcbiA2MTk6XHRcdERBTU9OX09QU19QQUREUixcbiA2MjA6XHRcdE5SX0RBTU9OX09QUyxcbiA2MjE6XHR9O1xuIDYyMjpcdFxuIDYyMzpcdC8qKlxuIDYyNDpcdCAqIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIC0gTW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4gNjI1Olx0ICpcbiA2MjY6XHQgKiBAaWQ6XHRcdFx0XHRJZGVudGlmaWVyIG9mIHRoaXMgb3BlcmF0aW9ucyBzZXQuXG4gNjI3Olx0ICogQGluaXQ6XHRcdFx0SW5pdGlhbGl6ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLlxuIDYyODpcdCAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gNjI5Olx0ICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgREFNT04gUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwcmltYXJpbHkgYSBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBlZmZvcnQuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCByZXBsYWNpbmcgYGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19QQUREUmAgd2l0aCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLiBJIGNhbiBzZWUgdGhhdCBgZGFtb25fb3BzX2lkYCBjYW4gYmUgb25lIG9mIGBEQU1PTl9PUFNfVkFERFJgLCBgREFNT05fT1BTX0ZWQUREUmAsIG9yIGBEQU1PTl9PUFNfUEFERFJgLiBOb3csIHRoZSBmdW5jdGlvbiBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHJldHVybnMgdHJ1ZSBpZiB0aGUgYG9wc19pZGAgaXMgZWl0aGVyIGBWQUREUmAgb3IgYEZWQUREUmAsIGFuZCBmYWxzZSBpZiBpdCYjMzk7cyBgUEFERFJgLiBTaW5jZSB0aG9zZSBhcmUgdGhlICpvbmx5KiB2YWxpZCB2YWx1ZXMgZm9yIGBjdHgtJmd0O29wcy5pZGAsIHRoaXMgc3Vic3RpdHV0aW9uIHNob3VsZCBiZSBsb2dpY2FsbHkgZXF1aXZhbGVudC4gSXQgc2ltcGxpZmllcyB0aGUgY29uZGl0aW9uYWwuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoZXJlIGFyZSBubyBvdGhlciBmdW5jdGlvbmFsIHNoaWZ0cyBidXJpZWQgaGVyZS4gVGhlIHBhdGNoIGRpZmYgYWxzbyBzaG93cyByZW9yZGVyaW5nIGZpZWxkcyBpbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIGFkZGluZyBhIGAvKiBwcml2YXRlOiAqL2AgY29tbWVudC4gT2theSwgc28gaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCB0aGF0JiMzOTtzIHRoZSBvbmx5IGxvZ2ljIGNoYW5nZSwgdGhlIHJlcGxhY2VtZW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpcyB0cnVseSBhIHJlZmFjdG9yaW5nLiBJJiMzOTttIHRoaW5raW5nLCB3aGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgYGN0eC0mZ3Q7b3BzLmlkYD8gSWYgaXQmIzM5O3MgemVybywgdGhhdCYjMzk7cyBlcXVpdmFsZW50IHRvIGBEQU1PTl9PUFNfVkFERFJgLCBhbmQgaW4gdGhhdCBzY2VuYXJpbyBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHdvdWxkIHN0aWxsIGJlIGZhbHNlLCBqdXN0IGxpa2UgYGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19QQUREUmAgd291bGQgYmUuIFRoZXJlZm9yZSwgdGhlIHJlZmFjdG9yaW5nIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuCgpOb3csIGxldCYjMzk7cyByZXZpc2l0IHRoZSBoZWFkZXIgZmlsZSBjaGFuZ2UuIFJlb3JkZXJpbmcgc3RydWN0IGZpZWxkcyAqY2FuKiBiZSBwcm9ibGVtYXRpYywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciBpZiBpdCBjYXVzZXMgYmluYXJ5IGNvbXBhdGliaWxpdHkgaXNzdWVzLiBIb3dldmVyLCBzaW5jZSBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBpcyBub3QgaW4gYGluY2x1ZGUvdWFwaWAsIGFuZCB0aGlzIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3QsIGl0JiMzOTtzIGxlc3MgbGlrZWx5IHRvIGJlIGEgY29uY2VybiwgYXNzdW1pbmcgbm8gaGFyZGNvZGVkIG9mZnNldHMgYXJlIGJlaW5nIHVzZWQgc29tZXdoZXJlLiBUaGUgc3RydWN0IGRlZmluaXRpb24gYWxzbyBpbmNsdWRlcyBzb21lIGAvKiBwcml2YXRlOiAqL2AgY29tbWVudHMuCgpUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGxheW91dCBvZiB0aGUgYHN0cnVjdCBkYW1vbl9yZWdpb25gLiBUaGUgYGxpc3RgIG1lbWJlciBpcyBiZWluZyBtb3ZlZCB0byB0aGUgZW5kLCBhbmQgbWFya2VkIHByaXZhdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBicmVhayBhbnl0aGluZy4gSSBkb24mIzM5O3Qgc2VlIGFueSBoYXJkY29kZWQgb2Zmc2V0cyB1c2VkIGluIHRoaXMgY2FzZSwgYW5kIHRoZSBpbmNsdWRlIGlzIG5vdCBhIFVBUEkuIFNvIHRoZSBsYXlvdXQgY2hhbmdlIHNob3VsZG4mIzM5O3QgYWZmZWN0IGFueXRoaW5nLCB1bmxlc3MsIGFuZCB0aGlzIGlzIGEgcG9zc2liaWxpdHksIGl0IGlzIHVzZWQgaW4gc29tZSB3ZWlyZCBvciB1bmV4cGVjdGVkIHdheS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vbl9yZWdpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY0NSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTM4PXN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDMtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NDQ6ICogc3RydWN0IGRhbW9uX3JlZ2lvbiAtIFJlcHJlc2VudHMgYSBtb25pdG9yaW5nIHRhcmdldCByZWdpb24uXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDUtICogQGFyOlx0XHRcdFRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSByZWdpb24uXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY0LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY1OnN0cnVjdCBkYW1vbl9yZWdpb24ge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY2LVx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYXI7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTQ3MD1zdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC00NzEtXHR2b2lkICgqd2Fsa19mbikodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjQ3MjpcdFx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQ3My1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHVuc2lnbmVkIGxvbmcgc3pfZmlsdGVyX3Bhc3NlZCk7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC01OTMtXHQgKiB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTk0Olx0ICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU5NS1cdCAqIGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHkgQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Njc0PXN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjgyLVx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2ODM6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzY2hlbWUpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY4NC1cdHVuc2lnbmVkIGxvbmcgKCphcHBseV9zY2hlbWUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Njg1Olx0XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjg2LVx0XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lLCB1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTIxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9yYW5kKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjkzNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25leHRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM3LXtcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5Mzg6XHRyZXR1cm4gY29udGFpbmVyX29mKHItXHUwMDNlbGlzdC5uZXh0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uLCBsaXN0KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC05MzktfVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0MC1cbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NDE6c3RhdGljIGlubGluZSBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9wcmV2X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0Mi17XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTQzOlx0cmV0dXJuIGNvbnRhaW5lcl9vZihyLVx1MDAzZWxpc3QucHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiwgbGlzdCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTQ0LX1cbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDUtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTQ2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDcte1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk0ODpcdHJldHVybiBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dC1cdTAwM2VyZWdpb25zX2xpc3QsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0OS19XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTUwLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk1MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX2ZpcnN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1Mi17XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTUzOlx0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dC1cdTAwM2VyZWdpb25zX2xpc3QsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1NC19XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTU1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk1NjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fc3pfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTU3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAyMD12b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjEtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyMjpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDIzOnVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjQtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyNTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDI2LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjc6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyOC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzMD1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDMxLVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMzI6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMzMtXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaD03Nz1UUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtNzktXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY29udGV4dF9pZHgsIHVuc2lnbmVkIGludCBzY2hlbWVfaWR4LFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaDo4MDpcdFx0dW5zaWduZWQgaW50IHRhcmdldF9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTgxLVx0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHVuc2lnbmVkIGludCBucl9yZWdpb25zLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9MTM1PVRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vbl9yZWdpb25fYWdncmVnYXRlZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtMTM2LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaDoxMzc6XHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaC0xMzgtXHRcdHVuc2lnbmVkIGludCBucl9yZWdpb25zLCB1bnNpZ25lZCBpbnQgbnJfcHJvYmVzKSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oPTE3Mz1UUkFDRV9FVkVOVChkYW1vbl9hZ2dyZWdhdGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaC0xNzQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oOjE3NTpcdFRQX1BST1RPKHVuc2lnbmVkIGludCB0YXJnZXRfaWQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTE3Ni1cdFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMpLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjMtICovXG5tbS9kYW1vbi9jb3JlLmM6MjY0OnVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI2NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODctXG5tbS9kYW1vbi9jb3JlLmM6Mjg4OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI4OS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTg9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNy0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xubW0vZGFtb24vY29yZS5jOjMzMDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcbm1tL2RhbW9uL2NvcmUuYy0zMzEtXHRpbnQgaTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzUyLVxubW0vZGFtb24vY29yZS5jOjM1MzpzdGF0aWMgdm9pZCBkYW1vbl9hZGRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtMzU0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYxLSAqL1xubW0vZGFtb24vY29yZS5jOjM2MjpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jOjM2MzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcbm1tL2RhbW9uL2NvcmUuYy0zNjQtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jPTM3Nj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODAtXG5tbS9kYW1vbi9jb3JlLmM6MzgxOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy0zODIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODgtXG5tbS9kYW1vbi9jb3JlLmM6Mzg5OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9jb3JlLmMtMzkwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzLVxubW0vZGFtb24vY29yZS5jOjM5NDpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM5NS1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAwLVxubW0vZGFtb24vY29yZS5jOjQwMTpzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTQwMi1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDE0LSAqL1xubW0vZGFtb24vY29yZS5jOjQxNTp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYy00MTYtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDM1LSAqL1xubW0vZGFtb24vY29yZS5jOjQzNjpzdGF0aWMgYm9vbCBkYW1vbl9pbnRlcnNlY3Qoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy00MzctXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyZSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDQ0LSAqL1xubW0vZGFtb24vY29yZS5jOjQ0NTpzdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbm1tL2RhbW9uL2NvcmUuYzo0NDY6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmxhc3QsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNDQ3LXtcbm1tL2RhbW9uL2NvcmUuYzo0NDg6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZmlyc3Q7XG5tbS9kYW1vbi9jb3JlLmMtNDQ5LVxubW0vZGFtb24vY29yZS5jLTQ1MC1cdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9mcm9tKHIsIHQpIHtcbm1tL2RhbW9uL2NvcmUuYzo0NTE6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsICpuZXdyO1xubW0vZGFtb24vY29yZS5jLTQ1Mi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDc4PWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00ODAte1xubW0vZGFtb24vY29yZS5jOjQ4MTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTQ4Mi1cdHVuc2lnbmVkIGludCBpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy01MjMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTI0Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCA9IE5VTEwsICpsYXN0LCAqbmV3cjtcbm1tL2RhbW9uL2NvcmUuYy01MjUtXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODA3PXZvaWQgZGFtb25fZnJlZV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04MDgte1xubW0vZGFtb24vY29yZS5jOjgwOTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTgxMC1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTMyPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTM4LVxubW0vZGFtb24vY29yZS5jOjkzOTpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk0MC1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTgtXG5tbS9kYW1vbi9jb3JlLmM6OTU5OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk2MC1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz05ODk9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vY29yZS5jLTk5My1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9jb3JlLmM6OTk0Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL2NvcmUuYy05OTUtXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MjU9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTI3LXtcbm1tL2RhbW9uL2NvcmUuYzoxNTI4Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqc3JjX3JlZ2lvbiwgKnByZXYgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTE1MjktXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3JlZ2lvbl9zel9saW1pdChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NzEtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vY29yZS5jOjE4NzI6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vY29yZS5jLTE4NzMtXHR1bnNpZ25lZCBsb25nIHN6ID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg4OD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzoxODg5Olx0XHRcdFx0ICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIHN6X3IpO1xubW0vZGFtb24vY29yZS5jLTE4OTAtXG4tLVxubW0vZGFtb24vY29yZS5jPTE5MDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fYXBwbHlfbWluX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTA3LVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL2NvcmUuYzoxOTA4Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtMTkwOS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjEwMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNDMtICogaW52b2NhdGlvbiwgZm9yIGVhY2ggc2NoZW1lLiAgVGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBoZW5jZSBzYWZlbHlcbm1tL2RhbW9uL2NvcmUuYzoyMTQ0OiAqIGFjY2VzcyB0aGUgaW50ZXJuYWwgZGF0YSBvZiBcdTAwMjZzdHJ1Y3QgZGFtb25fY3R4IGFuZCBcdTAwMjZzdHJ1Y3QgZGFtb25fcmVnaW9uIHRoYXRcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIGVhY2ggb2YgdGhlIHNjaGVtZSB3aWxsIGFwcGx5IHRoZSBhY3Rpb24gZm9yIG5leHQgaW50ZXJ2YWwsIHdpdGhvdXRcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjE4MD1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE5Mi1cdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjE5MzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL2NvcmUuYy0yMTk0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjEyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2dldF9pbnRlcnZhbHNfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjIxNC1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9jb3JlLmM6MjIxNTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi9jb3JlLmMtMjIxNi1cdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBtYXhfYWNjZXNzX2V2ZW50cyA9IDAsIGFjY2Vzc19ldmVudHMgPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjUxPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzItXG5tbS9kYW1vbi9jb3JlLmM6MjI3MzpzdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmMtMjI3NC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjI5ND1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5OS1cbm1tL2RhbW9uL2NvcmUuYzoyMzAwOnN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTIzMDEtXHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjMzNj1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmM6MjMzNzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxubW0vZGFtb24vY29yZS5jLTIzMzgtXHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjM4Nj1zdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jOjIzODc6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbm1tL2RhbW9uL2NvcmUuYy0yMzg4LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTI0MzU9c3RhdGljIGJvb2wgZGFtb3NfY29yZV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzoyNDM2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMjQzNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTI0NjI9c3RhdGljIHZvaWQgZGFtb3Nfd2Fsa19jYWxsX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jOjI0NjM6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbm1tL2RhbW9uL2NvcmUuYy0yNDY0LVx0XHR1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpXG4tLVxubW0vZGFtb24vY29yZS5jPTI1Njk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmM6MjU3MDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTI1NzEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjM5PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNjQwLVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzoyNjQxOlx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0yNjQyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY5MT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY5My17XG5tbS9kYW1vbi9jb3JlLmM6MjY5NDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi9jb3JlLmMtMjY5NS1cbm1tL2RhbW9uL2NvcmUuYy0yNjk2LVx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNjk3Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpwcmV2X3I7XG5tbS9kYW1vbi9jb3JlLmMtMjY5OC1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjg3OD1zdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODgxLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL2NvcmUuYzoyODgyOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL2NvcmUuYy0yODgzLVx0cGh5c19hZGRyX3QgdG90YWxfZWxpZ2libGUgPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTM1PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMxMzgtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vY29yZS5jOjMxMzk6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vY29yZS5jLTMxNDAtXHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2Vzejtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI1OD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXG5tbS9kYW1vbi9jb3JlLmM6MzI1OTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0zMjYwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI2Nj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXG5tbS9kYW1vbi9jb3JlLmM6MzI2NzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0zMjY4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI3NT1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jOjMyNzY6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTItXG5tbS9kYW1vbi9jb3JlLmM6MzI5MzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYy0zMjk0LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG4tLVxubW0vZGFtb24vY29yZS5jPTMzMTA9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMTIte1xubW0vZGFtb24vY29yZS5jOjMzMTM6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTMzMTQtXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2Mz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM4My0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjMzODQ6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTMzODUtXHRcdHVuc2lnbmVkIGxvbmcgc3pfcilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM5MS0jZWxzZVxubW0vZGFtb24vY29yZS5jOjMzOTI6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTMzOTMtXHRcdHVuc2lnbmVkIGxvbmcgc3pfcilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQwND1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzozNDA1Olx0XHRcdFx0ICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIHN6X3IpXG5tbS9kYW1vbi9jb3JlLmMtMzQwNi17XG5tbS9kYW1vbi9jb3JlLmM6MzQwNzpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKm5ldztcbm1tL2RhbW9uL2NvcmUuYy0zNDA4LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDI4PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDMxLXtcbm1tL2RhbW9uL2NvcmUuYzozNDMyOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtMzQzMy1cdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBzel9zdWIgPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDU4PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NjItXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vY29yZS5jOjM0NjM6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqbmV4dDtcbm1tL2RhbW9uL2NvcmUuYy0zNDY0LVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSByb3RhdGlvbiYjNDM7JiM0MzsgJSBzcGxpdF9zdGVwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNjEyPXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYxNC1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9jb3JlLmM6MzYxNTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi9jb3JlLmMtMzYxNi1cbm1tL2RhbW9uL2NvcmUuYy0zNjE3LVx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYzozNjE4Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpwcmV2X3IgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTM2MTktXHRcdHVuc2lnbmVkIGludCBucl9yZWdpb25zID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzk2Nj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM5OTAtICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk5MTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbm1tL2RhbW9uL2NvcmUuYy0zOTkyLXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwMy1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDQ6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE0OC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNDk6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTAtXHRcdFx0c3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD0xMz1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE0LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNzppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTM4PXN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDgtXG5tbS9kYW1vbi9wYWRkci5jOjQ5OnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtNTAtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTU3PXN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vcGFkZHIuYy01OS1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9wYWRkci5jOjYwOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3BhZGRyLmMtNjEtXG4tLVxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyAqZm9saW9fc3opXG4tLVxubW0vZGFtb24vcGFkZHIuYy04MS1cbm1tL2RhbW9uL3BhZGRyLmM6ODI6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtODMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTA0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTA2LVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL3BhZGRyLmM6MTA3Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3BhZGRyLmMtMTA4LVx0dW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0xNjk9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTcyLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL3BhZGRyLmM6MTczOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3BhZGRyLmMtMTc0LVx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjIxPXN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjMxLVxubW0vZGFtb24vcGFkZHIuYzoyMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0yMzMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYz0yOTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxubW0vZGFtb24vcGFkZHIuYzoyOTE6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LFxubW0vZGFtb24vcGFkZHIuYy0yOTItXHRcdHN0cnVjdCBkYW1vcyAqcywgYm9vbCBhY3RpdmF0ZSxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMyMy1cbm1tL2RhbW9uL3BhZGRyLmM6MzI0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMyNS1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMzMC1cbm1tL2RhbW9uL3BhZGRyLmM6MzMxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzMyLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzM3LVxubW0vZGFtb24vcGFkZHIuYzozMzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMzktXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zNzEtXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTM3My1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTM5OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vcGFkZHIuYzo0MDA6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTQwMS1cdFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYz00MjY9c3RhdGljIGludCBkYW1vbl9wYV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbm1tL2RhbW9uL3BhZGRyLmM6NDI3Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbm1tL2RhbW9uL3BhZGRyLmMtNDI4LXtcbi0tXG5tbS9kYW1vbi9zdGF0LmM9NTQ9c3RhdGljIHZvaWQgZGFtb25fc3RhdF9zZXRfZXN0aW1hdGVkX21lbW9yeV9iYW5kd2lkdGgoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9zdGF0LmMtNTYtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vc3RhdC5jOjU3Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3N0YXQuYy01OC1cdHVuc2lnbmVkIGxvbmcgYWNjZXNzX2J5dGVzID0gMDtcbi0tXG5tbS9kYW1vbi9zdGF0LmMtNjgtXG5tbS9kYW1vbi9zdGF0LmM6Njk6c3RhdGljIGludCBkYW1vbl9zdGF0X2lkbGV0aW1lKGNvbnN0IHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9zdGF0LmMtNzAte1xuLS1cbm1tL2RhbW9uL3N0YXQuYz03Nj1zdGF0aWMgaW50IGRhbW9uX3N0YXRfY21wX3JlZ2lvbnMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbm1tL2RhbW9uL3N0YXQuYy03Ny17XG5tbS9kYW1vbi9zdGF0LmM6Nzg6XHRjb25zdCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyYSA9ICooY29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqKilhO1xubW0vZGFtb24vc3RhdC5jOjc5Olx0Y29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcmIgPSAqKGNvbnN0IHN0cnVjdCBkYW1vbl9yZWdpb24gKiopYjtcbm1tL2RhbW9uL3N0YXQuYy04MC1cbi0tXG5tbS9kYW1vbi9zdGF0LmM9ODQ9c3RhdGljIGludCBkYW1vbl9zdGF0X3NvcnRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vc3RhdC5jOjg1Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICoqKnNvcnRlZF9wdHIsIGludCAqbnJfcmVnaW9uc19wdHIsXG5tbS9kYW1vbi9zdGF0LmMtODYtXHRcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3N6X3B0cilcbi0tXG5tbS9kYW1vbi9zdGF0LmMtODgtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vc3RhdC5jOjg5Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3N0YXQuYzo5MDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKipyZWdpb25fcG9pbnRlcnM7XG5tbS9kYW1vbi9zdGF0LmMtOTEtXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyA9IDA7XG4tLVxubW0vZGFtb24vc3RhdC5jPTExMz1zdGF0aWMgdm9pZCBkYW1vbl9zdGF0X3NldF9pZGxldGltZV9wZXJjZW50aWxlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vc3RhdC5jLTExNC17XG5tbS9kYW1vbi9zdGF0LmM6MTE1Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqKnNvcnRlZF9yZWdpb25zLCAqcmVnaW9uO1xubW0vZGFtb24vc3RhdC5jLTExNi1cdGludCBucl9yZWdpb25zO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTQ2PXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0ODpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDktXHRcdGJvb2wgdG90YWxfYnl0ZXNfb25seSwgdW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkxOlx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Mi17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2MD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYxOlx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzY9c3RhdGljIGludCBkYW1vc19zeXNmc19yZWdpb25fYWRkX2RpcnMoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqZHJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODAte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTAxPXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAyLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzEwMzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLCBib29sIHRvdGFsX2J5dGVzX29ubHksXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNC1cdFx0dW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMxOT1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNfdXBkX29uZSh2b2lkICpkYXRhLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy5jOjIzMjA6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9zeXNmcy5jLTIzMjEtXHRcdHN0cnVjdCBkYW1vcyAqcywgdW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0LXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MzpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQtXHRpbnQgaXQsIGlyO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0Mi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQzOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnJfbmV3O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFJlZ2lvbiBTdHJ1Y3R1cmUqKgoKT2theSwgc28gdGhlIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBoZWF2aWx5IHV0aWxpemVkLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9zZWQgYXMgcGFydCBvZiB0aGUgVXNlciBBUEksIHdoaWNoIGlzIGEga2V5IHBvaW50LiBMZXQmIzM5O3MgZGVsdmUgYmFjayBpbnRvIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpdHNlbGYuIEhtbSwgaGVyZSBpdCBpczogYHN0cnVjdCBkYW1vbl9yZWdpb25gLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHJlYXJyYW5nZW1lbnQgb2YgdGhlIGBsaXN0YCBmaWVsZC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgbW92ZWQgZnJvbSBiZWZvcmUgYGFnZWAgdG8gYWZ0ZXIgYGFnZWAuIE5vdywgbXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaGFzIGFueSBzZXJpb3VzIGltcGxpY2F0aW9ucy4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBhbnkgaGFyZGNvZGVkIG9mZnNldHMgb3IgYXNzZW1ibHkgY29kZSB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZSBzcGVjaWZpYyBtZW1iZXJzIG9mIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhhbmtmdWxseSwgYSBxdWljayBzY2FuIGRvZXNuJiMzOTt0IHJldmVhbCBhbnl0aGluZyBsaWtlIHRoYXQuIEl0JiMzOTtzIGp1c3QgYSBzdGFuZGFyZCBDIHN0cnVjdHVyZS4gQnV0IHdhaXQsIHdoYXQgYWJvdXQgYG1lbXNldGAgb3IgYG1lbWNweWAgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHNlbnNpdGl2ZSB0byB0aGUgc3RydWN0dXJlJiMzOTtzIGxheW91dD8gVGhleSBjb3VsZCBiZSBhbiBpc3N1ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBkYW1vbl9uZXdfcmVnaW9uYCBpcyBpbXBsZW1lbnRlZCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGEgbmV3IHJlZ2lvbiB3b3VsZCBiZSBpbml0aWFsaXplZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHRoZXJlIGlzIGdvaW5nIHRvIGJsb3cgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX25ld19yZWdpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMjA9dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDIxLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjI6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyMy11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjctICovXG5tbS9kYW1vbi9jb3JlLmM6MzI4OnN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS9kYW1vbi9jb3JlLmMtMzI5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NTYtXHRcdGlmIChyLVx1MDAzZWFyLmVuZCAhPSBuZXh0LVx1MDAzZWFyLnN0YXJ0KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDU3Olx0XHRcdG5ld3IgPSBkYW1vbl9uZXdfcmVnaW9uKHItXHUwMDNlYXIuZW5kLCBuZXh0LVx1MDAzZWFyLnN0YXJ0KTtcbm1tL2RhbW9uL2NvcmUuYy00NTgtXHRcdFx0aWYgKCFuZXdyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00Nzg9aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTUwOS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjUxMDpcdFx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihcbm1tL2RhbW9uL2NvcmUuYy01MTEtXHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2VzW2ldLnN0YXJ0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy01NDItXHRcdFx0Lyogbm8gcmVnaW9uIGludGVyc2VjdHMgd2l0aCB0aGlzIHJhbmdlICovXG5tbS9kYW1vbi9jb3JlLmM6NTQzOlx0XHRcdG5ld3IgPSBkYW1vbl9uZXdfcmVnaW9uKFxubW0vZGFtb24vY29yZS5jLTU0NC1cdFx0XHRcdFx0QUxJR05fRE9XTihyYW5nZS1cdTAwM2VzdGFydCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQwND1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQwOS1cdGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQociwgc3pfcik7XG5tbS9kYW1vbi9jb3JlLmM6MzQxMDpcdG5ldyA9IGRhbW9uX25ld19yZWdpb24oci1cdTAwM2Vhci5zdGFydCAmIzQzOyBzel9yLCByLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9jb3JlLmMtMzQxMS1cdGlmICghbmV3KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNy1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODpcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDEsIDIpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5LVx0aWYgKCFyKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMC1cdFx0Zm9yIChpciA9IDA7IGlyIFx1MDAzYyAzOyBpciYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTE6XHRcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oc2FkZHJbaXRdW2lyXSwgZWFkZHJbaXRdW2lyXSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyLVx0XHRcdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0Ny1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDt0YXJnZXQgYWxsb2MgZmFpbFwmIzM0Oyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ4Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgMTAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDktXHRpZiAoIXIpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTgwLVx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3RhcmdldCBhbGxvYyBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODE6XHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCAxMDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4Mi1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODgtXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE4OTpcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTkwLVx0aWYgKCFyMikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzYSk7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjUwOlx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI1MS1cdFx0aWYgKCFyKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTI3Mj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yODktXHR9XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjkwOlx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgMjIpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI5MS1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMDUtXHR9XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzA2Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgMjIwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMDctXHRpZiAoIXIpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzIyLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzYSk7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzIzOlx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTMyNC1cdFx0aWYgKCFyKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM0Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3Mi1cdFx0c3RhcnQgPSBpICogcmVnaW9uX3N6O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3MzpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oc3RhcnQsIHN0YXJ0ICYjNDM7IHJlZ2lvbl9zeik7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc0LVx0XHRpZiAoIXIpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDU0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3pfb2xkX3JhbmdlczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0Njg6XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKG9sZF9yYW5nZXNbaV0uc3RhcnQsIG9sZF9yYW5nZXNbaV0uZW5kKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00NjktXHRcdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01ODc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01OTEtXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU5MjpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDcpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU5My1cdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTE3Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE4My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JlZ2lvbnM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE4NDpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24ocmVnaW9uX3N0YXJ0X2VuZFtpXVswXSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTg1LVx0XHRcdFx0cmVnaW9uX3N0YXJ0X2VuZFtpXVsxXSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEyNjI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTI3Ny1cdH1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjc4Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMywgNSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTI3OS1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDQ0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ2My1cdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDY0Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgc3pfcmVnaW9ucyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ2NS1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDk1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTA2Olx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihpICogMiwgKGkgJiM0MzsgMSkgKiAyKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA3LVx0XHRpZiAoIXIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBHaXZlbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGF0IGxpbmUgMzI4IG1pZ2h0IGJlIHRoZSBjcml0aWNhbCBhcmVhIHRvIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBsb2NhdGlvbiwgYXMgSSBzdXNwZWN0IHRoZXJlIGlzIHNvbWV0aGluZyByZWxldmFudCB0byB3aGF0IEkmIzM5O20gaW52ZXN0aWdhdGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdH1cbiAzMjE6XHQjZW5kaWZcbiAzMjI6XHRcbiAzMjM6XHQvKlxuIDMyNDpcdCAqIENvbnN0cnVjdCBhIGRhbW9uX3JlZ2lvbiBzdHJ1Y3RcbiAzMjU6XHQgKlxuIDMyNjpcdCAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzdHJ1Y3QgaWYgc3VjY2Vzcywgb3IgTlVMTCBvdGhlcndpc2VcbiAzMjc6XHQgKi9cbiAzMjg6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIDMyOTpcdHtcbiAzMzA6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcbiAzMzE6XHRcdGludCBpO1xuIDMzMjpcdFxuIDMzMzpcdFx0ZGFtb25fdmVyaWZ5X25ld19yZWdpb24oc3RhcnQsIGVuZCk7XG4gMzM0Olx0XHRyZWdpb24gPSBrbWVtX2NhY2hlX2FsbG9jKGRhbW9uX3JlZ2lvbl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gMzM1Olx0XHRpZiAoIXJlZ2lvbilcbiAzMzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzM3Olx0XG4gMzM4Olx0XHRyZWdpb24tXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcbiAzMzk6XHRcdHJlZ2lvbi1cdTAwM2Vhci5lbmQgPSBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBkYW1vbl9uZXdfcmVnaW9uYCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb25fbmV3X3JlZ2lvbmAgdGhpbmcuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBvdmVyYWxsIGRlc2lnbiBhbmQgd2hhdCBraW5kIG9mIGltcGxpY2F0aW9ucyBpdCBoYXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8ganVzdCBnZXQgYSBsb29rIGF0IHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24sIGdldCBhIHNlbnNlIG9mIHRoZSBhcmNoaXRlY3R1cmUsIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGFpbiBwb2ludHMgb3IgZGVzaWduIGlzc3Vlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBzeXN0ZW07IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlIG9yIGFuIGluY3JlbWVudGFsIGFkZGl0aW9uPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5PyBBbmQsIG1vc3QgY3JpdGljYWxseSwgaG93IGRvZXMgdGhpcyBuZXcgcmVnaW9uIGltcGFjdCB0aGUgZXhpc3Rpbmcgd29ya2Zsb3dzPyBJIGV4cGVjdCB0aGVyZSBtYXkgYmUgZWRnZSBjYXNlcyB0byBjb25zaWRlci4gSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRhdGEgaW5jb25zaXN0ZW5jaWVzLCBhbmQsIG9mIGNvdXJzZSwgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIGRldGVybWluZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRyZWdpb24tXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xuIDM0MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbiAzNDI6XHRcdFx0cmVnaW9uLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xuIDM0MzpcdFx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaXN0KTtcbiAzNDY6XHRcbiAzNDc6XHRcdHJlZ2lvbi1cdTAwM2VhZ2UgPSAwO1xuIDM0ODpcdFx0cmVnaW9uLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSAwO1xuIDM0OTpcdFxuIDM1MDpcdFx0cmV0dXJuIHJlZ2lvbjtcbiAzNTE6XHR9XG4gMzUyOlx0XG4gMzUzOlx0c3RhdGljIHZvaWQgZGFtb25fYWRkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuIDM1NDpcdHtcbiAzNTU6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gMzU2Olx0XHR0LVx1MDAzZW5yX3JlZ2lvbnMmIzQzOyYjNDM7O1xuIDM1NzpcdH1cbiAzNTg6XHRcbiAzNTk6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgREFNT04gU3RydWN0dXJlIFJlb3JkZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIGFuZCBpdCYjMzk7cyBhbG1vc3QgZW50aXJlbHkgc3RydWN0dXJhbC4gRXNzZW50aWFsbHksIHdlIGFyZSBqdXN0IHJlb3JkZXJpbmcgdGhlIGZpZWxkcyB3aXRoaW4gc2V2ZXJhbCBgc3RydWN0YCBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgdG8gZ3JvdXAgcHVibGljLWZhY2luZyBmaWVsZHMgYW5kIHByaXZhdGUsIGludGVybmFsIGZpZWxkcywgYW5kIHNvbWUgYWNjb21wYW55aW5nIGtlcm5lbC1kb2MgY29tbWVudHMgaGF2ZSBiZWVuIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgpMb29raW5nIGF0IGVhY2ggc3RydWN0OgoKKiAgIGBkYW1vbl9uZXdfcmVnaW9uYDogTm8gY2hhbmdlcyBvdGhlciB0aGFuIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIHVuYWZmZWN0ZWQgYnkgdGhlIGxheW91dC4KCiogICBgZGFtb25fdGFyZ2V0YDogVGhlIGBvYnNvbGV0ZWAgZmxhZyBpcyBtb3ZlZCB1cC4gVGhlIGZpZWxkczogYG5yX3JlZ2lvbnNgLCBgcmVnaW9uc19saXN0YCwgYW5kIGBsaXN0YCBhcmUgcmVvcmRlcmVkIGludG8gYSBwcml2YXRlIHNlY3Rpb24uIEl0IGlzIHdvcnRoIG5vdGluZyB0aGUgZmllbGRzIGBucl9yZWdpb25zYCwgYHJlZ2lvbnNfbGlzdGAsIGFuZCBgbGlzdGAgYXJlIG1vdmVkIGRvd24gYW5kIG1hcmtlZCBhcyBwcml2YXRlLgoKKiAgIGBkYW1vc19xdW90YV9nb2FsYDogYGxhc3RfcHNpX3RvdGFsYCB3YXMgYWxyZWFkeSB3aXRoaW4gYSB1bmlvbiwgYW5kIGlzIHNpbXBseSBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSB1bmlvbi4gTm8gcmVhbCBjaGFuZ2UgaGVyZS4KCiogICBgZGFtb3NfcXVvdGFgOiBUaGUgYGdvYWxzYCBmaWVsZCBpcyBtb3ZlZCB0byB0aGUgcHJpdmF0ZSBzZWN0aW9uLiBBIGxheW91dCBjaGFuZ2UuCgoqICAgYGRhbW9zX2ZpbHRlcmA6IE5vIGxheW91dCBjaGFuZ2U7IGNvbW1lbnRzIHdlcmUgYWRkZWQgdG8gZXhwbGFpbiBwcml2YXRlIHN0YXRlLgoKKiAgIGBkYW1vc2A6IFNldmVyYWwgZmllbGRzIChgcXVvdGFgLCBgd21hcmtzYCwgdGhlIHVuaW9uLCBgc3RhdGAsIGBtYXhfbnJfc25hcHNob3RzYCkgYXJlIG1vdmVkIHVwIGJlZm9yZSBhIGNvbW1lbnQgbWFya2luZyB0aGUgc3RhcnQgb2YgaW50ZXJuYWwtdXNlLW9ubHkgZmllbGRzLiBMYXlvdXQgY2hhbmdlLgoKKiAgIGBkYW1vbl9maWx0ZXJgOiBObyBsYXlvdXQgY2hhbmdlLgoKKiAgIGBkYW1vbl9wcm9iZWA6IE5vIGxheW91dCBjaGFuZ2UuCgoqICAgYGRhbW9uX2N0eGA6IGBvcHNgIGFuZCBgcHJvYmVzYCBhcmUgbW92ZWQgZG93bi4gTGF5b3V0IGNoYW5nZS4KClNvLCBpbiBzdW1tYXJ5LCB0aGVzZSBhcmUgYWxtb3N0IGVudGlyZWx5IGxheW91dCBjaGFuZ2VzLCBpbXByb3ZpbmcgY29kZSByZWFkYWJpbGl0eS4gTm8gZnVuY3Rpb25hbCBiZWhhdmlvciBpcyB0b3VjaGVkIGJ5IHRoZXNlIGNoYW5nZXMuCgpIb3dldmVyLCB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBpczoKYGBgYwotCWlmIChjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgJmFtcDsmYW1wOyBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDEpCiYjNDM7CWlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMSkKYGBgCgpUaGUgbmV3IGNvbmRpdGlvbmFsIGluIGBtbS9kYW1vbi9zeXNmcy5jYCByZXBsYWNlcyBgY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIEkgd2FzIGNvbmNlcm5lZCBhYm91dCBpbXBsaWNpdCBiZWhhdmlvciwgYnV0IGFmdGVyIHJldmlld2luZyB0aGUgZW51bSBkZWZpbml0aW9uLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBhcmUgbG9naWNhbGx5IGVxdWl2YWxlbnQgY29uZGl0aW9ucywgd2hlcmUgYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIGlzIHRydWUgaWYgd2UgYXJlIGluIFZBRERSIG9yIEZWQUREUiBvcGVyYXRpb25zLCBhbmQgaXMgZmFsc2Ugb3RoZXJ3aXNlLiBTbywgdGhpcyBpcyBhbHNvIGEgcmVmYWN0b3JpbmcsIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbi4gVGhlIGNvbmRpdGlvbiBjaGFuZ2UgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuCgpUaGlzIHdob2xlIHBhdGNoIGlzLCB0aGVyZWZvcmUsIGEgdmVyeSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBzdHJ1Y3Qgb3JnYW5pemF0aW9uLCBkb2N1bWVudGF0aW9uLCBhbmQgbWlub3IgY29kZS1jbGFyaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDQ3LVxubW0vZGFtb24vc3lzZnMuYzoyMDQ4OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMuYy0yMDQ5LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyAqc3lzZnNfdGFyZ2V0cylcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjExMy1cdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL3N5c2ZzLmM6MjExNDpcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cdTAwM2V0YXJnZXRzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjExNS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaD0zOT1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc190ZXN0X2FkZF90YXJnZXRzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTgxLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaDo4MjpcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTgzLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDF1LCBucl9kYW1vbl90YXJnZXRzKGN0eCkpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtODYtXHRcdFx0c3lzZnNfdGFyZ2V0LVx1MDAzZXBpZCAmIzQzOyAxLCAyMDApO1xubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaDo4NzpcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTg4LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDJ1LCBucl9kYW1vbl90YXJnZXRzKGN0eCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgdGhlIHVzZSBjYXNlIGhlcmU/IFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aG9zZSBpbnB1dHM/JiMzNDsgSSBrbm93IHRoZSBEYW1vbiBzdWJzeXN0ZW0sIHNvIG15IGJyYWluIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhYm91dCBhcHBseWluZyB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMgZGlyZWN0bHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIG9yIGEgdHJpZ2dlciBmb3IgYWN0aW9uPyBJJiMzOTttIGhvcGluZyBpdCBpc24mIzM5O3Qgb3Zlcmx5IGNvbXBsaWNhdGVkLCB0aGF0IGl0IGhhcyBhIGNsZWFyIGludGVyZmFjZS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiB3aGVyZSBjaGFuZ2VzIGluIGEgc3lzZnMgbm9kZSB0cmFuc2xhdGUgaW50byBhY3R1YWwgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4gSSByZWFsbHkgd2FudCB0byBlbnN1cmUgdGhlIGlucHV0cyBhcmUgdmFsaWRhdGVkIGNvcnJlY3RseSB0byBlbnN1cmUgc2FmZXR5LiBBbHNvLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgY29tZSB0byBtaW5kIGltbWVkaWF0ZWx5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBlbnRyeSBwb2ludCwgc2VlIHdoYXQga2luZCBvZiBpbnB1dHMgaXQgYWNjZXB0cy4gVGhlbiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIGRldGVybWluZSBpdHMgc2lkZS1lZmZlY3RzIG9uIHRoZSBEYW1vbiBzeXN0ZW0sIGFuZCBvbiB0aGUgbWFjaGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDkwOlx0XHRyZXR1cm4ga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggXHUwMDI2XHUwMDI2XG4yMDkxOlx0XHRcdGRhbW9uX2lzX3J1bm5pbmcoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpO1xuMjA5MjpcdH1cbjIwOTM6XHRcbjIwOTQ6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4yMDk1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuMjA5NjpcdHtcbjIwOTc6XHRcdGludCBlcnI7XG4yMDk4Olx0XG4yMDk5Olx0XHRlcnIgPSBkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgc3lzX2N0eC1cdTAwM2VvcHNfaWQpO1xuMjEwMDpcdFx0aWYgKGVycilcbjIxMDE6XHRcdFx0cmV0dXJuIGVycjtcbjIxMDI6XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQgPSBzeXNfY3R4LVx1MDAzZWFkZHJfdW5pdDtcbjIxMDM6XHRcdC8qIGFkZHJfdW5pdCBpcyByZXNwZWN0ZWQgYnkgb25seSBEQU1PTl9PUFNfUEFERFIgKi9cbjIxMDQ6XHRcdGlmIChzeXNfY3R4LVx1MDAzZW9wc19pZCA9PSBEQU1PTl9PUFNfUEFERFIpXG4yMTA1Olx0XHRcdGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KFxuMjEwNjpcdFx0XHRcdFx0REFNT05fTUlOX1JFR0lPTl9TWiAvIHN5c19jdHgtXHUwMDNlYWRkcl91bml0LCAxKTtcbjIxMDc6XHRcdGN0eC1cdTAwM2VwYXVzZSA9IHN5c19jdHgtXHUwMDNlcGF1c2U7XG4yMTA4Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfYXR0cnMoY3R4LCBzeXNfY3R4LVx1MDAzZWF0dHJzKTtcbjIxMDk6XHRcdGlmIChlcnIpXG4yMTEwOlx0XHRcdHJldHVybiBlcnI7XG4yMTExOlx0XHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKGN0eCwgc3lzX2N0eC1cdTAwM2VhdHRycy1cdTAwM2Vwcm9iZXMpO1xuMjExMjpcdFx0aWYgKGVycilcbjIxMTM6XHRcdFx0cmV0dXJuIGVycjtcbjIxMTQ6XHRcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cdTAwM2V0YXJnZXRzKTtcbjIxMTU6XHRcdGlmIChlcnIpXG4yMTE2Olx0XHRcdHJldHVybiBlcnI7XG4yMTE3Olx0XHRyZXR1cm4gZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoY3R4LCBzeXNfY3R4LVx1MDAzZXNjaGVtZXMpO1xuMjExODpcdH1cbjIxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NTcKCQkJCQkJCW91dHB1dDogODcKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEEgV2FzdGUgb2YgRnV6emluZyBUaW1lKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBzeXNfY3R4LSZndDtvcHNfaWQpYCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0c2AuIENydWNpYWxseSwgYHN5c19jdHgtJmd0O29wc19pZGAgaXMgZGVyaXZlZCBmcm9tIHRoZSBgZGFtb25fb3BzX2lkYCBlbnVtLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBgY3R4LSZndDtvcHMuaWRgIGlzIGFsd2F5cyBhIHZhbGlkIGVudW0gdmFsdWXigJRzcGVjaWZpY2FsbHksIGVpdGhlciBgVkFERFJgLCBgRlZBRERSYCwgb3IgYFBBRERSYC4KClRoaXMgbWVhbnMgdGhhdCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIGlzICpmdW5jdGlvbmFsbHkgaWRlbnRpY2FsKiB0byBgY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBlcXVpdmFsZW5jZS4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgaW50cm9kdWNlZDsgaXQmIzM5O3MgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50LiBUaGlzIHNjcmVhbXMgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0Oy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgb25seSB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuCgpJbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgaXQmIzM5O3MgYWxsIGFib3V0IHN0cnVjdCBsYXlvdXQgcmVvcmdhbml6YXRpb24uIEVzc2VudGlhbGx5LCBtb3Zpbmcgc29tZSBtZW1iZXJzIGludG8gYSAmIzM0O3ByaXZhdGUmIzM0OyBzZWN0aW9uIG9yIHJlb3JkZXJpbmcgbWVtYmVycyB3aXRoaW4gdGhlIHN0cnVjdHMuIE5vIG5ldyBmaWVsZHMsIG5vIGNoYW5nZXMgdG8gZXh0ZXJuYWxseSB2aXNpYmxlIGludGVyZmFjZXMgb3IgVUFQSSwgbm90aGluZyB0aGF0IHdvdWxkIGltcGFjdCB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93IGluIGFueSB3YXkuIFN0cnVjdCBtZW1iZXIgb3JkZXJpbmcgY2hhbmdlcyBhcmUgaW50ZXJuYWwgYW5kIHdvbiYjMzk7dCBicmVhayBiaW5hcnkgY29tcGF0aWJpbGl0eS4KCkluIGBtbS9kYW1vbi9zeXNmcy5jYCwgdGhlIG9ubHkgY2hhbmdlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGF0IGBjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIGNvbmRpdGlvbiB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIEFzIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCwgdGhlc2UgYXJlIGxvZ2ljYWxseSBpZGVudGljYWwgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGN0eGAgc3RydWN0LiBUaGlzIGlzIGp1c3QgYSBtb3JlIHJlYWRhYmxlIHVzZSBvZiBhbiBleGlzdGluZyBoZWxwZXIgZnVuY3Rpb24uCgpUaGVyZWZvcmUsIHNpbmNlIHRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb3NtZXRpYyBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGxvZ2ljIG9yIGV4cG9zZSBhbnl0aGluZyBuZXcgdG8gdGhlIG91dHNpZGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgcGF0Y2guIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0IGxheW91dCByZW9yZGVyaW5nIHRvIGdyb3VwIHB1YmxpYy9wcml2YXRlIGZpZWxkcyBmb3Iga2VybmVsLWRvYywgYW5kIGEgcHVyZSByZWZhY3RvcmluZyBpbiBtbS9kYW1vbi9zeXNmcy5jIHRoYXQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3QgbGF5b3V0IHJlb3JkZXJpbmcgdG8gZ3JvdXAgcHVibGljL3ByaXZhdGUgZmllbGRzIGZvciBrZXJuZWwtZG9jLCBhbmQgYSBwdXJlIHJlZmFjdG9yaW5nIGluIG1tL2RhbW9uL3N5c2ZzLmMgdGhhdCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6MzIuMDI0Nzc3ODU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY0MTQ4MjYzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0IGxheW91dCByZW9yZGVyaW5nIHRvIGdyb3VwIHB1YmxpYy9wcml2YXRlIGZpZWxkcyBmb3Iga2VybmVsLWRvYywgYW5kIGEgcHVyZSByZWZhY3RvcmluZyBpbiBtbS9kYW1vbi9zeXNmcy5jIHRoYXQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6MzIuMDI0NzgzODI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg3NjE2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZWNkMmY5NGNkZDhkNzQzYTEyOGQxYmNiNThiMTM3YWRlODBiODQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDA4OjUyOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IGY2OTQ0MmE5ZDQzMTI4Li4zMjdmNTM0Njk2YWE4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDYsNyArNDYsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBzYW1wbGluZ19hZGRyOlxcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxcbiAgKiBAbnJfYWNjZXNzZXM6XFx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cXG4gICogQHByb2JlX2hpdHM6XFx0XFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAYWdlOlxcdFxcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cXG4gICpcXG4gICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxcbkBAIC02OCw5ICs2NywxMSBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XFxuIFxcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHR1bnNpZ25lZCBpbnQgYWdlO1xcbi0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbisvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cXG4rXFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbGFzdF9ucl9hY2Nlc3NlcztcXG4gXFx0dW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XFxuIH07XFxuQEAgLTc4LDkgKzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuIC8qKlxcbiAgKiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0LlxcbiAgKiBAcGlkOlxcdFxcdFRoZSBQSUQgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBtb25pdG9yLlxcbi0gKiBAbnJfcmVnaW9uczpcXHRcXHROdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC5cXG4tICogQHJlZ2lvbnNfbGlzdDpcXHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0Llxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAb2Jzb2xldGU6XFx0XFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cXG4gICpcXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxcbkBAIC05NCwxMCArOTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IHtcXG4gXFx0c3RydWN0IHBpZCAqcGlkO1xcbitcXHRib29sIG9ic29sZXRlO1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cXG4gXFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnM7XFxuK1xcdC8qIEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0O1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLVxcdGJvb2wgb2Jzb2xldGU7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTczLDEwICsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcXG4gICogQG1ldHJpYzpcXHRcXHRNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLlxcbiAgKiBAdGFyZ2V0X3ZhbHVlOlxcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxcbiAgKiBAY3VycmVudF92YWx1ZTpcXHRDdXJyZW50IHZhbHVlIG9mIEBtZXRyaWMuXFxuLSAqIEBsYXN0X3BzaV90b3RhbDpcXHRMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSVxcbiAgKiBAbmlkOlxcdFxcdE5vZGUgaWQuXFxuICAqIEBtZW1jZ19pZDpcXHRcXHRNZW1jZyBpZC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXFxuICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW5cXG5AQCAtMTk5LDEyICsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbiBcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxuIFxcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXFxuIFxcdHVuaW9uIHtcXG4tXFx0XFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRpbnQgbmlkO1xcbiBcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuIFxcdFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdFxcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXFxuK1xcdFxcdHU2NCBsYXN0X3BzaV90b3RhbDtcXG4rXFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTIyMyw3ICsyMjgsNiBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XFx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cXG4gICogQG1zOlxcdFxcdFxcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxcbiAgKiBAc3o6XFx0XFx0XFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxcbi0gKiBAZ29hbHM6XFx0XFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxcbiAgKiBAZ29hbF90dW5lcjpcXHRcXHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXFxuICAqIEBlc3o6XFx0XFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXFxuICAqIEBmYWlsX2NoYXJnZV9udW06XFx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxcbkBAIC0yNTAsNyArMjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4gICogdGhlIHNjaGVtZSdzIGFjdGlvbi4gIERBTU9OIHRoZW4gY29tcGFyZXMgaXQgYWdhaW5zdCBcXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxcbiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cXG4gICpcXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxcbisgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcXG4gICogZ29hbHMgdXNpbmcgaXRzIGludGVybmFsIGZlZWRiYWNrIGxvb3AgYWxnb3JpdGhtLCBmb3IgZXZlcnkgQHJlc2V0X2ludGVydmFsLlxcbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXFxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXFxuQEAgLTI3MSw3ICsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1zO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbitcXG4gXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXN6O1xcbiBcXG5AQCAtMjgzLDYgKzI4Nyw4IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XFxuIFxcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xcbiBcXG4gLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbiBcXHQvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX25zO1xcbkBAIC00MjYsNyArNDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuICAqXFx0XFx0XFx1MDAyNmRhbW9uX2N0eC1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xcbiAgKlxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cXG4gICogQHN6X3JhbmdlOlxcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cXG4tICogQGxpc3Q6XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcXHUwMDI2ZGFtb3MtXFx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcXG5AQCAtNDQ0LDYgKzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xcbiBcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gXFx0XFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTUxNSwxMiArNTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKiBAd21hcmtzOlxcdFxcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cXG4gICogQG1pZ3JhdGVfZGVzdHM6XFx0RGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyBcXFwibWlncmF0ZV97aG90LGNvbGR9XFxcIi5cXG4gICogQHRhcmdldF9uaWQ6XFx0XFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFxcXCJtaWdyYXRlX3tob3QsY29sZH1cXFwiLlxcbi0gKiBAY29yZV9maWx0ZXJzOlxcdEFkZGl0aW9uYWwgc2V0IG9mIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcXHUwMDI2YWN0aW9uLlxcbi0gKiBAb3BzX2ZpbHRlcnM6XFx0b3BzIGxheWVyIGhhbmRsaW5nIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cXG4tICogQGxhc3RfYXBwbGllZDpcXHRMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbiAgKiBAc3RhdDpcXHRcXHRTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLlxcbiAgKiBAbWF4X25yX3NuYXBzaG90czpcXHRVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcXG4gICogXFx1MDAyNnBhdHRlcm4gYW5kIGFwcGxpZXMgXFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXFxuQEAgLTU0MiwxNiArNTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKlxcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFxcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnNcXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3RcXG4tICogXFx1MDAyNmNvcmVfZmlsdGVyc1xcbi0gKlxcbi0gKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmdcXG4tICogXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcXG4tICogYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XFxuLSAqIEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuICBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uXFxuLSAqIG11bHRpcGxlIFxcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcXHUwMDI2c3RydWN0XFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXFxuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcXG4tICogZmluaXNoZWQuXFxuKyAqIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxcbiAgKlxcbiAgKiBBZnRlciBhcHBseWluZyB0aGUgXFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXFx1MDAyNnN0YXQgaXMgdXBkYXRlZC5cXG4gICpcXG5AQCAtNTYyLDYgKzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3Mge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcXG4gXFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuK1xcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4rXFx0XFx0fTtcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xcbiBcXHQvKlxcbiBcXHQgKiBudW1iZXIgb2Ygc2FtcGxlIGludGVydmFscyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgYmVmb3JlIGFwcGx5aW5nXFxuQEAgLTU3OCwyMCArNTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7XFxuIFxcdC8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqL1xcbiBcXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4gXFx0Ym9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4tLyogcHVibGljOiAqL1xcbi1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuLVxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4tXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4tXFx0XFx0fTtcXG4tXFx0fTtcXG4rXFx0LyogQWRkaXRpb25hbCBzZXQgb2YgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFxcdTAwMjZhY3Rpb24uICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzO1xcbitcXHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xcbitcXHQvKlxcbitcXHQgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlXFxuK1xcdCAqIHVuZGVybHlpbmcgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXFxuK1xcdCAqIHdpdGggdGhlIGNvcmUgbGF5ZXIgYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdFxcbitcXHQgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuXFxuK1xcdCAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgXFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cXG4rXFx0ICogb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFxcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cXG4rXFx0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXFxuK1xcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xcbitcXHQgKiBmaW5pc2hlZC5cXG4rXFx0ICovXFxuIFxcdHZvaWQgKmxhc3RfYXBwbGllZDtcXG4tXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIH07XFxuIFxcbkBAIC03NDksNyArNzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XFxuICAqIEBtYXRjaGluZzpcXHRXaGV0aGVyIHRoaXMgZmlsdGVyIGlzIGZvciB0aGUgdHlwZS1tYXRjaGluZyBvbmVzLlxcbiAgKiBAYWxsb3c6XFx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXFxuICAqIEBtZW1jZ19pZDpcXHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxcbi0gKiBAbGlzdDpcXHRTaWJsaW5ncyBsaXN0LlxcbiAgKi9cXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIFxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG5AQCAtNzU4LDYgKzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gXFx0fTtcXG4rLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtNzY1LDEyICs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cXG4gICpcXG4gICogQHdlaWdodDpcXHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxcbi0gKiBAZmlsdGVyczpcXHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXFxuLSAqIEBsaXN0OlxcdFNpYmxpbmdzIGxpc3QuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtODM3LDE0ICs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMge1xcbiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsXFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cXG4gICpcXG4tICogQG9wczpcXHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXFxuLSAqIEBwcm9iZXM6XFx0SGVhZCBvZiBwcm9iZXMgKFxcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cXG4gICogQGFkZHJfdW5pdDpcXHRTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi5cXG4gICogQG1pbl9yZWdpb25fc3o6XFx0TWluaW11bSByZWdpb24gc2l6ZS5cXG4gICogQHBhdXNlOlxcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxcbi0gKiBAYWRhcHRpdmVfdGFyZ2V0czpcXHRIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cXG4tICogQHNjaGVtZXM6XFx0XFx0SGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuXFxuLSAqIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xcbkBAIC04OTMsMTUgKzg5OSwyMSBAQCBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcXG4gXFxuIC8qIHB1YmxpYzogKi9cXG4tXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zejtcXG4gXFx0Ym9vbCBwYXVzZTtcXG4gXFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi9cXG4rXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbitcXHQvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzO1xcbitcXHQvKiBIZWFkIG9mIHByb2JlcyAoXFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4rXFx0LyogSGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcXG4gXFxuK1xcdC8qIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovXFxuIFxcdHN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMjA1MSw3ICsyMDUxLDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbiBcXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbi1cXHRpZiAoY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4rXFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnI7IGkrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MjozMi42MzQwNzgwNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1ODA1NTIwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdCBsYXlvdXQgcmVvcmRlcmluZyB0byBncm91cCBwdWJsaWMvcHJpdmF0ZSBmaWVsZHMgZm9yIGtlcm5lbC1kb2MsIGFuZCBhIHB1cmUgcmVmYWN0b3JpbmcgaW4gbW0vZGFtb24vc3lzZnMuYyB0aGF0IHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWVjZDJmOTRjZGQ4ZDc0M2ExMjhkMWJjYjU4YjEzN2FkZTgwYjg0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDA4OjUyOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCBmNjk0NDJhOWQ0MzEyOC4uMzI3ZjUzNDY5NmFhODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTQ2LDcgKzQ2LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBzYW1wbGluZ19hZGRyOlx0QWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suXG4gICogQG5yX2FjY2Vzc2VzOlx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cbiAgKiBAcHJvYmVfaGl0czpcdFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBhZ2U6XHRcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cbiAgKlxuICAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcbkBAIC02OCw5ICs2NywxMSBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcbiBcdHVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjtcbiBcdHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcztcbiBcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdHVuc2lnbmVkIGludCBhZ2U7XG4tLyogcHJpdmF0ZTogSW50ZXJuYWwgdmFsdWUgZm9yIGFnZSBjYWxjdWxhdGlvbi4gKi9cbisvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cbitcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xuIFx0dW5zaWduZWQgaW50IGxhc3RfbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIGxhc3RfcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbiB9O1xuQEAgLTc4LDkgKzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gLyoqXG4gICogc3RydWN0IGRhbW9uX3RhcmdldCAtIFJlcHJlc2VudHMgYSBtb25pdG9yaW5nIHRhcmdldC5cbiAgKiBAcGlkOlx0XHRUaGUgUElEIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gbW9uaXRvci5cbi0gKiBAbnJfcmVnaW9uczpcdFx0TnVtYmVyIG9mIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQHJlZ2lvbnNfbGlzdDpcdEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICogQG9ic29sZXRlOlx0XHRXaGV0aGVyIHRoZSBjb21taXQgZGVzdGluYXRpb24gdGFyZ2V0IGlzIG9ic29sZXRlLlxuICAqXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxuQEAgLTk0LDEwICs5MiwxNCBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcbiAgKi9cbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IHtcbiBcdHN0cnVjdCBwaWQgKnBpZDtcbitcdGJvb2wgb2Jzb2xldGU7XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqL1xuIFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnM7XG4rXHQvKiBIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7XG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0Ym9vbCBvYnNvbGV0ZTtcbiB9O1xuIFxuIC8qKlxuQEAgLTE3MywxMCArMTc1LDggQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XG4gICogQG1ldHJpYzpcdFx0TWV0cmljIHRvIGJlIHVzZWQgZm9yIHJlcHJlc2VudGluZyB0aGUgZ29hbC5cbiAgKiBAdGFyZ2V0X3ZhbHVlOlx0VGFyZ2V0IHZhbHVlIG9mIEBtZXRyaWMgdG8gYWNoaWV2ZSB3aXRoIHRoZSB0dW5pbmcuXG4gICogQGN1cnJlbnRfdmFsdWU6XHRDdXJyZW50IHZhbHVlIG9mIEBtZXRyaWMuXG4tICogQGxhc3RfcHNpX3RvdGFsOlx0TGFzdCBtZWFzdXJlZCB0b3RhbCBQU0lcbiAgKiBAbmlkOlx0XHROb2RlIGlkLlxuICAqIEBtZW1jZ19pZDpcdFx0TWVtY2cgaWQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBEYXRhIHN0cnVjdHVyZSBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCBzY29yZSBvZiB0aGUgcXVvdGEgdHVuaW5nIGdvYWwuICBUaGVcbiAgKiBzY29yZSBpcyBjYWxjdWxhdGVkIGJ5IGhvdyBjbG9zZSBAY3VycmVudF92YWx1ZSBhbmQgQHRhcmdldF92YWx1ZSBhcmUuICBUaGVuXG5AQCAtMTk5LDEyICsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuIFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xuIFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cbiBcdHVuaW9uIHtcbi1cdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdGludCBuaWQ7XG4gXHRcdFx0dTY0IG1lbWNnX2lkO1xuIFx0XHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHRcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXG4rXHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbitcbiBcdH07XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC0yMjMsNyArMjI4LDYgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxuICAqIEBtczpcdFx0XHRNYXhpbXVtIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBzY2hlbWUgY2FuIHVzZS5cbiAgKiBAc3o6XHRcdFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxuLSAqIEBnb2FsczpcdFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFx1MDAyNmRhbW9zX3F1b3RhX2dvYWwpIGxpc3QuXG4gICogQGdvYWxfdHVuZXI6XHRcdEdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS5cbiAgKiBAZXN6Olx0XHRFZmZlY3RpdmUgc2l6ZSBxdW90YSBpbiBieXRlcy5cbiAgKiBAZmFpbF9jaGFyZ2VfbnVtOlx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxuQEAgLTI1MCw3ICsyNTQsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xuICAqIHRoZSBzY2hlbWUncyBhY3Rpb24uICBEQU1PTiB0aGVuIGNvbXBhcmVzIGl0IGFnYWluc3QgXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxuICAqIG9uZSBhcyB0aGUgZWZmZWN0aXZlIHF1b3RhLlxuICAqXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuKyAqIElmIGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuICAqIGdvYWxzIHVzaW5nIGl0cyBpbnRlcm5hbCBmZWVkYmFjayBsb29wIGFsZ29yaXRobSwgZm9yIGV2ZXJ5IEByZXNldF9pbnRlcnZhbC5cbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXG4gICogbmV3IHNpemUgcXVvdGEgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbkBAIC0yNzEsNyArMjc1LDcgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmVzZXRfaW50ZXJ2YWw7XG4gXHR1bnNpZ25lZCBsb25nIG1zO1xuIFx0dW5zaWduZWQgbG9uZyBzejtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7XG4rXG4gXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcbiBcdHVuc2lnbmVkIGxvbmcgZXN6O1xuIFxuQEAgLTI4Myw2ICsyODcsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF9hZ2U7XG4gXG4gLyogcHJpdmF0ZTogKi9cbitcdC8qIEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzIChcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcbiBcdC8qIEZvciB0aHJvdWdocHV0IGVzdGltYXRpb24gKi9cbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9ucztcbkBAIC00MjYsNyArNDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuLSAqIEBsaXN0Olx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDQ0LDYgKzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xuIFx0XHRpbnQgdGFyZ2V0X2lkeDtcbiBcdFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4gXHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNTE1LDEyICs1MjIsOCBAQCBzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyB7XG4gICogQHdtYXJrczpcdFx0V2F0ZXJtYXJrcyBmb3IgYXV0b21hdGVkIChpbilhY3RpdmF0aW9uIG9mIHRoaXMgc2NoZW1lLlxuICAqIEBtaWdyYXRlX2Rlc3RzOlx0RGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyBcIm1pZ3JhdGVfe2hvdCxjb2xkfVwiLlxuICAqIEB0YXJnZXRfbmlkOlx0XHREZXN0aW5hdGlvbiBub2RlIGlmIEBhY3Rpb24gaXMgXCJtaWdyYXRlX3tob3QsY29sZH1cIi5cbi0gKiBAY29yZV9maWx0ZXJzOlx0QWRkaXRpb25hbCBzZXQgb2YgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgXHUwMDI2YWN0aW9uLlxuLSAqIEBvcHNfZmlsdGVyczpcdG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cbi0gKiBAbGFzdF9hcHBsaWVkOlx0TGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbiAgKiBAc3RhdDpcdFx0U3RhdGlzdGljcyBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWF4X25yX3NuYXBzaG90czpcdFVwcGVyIGxpbWl0IG9mIG5yX3NuYXBzaG90cyBzdGF0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcbiAgKiBcdTAwMjZwYXR0ZXJuIGFuZCBhcHBsaWVzIFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXG5AQCAtNTQyLDE2ICs1NDUsNyBAQCBzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyB7XG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcdTAwMjZhY3Rpb24gdG8gcmVzcGVjdFxuLSAqIFx1MDAyNmNvcmVfZmlsdGVyc1xuLSAqXG4tICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nXG4tICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWQgd2l0aCB0aGUgY29yZSBsYXllclxuLSAqIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHlcbi0gKiBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLiAgTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvblxuLSAqIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb24gb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFx1MDAyNnN0cnVjdFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXG4tICogdW5zZXRzIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuLSAqIGZpbmlzaGVkLlxuKyAqIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIuXG4gICpcbiAgKiBBZnRlciBhcHBseWluZyB0aGUgXHUwMDI2YWN0aW9uIHRvIGVhY2ggcmVnaW9uLCBcdTAwMjZzdGF0IGlzIHVwZGF0ZWQuXG4gICpcbkBAIC01NjIsNiArNTU2LDE2IEBAIHN0cnVjdCBkYW1vcyB7XG4gXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcbiBcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjtcbiBcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG4rXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3M7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0aW50IHRhcmdldF9uaWQ7XG4rXHRcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcbitcdFx0fTtcbitcdH07XG4rXHRzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0O1xuK1x0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xuIC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXG4gXHQvKlxuIFx0ICogbnVtYmVyIG9mIHNhbXBsZSBpbnRlcnZhbHMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGJlZm9yZSBhcHBseWluZ1xuQEAgLTU3OCwyMCArNTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7XG4gXHQvKiB3aGV0aGVyIHRvIHJlamVjdCBjb3JlL29wcyBmaWx0ZXJzIHVtYXRjaGVkIHJlZ2lvbnMgKi9cbiBcdGJvb2wgY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0O1xuIFx0Ym9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcbi0vKiBwdWJsaWM6ICovXG4tXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG4tXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3M7XG4tXHR1bmlvbiB7XG4tXHRcdHN0cnVjdCB7XG4tXHRcdFx0aW50IHRhcmdldF9uaWQ7XG4tXHRcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcbi1cdFx0fTtcbi1cdH07XG4rXHQvKiBBZGRpdGlvbmFsIHNldCBvZiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcdTAwMjZhY3Rpb24uICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNvcmVfZmlsdGVycztcbitcdC8qIG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgb3BzX2ZpbHRlcnM7XG4rXHQvKlxuK1x0ICogTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbitcdCAqXG4rXHQgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlXG4rXHQgKiB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXG4rXHQgKiB3aXRoIHRoZSBjb3JlIGxheWVyIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0XG4rXHQgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuXG4rXHQgKiBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cbitcdCAqIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cbitcdCAqIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljIHVuc2V0c1xuK1x0ICogQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzXG4rXHQgKiBmaW5pc2hlZC5cbitcdCAqL1xuIFx0dm9pZCAqbGFzdF9hcHBsaWVkO1xuLVx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cztcbitcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NDksNyArNzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XG4gICogQG1hdGNoaW5nOlx0V2hldGhlciB0aGlzIGZpbHRlciBpcyBmb3IgdGhlIHR5cGUtbWF0Y2hpbmcgb25lcy5cbiAgKiBAYWxsb3c6XHRXaGV0aGVyIHRoZSBAdHlwZS1AbWF0Y2hpbmcgb25lcyBzaG91bGQgcGFzcyB0aGlzIGZpbHRlci5cbiAgKiBAbWVtY2dfaWQ6XHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxuLSAqIEBsaXN0Olx0U2libGluZ3MgbGlzdC5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiBcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbkBAIC03NTgsNiArNzY2LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gXHR1bmlvbiB7XG4gXHRcdHU2NCBtZW1jZ19pZDtcbiBcdH07XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIFNpYmxpbmdzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NjUsMTIgKzc3NSwxMyBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiAgKiBzdHJ1Y3QgZGFtb25fcHJvYmUgLSBEYXRhIHJlZ2lvbiBhdHRyaWJ1dGUgcHJvYmUuXG4gICpcbiAgKiBAd2VpZ2h0Olx0UmVsYXRpdmUgcHJpb3JpdHkgb2YgdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBwcm9iZS5cbi0gKiBAZmlsdGVyczpcdEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS5cbi0gKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX3Byb2JlIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbitcdC8qIFNpYmxpbmdzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC04MzcsMTQgKzg0OCw5IEBAIHN0cnVjdCBkYW1vbl9hdHRycyB7XG4gICogdGhyZWFkIG90aGVyIHRoYW4gdGhlIGtkYW1vbmQgc2hvdWxkIGJlIG1hZGUgdXNpbmcgc2FmZSBEQU1PTiBBUElzLFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cbiAgKlxuLSAqIEBvcHM6XHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4tICogQHByb2JlczpcdEhlYWQgb2YgcHJvYmVzIChcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cbiAgKiBAYWRkcl91bml0Olx0U2NhbGUgZmFjdG9yIGZvciBjb3JlIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXG4gICogQG1pbl9yZWdpb25fc3o6XHRNaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqIEBwYXVzZTpcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxuLSAqIEBhZGFwdGl2ZV90YXJnZXRzOlx0SGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cbi0gKiBAc2NoZW1lczpcdFx0SGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC5cbi0gKiBAcm5kX3N0YXRlOlx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXG4gICovXG4gc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XG5AQCAtODkzLDE1ICs4OTksMjEgQEAgc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgbXV0ZXgga2RhbW9uZF9sb2NrO1xuIFxuIC8qIHB1YmxpYzogKi9cbi1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcztcbi1cdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XG4gXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3o7XG4gXHRib29sIHBhdXNlO1xuIFxuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuICovXG4rXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4rXHQvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXHUwMDI2ZGFtb25fdGFyZ2V0KSBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzO1xuK1x0LyogSGVhZCBvZiBwcm9iZXMgKFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7XG4rXHQvKiBIZWFkIG9mIHNjaGVtZXMgKFx1MDAyNmRhbW9zKSBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBzY2hlbWVzO1xuIFxuK1x0LyogQHJuZF9zdGF0ZTpcdFBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLiAqL1xuIFx0c3RydWN0IHJuZF9zdGF0ZSBybmRfc3RhdGU7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggYjVmZTAzNmY3ODAxNTIuLjIwOGJiNjM5ZjUwZmZiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIwNTEsNyArMjA1MSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0aW50IGksIGVycjtcbiBcbiBcdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXG4tXHRpZiAoY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG4rXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3lzZnNfdGFyZ2V0cy1cdTAwM2VucjsgaSsrKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MjozMi42MzQwNzkzMTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDYzMDExNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSdyZSBjaGFuZ2luZyBzb21lIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGUgYGRhbW9uLmhgIGNoYW5nZXMgYXBwZWFyIHRvIGJlIG1vc3RseSBjb3NtZXRpYyAtIHJlLWFycmFuZ2luZyBjb21tZW50cyBhbmQgYWRkaW5nIHRob3NlIGAvKiBwcml2YXRlOiAqL2AgbWFya2VycyB0byBjb250cm9sIGtlcm5lbC1kb2MgdmlzaWJpbGl0eSwgcmUtb3JkZXJpbmcgdGhlIGZpZWxkcy4gTm90aGluZyBpbW1lZGlhdGVseSBjb25jZXJuaW5nIHRoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byBgbW0vZGFtb24vc3lzZnMuY2AuIEkgc2VlIHRoZSBkaWZmLiBBaCwgaGVyZSdzIHRoZSBjcml0aWNhbCBjaGFuZ2U6IHRoZXkndmUgcmVwbGFjZWQgYGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBzdHlsZSB0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBFc3NlbnRpYWxseSwgdGhleSd2ZSBhbHRlcmVkIHRoZSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBtdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIGRvZXMuIElzIHRoaXMgYSBtb3JlIGdlbmVyYWwgY2hlY2sgdGhhbiB0aGUgc3BlY2lmaWMgYFBBRERSYCBjYXNlPyBJcyBpdCBhIGJ1ZyBmaXg/IE9yIGlzIGl0IGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtP1xuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6MzguMDk3MDkyOTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTM3NTIzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdGFyZ2V0X2hhc19waWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzI9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzQ6c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU4Nz1zdGF0aWMgdm9pZCBkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1OTEtXFxubW0vZGFtb24vY29yZS5jOjE1OTI6XFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjAzPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cXHRcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbm1tL2RhbW9uL2NvcmUuYzoxNjE4OlxcdFxcdFxcdFxcdFxcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXFxubW0vZGFtb24vY29yZS5jOjE2MTk6XFx0XFx0XFx0XFx0XFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcXG5tbS9kYW1vbi9jb3JlLmMtMTYyMC1cXHRcXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NTItXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcXHRcXHRcXHRcXHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxcbm1tL2RhbW9uL2NvcmUuYy0xNjU0LVxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzYtXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAzNzpcXHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cXHRcXHR0LVxcdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cXHUwMDNlcGlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1My1cXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA1NDpcXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXFx1MDAyNlxcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnIgXFx1MDAzZSAxKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NDAuOTUwODQ5NDM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3OTc5MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgZGFtb25fdGFyZ2V0X2hhc19waWRgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCB2YXJpYWJsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHByZWNpc2Ugcm9sZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcy4gSXMgaXQgYSBmbGFnLCBhbiBpbnRlZ2VyLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBXaGF0IGNvbnRleHQgZG9lcyBpdCBvcGVyYXRlIHdpdGhpbiDigJMgaXMgaXQgcmVsYXRlZCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHJlc291cmNlIGNvbnRyb2wsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBjb25uZWN0aW9uIHRvIGEgc3BlY2lmaWMgdGFyZ2V0IGFuZCB0aGUgUHJvY2VzcyBJRCAoUElEKS4gSSdsbCB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0sIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgaW50ZXJhY3Qgd2l0aCBpdCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0IHRvIGJlIHNldCBvciB1bnNldC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgaW1wYWN0cyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJbiBzaG9ydCwgaG93IGRvZXMgdGhpcyBwaWVjZSBvZiBkYXRhIGZpdCBpbiB0byB0aGUgYmlnZ2VyIHBpY3R1cmU/IEknbGwgcHJvYmFibHkgbG9vayBmb3IgaXRzIGRlY2xhcmF0aW9uIGFuZCB3aGVyZSBpdCdzIG1vZGlmaWVkIGluIHRoZSBjb2RlLCBhbmQgdGhlbiB0cnkgdG8gd29yayBteSB3YXkgdXAgZnJvbSB0aGVyZSwga2VlcGluZyBpbiBtaW5kIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUyOjQ0LjUzMDY0MjYxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA5MTEyODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mj1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NDcuNTM5NzYwNjA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NjE0MDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIElubmVyIFdvcmtpbmdzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gTGV0J3MgemVybyBpbiBvbiBsaW5lIDEwNzQuIFRoYXQgYXJlYSBpcyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIGRlZmluZWQgaW4gYSBoZWFkZXIgZmlsZS4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSBwcm9iYWJseSBkZWZpbmVzIG9uZSBvZiB0aGUgaW1wb3J0YW50IHN0cnVjdHMgb3IgZW51bXMgcmVsYXRlZCB0byBEYXRhIEFjY2VzcyBNT05pdG9yIChEQU1PTikuIEknbSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbi4gRGVwZW5kaW5nIG9uIHdoYXQgdGhhdCBsaW5lIGlzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBEQU1PTiBvcGVyYXRlcyBmcm9tIGEgaGlnaCBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NTAuNjE1OTA1MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjU6XFx0aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xcbjEwNjY6XFx0dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuMTA2NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLCBzc2l6ZV90IG5yX3NjaGVtZXMpO1xcbjEwNjg6XFx0aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqb2xkX2N0eCwgc3RydWN0IGRhbW9uX2N0eCAqbmV3X2N0eCk7XFxuMTA2OTpcXHRpbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpO1xcbjEwNzA6XFx0Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuMTA3MTpcXHRpbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpO1xcbjEwNzI6XFx0aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XFxuMTA3NzpcXHR9XFxuMTA3ODpcXHRcXG4xMDc5OlxcdC8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXFxuMTA4MDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcbjEwODE6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4xMDgyOlxcdHtcXG4xMDgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbjEwODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9zYW1wbGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1Mjo1MC42MTYwNDYyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzU3Njc1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUncyBzd2l0Y2hlZCBmcm9tIGRpcmVjdGx5IGNoZWNraW5nIGBjdHgtXHUwMDNlb3BzLmlkYCBhZ2FpbnN0IGBEQU1PTl9PUFNfUEFERFJgIGFuZCBgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMWAgdG8gdXNpbmcgdGhpcyBgZGFtb25fdGFyZ2V0X2hhc19waWRgIGZ1bmN0aW9uIGFuZCBuZWdhdGluZyBpdHMgcmVzdWx0LCBzdGlsbCBjb21wYXJpbmcgdG8gYHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDFgLiBTbywgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBtdXN0IGJlIHRoZSBrZXkgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCBjaGVja3MgaWYgdGhlIGBjdHgtXHUwMDNlb3BzLmlkYCBpcyBlaXRoZXIgYERBTU9OX09QU19WQUREUmAgb3IgYERBTU9OX09QU19GVkFERFJgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHBhcnQ6IGlmIGBjdHgtXHUwMDNlb3BzLmlkYCAqaXMqIGBEQU1PTl9PUFNfUEFERFJgLCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHJldHVybnMgZmFsc2UsIHJpZ2h0PyBUaGVyZWZvcmUsIHRoZSBuZWdhdGlvbiBvZiB0aGF0IHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZSB3aGljaCBtaW1pY3MgdGhlIG9sZCBiZWhhdmlvciwgYXMgdGhlIG9sZGVyIGNvbXBhcmlzb24gb2Ygd2hldGhlciBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdvdWxkIGhhdmUgYmVlbiB0cnVlIGFzIHdlbGwuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBzaG91bGQgbWF0Y2ggdW5kZXIgdGhlIG9yaWdpbmFsIGFuZCBuZXcgY2FzZXMsIGFzc3VtaW5nIGFsbCBvdGhlciBjb2RlLXBhdGhzIGFyZSB1bmNoYW5nZWQuXG5cbkJ1dC4uLiB3aGF0IGlmIGBjdHgtXHUwMDNlb3BzLmlkYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBEQU1PTl9PUFNfUEFERFJgLCBgREFNT05fT1BTX1ZBRERSYCwgb3IgYERBTU9OX09QU19GVkFERFJgPyBXaGF0IGlmIGl0J3MsIHNheSwgYERBTU9OX09QU19TR2Agb3Igc29tZSBvdGhlciBuZXcgb3BlcmF0aW9uIElEIHdlJ3ZlIGFkZGVkPyBUaGUgYmVoYXZpb3Igb2YgdGhlIG9sZCBjb2RlIHdvdWxkIGhhdmUgbm90IHJ1biB0aGlzIHBhdGgsIG5vdyBpdCBtaWdodC4gVGhlIG5lZ2F0aW9uIG9mIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgaXMgbm93IG1vcmUgY29tcGxleC4gV2UgbmVlZCB0byBrbm93IHRoZSBjb21wbGV0ZSBzZXQgb2YgcG9zc2libGUgdmFsdWVzIGZvciBgZGFtb25fb3BzX2lkYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgdGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB3aGF0IHRob3NlIHZhbHVlcyBjb3VsZCBiZSwgYW5kIHRoZW4gdGhpbmsgYWJvdXQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGNvdWxkIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjY0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NTUuNjkxODE1OTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzU2MDUzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gZGFtb25fb3BzX2lkIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTUtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxNjplbnVtIGRhbW9uX29wc19pZCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxNy1cXHREQU1PTl9PUFNfVkFERFIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUyOjU5LjA0Nzg3MzcyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI1MzAwMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBDb3JlOiBFeGFtaW5pbmcgZGFtb24uaCBBcm91bmQgTGluZSA2MTYqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OLCB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyLCBoYW5kbGVzIGl0cyBtb25pdG9yaW5nIGxvb3BzLCBzcGVjaWZpY2FsbHkgdGhlaXIgY29udHJvbC4gTXkgbWluZCBpcyBkcmF3biB0byBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIEkgZmlndXJlIGxpbmUgNjE2IGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBjcnVjaWFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhpcyB0eXBlIG9mIGxvb3AgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGhlIGNvbnRyb2wgc3RydWN0cywgY3JpdGljYWwgaW5saW5lIGZ1bmN0aW9ucywgb3IgdGhlIG1hY3JvcyB0aGF0IGRlZmluZSBsb29wIGl0ZXJhdGlvbnMuIEZyb20gcHJpb3IgZXhwZXJpZW5jZSwgdGhhdCBhcmVhIG9mdGVuIGhvdXNlcyB0aGUgZm91bmRhdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyAqaG93KiBhbmQgKndoZW4qIERBTU9OIG1vbml0b3JzIHRoZSBtZW1vcnkgcmVnaW9ucy4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgZm91bmRhdGlvbmFsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjAyLjM3MzE3Njk4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0ICogQERBTU9OX09QU19WQUREUjpcXHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXG4gNjExOlxcdCAqIEBEQU1PTl9PUFNfRlZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3Igb25seSBmaXhlZCByYW5nZXMgb2YgdmlydHVhbFxcbiA2MTI6XFx0ICpcXHRcXHRcXHRhZGRyZXNzIHNwYWNlc1xcbiA2MTM6XFx0ICogQERBTU9OX09QU19QQUREUjpcXHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxuIDYxNDpcXHQgKiBATlJfREFNT05fT1BTOlxcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXFxuIDYxNTpcXHQgKi9cXG4gNjE2OlxcdGVudW0gZGFtb25fb3BzX2lkIHtcXG4gNjE3OlxcdFxcdERBTU9OX09QU19WQUREUixcXG4gNjE4OlxcdFxcdERBTU9OX09QU19GVkFERFIsXFxuIDYxOTpcXHRcXHREQU1PTl9PUFNfUEFERFIsXFxuIDYyMDpcXHRcXHROUl9EQU1PTl9PUFMsXFxuIDYyMTpcXHR9O1xcbiA2MjI6XFx0XFxuIDYyMzpcXHQvKipcXG4gNjI0OlxcdCAqIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIC0gTW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXFxuIDYyNTpcXHQgKlxcbiA2MjY6XFx0ICogQGlkOlxcdFxcdFxcdFxcdElkZW50aWZpZXIgb2YgdGhpcyBvcGVyYXRpb25zIHNldC5cXG4gNjI3OlxcdCAqIEBpbml0OlxcdFxcdFxcdEluaXRpYWxpemUgb3BlcmF0aW9ucy1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcy5cXG4gNjI4OlxcdCAqIEB1cGRhdGU6XFx0XFx0XFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXFxuIDYyOTpcXHQgKiBAcHJlcGFyZV9hY2Nlc3NfY2hlY2tzOlxcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjAyLjM3NDM2NjA0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA0NTEzMTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHByaW1hcmlseSBhIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGVmZm9ydC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHJlcGxhY2luZyBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdpdGggYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gSSBjYW4gc2VlIHRoYXQgYGRhbW9uX29wc19pZGAgY2FuIGJlIG9uZSBvZiBgREFNT05fT1BTX1ZBRERSYCwgYERBTU9OX09QU19GVkFERFJgLCBvciBgREFNT05fT1BTX1BBRERSYC4gTm93LCB0aGUgZnVuY3Rpb24gYGRhbW9uX3RhcmdldF9oYXNfcGlkYCByZXR1cm5zIHRydWUgaWYgdGhlIGBvcHNfaWRgIGlzIGVpdGhlciBgVkFERFJgIG9yIGBGVkFERFJgLCBhbmQgZmFsc2UgaWYgaXQncyBgUEFERFJgLiBTaW5jZSB0aG9zZSBhcmUgdGhlICpvbmx5KiB2YWxpZCB2YWx1ZXMgZm9yIGBjdHgtXHUwMDNlb3BzLmlkYCwgdGhpcyBzdWJzdGl0dXRpb24gc2hvdWxkIGJlIGxvZ2ljYWxseSBlcXVpdmFsZW50LiBJdCBzaW1wbGlmaWVzIHRoZSBjb25kaXRpb25hbC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoZXJlIGFyZSBubyBvdGhlciBmdW5jdGlvbmFsIHNoaWZ0cyBidXJpZWQgaGVyZS4gVGhlIHBhdGNoIGRpZmYgYWxzbyBzaG93cyByZW9yZGVyaW5nIGZpZWxkcyBpbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIGFkZGluZyBhIGAvKiBwcml2YXRlOiAqL2AgY29tbWVudC4gT2theSwgc28gaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCB0aGF0J3MgdGhlIG9ubHkgbG9naWMgY2hhbmdlLCB0aGUgcmVwbGFjZW1lbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgdHJ1bHkgYSByZWZhY3RvcmluZy4gSSdtIHRoaW5raW5nLCB3aGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgYGN0eC1cdTAwM2VvcHMuaWRgPyBJZiBpdCdzIHplcm8sIHRoYXQncyBlcXVpdmFsZW50IHRvIGBEQU1PTl9PUFNfVkFERFJgLCBhbmQgaW4gdGhhdCBzY2VuYXJpbyBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHdvdWxkIHN0aWxsIGJlIGZhbHNlLCBqdXN0IGxpa2UgYGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3b3VsZCBiZS4gVGhlcmVmb3JlLCB0aGUgcmVmYWN0b3JpbmcgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBoZWFkZXIgZmlsZSBjaGFuZ2UuIFJlb3JkZXJpbmcgc3RydWN0IGZpZWxkcyAqY2FuKiBiZSBwcm9ibGVtYXRpYywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciBpZiBpdCBjYXVzZXMgYmluYXJ5IGNvbXBhdGliaWxpdHkgaXNzdWVzLiBIb3dldmVyLCBzaW5jZSBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBpcyBub3QgaW4gYGluY2x1ZGUvdWFwaWAsIGFuZCB0aGlzIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3QsIGl0J3MgbGVzcyBsaWtlbHkgdG8gYmUgYSBjb25jZXJuLCBhc3N1bWluZyBubyBoYXJkY29kZWQgb2Zmc2V0cyBhcmUgYmVpbmcgdXNlZCBzb21ld2hlcmUuIFRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBhbHNvIGluY2x1ZGVzIHNvbWUgYC8qIHByaXZhdGU6ICovYCBjb21tZW50cy5cblxuVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhlIGBsaXN0YCBtZW1iZXIgaXMgYmVpbmcgbW92ZWQgdG8gdGhlIGVuZCwgYW5kIG1hcmtlZCBwcml2YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBicmVhayBhbnl0aGluZy4gSSBkb24ndCBzZWUgYW55IGhhcmRjb2RlZCBvZmZzZXRzIHVzZWQgaW4gdGhpcyBjYXNlLCBhbmQgdGhlIGluY2x1ZGUgaXMgbm90IGEgVUFQSS4gU28gdGhlIGxheW91dCBjaGFuZ2Ugc2hvdWxkbid0IGFmZmVjdCBhbnl0aGluZywgdW5sZXNzLCBhbmQgdGhpcyBpcyBhIHBvc3NpYmlsaXR5LCBpdCBpcyB1c2VkIGluIHNvbWUgd2VpcmQgb3IgdW5leHBlY3RlZCB3YXkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzoxMy40MTk1MDAyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3MTg4OTk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb25fcmVnaW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ1IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mzg9c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQzLS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0NDogKiBzdHJ1Y3QgZGFtb25fcmVnaW9uIC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbi5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDUtICogQGFyOlxcdFxcdFxcdFRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSByZWdpb24uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjQtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY1OnN0cnVjdCBkYW1vbl9yZWdpb24ge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC02Ni1cXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD00NzA9c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQ3MS1cXHR2b2lkICgqd2Fsa19mbikodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0NzI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDczLVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcywgdW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC01OTMtXFx0ICogdW5kZXJseWluZyBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWRcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTk0OlxcdCAqIHdpdGggdGhlIGNvcmUgbGF5ZXIgYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC01OTUtXFx0ICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTY3ND1zdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjgyLVxcdGludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY4MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY4NC1cXHR1bnNpZ25lZCBsb25nICgqYXBwbHlfc2NoZW1lKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2ODU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjg2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lLCB1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD05MjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3JhbmQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkzNS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTM2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV4dF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM3LXtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTM4OlxcdHJldHVybiBjb250YWluZXJfb2Yoci1cXHUwMDNlbGlzdC5uZXh0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uLCBsaXN0KTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM5LX1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTQwLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NDE6c3RhdGljIGlubGluZSBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9wcmV2X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDIte1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NDM6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihyLVxcdTAwM2VsaXN0LnByZXYsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDQtfVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk0NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0Ny17XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk0ODpcXHRyZXR1cm4gbGlzdF9sYXN0X2VudHJ5KFxcdTAwMjZ0LVxcdTAwM2VyZWdpb25zX2xpc3QsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDktfVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NTAtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk1MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX2ZpcnN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NTIte1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NTM6XFx0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnQtXFx1MDAzZXJlZ2lvbnNfbGlzdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiwgbGlzdCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1NC19XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1NS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTU2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTU3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDIwPXZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjEtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjI6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjM6dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjQtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyNTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyNi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDI3OnVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDI4LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzMD1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDMyOnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMy1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9Nzc9VFJBQ0VfRVZFTlRfQ09ORElUSU9OKGRhbW9zX2JlZm9yZV9hcHBseSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtNzktXFx0VFBfUFJPVE8odW5zaWduZWQgaW50IGNvbnRleHRfaWR4LCB1bnNpZ25lZCBpbnQgc2NoZW1lX2lkeCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oOjgwOlxcdFxcdHVuc2lnbmVkIGludCB0YXJnZXRfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtODEtXFx0XFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCB1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9MTM1PVRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vbl9yZWdpb25fYWdncmVnYXRlZCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTEzNi1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oOjEzNzpcXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtMTM4LVxcdFxcdHVuc2lnbmVkIGludCBucl9yZWdpb25zLCB1bnNpZ25lZCBpbnQgbnJfcHJvYmVzKSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9MTczPVRSQUNFX0VWRU5UKGRhbW9uX2FnZ3JlZ2F0ZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaC0xNzQtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaDoxNzU6XFx0VFBfUFJPVE8odW5zaWduZWQgaW50IHRhcmdldF9pZCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTE3Ni1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyksXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjQ0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjMtICovXFxubW0vZGFtb24vY29yZS5jOjI2NDp1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMjY1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODctXFxubW0vZGFtb24vY29yZS5jOjI4ODp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMjg5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMTg9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjg6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzI5LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzMwOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcXG5tbS9kYW1vbi9jb3JlLmMtMzMxLVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzUzOnN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtMzU0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjEtICovXFxubW0vZGFtb24vY29yZS5jOjM2MjpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYzozNjM6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcXG5tbS9kYW1vbi9jb3JlLmMtMzY0LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc2PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzgwLVxcbm1tL2RhbW9uL2NvcmUuYzozODE6c3RhdGljIHZvaWQgZGFtb25fZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy0zODIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4OC1cXG5tbS9kYW1vbi9jb3JlLmM6Mzg5OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vY29yZS5jLTM5MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkzLVxcbm1tL2RhbW9uL2NvcmUuYzozOTQ6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzk1LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwLVxcbm1tL2RhbW9uL2NvcmUuYzo0MDE6c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtNDAyLVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDE0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MTU6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jLTQxNi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDM1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MzY6c3RhdGljIGJvb2wgZGFtb25faW50ZXJzZWN0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTQzNy1cXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDQ0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0NDU6c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXFxubW0vZGFtb24vY29yZS5jOjQ0NjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsYXN0LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy00NDcte1xcbm1tL2RhbW9uL2NvcmUuYzo0NDg6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciA9IGZpcnN0O1xcbm1tL2RhbW9uL2NvcmUuYy00NDktXFxubW0vZGFtb24vY29yZS5jLTQ1MC1cXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XFxubW0vZGFtb24vY29yZS5jOjQ1MTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpuZXh0LCAqbmV3cjtcXG5tbS9kYW1vbi9jb3JlLmMtNDUyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ3OD1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODAte1xcbm1tL2RhbW9uL2NvcmUuYzo0ODE6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTQ4Mi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MjMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjUyNDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCA9IE5VTEwsICpsYXN0LCAqbmV3cjtcXG5tbS9kYW1vbi9jb3JlLmMtNTI1LVxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MDc9dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04MDgte1xcbm1tL2RhbW9uL2NvcmUuYzo4MDk6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTgxMC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05MzI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkzOC1cXG5tbS9kYW1vbi9jb3JlLmM6OTM5OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTk0MC1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTU4LVxcbm1tL2RhbW9uL2NvcmUuYzo5NTk6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTk2MC1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9OTg5PXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTk5My1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL2NvcmUuYzo5OTQ6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtOTk1LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1MjU9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1Mjcte1xcbm1tL2RhbW9uL2NvcmUuYzoxNTI4OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnNyY19yZWdpb24sICpwcmV2ID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMTUyOS1cXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4Njk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcmVnaW9uX3N6X2xpbWl0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODcxLVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vY29yZS5jOjE4NzI6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtMTg3My1cXHR1bnNpZ25lZCBsb25nIHN6ID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODg4PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYzoxODg5OlxcdFxcdFxcdFxcdCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgdW5zaWduZWQgbG9uZyBzel9yKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg5MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTA3LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vY29yZS5jOjE5MDg6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTE5MDktXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjEwMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE0My0gKiBpbnZvY2F0aW9uLCBmb3IgZWFjaCBzY2hlbWUuICBUaGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gY2FuIGhlbmNlIHNhZmVseVxcbm1tL2RhbW9uL2NvcmUuYzoyMTQ0OiAqIGFjY2VzcyB0aGUgaW50ZXJuYWwgZGF0YSBvZiBcXHUwMDI2c3RydWN0IGRhbW9uX2N0eCBhbmQgXFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24gdGhhdFxcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIGVhY2ggb2YgdGhlIHNjaGVtZSB3aWxsIGFwcGx5IHRoZSBhY3Rpb24gZm9yIG5leHQgaW50ZXJ2YWwsIHdpdGhvdXRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTgwPXN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxOTItXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjE5MzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTk0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZ2V0X2ludGVydmFsc19zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyMTQtXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG5tbS9kYW1vbi9jb3JlLmM6MjIxNTpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjE2LVxcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBtYXhfYWNjZXNzX2V2ZW50cyA9IDAsIGFjY2Vzc19ldmVudHMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyNTE9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjcyLVxcbm1tL2RhbW9uL2NvcmUuYzoyMjczOnN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG5tbS9kYW1vbi9jb3JlLmMtMjI3NC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyOTQ9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI5OS1cXG5tbS9kYW1vbi9jb3JlLmM6MjMwMDpzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMjMwMS1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjMzNj1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjIzMzc6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYy0yMzM4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzg2PXN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjIzODc6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxcbm1tL2RhbW9uL2NvcmUuYy0yMzg4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDM1PXN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjI0MzY6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDM3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDYyPXN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfY2FsbF93YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmM6MjQ2MzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxubW0vZGFtb24vY29yZS5jLTI0NjQtXFx0XFx0dW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1Njk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjI1NzA6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjM5PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG5tbS9kYW1vbi9jb3JlLmMtMjY0MC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYzoyNjQxOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vY29yZS5jLTI2NDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2OTE9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY5My17XFxubW0vZGFtb24vY29yZS5jOjI2OTQ6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtMjY5NS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY5Ni1cXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNjk3OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXZfcjtcXG5tbS9kYW1vbi9jb3JlLmMtMjY5OC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODc4PXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg4MS1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL2NvcmUuYzoyODgyOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vY29yZS5jLTI4ODMtXFx0cGh5c19hZGRyX3QgdG90YWxfZWxpZ2libGUgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMzU9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTM4LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vY29yZS5jOjMxMzk6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtMzE0MC1cXHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2VzejtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjU4PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG5tbS9kYW1vbi9jb3JlLmM6MzI1OTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjYwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjY2PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG5tbS9kYW1vbi9jb3JlLmM6MzI2NzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjY4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjc1PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjMyNzY6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzI5MzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzI5NC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMxMD1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzEyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MzMxMzpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYy0zMzE0LVxcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNjM9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM4My0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYzozMzg0OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzM4NS1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM5MS0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzozMzkyOnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzM5My1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQwND1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmM6MzQwNTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHVuc2lnbmVkIGxvbmcgc3pfcilcXG5tbS9kYW1vbi9jb3JlLmMtMzQwNi17XFxubW0vZGFtb24vY29yZS5jOjM0MDc6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV3O1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA4LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0Mjg9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQzMS17XFxubW0vZGFtb24vY29yZS5jOjM0MzI6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTM0MzMtXFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHN6X3N1YiA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQ1OD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjItXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ2MzpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJvdGF0aW9uKysgJSBzcGxpdF9zdGVwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2MTI9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2MTQtXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG5tbS9kYW1vbi9jb3JlLmM6MzYxNTpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjE2LVxcbm1tL2RhbW9uL2NvcmUuYy0zNjE3LVxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxubW0vZGFtb24vY29yZS5jOjM2MTg6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldl9yID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMzYxOS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzk2Nj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzk5MTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcXG5tbS9kYW1vbi9jb3JlLmMtMzk5Mi17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDQ6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE0OC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTQ5OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTM9Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ4LVxcbm1tL2RhbW9uL3BhZGRyLmM6NDk6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtNTAtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz01Nz1zdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy01OS1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3BhZGRyLmM6NjA6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9wYWRkci5jLTYxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyAqZm9saW9fc3opXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTgxLVxcbm1tL2RhbW9uL3BhZGRyLmM6ODI6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTgzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEwNi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3BhZGRyLmM6MTA3OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYy0xMDgtXFx0dW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE2OT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3Mi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3BhZGRyLmM6MTczOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYy0xNzQtXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMjE9c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIzMS1cXG5tbS9kYW1vbi9wYWRkci5jOjIzMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0yMzMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjkwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jOjI5MTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG5tbS9kYW1vbi9wYWRkci5jLTI5Mi1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIGJvb2wgYWN0aXZhdGUsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMyMy1cXG5tbS9kYW1vbi9wYWRkci5jOjMyNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI1LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMzMC1cXG5tbS9kYW1vbi9wYWRkci5jOjMzMTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZWFjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0zMzItXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzM3LVxcbm1tL2RhbW9uL3BhZGRyLmM6MzM4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTMzOS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zNzEtXFxubW0vZGFtb24vcGFkZHIuYzozNzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzczLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTM5OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3BhZGRyLmM6NDAwOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy00MDEtXFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQyNj1zdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbm1tL2RhbW9uL3BhZGRyLmM6NDI3OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbm1tL2RhbW9uL3BhZGRyLmMtNDI4LXtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz01ND1zdGF0aWMgdm9pZCBkYW1vbl9zdGF0X3NldF9lc3RpbWF0ZWRfbWVtb3J5X2JhbmR3aWR0aChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTU2LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vc3RhdC5jOjU3OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vc3RhdC5jLTU4LVxcdHVuc2lnbmVkIGxvbmcgYWNjZXNzX2J5dGVzID0gMDtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy02OC1cXG5tbS9kYW1vbi9zdGF0LmM6Njk6c3RhdGljIGludCBkYW1vbl9zdGF0X2lkbGV0aW1lKGNvbnN0IHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vc3RhdC5jLTcwLXtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz03Nj1zdGF0aWMgaW50IGRhbW9uX3N0YXRfY21wX3JlZ2lvbnMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5tbS9kYW1vbi9zdGF0LmMtNzcte1xcbm1tL2RhbW9uL3N0YXQuYzo3ODpcXHRjb25zdCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyYSA9ICooY29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqKilhO1xcbm1tL2RhbW9uL3N0YXQuYzo3OTpcXHRjb25zdCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyYiA9ICooY29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqKiliO1xcbm1tL2RhbW9uL3N0YXQuYy04MC1cXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz04ND1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc29ydF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vc3RhdC5jOjg1OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKioqc29ydGVkX3B0ciwgaW50ICpucl9yZWdpb25zX3B0cixcXG5tbS9kYW1vbi9zdGF0LmMtODYtXFx0XFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc3pfcHRyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTg4LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vc3RhdC5jOjg5OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vc3RhdC5jOjkwOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKipyZWdpb25fcG9pbnRlcnM7XFxubW0vZGFtb24vc3RhdC5jLTkxLVxcdHVuc2lnbmVkIGludCBucl9yZWdpb25zID0gMDtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0xMTM9c3RhdGljIHZvaWQgZGFtb25fc3RhdF9zZXRfaWRsZXRpbWVfcGVyY2VudGlsZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9zdGF0LmMtMTE0LXtcXG5tbS9kYW1vbi9zdGF0LmM6MTE1OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKipzb3J0ZWRfcmVnaW9ucywgKnJlZ2lvbjtcXG5tbS9kYW1vbi9zdGF0LmMtMTE2LVxcdGludCBucl9yZWdpb25zO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NDY9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0ODpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDktXFx0XFx0Ym9vbCB0b3RhbF9ieXRlc19vbmx5LCB1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2JlcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTE6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24pXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjA9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjE6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2Mi17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpkcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODAte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMDE9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAyLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzEwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsIGJvb2wgdG90YWxfYnl0ZXNfb25seSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNC1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzMTk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmUodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjMyMDpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMyMS1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHVuc2lnbmVkIGxvbmcgc3pfZmlsdGVyX3Bhc3NlZClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNC17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9hZ2dyZWdhdGUoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyLVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkzOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk0LVxcdGludCBpdCwgaXI7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0Mi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDM6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnJfbmV3O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQtXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTM6MTYuMjkxMzk2MDg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTU3NTAyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWdpb24gU3RydWN0dXJlKipcblxuT2theSwgc28gdGhlIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBoZWF2aWx5IHV0aWxpemVkLCBidXQgaXQncyBub3QgZXhwb3NlZCBhcyBwYXJ0IG9mIHRoZSBVc2VyIEFQSSwgd2hpY2ggaXMgYSBrZXkgcG9pbnQuIExldCdzIGRlbHZlIGJhY2sgaW50byB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXRzZWxmLiBIbW0sIGhlcmUgaXQgaXM6IGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGUgcmVjZW50IG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWFycmFuZ2VtZW50IG9mIHRoZSBgbGlzdGAgZmllbGQuIEl0IGxvb2tzIGxpa2UgaXQgd2FzIG1vdmVkIGZyb20gYmVmb3JlIGBhZ2VgIHRvIGFmdGVyIGBhZ2VgLiBOb3csIG15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGhhcyBhbnkgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBhbnkgaGFyZGNvZGVkIG9mZnNldHMgb3IgYXNzZW1ibHkgY29kZSB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZSBzcGVjaWZpYyBtZW1iZXJzIG9mIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhhbmtmdWxseSwgYSBxdWljayBzY2FuIGRvZXNuJ3QgcmV2ZWFsIGFueXRoaW5nIGxpa2UgdGhhdC4gSXQncyBqdXN0IGEgc3RhbmRhcmQgQyBzdHJ1Y3R1cmUuIEJ1dCB3YWl0LCB3aGF0IGFib3V0IGBtZW1zZXRgIG9yIGBtZW1jcHlgIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBiZSBzZW5zaXRpdmUgdG8gdGhlIHN0cnVjdHVyZSdzIGxheW91dD8gVGhleSBjb3VsZCBiZSBhbiBpc3N1ZS4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgYGRhbW9uX25ld19yZWdpb25gIGlzIGltcGxlbWVudGVkLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBhIG5ldyByZWdpb24gd291bGQgYmUgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgbm90aGluZyB0aGVyZSBpcyBnb2luZyB0byBibG93IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYxMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzoyMS45ODcxNDkxODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzczODU0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAyMD12b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDIxLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDIyOnN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDIzLXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxOD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjctICovXFxubW0vZGFtb24vY29yZS5jOjMyODpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NTYtXFx0XFx0aWYgKHItXFx1MDAzZWFyLmVuZCAhPSBuZXh0LVxcdTAwM2Vhci5zdGFydCkge1xcbm1tL2RhbW9uL2NvcmUuYzo0NTc6XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oci1cXHUwMDNlYXIuZW5kLCBuZXh0LVxcdTAwM2Vhci5zdGFydCk7XFxubW0vZGFtb24vY29yZS5jLTQ1OC1cXHRcXHRcXHRpZiAoIW5ld3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDc4PWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTUwOS1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTEwOlxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy01MTEtXFx0XFx0XFx0XFx0XFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTQyLVxcdFxcdFxcdC8qIG5vIHJlZ2lvbiBpbnRlcnNlY3RzIHdpdGggdGhpcyByYW5nZSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo1NDM6XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oXFxubW0vZGFtb24vY29yZS5jLTU0NC1cXHRcXHRcXHRcXHRcXHRBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VzdGFydCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDA0PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDktXFx0ZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChyLCBzel9yKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzQxMDpcXHRuZXcgPSBkYW1vbl9uZXdfcmVnaW9uKHItXFx1MDAzZWFyLnN0YXJ0ICsgc3pfciwgci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQxMS1cXHRpZiAoIW5ldylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODpcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigxLCAyKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTktXFx0aWYgKCFyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYWdncmVnYXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTAtXFx0XFx0Zm9yIChpciA9IDA7IGlyIFxcdTAwM2MgMzsgaXIrKykge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTE6XFx0XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oc2FkZHJbaXRdW2lyXSwgZWFkZHJbaXRdW2lyXSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMi1cXHRcXHRcXHRpZiAoIXIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ3LVxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE0ODpcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCAxMDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDktXFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODAtXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwidGFyZ2V0IGFsbG9jIGZhaWxcXFwiKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTgxOlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIDEwMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4Mi1cXHRpZiAoIXIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODgtXFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTg5OlxcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5MC1cXHRpZiAoIXIyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjI3PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNhKTsgaSsrKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI1MDpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNTEtXFx0XFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjg5LVxcdH1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjkwOlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIDIyKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjkxLVxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTMwNS1cXHR9XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjMwNjpcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCAyMjApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMDctXFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzIyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNhKTsgaSsrKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjMyMzpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMjQtXFx0XFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQ2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzItXFx0XFx0c3RhcnQgPSBpICogcmVnaW9uX3N6O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzM6XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oc3RhcnQsIHN0YXJ0ICsgcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc0LVxcdFxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQ1ND1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzel9vbGRfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDY4OlxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKG9sZF9yYW5nZXNbaV0uc3RhcnQsIG9sZF9yYW5nZXNbaV0uZW5kKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY5LVxcdFxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU4Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTkxLVxcdHN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU5MjpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTkzLVxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl90ZXN0X2hlbHBfc2V0dXBfdGFyZ2V0KFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExODMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JlZ2lvbnM7IGkrKykge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTg0OlxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHJlZ2lvbl9zdGFydF9lbmRbaV1bMF0sXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExODUtXFx0XFx0XFx0XFx0cmVnaW9uX3N0YXJ0X2VuZFtpXVsxXSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTI2Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2ZpbHRlcl9vdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyNzctXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjc4OlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjc5LVxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0NDQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NjMtXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDY0OlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIHN6X3JlZ2lvbnMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDY1LVxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0OTU9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNDsgaSsrKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MDY6XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oaSAqIDIsIChpICsgMSkgKiAyKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNy1cXHRcXHRpZiAoIXIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTM6MjQuNjI0NTQxMDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDUyNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHdoYXQgSSdtIGRlYWxpbmcgd2l0aCwgSSdtIHByZXR0eSBzdXJlIHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoYXQgbGluZSAzMjggbWlnaHQgYmUgdGhlIGNyaXRpY2FsIGFyZWEgdG8gZm9jdXMgb24uIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBsb2NhdGlvbiwgYXMgSSBzdXNwZWN0IHRoZXJlIGlzIHNvbWV0aGluZyByZWxldmFudCB0byB3aGF0IEknbSBpbnZlc3RpZ2F0aW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjI3Ljg2OTA3MTUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdH1cXG4gMzIxOlxcdCNlbmRpZlxcbiAzMjI6XFx0XFxuIDMyMzpcXHQvKlxcbiAzMjQ6XFx0ICogQ29uc3RydWN0IGEgZGFtb25fcmVnaW9uIHN0cnVjdFxcbiAzMjU6XFx0ICpcXG4gMzI2OlxcdCAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzdHJ1Y3QgaWYgc3VjY2Vzcywgb3IgTlVMTCBvdGhlcndpc2VcXG4gMzI3OlxcdCAqL1xcbiAzMjg6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gMzI5OlxcdHtcXG4gMzMwOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcXG4gMzMxOlxcdFxcdGludCBpO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbihzdGFydCwgZW5kKTtcXG4gMzM0OlxcdFxcdHJlZ2lvbiA9IGttZW1fY2FjaGVfYWxsb2MoZGFtb25fcmVnaW9uX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG4gMzM1OlxcdFxcdGlmICghcmVnaW9uKVxcbiAzMzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdHJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcXG4gMzM5OlxcdFxcdHJlZ2lvbi1cXHUwMDNlYXIuZW5kID0gZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzoyNy44Njk3NjA0OTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTk5NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBkYW1vbl9uZXdfcmVnaW9uYCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9uX25ld19yZWdpb25gIHRoaW5nLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgb3ZlcmFsbCBkZXNpZ24gYW5kIHdoYXQga2luZCBvZiBpbXBsaWNhdGlvbnMgaXQgaGFzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGp1c3QgZ2V0IGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiwgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGFyY2hpdGVjdHVyZSwgd2hlcmUgaXQncyBiZWluZyB1c2VkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBhaW4gcG9pbnRzIG9yIGRlc2lnbiBpc3N1ZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBzeXN0ZW07IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlIG9yIGFuIGluY3JlbWVudGFsIGFkZGl0aW9uPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5PyBBbmQsIG1vc3QgY3JpdGljYWxseSwgaG93IGRvZXMgdGhpcyBuZXcgcmVnaW9uIGltcGFjdCB0aGUgZXhpc3Rpbmcgd29ya2Zsb3dzPyBJIGV4cGVjdCB0aGVyZSBtYXkgYmUgZWRnZSBjYXNlcyB0byBjb25zaWRlci4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZGF0YSBpbmNvbnNpc3RlbmNpZXMsIGFuZCwgb2YgY291cnNlLCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIG15IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzozMS4zMjE3NjE0MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0cmVnaW9uLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XFxuIDM0MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxuIDM0MjpcXHRcXHRcXHRyZWdpb24tXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbiAzNDM6XFx0XFx0XFx0cmVnaW9uLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSAwO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGlzdCk7XFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdHJlZ2lvbi1cXHUwMDNlYWdlID0gMDtcXG4gMzQ4OlxcdFxcdHJlZ2lvbi1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDA7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdHJldHVybiByZWdpb247XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdHN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4gMzU0OlxcdHtcXG4gMzU1OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnItXFx1MDAzZWxpc3QsIFxcdTAwMjZ0LVxcdTAwM2VyZWdpb25zX2xpc3QpO1xcbiAzNTY6XFx0XFx0dC1cXHUwMDNlbnJfcmVnaW9ucysrO1xcbiAzNTc6XFx0fVxcbiAzNTg6XFx0XFxuIDM1OTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzozMS4zMjIwMDQ0MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4MTMzMTU2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgREFNT04gU3RydWN0dXJlIFJlb3JkZXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoLCBhbmQgaXQncyBhbG1vc3QgZW50aXJlbHkgc3RydWN0dXJhbC4gRXNzZW50aWFsbHksIHdlIGFyZSBqdXN0IHJlb3JkZXJpbmcgdGhlIGZpZWxkcyB3aXRoaW4gc2V2ZXJhbCBgc3RydWN0YCBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgdG8gZ3JvdXAgcHVibGljLWZhY2luZyBmaWVsZHMgYW5kIHByaXZhdGUsIGludGVybmFsIGZpZWxkcywgYW5kIHNvbWUgYWNjb21wYW55aW5nIGtlcm5lbC1kb2MgY29tbWVudHMgaGF2ZSBiZWVuIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG5cbkxvb2tpbmcgYXQgZWFjaCBzdHJ1Y3Q6XG5cbiogICBgZGFtb25fbmV3X3JlZ2lvbmA6IE5vIGNoYW5nZXMgb3RoZXIgdGhhbiBpbml0aWFsaXphdGlvbiBiZWhhdmlvciB1bmFmZmVjdGVkIGJ5IHRoZSBsYXlvdXQuXG5cbiogICBgZGFtb25fdGFyZ2V0YDogVGhlIGBvYnNvbGV0ZWAgZmxhZyBpcyBtb3ZlZCB1cC4gVGhlIGZpZWxkczogYG5yX3JlZ2lvbnNgLCBgcmVnaW9uc19saXN0YCwgYW5kIGBsaXN0YCBhcmUgcmVvcmRlcmVkIGludG8gYSBwcml2YXRlIHNlY3Rpb24uIEl0IGlzIHdvcnRoIG5vdGluZyB0aGUgZmllbGRzIGBucl9yZWdpb25zYCwgYHJlZ2lvbnNfbGlzdGAsIGFuZCBgbGlzdGAgYXJlIG1vdmVkIGRvd24gYW5kIG1hcmtlZCBhcyBwcml2YXRlLlxuXG4qICAgYGRhbW9zX3F1b3RhX2dvYWxgOiBgbGFzdF9wc2lfdG90YWxgIHdhcyBhbHJlYWR5IHdpdGhpbiBhIHVuaW9uLCBhbmQgaXMgc2ltcGx5IG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIHVuaW9uLiBObyByZWFsIGNoYW5nZSBoZXJlLlxuXG4qICAgYGRhbW9zX3F1b3RhYDogVGhlIGBnb2Fsc2AgZmllbGQgaXMgbW92ZWQgdG8gdGhlIHByaXZhdGUgc2VjdGlvbi4gQSBsYXlvdXQgY2hhbmdlLlxuXG4qICAgYGRhbW9zX2ZpbHRlcmA6IE5vIGxheW91dCBjaGFuZ2U7IGNvbW1lbnRzIHdlcmUgYWRkZWQgdG8gZXhwbGFpbiBwcml2YXRlIHN0YXRlLlxuXG4qICAgYGRhbW9zYDogU2V2ZXJhbCBmaWVsZHMgKGBxdW90YWAsIGB3bWFya3NgLCB0aGUgdW5pb24sIGBzdGF0YCwgYG1heF9ucl9zbmFwc2hvdHNgKSBhcmUgbW92ZWQgdXAgYmVmb3JlIGEgY29tbWVudCBtYXJraW5nIHRoZSBzdGFydCBvZiBpbnRlcm5hbC11c2Utb25seSBmaWVsZHMuIExheW91dCBjaGFuZ2UuXG5cbiogICBgZGFtb25fZmlsdGVyYDogTm8gbGF5b3V0IGNoYW5nZS5cblxuKiAgIGBkYW1vbl9wcm9iZWA6IE5vIGxheW91dCBjaGFuZ2UuXG5cbiogICBgZGFtb25fY3R4YDogYG9wc2AgYW5kIGBwcm9iZXNgIGFyZSBtb3ZlZCBkb3duLiBMYXlvdXQgY2hhbmdlLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhlc2UgYXJlIGFsbW9zdCBlbnRpcmVseSBsYXlvdXQgY2hhbmdlcywgaW1wcm92aW5nIGNvZGUgcmVhZGFiaWxpdHkuIE5vIGZ1bmN0aW9uYWwgYmVoYXZpb3IgaXMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLlxuXG5Ib3dldmVyLCB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBpczpcbmBgYGNcbi1cdGlmIChjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19QQUREUiBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbitcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbmBgYFxuXG5UaGUgbmV3IGNvbmRpdGlvbmFsIGluIGBtbS9kYW1vbi9zeXNmcy5jYCByZXBsYWNlcyBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdpdGggYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gSSB3YXMgY29uY2VybmVkIGFib3V0IGltcGxpY2l0IGJlaGF2aW9yLCBidXQgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBlbnVtIGRlZmluaXRpb24sIGl0J3MgY2xlYXIgdGhlc2UgYXJlIGxvZ2ljYWxseSBlcXVpdmFsZW50IGNvbmRpdGlvbnMsIHdoZXJlIGBkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYCBpcyB0cnVlIGlmIHdlIGFyZSBpbiBWQUREUiBvciBGVkFERFIgb3BlcmF0aW9ucywgYW5kIGlzIGZhbHNlIG90aGVyd2lzZS4gU28sIHRoaXMgaXMgYWxzbyBhIHJlZmFjdG9yaW5nLCB0byBjbGFyaWZ5IHRoZSBjb25kaXRpb24uIFRoZSBjb25kaXRpb24gY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LlxuXG5UaGlzIHdob2xlIHBhdGNoIGlzLCB0aGVyZWZvcmUsIGEgdmVyeSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBzdHJ1Y3Qgb3JnYW5pemF0aW9uLCBkb2N1bWVudGF0aW9uLCBhbmQgbWlub3IgY29kZS1jbGFyaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1Mzo1My4xMzUzMjI0NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODc4NDg3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfYWRkX3RhcmdldHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMDI5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDQ3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjA0ODpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDktXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldHMgKnN5c2ZzX3RhcmdldHMpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTEzLVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vc3lzZnMuYzoyMTE0OlxcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cXHUwMDNldGFyZ2V0cyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTE1LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oPTM5PXN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Rlc3RfYWRkX3RhcmdldHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC04MS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjgyOlxcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC04My1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMXUsIG5yX2RhbW9uX3RhcmdldHMoY3R4KSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTg2LVxcdFxcdFxcdHN5c2ZzX3RhcmdldC1cXHUwMDNlcGlkICsgMSwgMjAwKTtcXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjg3OlxcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC04OC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMnUsIG5yX2RhbW9uX3RhcmdldHMoY3R4KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjU1LjYyMzE3Njc3MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE4OTAyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgd2hhdCdzIHRoZSB1c2UgY2FzZSBoZXJlPyBXaGF0J3MgaXQgZG9pbmcgd2l0aCB0aG9zZSBpbnB1dHM/XCIgSSBrbm93IHRoZSBEYW1vbiBzdWJzeXN0ZW0sIHNvIG15IGJyYWluIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhYm91dCBhcHBseWluZyB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMgZGlyZWN0bHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIG9yIGEgdHJpZ2dlciBmb3IgYWN0aW9uPyBJJ20gaG9waW5nIGl0IGlzbid0IG92ZXJseSBjb21wbGljYXRlZCwgdGhhdCBpdCBoYXMgYSBjbGVhciBpbnRlcmZhY2UuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiB3aGVyZSBjaGFuZ2VzIGluIGEgc3lzZnMgbm9kZSB0cmFuc2xhdGUgaW50byBhY3R1YWwgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4gSSByZWFsbHkgd2FudCB0byBlbnN1cmUgdGhlIGlucHV0cyBhcmUgdmFsaWRhdGVkIGNvcnJlY3RseSB0byBlbnN1cmUgc2FmZXR5LiBBbHNvLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgY29tZSB0byBtaW5kIGltbWVkaWF0ZWx5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50LCBzZWUgd2hhdCBraW5kIG9mIGlucHV0cyBpdCBhY2NlcHRzLiBUaGVuIEknbGwgYmUgbG9va2luZyB0byBkZXRlcm1pbmUgaXRzIHNpZGUtZWZmZWN0cyBvbiB0aGUgRGFtb24gc3lzdGVtLCBhbmQgb24gdGhlIG1hY2hpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTM6NTkuNTQyMDgxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDkwOlxcdFxcdHJldHVybiBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggXFx1MDAyNlxcdTAwMjZcXG4yMDkxOlxcdFxcdFxcdGRhbW9uX2lzX3J1bm5pbmcoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMDkyOlxcdH1cXG4yMDkzOlxcdFxcbjIwOTQ6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbjIwOTU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpXFxuMjA5NjpcXHR7XFxuMjA5NzpcXHRcXHRpbnQgZXJyO1xcbjIwOTg6XFx0XFxuMjA5OTpcXHRcXHRlcnIgPSBkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgc3lzX2N0eC1cXHUwMDNlb3BzX2lkKTtcXG4yMTAwOlxcdFxcdGlmIChlcnIpXFxuMjEwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIxMDI6XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQgPSBzeXNfY3R4LVxcdTAwM2VhZGRyX3VuaXQ7XFxuMjEwMzpcXHRcXHQvKiBhZGRyX3VuaXQgaXMgcmVzcGVjdGVkIGJ5IG9ubHkgREFNT05fT1BTX1BBRERSICovXFxuMjEwNDpcXHRcXHRpZiAoc3lzX2N0eC1cXHUwMDNlb3BzX2lkID09IERBTU9OX09QU19QQUREUilcXG4yMTA1OlxcdFxcdFxcdGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChcXG4yMTA2OlxcdFxcdFxcdFxcdFxcdERBTU9OX01JTl9SRUdJT05fU1ogLyBzeXNfY3R4LVxcdTAwM2VhZGRyX3VuaXQsIDEpO1xcbjIxMDc6XFx0XFx0Y3R4LVxcdTAwM2VwYXVzZSA9IHN5c19jdHgtXFx1MDAzZXBhdXNlO1xcbjIxMDg6XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMpO1xcbjIxMDk6XFx0XFx0aWYgKGVycilcXG4yMTEwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjExMTpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMtXFx1MDAzZXByb2Jlcyk7XFxuMjExMjpcXHRcXHRpZiAoZXJyKVxcbjIxMTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE0OlxcdFxcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cXHUwMDNldGFyZ2V0cyk7XFxuMjExNTpcXHRcXHRpZiAoZXJyKVxcbjIxMTY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE3OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhjdHgsIHN5c19jdHgtXFx1MDAzZXNjaGVtZXMpO1xcbjIxMTg6XFx0fVxcbjIxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjU5LjU0MjIzMDUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTczNDM4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IEEgV2FzdGUgb2YgRnV6emluZyBUaW1lKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgc3lzX2N0eC1cdTAwM2VvcHNfaWQpYCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0c2AuIENydWNpYWxseSwgYHN5c19jdHgtXHUwMDNlb3BzX2lkYCBpcyBkZXJpdmVkIGZyb20gdGhlIGBkYW1vbl9vcHNfaWRgIGVudW0uIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGBjdHgtXHUwMDNlb3BzLmlkYCBpcyBhbHdheXMgYSB2YWxpZCBlbnVtIHZhbHVl4oCUc3BlY2lmaWNhbGx5LCBlaXRoZXIgYFZBRERSYCwgYEZWQUREUmAsIG9yIGBQQUREUmAuXG5cblRoaXMgbWVhbnMgdGhhdCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIGlzICpmdW5jdGlvbmFsbHkgaWRlbnRpY2FsKiB0byBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGVxdWl2YWxlbmNlLiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBpbnRyb2R1Y2VkOyBpdCdzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudC4gVGhpcyBzY3JlYW1zIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgb25seSB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuXG5cbkluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCBpdCdzIGFsbCBhYm91dCBzdHJ1Y3QgbGF5b3V0IHJlb3JnYW5pemF0aW9uLiBFc3NlbnRpYWxseSwgbW92aW5nIHNvbWUgbWVtYmVycyBpbnRvIGEgXCJwcml2YXRlXCIgc2VjdGlvbiBvciByZW9yZGVyaW5nIG1lbWJlcnMgd2l0aGluIHRoZSBzdHJ1Y3RzLiBObyBuZXcgZmllbGRzLCBubyBjaGFuZ2VzIHRvIGV4dGVybmFsbHkgdmlzaWJsZSBpbnRlcmZhY2VzIG9yIFVBUEksIG5vdGhpbmcgdGhhdCB3b3VsZCBpbXBhY3QgdGhlIGtlcm5lbCdzIGV4ZWN1dGlvbiBmbG93IGluIGFueSB3YXkuIFN0cnVjdCBtZW1iZXIgb3JkZXJpbmcgY2hhbmdlcyBhcmUgaW50ZXJuYWwgYW5kIHdvbid0IGJyZWFrIGJpbmFyeSBjb21wYXRpYmlsaXR5LlxuXG5JbiBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBvbmx5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgdGhhdCBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIGNvbmRpdGlvbiB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIEFzIHdlJ3ZlIGVzdGFibGlzaGVkLCB0aGVzZSBhcmUgbG9naWNhbGx5IGlkZW50aWNhbCBkdWUgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY3R4YCBzdHJ1Y3QuIFRoaXMgaXMganVzdCBhIG1vcmUgcmVhZGFibGUgdXNlIG9mIGFuIGV4aXN0aW5nIGhlbHBlciBmdW5jdGlvbi5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgY29zbWV0aWMgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IGxvZ2ljIG9yIGV4cG9zZSBhbnl0aGluZyBuZXcgdG8gdGhlIG91dHNpZGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgcGF0Y2guIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ1NywiT3V0cHV0VG9rZW5zIjo4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjU0OjA4LjQzOTU3NjY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3QgbGF5b3V0IHJlb3JkZXJpbmcgdG8gZ3JvdXAgcHVibGljL3ByaXZhdGUgZmllbGRzIGZvciBrZXJuZWwtZG9jLCBhbmQgYSBwdXJlIHJlZmFjdG9yaW5nIGluIG1tL2RhbW9uL3N5c2ZzLmMgdGhhdCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdCBsYXlvdXQgcmVvcmRlcmluZyB0byBncm91cCBwdWJsaWMvcHJpdmF0ZSBmaWVsZHMgZm9yIGtlcm5lbC1kb2MsIGFuZCBhIHB1cmUgcmVmYWN0b3JpbmcgaW4gbW0vZGFtb24vc3lzZnMuYyB0aGF0IHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rd5v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 08:43:00 +0000 UTC FinishedAt: 2026-07-14 08:54:10 +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+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0IGxheW91dCByZW9yZGVyaW5nIHRvIGdyb3VwIHB1YmxpYy9wcml2YXRlIGZpZWxkcyBmb3Iga2VybmVsLWRvYywgYW5kIGEgcHVyZSByZWZhY3RvcmluZyBpbiBtbS9kYW1vbi9zeXNmcy5jIHRoYXQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVlY2QyZjk0Y2RkOGQ3NDNhMTI4ZDFiY2I1OGIxMzdhZGU4MGI4NDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAwODo1MjozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IGY2OTQ0MmE5ZDQzMTI4Li4zMjdmNTM0Njk2YWE4NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtNDYsNyAmIzQzOzQ2LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBzYW1wbGluZ19hZGRyOlx0QWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suXG4gICogQG5yX2FjY2Vzc2VzOlx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cbiAgKiBAcHJvYmVfaGl0czpcdFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBhZ2U6XHRcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cbiAgKlxuICAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcbkBAIC02OCw5ICYjNDM7NjcsMTEgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsaW5nX2FkZHI7XG4gXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIHByb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgYWdlO1xuLS8qIHByaXZhdGU6IEludGVybmFsIHZhbHVlIGZvciBhZ2UgY2FsY3VsYXRpb24uICovXG4mIzQzOy8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5LiAqL1xuJiM0MztcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdC8qIGZvciBhZ2UgY2FsY3VsYXRpb24uICovXG4gXHR1bnNpZ25lZCBpbnQgbGFzdF9ucl9hY2Nlc3NlcztcbiBcdHVuc2lnbmVkIGNoYXIgbGFzdF9wcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xuIH07XG5AQCAtNzgsOSAmIzQzOzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gLyoqXG4gICogc3RydWN0IGRhbW9uX3RhcmdldCAtIFJlcHJlc2VudHMgYSBtb25pdG9yaW5nIHRhcmdldC5cbiAgKiBAcGlkOlx0XHRUaGUgUElEIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gbW9uaXRvci5cbi0gKiBAbnJfcmVnaW9uczpcdFx0TnVtYmVyIG9mIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQHJlZ2lvbnNfbGlzdDpcdEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICogQG9ic29sZXRlOlx0XHRXaGV0aGVyIHRoZSBjb21taXQgZGVzdGluYXRpb24gdGFyZ2V0IGlzIG9ic29sZXRlLlxuICAqXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxuQEAgLTk0LDEwICYjNDM7OTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gICovXG4gc3RydWN0IGRhbW9uX3RhcmdldCB7XG4gXHRzdHJ1Y3QgcGlkICpwaWQ7XG4mIzQzO1x0Ym9vbCBvYnNvbGV0ZTtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cbiBcdHVuc2lnbmVkIGludCBucl9yZWdpb25zO1xuJiM0MztcdC8qIEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDtcbiYjNDM7XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0Ym9vbCBvYnNvbGV0ZTtcbiB9O1xuIFxuIC8qKlxuQEAgLTE3MywxMCAmIzQzOzE3NSw4IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuICAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4gICogQHRhcmdldF92YWx1ZTpcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxuICAqIEBjdXJyZW50X3ZhbHVlOlx0Q3VycmVudCB2YWx1ZSBvZiBAbWV0cmljLlxuLSAqIEBsYXN0X3BzaV90b3RhbDpcdExhc3QgbWVhc3VyZWQgdG90YWwgUFNJXG4gICogQG5pZDpcdFx0Tm9kZSBpZC5cbiAgKiBAbWVtY2dfaWQ6XHRcdE1lbWNnIGlkLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXG4gICogc2NvcmUgaXMgY2FsY3VsYXRlZCBieSBob3cgY2xvc2UgQGN1cnJlbnRfdmFsdWUgYW5kIEB0YXJnZXRfdmFsdWUgYXJlLiAgVGhlblxuQEAgLTE5OSwxMiAmIzQzOzE5OSwxNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG4gXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XG4gXHQvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqL1xuIFx0dW5pb24ge1xuLVx0XHR1NjQgbGFzdF9wc2lfdG90YWw7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0aW50IG5pZDtcbiBcdFx0XHR1NjQgbWVtY2dfaWQ7XG4gXHRcdH07XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0XHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xuJiM0MztcdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuJiM0MztcbiBcdH07XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTIyMyw3ICYjNDM7MjI4LDYgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxuICAqIEBtczpcdFx0XHRNYXhpbXVtIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBzY2hlbWUgY2FuIHVzZS5cbiAgKiBAc3o6XHRcdFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxuLSAqIEBnb2FsczpcdFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFx1MDAyNmRhbW9zX3F1b3RhX2dvYWwpIGxpc3QuXG4gICogQGdvYWxfdHVuZXI6XHRcdEdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS5cbiAgKiBAZXN6Olx0XHRFZmZlY3RpdmUgc2l6ZSBxdW90YSBpbiBieXRlcy5cbiAgKiBAZmFpbF9jaGFyZ2VfbnVtOlx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxuQEAgLTI1MCw3ICYjNDM7MjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiB0aGUgc2NoZW1lJiMzOTtzIGFjdGlvbi4gIERBTU9OIHRoZW4gY29tcGFyZXMgaXQgYWdhaW5zdCBcdTAwMjZzeiBhbmQgdXNlcyBzbWFsbGVyXG4gICogb25lIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG4gICpcbi0gKiBJZiBAZ29hbHMgaXMgbm90IGVtcHR5LCBEQU1PTiBjYWxjdWxhdGVzIHlldCBhbm90aGVyIHNpemUgcXVvdGEgYmFzZWQgb24gdGhlXG4mIzQzOyAqIElmIGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuICAqIGdvYWxzIHVzaW5nIGl0cyBpbnRlcm5hbCBmZWVkYmFjayBsb29wIGFsZ29yaXRobSwgZm9yIGV2ZXJ5IEByZXNldF9pbnRlcnZhbC5cbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXG4gICogbmV3IHNpemUgcXVvdGEgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbkBAIC0yNzEsNyAmIzQzOzI3NSw3IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xuIFx0dW5zaWduZWQgbG9uZyBtcztcbiBcdHVuc2lnbmVkIGxvbmcgc3o7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuJiM0MztcbiBcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyO1xuIFx0dW5zaWduZWQgbG9uZyBlc3o7XG4gXG5AQCAtMjgzLDYgJiM0MzsyODcsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF9hZ2U7XG4gXG4gLyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBIZWFkIG9mIHF1b3RhIHR1bmluZyBnb2FscyAoXHUwMDI2ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuIFx0LyogRm9yIHRocm91Z2hwdXQgZXN0aW1hdGlvbiAqL1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX3N6O1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX25zO1xuQEAgLTQyNiw3ICYjNDM7NDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuLSAqIEBsaXN0Olx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDQ0LDYgJiM0Mzs0NDksOCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuIFx0fTtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNTE1LDEyICYjNDM7NTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqIEB3bWFya3M6XHRcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWlncmF0ZV9kZXN0czpcdERlc3RpbmF0aW9uIG5vZGVzIGlmIEBhY3Rpb24gaXMgXCYjMzQ7bWlncmF0ZV97aG90LGNvbGR9XCYjMzQ7LlxuICAqIEB0YXJnZXRfbmlkOlx0XHREZXN0aW5hdGlvbiBub2RlIGlmIEBhY3Rpb24gaXMgXCYjMzQ7bWlncmF0ZV97aG90LGNvbGR9XCYjMzQ7LlxuLSAqIEBjb3JlX2ZpbHRlcnM6XHRBZGRpdGlvbmFsIHNldCBvZiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcdTAwMjZhY3Rpb24uXG4tICogQG9wc19maWx0ZXJzOlx0b3BzIGxheWVyIGhhbmRsaW5nIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LlxuLSAqIEBsYXN0X2FwcGxpZWQ6XHRMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxuICAqIEBzdGF0Olx0XHRTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLlxuICAqIEBtYXhfbnJfc25hcHNob3RzOlx0VXBwZXIgbGltaXQgb2YgbnJfc25hcHNob3RzIHN0YXQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBGb3IgZWFjaCBAYXBwbHlfaW50ZXJ2YWxfdXMsIERBTU9OIGZpbmRzIHJlZ2lvbnMgd2hpY2ggZml0IGluIHRoZVxuICAqIFx1MDAyNnBhdHRlcm4gYW5kIGFwcGxpZXMgXHUwMDI2YWN0aW9uIHRvIHRob3NlLiBUbyBhdm9pZCBjb25zdW1pbmcgdG9vIG11Y2hcbkBAIC01NDIsMTYgJiM0Mzs1NDUsNyBAQCBzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyB7XG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcdTAwMjZhY3Rpb24gdG8gcmVzcGVjdFxuLSAqIFx1MDAyNmNvcmVfZmlsdGVyc1xuLSAqXG4tICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nXG4tICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWQgd2l0aCB0aGUgY29yZSBsYXllclxuLSAqIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHlcbi0gKiBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLiAgTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvblxuLSAqIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb24gb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFx1MDAyNnN0cnVjdFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXG4tICogdW5zZXRzIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuLSAqIGZpbmlzaGVkLlxuJiM0MzsgKiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxuICAqXG4gICogQWZ0ZXIgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXHUwMDI2c3RhdCBpcyB1cGRhdGVkLlxuICAqXG5AQCAtNTYyLDYgJiM0Mzs1NTYsMTYgQEAgc3RydWN0IGRhbW9zIHtcbiBcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuO1xuIFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xuIFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cztcbiYjNDM7XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdGludCB0YXJnZXRfbmlkO1xuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyBtaWdyYXRlX2Rlc3RzO1xuJiM0MztcdFx0fTtcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xuIC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXG4gXHQvKlxuIFx0ICogbnVtYmVyIG9mIHNhbXBsZSBpbnRlcnZhbHMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGJlZm9yZSBhcHBseWluZ1xuQEAgLTU3OCwyMCAmIzQzOzU4MiwyNSBAQCBzdHJ1Y3QgZGFtb3Mge1xuIFx0Lyogd2hldGhlciB0byByZWplY3QgY29yZS9vcHMgZmlsdGVycyB1bWF0Y2hlZCByZWdpb25zICovXG4gXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcbiBcdGJvb2wgb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4tLyogcHVibGljOiAqL1xuLVx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuLVx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuLVx0dW5pb24ge1xuLVx0XHRzdHJ1Y3Qge1xuLVx0XHRcdGludCB0YXJnZXRfbmlkO1xuLVx0XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7XG4tXHRcdH07XG4tXHR9O1xuJiM0MztcdC8qIEFkZGl0aW9uYWwgc2V0IG9mIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFx1MDAyNmFjdGlvbi4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzO1xuJiM0MztcdC8qIG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgb3BzX2ZpbHRlcnM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZVxuJiM0MztcdCAqIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWRcbiYjNDM7XHQgKiB3aXRoIHRoZSBjb3JlIGxheWVyIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0XG4mIzQzO1x0ICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLlxuJiM0MztcdCAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgXHUwMDI2c3RydWN0IGRhbW9uIHJlZ2lvblxuJiM0MztcdCAqIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cbiYjNDM7XHQgKiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpYyB1bnNldHNcbiYjNDM7XHQgKiBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcbiYjNDM7XHQgKiBmaW5pc2hlZC5cbiYjNDM7XHQgKi9cbiBcdHZvaWQgKmxhc3RfYXBwbGllZDtcbi1cdHN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7XG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTc0OSw3ICYjNDM7NzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XG4gICogQG1hdGNoaW5nOlx0V2hldGhlciB0aGlzIGZpbHRlciBpcyBmb3IgdGhlIHR5cGUtbWF0Y2hpbmcgb25lcy5cbiAgKiBAYWxsb3c6XHRXaGV0aGVyIHRoZSBAdHlwZS1AbWF0Y2hpbmcgb25lcyBzaG91bGQgcGFzcyB0aGlzIGZpbHRlci5cbiAgKiBAbWVtY2dfaWQ6XHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxuLSAqIEBsaXN0Olx0U2libGluZ3MgbGlzdC5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiBcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbkBAIC03NTgsNiAmIzQzOzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuIFx0dW5pb24ge1xuIFx0XHR1NjQgbWVtY2dfaWQ7XG4gXHR9O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIFNpYmxpbmdzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NjUsMTIgJiM0Mzs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLlxuICAqXG4gICogQHdlaWdodDpcdFJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuXG4tICogQGZpbHRlcnM6XHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXG4tICogQGxpc3Q6XHRTaWJsaW5ncyBsaXN0LlxuICAqL1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbiYjNDM7XHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtODM3LDE0ICYjNDM7ODQ4LDkgQEAgc3RydWN0IGRhbW9uX2F0dHJzIHtcbiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsXG4gICogaW5jbHVkaW5nIGRhbW9uX2NhbGwoKSBhbmQgZGFtb3Nfd2FsaygpLlxuICAqXG4tICogQG9wczpcdFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy5cbi0gKiBAcHJvYmVzOlx0SGVhZCBvZiBwcm9iZXMgKFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LlxuICAqIEBhZGRyX3VuaXQ6XHRTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi5cbiAgKiBAbWluX3JlZ2lvbl9zejpcdE1pbmltdW0gcmVnaW9uIHNpemUuXG4gICogQHBhdXNlOlx0UGF1c2Uga2RhbW9uZCBtYWluIGxvb3AuXG4tICogQGFkYXB0aXZlX3RhcmdldHM6XHRIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXHUwMDI2ZGFtb25fdGFyZ2V0KSBsaXN0LlxuLSAqIEBzY2hlbWVzOlx0XHRIZWFkIG9mIHNjaGVtZXMgKFx1MDAyNmRhbW9zKSBsaXN0LlxuLSAqIEBybmRfc3RhdGU6XHRQZXItY3R4IFBSTkcgc3RhdGUgZm9yIGRhbW9uX3JhbmQoKS5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fY3R4IHtcbiBcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcbkBAIC04OTMsMTUgJiM0Mzs4OTksMjEgQEAgc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgbXV0ZXgga2RhbW9uZF9sb2NrO1xuIFxuIC8qIHB1YmxpYzogKi9cbi1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcztcbi1cdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XG4gXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3o7XG4gXHRib29sIHBhdXNlO1xuIFxuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi9cbiYjNDM7XHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4mIzQzO1x0LyogSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWRhcHRpdmVfdGFyZ2V0cztcbiYjNDM7XHQvKiBIZWFkIG9mIHByb2JlcyAoXHUwMDI2ZGFtb25fcHJvYmUpIGxpc3QuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7XG4mIzQzO1x0LyogSGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcbiBcbiYjNDM7XHQvKiBAcm5kX3N0YXRlOlx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovXG4gXHRzdHJ1Y3Qgcm5kX3N0YXRlIHJuZF9zdGF0ZTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMjA1MSw3ICYjNDM7MjA1MSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0aW50IGksIGVycjtcbiBcbiBcdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXG4tXHRpZiAoY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG4mIzQzO1x0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c2ZzX3RhcmdldHMtXHUwMDNlbnI7IGkmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3QgbGF5b3V0IHJlb3JkZXJpbmcgdG8gZ3JvdXAgcHVibGljL3ByaXZhdGUgZmllbGRzIGZvciBrZXJuZWwtZG9jLCBhbmQgYSBwdXJlIHJlZmFjdG9yaW5nIGluIG1tL2RhbW9uL3N5c2ZzLmMgdGhhdCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWNkMmY5NGNkZDhkNzQzYTEyOGQxYmNiNThiMTM3YWRlODBiODQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMDg6NTI6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggZjY5NDQyYTlkNDMxMjguLjMyN2Y1MzQ2OTZhYTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC00Niw3ICYjNDM7NDYsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7CiAgKiBAc2FtcGxpbmdfYWRkcjoJQWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suCiAgKiBAbnJfYWNjZXNzZXM6CUFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uCiAgKiBAcHJvYmVfaGl0czoJCU51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqIEBhZ2U6CQlBZ2Ugb2YgdGhpcyByZWdpb24uCiAgKgogICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKQpAQCAtNjgsOSAmIzQzOzY3LDExIEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gewogCXVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7CiAJdW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBpbnQgYWdlOwotLyogcHJpdmF0ZTogSW50ZXJuYWwgdmFsdWUgZm9yIGFnZSBjYWxjdWxhdGlvbi4gKi8KJiM0MzsvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi8KJiM0MzsJLyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwkvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqLwogCXVuc2lnbmVkIGludCBsYXN0X25yX2FjY2Vzc2VzOwogCXVuc2lnbmVkIGNoYXIgbGFzdF9wcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdOwogfTsKQEAgLTc4LDkgJiM0Mzs3OSw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gewogLyoqCiAgKiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0LgogICogQHBpZDoJCVRoZSBQSUQgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBtb25pdG9yLgotICogQG5yX3JlZ2lvbnM6CQlOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4KLSAqIEByZWdpb25zX2xpc3Q6CUhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuCi0gKiBAbGlzdDoJCUxpc3QgaGVhZCBmb3Igc2libGluZ3MuCiAgKiBAb2Jzb2xldGU6CQlXaGV0aGVyIHRoZSBjb21taXQgZGVzdGluYXRpb24gdGFyZ2V0IGlzIG9ic29sZXRlLgogICoKICAqIEVhY2ggbW9uaXRvcmluZyBjb250ZXh0IGNvdWxkIGhhdmUgbXVsdGlwbGUgdGFyZ2V0cy4gIEZvciBleGFtcGxlLCBhIGNvbnRleHQKQEAgLTk0LDEwICYjNDM7OTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7CiAgKi8KIHN0cnVjdCBkYW1vbl90YXJnZXQgewogCXN0cnVjdCBwaWQgKnBpZDsKJiM0MzsJYm9vbCBvYnNvbGV0ZTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi8KIAl1bnNpZ25lZCBpbnQgbnJfcmVnaW9uczsKJiM0MzsJLyogSGVhZCBvZiB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDsKJiM0MzsJLyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JYm9vbCBvYnNvbGV0ZTsKIH07CiAKIC8qKgpAQCAtMTczLDEwICYjNDM7MTc1LDggQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7CiAgKiBAbWV0cmljOgkJTWV0cmljIHRvIGJlIHVzZWQgZm9yIHJlcHJlc2VudGluZyB0aGUgZ29hbC4KICAqIEB0YXJnZXRfdmFsdWU6CVRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLgogICogQGN1cnJlbnRfdmFsdWU6CUN1cnJlbnQgdmFsdWUgb2YgQG1ldHJpYy4KLSAqIEBsYXN0X3BzaV90b3RhbDoJTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kKICAqIEBuaWQ6CQlOb2RlIGlkLgogICogQG1lbWNnX2lkOgkJTWVtY2cgaWQuCi0gKiBAbGlzdDoJCUxpc3QgaGVhZCBmb3Igc2libGluZ3MuCiAgKgogICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlCiAgKiBzY29yZSBpcyBjYWxjdWxhdGVkIGJ5IGhvdyBjbG9zZSBAY3VycmVudF92YWx1ZSBhbmQgQHRhcmdldF92YWx1ZSBhcmUuICBUaGVuCkBAIC0xOTksMTIgJiM0MzsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgewogCXVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTsKIAkvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqLwogCXVuaW9uIHsKLQkJdTY0IGxhc3RfcHNpX3RvdGFsOwogCQlzdHJ1Y3QgewogCQkJaW50IG5pZDsKIAkJCXU2NCBtZW1jZ19pZDsKIAkJfTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkJLyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi8KJiM0MzsJCXU2NCBsYXN0X3BzaV90b3RhbDsKJiM0MzsKIAl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtMjIzLDcgJiM0MzsyMjgsNiBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgewogICogQHJlc2V0X2ludGVydmFsOglDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLgogICogQG1zOgkJCU1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLgogICogQHN6OgkJCU1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC4KLSAqIEBnb2FsczoJCUhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzICgmYW1wO2RhbW9zX3F1b3RhX2dvYWwpIGxpc3QuCiAgKiBAZ29hbF90dW5lcjoJCUdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS4KICAqIEBlc3o6CQlFZmZlY3RpdmUgc2l6ZSBxdW90YSBpbiBieXRlcy4KICAqIEBmYWlsX2NoYXJnZV9udW06CUZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci4KQEAgLTI1MCw3ICYjNDM7MjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHsKICAqIHRoZSBzY2hlbWUmIzM5O3MgYWN0aW9uLiAgREFNT04gdGhlbiBjb21wYXJlcyBpdCBhZ2FpbnN0ICZhbXA7c3ogYW5kIHVzZXMgc21hbGxlcgogICogb25lIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuCiAgKgotICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZQomIzQzOyAqIElmIGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZQogICogZ29hbHMgdXNpbmcgaXRzIGludGVybmFsIGZlZWRiYWNrIGxvb3AgYWxnb3JpdGhtLCBmb3IgZXZlcnkgQHJlc2V0X2ludGVydmFsLgogICogVGhlbiwgaWYgdGhlIG5ldyBzaXplIHF1b3RhIGlzIHNtYWxsZXIgdGhhbiB0aGUgZWZmZWN0aXZlIHF1b3RhLCBpdCB1c2VzIHRoZQogICogbmV3IHNpemUgcXVvdGEgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS4KQEAgLTI3MSw3ICYjNDM7Mjc1LDcgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHsKIAl1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsOwogCXVuc2lnbmVkIGxvbmcgbXM7CiAJdW5zaWduZWQgbG9uZyBzejsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzOwomIzQzOwogCWVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyOwogCXVuc2lnbmVkIGxvbmcgZXN6OwogCkBAIC0yODMsNiAmIzQzOzI4Nyw4IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAJdW5zaWduZWQgaW50IHdlaWdodF9hZ2U7CiAKIC8qIHByaXZhdGU6ICovCiYjNDM7CS8qIEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzICgmYW1wO2RhbW9zX3F1b3RhX2dvYWwpIGxpc3QuICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7CiAJLyogRm9yIHRocm91Z2hwdXQgZXN0aW1hdGlvbiAqLwogCXVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2NoYXJnZWRfbnM7CkBAIC00MjYsNyAmIzQzOzQzMiw2IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCi0gKiBAbGlzdDoJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqCiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlICZhbXA7ZGFtb3MtJmd0O2FjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoCiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlCkBAIC00NDQsNiAmIzQzOzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIgewogCQlpbnQgdGFyZ2V0X2lkeDsKIAkJc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiAJfTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTUxNSwxMiAmIzQzOzUyMiw4IEBAIHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIHsKICAqIEB3bWFya3M6CQlXYXRlcm1hcmtzIGZvciBhdXRvbWF0ZWQgKGluKWFjdGl2YXRpb24gb2YgdGhpcyBzY2hlbWUuCiAgKiBAbWlncmF0ZV9kZXN0czoJRGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyAmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfSYjMzQ7LgogICogQHRhcmdldF9uaWQ6CQlEZXN0aW5hdGlvbiBub2RlIGlmIEBhY3Rpb24gaXMgJiMzNDttaWdyYXRlX3tob3QsY29sZH0mIzM0Oy4KLSAqIEBjb3JlX2ZpbHRlcnM6CUFkZGl0aW9uYWwgc2V0IG9mICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgJmFtcDthY3Rpb24uCi0gKiBAb3BzX2ZpbHRlcnM6CW9wcyBsYXllciBoYW5kbGluZyAmYW1wO3N0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LgotICogQGxhc3RfYXBwbGllZDoJTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS4KICAqIEBzdGF0OgkJU3RhdGlzdGljcyBvZiB0aGlzIHNjaGVtZS4KICAqIEBtYXhfbnJfc25hcHNob3RzOglVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqCiAgKiBGb3IgZWFjaCBAYXBwbHlfaW50ZXJ2YWxfdXMsIERBTU9OIGZpbmRzIHJlZ2lvbnMgd2hpY2ggZml0IGluIHRoZQogICogJmFtcDtwYXR0ZXJuIGFuZCBhcHBsaWVzICZhbXA7YWN0aW9uIHRvIHRob3NlLiBUbyBhdm9pZCBjb25zdW1pbmcgdG9vIG11Y2gKQEAgLTU0MiwxNiAmIzQzOzU0NSw3IEBAIHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIHsKICAqCiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlICZhbXA7YWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucwogICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCAmYW1wO2FjdGlvbiB0byByZXNwZWN0Ci0gKiAmYW1wO2NvcmVfZmlsdGVycwotICoKLSAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZwotICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4gIFNpbmNlIGl0IG1heSBub3QgYmUgYWxpZ25lZCB3aXRoIHRoZSBjb3JlIGxheWVyCi0gKiBhYnN0cmFjdCwgbmFtZWx5ICZhbXA7c3RydWN0IGRhbW9uX3JlZ2lvbiwgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseQotICogQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy4gIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24KLSAqIG11bHRpcGxlICZhbXA7c3RydWN0IGRhbW9uIHJlZ2lvbiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgJmFtcDtzdHJ1Y3QKLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljCi0gKiB1bnNldHMgQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzCi0gKiBmaW5pc2hlZC4KJiM0MzsgKiAmYW1wO3N0cnVjdCBkYW1vc19maWx0ZXIuCiAgKgogICogQWZ0ZXIgYXBwbHlpbmcgdGhlICZhbXA7YWN0aW9uIHRvIGVhY2ggcmVnaW9uLCAmYW1wO3N0YXQgaXMgdXBkYXRlZC4KICAqCkBAIC01NjIsNiAmIzQzOzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3MgewogCXN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuOwogCWVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzOwomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7CiYjNDM7CXN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrczsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlpbnQgdGFyZ2V0X25pZDsKJiM0MzsJCQlzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyBtaWdyYXRlX2Rlc3RzOwomIzQzOwkJfTsKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGRhbW9zX3N0YXQgc3RhdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzOwogLyogcHJpdmF0ZTogaW50ZXJuYWwgdXNlIG9ubHkgKi8KIAkvKgogCSAqIG51bWJlciBvZiBzYW1wbGUgaW50ZXJ2YWxzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBiZWZvcmUgYXBwbHlpbmcKQEAgLTU3OCwyMCAmIzQzOzU4MiwyNSBAQCBzdHJ1Y3QgZGFtb3MgewogCS8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqLwogCWJvb2wgY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0OwogCWJvb2wgb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7Ci0vKiBwdWJsaWM6ICovCi0Jc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhOwotCXN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrczsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlpbnQgdGFyZ2V0X25pZDsKLQkJCXN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7Ci0JCX07Ci0JfTsKJiM0MzsJLyogQWRkaXRpb25hbCBzZXQgb2YgJmFtcDtzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciAmYW1wO2FjdGlvbi4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGNvcmVfZmlsdGVyczsKJiM0MzsJLyogb3BzIGxheWVyIGhhbmRsaW5nICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBvcHNfZmlsdGVyczsKJiM0MzsJLyoKJiM0MzsJICogTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS4KJiM0MzsJICoKJiM0MzsJICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZQomIzQzOwkgKiB1bmRlcmx5aW5nICZhbXA7c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWQKJiM0MzsJICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5ICZhbXA7c3RydWN0IGRhbW9uX3JlZ2lvbiwgJmFtcDtzdHJ1Y3QKJiM0MzsJICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLgomIzQzOwkgKiBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uIG11bHRpcGxlICZhbXA7c3RydWN0IGRhbW9uIHJlZ2lvbgomIzQzOwkgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW4KJiM0MzsJICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzCiYjNDM7CSAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpcwomIzQzOwkgKiBmaW5pc2hlZC4KJiM0MzsJICovCiAJdm9pZCAqbGFzdF9hcHBsaWVkOwotCXN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzOwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTc0OSw3ICYjNDM7NzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7CiAgKiBAbWF0Y2hpbmc6CVdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuCiAgKiBAYWxsb3c6CVdoZXRoZXIgdGhlIEB0eXBlLUBtYXRjaGluZyBvbmVzIHNob3VsZCBwYXNzIHRoaXMgZmlsdGVyLgogICogQG1lbWNnX2lkOglNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLgotICogQGxpc3Q6CVNpYmxpbmdzIGxpc3QuCiAgKi8KIHN0cnVjdCBkYW1vbl9maWx0ZXIgewogCWVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTsKQEAgLTc1OCw2ICYjNDM7NzY2LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7CiAJdW5pb24gewogCQl1NjQgbWVtY2dfaWQ7CiAJfTsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBTaWJsaW5ncyBsaXN0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTc2NSwxMiAmIzQzOzc3NSwxMyBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHsKICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS4KICAqCiAgKiBAd2VpZ2h0OglSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLgotICogQGZpbHRlcnM6CUZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4KLSAqIEBsaXN0OglTaWJsaW5ncyBsaXN0LgogICovCiBzdHJ1Y3QgZGFtb25fcHJvYmUgewogCXVuc2lnbmVkIGludCB3ZWlnaHQ7CiYjNDM7LyogcHJpdmF0ZTogKi8KJiM0MzsJLyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZmlsdGVyczsKJiM0MzsJLyogU2libGluZ3MgbGlzdC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCkBAIC04MzcsMTQgJiM0Mzs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMgewogICogdGhyZWFkIG90aGVyIHRoYW4gdGhlIGtkYW1vbmQgc2hvdWxkIGJlIG1hZGUgdXNpbmcgc2FmZSBEQU1PTiBBUElzLAogICogaW5jbHVkaW5nIGRhbW9uX2NhbGwoKSBhbmQgZGFtb3Nfd2FsaygpLgogICoKLSAqIEBvcHM6CVNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4KLSAqIEBwcm9iZXM6CUhlYWQgb2YgcHJvYmVzICgmYW1wO2RhbW9uX3Byb2JlKSBsaXN0LgogICogQGFkZHJfdW5pdDoJU2NhbGUgZmFjdG9yIGZvciBjb3JlIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uCiAgKiBAbWluX3JlZ2lvbl9zejoJTWluaW11bSByZWdpb24gc2l6ZS4KICAqIEBwYXVzZToJUGF1c2Uga2RhbW9uZCBtYWluIGxvb3AuCi0gKiBAYWRhcHRpdmVfdGFyZ2V0czoJSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKCZhbXA7ZGFtb25fdGFyZ2V0KSBsaXN0LgotICogQHNjaGVtZXM6CQlIZWFkIG9mIHNjaGVtZXMgKCZhbXA7ZGFtb3MpIGxpc3QuCi0gKiBAcm5kX3N0YXRlOglQZXItY3R4IFBSTkcgc3RhdGUgZm9yIGRhbW9uX3JhbmQoKS4KICAqLwogc3RydWN0IGRhbW9uX2N0eCB7CiAJc3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzOwpAQCAtODkzLDE1ICYjNDM7ODk5LDIxIEBAIHN0cnVjdCBkYW1vbl9jdHggewogCXN0cnVjdCBtdXRleCBrZGFtb25kX2xvY2s7CiAKIC8qIHB1YmxpYzogKi8KLQlzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7CiAJdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7CiAJdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6OwogCWJvb2wgcGF1c2U7CiAKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuICovCiYjNDM7CXN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wczsKJiM0MzsJLyogSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKCZhbXA7ZGFtb25fdGFyZ2V0KSBsaXN0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgYWRhcHRpdmVfdGFyZ2V0czsKJiM0MzsJLyogSGVhZCBvZiBwcm9iZXMgKCZhbXA7ZGFtb25fcHJvYmUpIGxpc3QuICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzOwomIzQzOwkvKiBIZWFkIG9mIHNjaGVtZXMgKCZhbXA7ZGFtb3MpIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBzY2hlbWVzOwogCiYjNDM7CS8qIEBybmRfc3RhdGU6CVBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLiAqLwogCXN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggYjVmZTAzNmY3ODAxNTIuLjIwOGJiNjM5ZjUwZmZiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTIwNTEsNyAmIzQzOzIwNTEsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKIAlpbnQgaSwgZXJyOwogCiAJLyogTXVsdGlwbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbWFrZXMgbm8gc2Vuc2UgKi8KLQlpZiAoY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSICZhbXA7JmFtcDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxKQomIzQzOwlpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgJmFtcDsmYW1wOyBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHN5c2ZzX3RhcmdldHMtJmd0O25yOyBpJiM0MzsmIzQzOykgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyBzb21lIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGUgYGRhbW9uLmhgIGNoYW5nZXMgYXBwZWFyIHRvIGJlIG1vc3RseSBjb3NtZXRpYyAtIHJlLWFycmFuZ2luZyBjb21tZW50cyBhbmQgYWRkaW5nIHRob3NlIGAvKiBwcml2YXRlOiAqL2AgbWFya2VycyB0byBjb250cm9sIGtlcm5lbC1kb2MgdmlzaWJpbGl0eSwgcmUtb3JkZXJpbmcgdGhlIGZpZWxkcy4gTm90aGluZyBpbW1lZGlhdGVseSBjb25jZXJuaW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBzZWUgdGhlIGRpZmYuIEFoLCBoZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBjaGFuZ2U6IHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdpdGggYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHN0eWxlIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSBhbHRlcmVkIHRoZSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBtdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIGRvZXMuIElzIHRoaXMgYSBtb3JlIGdlbmVyYWwgY2hlY2sgdGhhbiB0aGUgc3BlY2lmaWMgYFBBRERSYCBjYXNlPyBJcyBpdCBhIGJ1ZyBmaXg/IE9yIGlzIGl0IGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3RhcmdldF9oYXNfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDcyPWludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTg3PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OTEtXG5tbS9kYW1vbi9jb3JlLmM6MTU5MjpcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSlcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jPTE2MDM9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxubW0vZGFtb24vY29yZS5jOjE2MTg6XHRcdFx0XHRcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXG5tbS9kYW1vbi9jb3JlLmM6MTYxOTpcdFx0XHRcdFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcbm1tL2RhbW9uL2NvcmUuYy0xNjIwLVx0XHRcdFx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4tLVxubW0vZGFtb24vY29yZS5jLTE2NTItXHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG5tbS9kYW1vbi9jb3JlLmMtMTY1NC1cdFx0XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM2LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xubW0vZGFtb24vc3lzZnMuYzoyMDM3Olx0aWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cdFx0dC1cdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cdTAwM2VwaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTMtXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMDU0Olx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgZGFtb25fdGFyZ2V0X2hhc19waWRgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHZhcmlhYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgcHJlY2lzZSByb2xlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcy4gSXMgaXQgYSBmbGFnLCBhbiBpbnRlZ2VyLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBXaGF0IGNvbnRleHQgZG9lcyBpdCBvcGVyYXRlIHdpdGhpbiDigJMgaXMgaXQgcmVsYXRlZCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHJlc291cmNlIGNvbnRyb2wsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBjb25uZWN0aW9uIHRvIGEgc3BlY2lmaWMgdGFyZ2V0IGFuZCB0aGUgUHJvY2VzcyBJRCAoUElEKS4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLCB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGludGVyYWN0IHdpdGggaXQsIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBpdCB0byBiZSBzZXQgb3IgdW5zZXQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbXBhY3RzIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJbiBzaG9ydCwgaG93IGRvZXMgdGhpcyBwaWVjZSBvZiBkYXRhIGZpdCBpbiB0byB0aGUgYmlnZ2VyIHBpY3R1cmU/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIGl0cyBkZWNsYXJhdGlvbiBhbmQgd2hlcmUgaXQmIzM5O3MgbW9kaWZpZWQgaW4gdGhlIGNvZGUsIGFuZCB0aGVuIHRyeSB0byB3b3JrIG15IHdheSB1cCBmcm9tIHRoZXJlLCBrZWVwaW5nIGluIG1pbmQgZWZmaWNpZW5jeSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mj1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDczLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzQ6c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQ3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBJbm5lciBXb3JraW5ncyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDEwNzQuIFRoYXQgYXJlYSBpcyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIGRlZmluZWQgaW4gYSBoZWFkZXIgZmlsZS4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGxpbmUgcHJvYmFibHkgZGVmaW5lcyBvbmUgb2YgdGhlIGltcG9ydGFudCBzdHJ1Y3RzIG9yIGVudW1zIHJlbGF0ZWQgdG8gRGF0YSBBY2Nlc3MgTU9OaXRvciAoREFNT04pLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uLiBEZXBlbmRpbmcgb24gd2hhdCB0aGF0IGxpbmUgaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IERBTU9OIG9wZXJhdGVzIGZyb20gYSBoaWdoIGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2NTpcdGludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcbjEwNjY6XHR2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbjEwNjc6XHRcdFx0XHRzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLCBzc2l6ZV90IG5yX3NjaGVtZXMpO1xuMTA2ODpcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKm9sZF9jdHgsIHN0cnVjdCBkYW1vbl9jdHggKm5ld19jdHgpO1xuMTA2OTpcdGludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZCk7XG4xMDcwOlx0Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZCk7XG4xMDcxOlx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcbjEwNzI6XHRpbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbjEwNzM6XHRcbjEwNzQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMTA3NTpcdHtcbjEwNzY6XHRcdHJldHVybiBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XG4xMDc3Olx0fVxuMTA3ODpcdFxuMTA3OTpcdC8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXG4xMDgwOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcbjEwODE6XHRcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbjEwODI6XHR7XG4xMDgzOlx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbjEwODQ6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjY0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUmIzM5O3Mgc3dpdGNoZWQgZnJvbSBkaXJlY3RseSBjaGVja2luZyBgY3R4LSZndDtvcHMuaWRgIGFnYWluc3QgYERBTU9OX09QU19QQUREUmAgYW5kIGBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDFgIHRvIHVzaW5nIHRoaXMgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBmdW5jdGlvbiBhbmQgbmVnYXRpbmcgaXRzIHJlc3VsdCwgc3RpbGwgY29tcGFyaW5nIHRvIGBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDFgLiBTbywgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBtdXN0IGJlIHRoZSBrZXkgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCBjaGVja3MgaWYgdGhlIGBjdHgtJmd0O29wcy5pZGAgaXMgZWl0aGVyIGBEQU1PTl9PUFNfVkFERFJgIG9yIGBEQU1PTl9PUFNfRlZBRERSYC4KCk5vdywgdGhlIGNydWNpYWwgcGFydDogaWYgYGN0eC0mZ3Q7b3BzLmlkYCAqaXMqIGBEQU1PTl9PUFNfUEFERFJgLCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHJldHVybnMgZmFsc2UsIHJpZ2h0PyBUaGVyZWZvcmUsIHRoZSBuZWdhdGlvbiBvZiB0aGF0IHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZSB3aGljaCBtaW1pY3MgdGhlIG9sZCBiZWhhdmlvciwgYXMgdGhlIG9sZGVyIGNvbXBhcmlzb24gb2Ygd2hldGhlciBgY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3b3VsZCBoYXZlIGJlZW4gdHJ1ZSBhcyB3ZWxsLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgc2hvdWxkIG1hdGNoIHVuZGVyIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGNhc2VzLCBhc3N1bWluZyBhbGwgb3RoZXIgY29kZS1wYXRocyBhcmUgdW5jaGFuZ2VkLgoKQnV0Li4uIHdoYXQgaWYgYGN0eC0mZ3Q7b3BzLmlkYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBEQU1PTl9PUFNfUEFERFJgLCBgREFNT05fT1BTX1ZBRERSYCwgb3IgYERBTU9OX09QU19GVkFERFJgPyBXaGF0IGlmIGl0JiMzOTtzLCBzYXksIGBEQU1PTl9PUFNfU0dgIG9yIHNvbWUgb3RoZXIgbmV3IG9wZXJhdGlvbiBJRCB3ZSYjMzk7dmUgYWRkZWQ/IFRoZSBiZWhhdmlvciBvZiB0aGUgb2xkIGNvZGUgd291bGQgaGF2ZSBub3QgcnVuIHRoaXMgcGF0aCwgbm93IGl0IG1pZ2h0LiBUaGUgbmVnYXRpb24gb2YgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBpcyBub3cgbW9yZSBjb21wbGV4LiBXZSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGBkYW1vbl9vcHNfaWRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgdGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB3aGF0IHRob3NlIHZhbHVlcyBjb3VsZCBiZSwgYW5kIHRoZW4gdGhpbmsgYWJvdXQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGNvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnVtIGRhbW9uX29wc19pZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTUtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE2OmVudW0gZGFtb25fb3BzX2lkIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTctXHREQU1PTl9PUFNfVkFERFIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzOTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgQ29yZTogRXhhbWluaW5nIGRhbW9uLmggQXJvdW5kIExpbmUgNjE2KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OLCB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyLCBoYW5kbGVzIGl0cyBtb25pdG9yaW5nIGxvb3BzLCBzcGVjaWZpY2FsbHkgdGhlaXIgY29udHJvbC4gTXkgbWluZCBpcyBkcmF3biB0byBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIEkgZmlndXJlIGxpbmUgNjE2IGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgY3J1Y2lhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBsb29wIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgY29udHJvbCBzdHJ1Y3RzLCBjcml0aWNhbCBpbmxpbmUgZnVuY3Rpb25zLCBvciB0aGUgbWFjcm9zIHRoYXQgZGVmaW5lIGxvb3AgaXRlcmF0aW9ucy4gRnJvbSBwcmlvciBleHBlcmllbmNlLCB0aGF0IGFyZWEgb2Z0ZW4gaG91c2VzIHRoZSBmb3VuZGF0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzICpob3cqIGFuZCAqd2hlbiogREFNT04gbW9uaXRvcnMgdGhlIG1lbW9yeSByZWdpb25zLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBmb3VuZGF0aW9uYWwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0ICogQERBTU9OX09QU19WQUREUjpcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xuIDYxMTpcdCAqIEBEQU1PTl9PUFNfRlZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXG4gNjEyOlx0ICpcdFx0XHRhZGRyZXNzIHNwYWNlc1xuIDYxMzpcdCAqIEBEQU1PTl9PUFNfUEFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXG4gNjE0Olx0ICogQE5SX0RBTU9OX09QUzpcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXG4gNjE1Olx0ICovXG4gNjE2Olx0ZW51bSBkYW1vbl9vcHNfaWQge1xuIDYxNzpcdFx0REFNT05fT1BTX1ZBRERSLFxuIDYxODpcdFx0REFNT05fT1BTX0ZWQUREUixcbiA2MTk6XHRcdERBTU9OX09QU19QQUREUixcbiA2MjA6XHRcdE5SX0RBTU9OX09QUyxcbiA2MjE6XHR9O1xuIDYyMjpcdFxuIDYyMzpcdC8qKlxuIDYyNDpcdCAqIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIC0gTW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4gNjI1Olx0ICpcbiA2MjY6XHQgKiBAaWQ6XHRcdFx0XHRJZGVudGlmaWVyIG9mIHRoaXMgb3BlcmF0aW9ucyBzZXQuXG4gNjI3Olx0ICogQGluaXQ6XHRcdFx0SW5pdGlhbGl6ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLlxuIDYyODpcdCAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gNjI5Olx0ICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgREFNT04gUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwcmltYXJpbHkgYSBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBlZmZvcnQuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCByZXBsYWNpbmcgYGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19QQUREUmAgd2l0aCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLiBJIGNhbiBzZWUgdGhhdCBgZGFtb25fb3BzX2lkYCBjYW4gYmUgb25lIG9mIGBEQU1PTl9PUFNfVkFERFJgLCBgREFNT05fT1BTX0ZWQUREUmAsIG9yIGBEQU1PTl9PUFNfUEFERFJgLiBOb3csIHRoZSBmdW5jdGlvbiBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHJldHVybnMgdHJ1ZSBpZiB0aGUgYG9wc19pZGAgaXMgZWl0aGVyIGBWQUREUmAgb3IgYEZWQUREUmAsIGFuZCBmYWxzZSBpZiBpdCYjMzk7cyBgUEFERFJgLiBTaW5jZSB0aG9zZSBhcmUgdGhlICpvbmx5KiB2YWxpZCB2YWx1ZXMgZm9yIGBjdHgtJmd0O29wcy5pZGAsIHRoaXMgc3Vic3RpdHV0aW9uIHNob3VsZCBiZSBsb2dpY2FsbHkgZXF1aXZhbGVudC4gSXQgc2ltcGxpZmllcyB0aGUgY29uZGl0aW9uYWwuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoZXJlIGFyZSBubyBvdGhlciBmdW5jdGlvbmFsIHNoaWZ0cyBidXJpZWQgaGVyZS4gVGhlIHBhdGNoIGRpZmYgYWxzbyBzaG93cyByZW9yZGVyaW5nIGZpZWxkcyBpbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIGFkZGluZyBhIGAvKiBwcml2YXRlOiAqL2AgY29tbWVudC4gT2theSwgc28gaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCB0aGF0JiMzOTtzIHRoZSBvbmx5IGxvZ2ljIGNoYW5nZSwgdGhlIHJlcGxhY2VtZW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpcyB0cnVseSBhIHJlZmFjdG9yaW5nLiBJJiMzOTttIHRoaW5raW5nLCB3aGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgYGN0eC0mZ3Q7b3BzLmlkYD8gSWYgaXQmIzM5O3MgemVybywgdGhhdCYjMzk7cyBlcXVpdmFsZW50IHRvIGBEQU1PTl9PUFNfVkFERFJgLCBhbmQgaW4gdGhhdCBzY2VuYXJpbyBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHdvdWxkIHN0aWxsIGJlIGZhbHNlLCBqdXN0IGxpa2UgYGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19QQUREUmAgd291bGQgYmUuIFRoZXJlZm9yZSwgdGhlIHJlZmFjdG9yaW5nIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuCgpOb3csIGxldCYjMzk7cyByZXZpc2l0IHRoZSBoZWFkZXIgZmlsZSBjaGFuZ2UuIFJlb3JkZXJpbmcgc3RydWN0IGZpZWxkcyAqY2FuKiBiZSBwcm9ibGVtYXRpYywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciBpZiBpdCBjYXVzZXMgYmluYXJ5IGNvbXBhdGliaWxpdHkgaXNzdWVzLiBIb3dldmVyLCBzaW5jZSBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBpcyBub3QgaW4gYGluY2x1ZGUvdWFwaWAsIGFuZCB0aGlzIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3QsIGl0JiMzOTtzIGxlc3MgbGlrZWx5IHRvIGJlIGEgY29uY2VybiwgYXNzdW1pbmcgbm8gaGFyZGNvZGVkIG9mZnNldHMgYXJlIGJlaW5nIHVzZWQgc29tZXdoZXJlLiBUaGUgc3RydWN0IGRlZmluaXRpb24gYWxzbyBpbmNsdWRlcyBzb21lIGAvKiBwcml2YXRlOiAqL2AgY29tbWVudHMuCgpUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGxheW91dCBvZiB0aGUgYHN0cnVjdCBkYW1vbl9yZWdpb25gLiBUaGUgYGxpc3RgIG1lbWJlciBpcyBiZWluZyBtb3ZlZCB0byB0aGUgZW5kLCBhbmQgbWFya2VkIHByaXZhdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBicmVhayBhbnl0aGluZy4gSSBkb24mIzM5O3Qgc2VlIGFueSBoYXJkY29kZWQgb2Zmc2V0cyB1c2VkIGluIHRoaXMgY2FzZSwgYW5kIHRoZSBpbmNsdWRlIGlzIG5vdCBhIFVBUEkuIFNvIHRoZSBsYXlvdXQgY2hhbmdlIHNob3VsZG4mIzM5O3QgYWZmZWN0IGFueXRoaW5nLCB1bmxlc3MsIGFuZCB0aGlzIGlzIGEgcG9zc2liaWxpdHksIGl0IGlzIHVzZWQgaW4gc29tZSB3ZWlyZCBvciB1bmV4cGVjdGVkIHdheS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vbl9yZWdpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY0NSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTM4PXN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDMtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NDQ6ICogc3RydWN0IGRhbW9uX3JlZ2lvbiAtIFJlcHJlc2VudHMgYSBtb25pdG9yaW5nIHRhcmdldCByZWdpb24uXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDUtICogQGFyOlx0XHRcdFRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSByZWdpb24uXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY0LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY1OnN0cnVjdCBkYW1vbl9yZWdpb24ge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY2LVx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYXI7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTQ3MD1zdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC00NzEtXHR2b2lkICgqd2Fsa19mbikodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjQ3MjpcdFx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQ3My1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHVuc2lnbmVkIGxvbmcgc3pfZmlsdGVyX3Bhc3NlZCk7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC01OTMtXHQgKiB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTk0Olx0ICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU5NS1cdCAqIGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHkgQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Njc0PXN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjgyLVx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2ODM6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzY2hlbWUpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY4NC1cdHVuc2lnbmVkIGxvbmcgKCphcHBseV9zY2hlbWUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Njg1Olx0XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjg2LVx0XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lLCB1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTIxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9yYW5kKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjkzNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25leHRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM3LXtcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5Mzg6XHRyZXR1cm4gY29udGFpbmVyX29mKHItXHUwMDNlbGlzdC5uZXh0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uLCBsaXN0KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC05MzktfVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0MC1cbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NDE6c3RhdGljIGlubGluZSBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9wcmV2X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0Mi17XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTQzOlx0cmV0dXJuIGNvbnRhaW5lcl9vZihyLVx1MDAzZWxpc3QucHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiwgbGlzdCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTQ0LX1cbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDUtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTQ2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDcte1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk0ODpcdHJldHVybiBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dC1cdTAwM2VyZWdpb25zX2xpc3QsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0OS19XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTUwLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk1MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX2ZpcnN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1Mi17XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTUzOlx0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dC1cdTAwM2VyZWdpb25zX2xpc3QsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1NC19XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTU1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk1NjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fc3pfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTU3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAyMD12b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjEtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyMjpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDIzOnVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjQtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyNTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDI2LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjc6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyOC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzMD1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDMxLVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMzI6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMzMtXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaD03Nz1UUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtNzktXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY29udGV4dF9pZHgsIHVuc2lnbmVkIGludCBzY2hlbWVfaWR4LFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaDo4MDpcdFx0dW5zaWduZWQgaW50IHRhcmdldF9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTgxLVx0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHVuc2lnbmVkIGludCBucl9yZWdpb25zLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9MTM1PVRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vbl9yZWdpb25fYWdncmVnYXRlZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtMTM2LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaDoxMzc6XHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaC0xMzgtXHRcdHVuc2lnbmVkIGludCBucl9yZWdpb25zLCB1bnNpZ25lZCBpbnQgbnJfcHJvYmVzKSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oPTE3Mz1UUkFDRV9FVkVOVChkYW1vbl9hZ2dyZWdhdGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaC0xNzQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oOjE3NTpcdFRQX1BST1RPKHVuc2lnbmVkIGludCB0YXJnZXRfaWQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTE3Ni1cdFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMpLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjMtICovXG5tbS9kYW1vbi9jb3JlLmM6MjY0OnVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI2NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODctXG5tbS9kYW1vbi9jb3JlLmM6Mjg4OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI4OS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTg9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNy0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xubW0vZGFtb24vY29yZS5jOjMzMDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcbm1tL2RhbW9uL2NvcmUuYy0zMzEtXHRpbnQgaTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzUyLVxubW0vZGFtb24vY29yZS5jOjM1MzpzdGF0aWMgdm9pZCBkYW1vbl9hZGRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtMzU0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYxLSAqL1xubW0vZGFtb24vY29yZS5jOjM2MjpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jOjM2MzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcbm1tL2RhbW9uL2NvcmUuYy0zNjQtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jPTM3Nj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODAtXG5tbS9kYW1vbi9jb3JlLmM6MzgxOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy0zODIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODgtXG5tbS9kYW1vbi9jb3JlLmM6Mzg5OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9jb3JlLmMtMzkwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzLVxubW0vZGFtb24vY29yZS5jOjM5NDpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM5NS1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAwLVxubW0vZGFtb24vY29yZS5jOjQwMTpzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTQwMi1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDE0LSAqL1xubW0vZGFtb24vY29yZS5jOjQxNTp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYy00MTYtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDM1LSAqL1xubW0vZGFtb24vY29yZS5jOjQzNjpzdGF0aWMgYm9vbCBkYW1vbl9pbnRlcnNlY3Qoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy00MzctXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyZSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDQ0LSAqL1xubW0vZGFtb24vY29yZS5jOjQ0NTpzdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbm1tL2RhbW9uL2NvcmUuYzo0NDY6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmxhc3QsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNDQ3LXtcbm1tL2RhbW9uL2NvcmUuYzo0NDg6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZmlyc3Q7XG5tbS9kYW1vbi9jb3JlLmMtNDQ5LVxubW0vZGFtb24vY29yZS5jLTQ1MC1cdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9mcm9tKHIsIHQpIHtcbm1tL2RhbW9uL2NvcmUuYzo0NTE6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsICpuZXdyO1xubW0vZGFtb24vY29yZS5jLTQ1Mi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDc4PWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00ODAte1xubW0vZGFtb24vY29yZS5jOjQ4MTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTQ4Mi1cdHVuc2lnbmVkIGludCBpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy01MjMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTI0Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCA9IE5VTEwsICpsYXN0LCAqbmV3cjtcbm1tL2RhbW9uL2NvcmUuYy01MjUtXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODA3PXZvaWQgZGFtb25fZnJlZV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04MDgte1xubW0vZGFtb24vY29yZS5jOjgwOTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTgxMC1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTMyPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTM4LVxubW0vZGFtb24vY29yZS5jOjkzOTpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk0MC1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTgtXG5tbS9kYW1vbi9jb3JlLmM6OTU5OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk2MC1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz05ODk9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vY29yZS5jLTk5My1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9jb3JlLmM6OTk0Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL2NvcmUuYy05OTUtXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MjU9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTI3LXtcbm1tL2RhbW9uL2NvcmUuYzoxNTI4Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqc3JjX3JlZ2lvbiwgKnByZXYgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTE1MjktXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3JlZ2lvbl9zel9saW1pdChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NzEtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vY29yZS5jOjE4NzI6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vY29yZS5jLTE4NzMtXHR1bnNpZ25lZCBsb25nIHN6ID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg4OD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzoxODg5Olx0XHRcdFx0ICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIHN6X3IpO1xubW0vZGFtb24vY29yZS5jLTE4OTAtXG4tLVxubW0vZGFtb24vY29yZS5jPTE5MDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fYXBwbHlfbWluX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTA3LVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL2NvcmUuYzoxOTA4Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtMTkwOS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjEwMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNDMtICogaW52b2NhdGlvbiwgZm9yIGVhY2ggc2NoZW1lLiAgVGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBoZW5jZSBzYWZlbHlcbm1tL2RhbW9uL2NvcmUuYzoyMTQ0OiAqIGFjY2VzcyB0aGUgaW50ZXJuYWwgZGF0YSBvZiBcdTAwMjZzdHJ1Y3QgZGFtb25fY3R4IGFuZCBcdTAwMjZzdHJ1Y3QgZGFtb25fcmVnaW9uIHRoYXRcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIGVhY2ggb2YgdGhlIHNjaGVtZSB3aWxsIGFwcGx5IHRoZSBhY3Rpb24gZm9yIG5leHQgaW50ZXJ2YWwsIHdpdGhvdXRcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjE4MD1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE5Mi1cdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjE5MzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL2NvcmUuYy0yMTk0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjEyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2dldF9pbnRlcnZhbHNfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjIxNC1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9jb3JlLmM6MjIxNTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi9jb3JlLmMtMjIxNi1cdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBtYXhfYWNjZXNzX2V2ZW50cyA9IDAsIGFjY2Vzc19ldmVudHMgPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjUxPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzItXG5tbS9kYW1vbi9jb3JlLmM6MjI3MzpzdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmMtMjI3NC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjI5ND1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5OS1cbm1tL2RhbW9uL2NvcmUuYzoyMzAwOnN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTIzMDEtXHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjMzNj1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmM6MjMzNzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxubW0vZGFtb24vY29yZS5jLTIzMzgtXHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjM4Nj1zdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jOjIzODc6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbm1tL2RhbW9uL2NvcmUuYy0yMzg4LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTI0MzU9c3RhdGljIGJvb2wgZGFtb3NfY29yZV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzoyNDM2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMjQzNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTI0NjI9c3RhdGljIHZvaWQgZGFtb3Nfd2Fsa19jYWxsX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jOjI0NjM6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbm1tL2RhbW9uL2NvcmUuYy0yNDY0LVx0XHR1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpXG4tLVxubW0vZGFtb24vY29yZS5jPTI1Njk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmM6MjU3MDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTI1NzEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjM5PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNjQwLVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzoyNjQxOlx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0yNjQyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY5MT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY5My17XG5tbS9kYW1vbi9jb3JlLmM6MjY5NDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi9jb3JlLmMtMjY5NS1cbm1tL2RhbW9uL2NvcmUuYy0yNjk2LVx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNjk3Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpwcmV2X3I7XG5tbS9kYW1vbi9jb3JlLmMtMjY5OC1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjg3OD1zdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODgxLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL2NvcmUuYzoyODgyOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL2NvcmUuYy0yODgzLVx0cGh5c19hZGRyX3QgdG90YWxfZWxpZ2libGUgPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTM1PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMxMzgtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vY29yZS5jOjMxMzk6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vY29yZS5jLTMxNDAtXHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2Vzejtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI1OD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXG5tbS9kYW1vbi9jb3JlLmM6MzI1OTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0zMjYwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI2Nj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXG5tbS9kYW1vbi9jb3JlLmM6MzI2NzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0zMjY4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI3NT1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jOjMyNzY6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTItXG5tbS9kYW1vbi9jb3JlLmM6MzI5MzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYy0zMjk0LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG4tLVxubW0vZGFtb24vY29yZS5jPTMzMTA9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMTIte1xubW0vZGFtb24vY29yZS5jOjMzMTM6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTMzMTQtXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2Mz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM4My0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjMzODQ6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTMzODUtXHRcdHVuc2lnbmVkIGxvbmcgc3pfcilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM5MS0jZWxzZVxubW0vZGFtb24vY29yZS5jOjMzOTI6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTMzOTMtXHRcdHVuc2lnbmVkIGxvbmcgc3pfcilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQwND1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYzozNDA1Olx0XHRcdFx0ICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIHN6X3IpXG5tbS9kYW1vbi9jb3JlLmMtMzQwNi17XG5tbS9kYW1vbi9jb3JlLmM6MzQwNzpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKm5ldztcbm1tL2RhbW9uL2NvcmUuYy0zNDA4LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDI4PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDMxLXtcbm1tL2RhbW9uL2NvcmUuYzozNDMyOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtMzQzMy1cdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBzel9zdWIgPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDU4PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NjItXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vY29yZS5jOjM0NjM6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqbmV4dDtcbm1tL2RhbW9uL2NvcmUuYy0zNDY0LVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSByb3RhdGlvbiYjNDM7JiM0MzsgJSBzcGxpdF9zdGVwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNjEyPXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYxNC1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9jb3JlLmM6MzYxNTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi9jb3JlLmMtMzYxNi1cbm1tL2RhbW9uL2NvcmUuYy0zNjE3LVx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYzozNjE4Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpwcmV2X3IgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTM2MTktXHRcdHVuc2lnbmVkIGludCBucl9yZWdpb25zID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzk2Nj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM5OTAtICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk5MTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbm1tL2RhbW9uL2NvcmUuYy0zOTkyLXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwMy1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDQ6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE0OC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNDk6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTAtXHRcdFx0c3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD0xMz1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE0LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNzppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTM4PXN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDgtXG5tbS9kYW1vbi9wYWRkci5jOjQ5OnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtNTAtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTU3PXN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vcGFkZHIuYy01OS1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi9wYWRkci5jOjYwOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3BhZGRyLmMtNjEtXG4tLVxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyAqZm9saW9fc3opXG4tLVxubW0vZGFtb24vcGFkZHIuYy04MS1cbm1tL2RhbW9uL3BhZGRyLmM6ODI6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtODMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTA0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTA2LVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL3BhZGRyLmM6MTA3Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3BhZGRyLmMtMTA4LVx0dW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0xNjk9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTcyLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL3BhZGRyLmM6MTczOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3BhZGRyLmMtMTc0LVx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjIxPXN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjMxLVxubW0vZGFtb24vcGFkZHIuYzoyMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0yMzMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYz0yOTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxubW0vZGFtb24vcGFkZHIuYzoyOTE6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LFxubW0vZGFtb24vcGFkZHIuYy0yOTItXHRcdHN0cnVjdCBkYW1vcyAqcywgYm9vbCBhY3RpdmF0ZSxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMyMy1cbm1tL2RhbW9uL3BhZGRyLmM6MzI0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMyNS1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMzMC1cbm1tL2RhbW9uL3BhZGRyLmM6MzMxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzMyLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzM3LVxubW0vZGFtb24vcGFkZHIuYzozMzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMzktXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zNzEtXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTM3My1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTM5OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vcGFkZHIuYzo0MDA6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTQwMS1cdFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYz00MjY9c3RhdGljIGludCBkYW1vbl9wYV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbm1tL2RhbW9uL3BhZGRyLmM6NDI3Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbm1tL2RhbW9uL3BhZGRyLmMtNDI4LXtcbi0tXG5tbS9kYW1vbi9zdGF0LmM9NTQ9c3RhdGljIHZvaWQgZGFtb25fc3RhdF9zZXRfZXN0aW1hdGVkX21lbW9yeV9iYW5kd2lkdGgoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9zdGF0LmMtNTYtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vc3RhdC5jOjU3Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3N0YXQuYy01OC1cdHVuc2lnbmVkIGxvbmcgYWNjZXNzX2J5dGVzID0gMDtcbi0tXG5tbS9kYW1vbi9zdGF0LmMtNjgtXG5tbS9kYW1vbi9zdGF0LmM6Njk6c3RhdGljIGludCBkYW1vbl9zdGF0X2lkbGV0aW1lKGNvbnN0IHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9zdGF0LmMtNzAte1xuLS1cbm1tL2RhbW9uL3N0YXQuYz03Nj1zdGF0aWMgaW50IGRhbW9uX3N0YXRfY21wX3JlZ2lvbnMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbm1tL2RhbW9uL3N0YXQuYy03Ny17XG5tbS9kYW1vbi9zdGF0LmM6Nzg6XHRjb25zdCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyYSA9ICooY29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqKilhO1xubW0vZGFtb24vc3RhdC5jOjc5Olx0Y29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcmIgPSAqKGNvbnN0IHN0cnVjdCBkYW1vbl9yZWdpb24gKiopYjtcbm1tL2RhbW9uL3N0YXQuYy04MC1cbi0tXG5tbS9kYW1vbi9zdGF0LmM9ODQ9c3RhdGljIGludCBkYW1vbl9zdGF0X3NvcnRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vc3RhdC5jOjg1Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICoqKnNvcnRlZF9wdHIsIGludCAqbnJfcmVnaW9uc19wdHIsXG5tbS9kYW1vbi9zdGF0LmMtODYtXHRcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3N6X3B0cilcbi0tXG5tbS9kYW1vbi9zdGF0LmMtODgtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xubW0vZGFtb24vc3RhdC5jOjg5Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbm1tL2RhbW9uL3N0YXQuYzo5MDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKipyZWdpb25fcG9pbnRlcnM7XG5tbS9kYW1vbi9zdGF0LmMtOTEtXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyA9IDA7XG4tLVxubW0vZGFtb24vc3RhdC5jPTExMz1zdGF0aWMgdm9pZCBkYW1vbl9zdGF0X3NldF9pZGxldGltZV9wZXJjZW50aWxlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vc3RhdC5jLTExNC17XG5tbS9kYW1vbi9zdGF0LmM6MTE1Olx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqKnNvcnRlZF9yZWdpb25zLCAqcmVnaW9uO1xubW0vZGFtb24vc3RhdC5jLTExNi1cdGludCBucl9yZWdpb25zO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTQ2PXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0ODpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDktXHRcdGJvb2wgdG90YWxfYnl0ZXNfb25seSwgdW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkxOlx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Mi17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2MD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYxOlx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzY9c3RhdGljIGludCBkYW1vc19zeXNmc19yZWdpb25fYWRkX2RpcnMoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqZHJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODAte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTAxPXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAyLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzEwMzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLCBib29sIHRvdGFsX2J5dGVzX29ubHksXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNC1cdFx0dW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMxOT1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNfdXBkX29uZSh2b2lkICpkYXRhLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy5jOjIzMjA6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9zeXNmcy5jLTIzMjEtXHRcdHN0cnVjdCBkYW1vcyAqcywgdW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0LXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MzpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQtXHRpbnQgaXQsIGlyO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0Mi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQzOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnJfbmV3O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFJlZ2lvbiBTdHJ1Y3R1cmUqKgoKT2theSwgc28gdGhlIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBoZWF2aWx5IHV0aWxpemVkLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9zZWQgYXMgcGFydCBvZiB0aGUgVXNlciBBUEksIHdoaWNoIGlzIGEga2V5IHBvaW50LiBMZXQmIzM5O3MgZGVsdmUgYmFjayBpbnRvIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpdHNlbGYuIEhtbSwgaGVyZSBpdCBpczogYHN0cnVjdCBkYW1vbl9yZWdpb25gLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHJlYXJyYW5nZW1lbnQgb2YgdGhlIGBsaXN0YCBmaWVsZC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgbW92ZWQgZnJvbSBiZWZvcmUgYGFnZWAgdG8gYWZ0ZXIgYGFnZWAuIE5vdywgbXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaGFzIGFueSBzZXJpb3VzIGltcGxpY2F0aW9ucy4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBhbnkgaGFyZGNvZGVkIG9mZnNldHMgb3IgYXNzZW1ibHkgY29kZSB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZSBzcGVjaWZpYyBtZW1iZXJzIG9mIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhhbmtmdWxseSwgYSBxdWljayBzY2FuIGRvZXNuJiMzOTt0IHJldmVhbCBhbnl0aGluZyBsaWtlIHRoYXQuIEl0JiMzOTtzIGp1c3QgYSBzdGFuZGFyZCBDIHN0cnVjdHVyZS4gQnV0IHdhaXQsIHdoYXQgYWJvdXQgYG1lbXNldGAgb3IgYG1lbWNweWAgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHNlbnNpdGl2ZSB0byB0aGUgc3RydWN0dXJlJiMzOTtzIGxheW91dD8gVGhleSBjb3VsZCBiZSBhbiBpc3N1ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBkYW1vbl9uZXdfcmVnaW9uYCBpcyBpbXBsZW1lbnRlZCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGEgbmV3IHJlZ2lvbiB3b3VsZCBiZSBpbml0aWFsaXplZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHRoZXJlIGlzIGdvaW5nIHRvIGJsb3cgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX25ld19yZWdpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMjA9dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDIxLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjI6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyMy11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjctICovXG5tbS9kYW1vbi9jb3JlLmM6MzI4OnN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS9kYW1vbi9jb3JlLmMtMzI5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NTYtXHRcdGlmIChyLVx1MDAzZWFyLmVuZCAhPSBuZXh0LVx1MDAzZWFyLnN0YXJ0KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDU3Olx0XHRcdG5ld3IgPSBkYW1vbl9uZXdfcmVnaW9uKHItXHUwMDNlYXIuZW5kLCBuZXh0LVx1MDAzZWFyLnN0YXJ0KTtcbm1tL2RhbW9uL2NvcmUuYy00NTgtXHRcdFx0aWYgKCFuZXdyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00Nzg9aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTUwOS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjUxMDpcdFx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihcbm1tL2RhbW9uL2NvcmUuYy01MTEtXHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2VzW2ldLnN0YXJ0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy01NDItXHRcdFx0Lyogbm8gcmVnaW9uIGludGVyc2VjdHMgd2l0aCB0aGlzIHJhbmdlICovXG5tbS9kYW1vbi9jb3JlLmM6NTQzOlx0XHRcdG5ld3IgPSBkYW1vbl9uZXdfcmVnaW9uKFxubW0vZGFtb24vY29yZS5jLTU0NC1cdFx0XHRcdFx0QUxJR05fRE9XTihyYW5nZS1cdTAwM2VzdGFydCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQwND1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQwOS1cdGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQociwgc3pfcik7XG5tbS9kYW1vbi9jb3JlLmM6MzQxMDpcdG5ldyA9IGRhbW9uX25ld19yZWdpb24oci1cdTAwM2Vhci5zdGFydCAmIzQzOyBzel9yLCByLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9jb3JlLmMtMzQxMS1cdGlmICghbmV3KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNy1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODpcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDEsIDIpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5LVx0aWYgKCFyKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMC1cdFx0Zm9yIChpciA9IDA7IGlyIFx1MDAzYyAzOyBpciYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTE6XHRcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oc2FkZHJbaXRdW2lyXSwgZWFkZHJbaXRdW2lyXSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyLVx0XHRcdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0Ny1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDt0YXJnZXQgYWxsb2MgZmFpbFwmIzM0Oyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ4Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgMTAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDktXHRpZiAoIXIpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTgwLVx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3RhcmdldCBhbGxvYyBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODE6XHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCAxMDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4Mi1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODgtXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE4OTpcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTkwLVx0aWYgKCFyMikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzYSk7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjUwOlx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI1MS1cdFx0aWYgKCFyKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTI3Mj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yODktXHR9XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjkwOlx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgMjIpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI5MS1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMDUtXHR9XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzA2Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgMjIwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMDctXHRpZiAoIXIpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzIyLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzYSk7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzIzOlx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTMyNC1cdFx0aWYgKCFyKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM0Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3Mi1cdFx0c3RhcnQgPSBpICogcmVnaW9uX3N6O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3MzpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oc3RhcnQsIHN0YXJ0ICYjNDM7IHJlZ2lvbl9zeik7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc0LVx0XHRpZiAoIXIpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDU0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3pfb2xkX3JhbmdlczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0Njg6XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKG9sZF9yYW5nZXNbaV0uc3RhcnQsIG9sZF9yYW5nZXNbaV0uZW5kKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00NjktXHRcdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01ODc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01OTEtXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU5MjpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDcpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU5My1cdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTE3Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE4My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JlZ2lvbnM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE4NDpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24ocmVnaW9uX3N0YXJ0X2VuZFtpXVswXSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTg1LVx0XHRcdFx0cmVnaW9uX3N0YXJ0X2VuZFtpXVsxXSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEyNjI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTI3Ny1cdH1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjc4Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMywgNSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTI3OS1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDQ0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ2My1cdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDY0Olx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgc3pfcmVnaW9ucyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ2NS1cdGlmICghcikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDk1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTA2Olx0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihpICogMiwgKGkgJiM0MzsgMSkgKiAyKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA3LVx0XHRpZiAoIXIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBHaXZlbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGF0IGxpbmUgMzI4IG1pZ2h0IGJlIHRoZSBjcml0aWNhbCBhcmVhIHRvIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBsb2NhdGlvbiwgYXMgSSBzdXNwZWN0IHRoZXJlIGlzIHNvbWV0aGluZyByZWxldmFudCB0byB3aGF0IEkmIzM5O20gaW52ZXN0aWdhdGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdH1cbiAzMjE6XHQjZW5kaWZcbiAzMjI6XHRcbiAzMjM6XHQvKlxuIDMyNDpcdCAqIENvbnN0cnVjdCBhIGRhbW9uX3JlZ2lvbiBzdHJ1Y3RcbiAzMjU6XHQgKlxuIDMyNjpcdCAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzdHJ1Y3QgaWYgc3VjY2Vzcywgb3IgTlVMTCBvdGhlcndpc2VcbiAzMjc6XHQgKi9cbiAzMjg6XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIDMyOTpcdHtcbiAzMzA6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcbiAzMzE6XHRcdGludCBpO1xuIDMzMjpcdFxuIDMzMzpcdFx0ZGFtb25fdmVyaWZ5X25ld19yZWdpb24oc3RhcnQsIGVuZCk7XG4gMzM0Olx0XHRyZWdpb24gPSBrbWVtX2NhY2hlX2FsbG9jKGRhbW9uX3JlZ2lvbl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gMzM1Olx0XHRpZiAoIXJlZ2lvbilcbiAzMzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzM3Olx0XG4gMzM4Olx0XHRyZWdpb24tXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcbiAzMzk6XHRcdHJlZ2lvbi1cdTAwM2Vhci5lbmQgPSBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBkYW1vbl9uZXdfcmVnaW9uYCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb25fbmV3X3JlZ2lvbmAgdGhpbmcuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBvdmVyYWxsIGRlc2lnbiBhbmQgd2hhdCBraW5kIG9mIGltcGxpY2F0aW9ucyBpdCBoYXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8ganVzdCBnZXQgYSBsb29rIGF0IHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24sIGdldCBhIHNlbnNlIG9mIHRoZSBhcmNoaXRlY3R1cmUsIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGFpbiBwb2ludHMgb3IgZGVzaWduIGlzc3Vlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBzeXN0ZW07IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlIG9yIGFuIGluY3JlbWVudGFsIGFkZGl0aW9uPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5PyBBbmQsIG1vc3QgY3JpdGljYWxseSwgaG93IGRvZXMgdGhpcyBuZXcgcmVnaW9uIGltcGFjdCB0aGUgZXhpc3Rpbmcgd29ya2Zsb3dzPyBJIGV4cGVjdCB0aGVyZSBtYXkgYmUgZWRnZSBjYXNlcyB0byBjb25zaWRlci4gSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRhdGEgaW5jb25zaXN0ZW5jaWVzLCBhbmQsIG9mIGNvdXJzZSwgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIGRldGVybWluZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRyZWdpb24tXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xuIDM0MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbiAzNDI6XHRcdFx0cmVnaW9uLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xuIDM0MzpcdFx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaXN0KTtcbiAzNDY6XHRcbiAzNDc6XHRcdHJlZ2lvbi1cdTAwM2VhZ2UgPSAwO1xuIDM0ODpcdFx0cmVnaW9uLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSAwO1xuIDM0OTpcdFxuIDM1MDpcdFx0cmV0dXJuIHJlZ2lvbjtcbiAzNTE6XHR9XG4gMzUyOlx0XG4gMzUzOlx0c3RhdGljIHZvaWQgZGFtb25fYWRkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuIDM1NDpcdHtcbiAzNTU6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gMzU2Olx0XHR0LVx1MDAzZW5yX3JlZ2lvbnMmIzQzOyYjNDM7O1xuIDM1NzpcdH1cbiAzNTg6XHRcbiAzNTk6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgREFNT04gU3RydWN0dXJlIFJlb3JkZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIGFuZCBpdCYjMzk7cyBhbG1vc3QgZW50aXJlbHkgc3RydWN0dXJhbC4gRXNzZW50aWFsbHksIHdlIGFyZSBqdXN0IHJlb3JkZXJpbmcgdGhlIGZpZWxkcyB3aXRoaW4gc2V2ZXJhbCBgc3RydWN0YCBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgdG8gZ3JvdXAgcHVibGljLWZhY2luZyBmaWVsZHMgYW5kIHByaXZhdGUsIGludGVybmFsIGZpZWxkcywgYW5kIHNvbWUgYWNjb21wYW55aW5nIGtlcm5lbC1kb2MgY29tbWVudHMgaGF2ZSBiZWVuIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgpMb29raW5nIGF0IGVhY2ggc3RydWN0OgoKKiAgIGBkYW1vbl9uZXdfcmVnaW9uYDogTm8gY2hhbmdlcyBvdGhlciB0aGFuIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIHVuYWZmZWN0ZWQgYnkgdGhlIGxheW91dC4KCiogICBgZGFtb25fdGFyZ2V0YDogVGhlIGBvYnNvbGV0ZWAgZmxhZyBpcyBtb3ZlZCB1cC4gVGhlIGZpZWxkczogYG5yX3JlZ2lvbnNgLCBgcmVnaW9uc19saXN0YCwgYW5kIGBsaXN0YCBhcmUgcmVvcmRlcmVkIGludG8gYSBwcml2YXRlIHNlY3Rpb24uIEl0IGlzIHdvcnRoIG5vdGluZyB0aGUgZmllbGRzIGBucl9yZWdpb25zYCwgYHJlZ2lvbnNfbGlzdGAsIGFuZCBgbGlzdGAgYXJlIG1vdmVkIGRvd24gYW5kIG1hcmtlZCBhcyBwcml2YXRlLgoKKiAgIGBkYW1vc19xdW90YV9nb2FsYDogYGxhc3RfcHNpX3RvdGFsYCB3YXMgYWxyZWFkeSB3aXRoaW4gYSB1bmlvbiwgYW5kIGlzIHNpbXBseSBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSB1bmlvbi4gTm8gcmVhbCBjaGFuZ2UgaGVyZS4KCiogICBgZGFtb3NfcXVvdGFgOiBUaGUgYGdvYWxzYCBmaWVsZCBpcyBtb3ZlZCB0byB0aGUgcHJpdmF0ZSBzZWN0aW9uLiBBIGxheW91dCBjaGFuZ2UuCgoqICAgYGRhbW9zX2ZpbHRlcmA6IE5vIGxheW91dCBjaGFuZ2U7IGNvbW1lbnRzIHdlcmUgYWRkZWQgdG8gZXhwbGFpbiBwcml2YXRlIHN0YXRlLgoKKiAgIGBkYW1vc2A6IFNldmVyYWwgZmllbGRzIChgcXVvdGFgLCBgd21hcmtzYCwgdGhlIHVuaW9uLCBgc3RhdGAsIGBtYXhfbnJfc25hcHNob3RzYCkgYXJlIG1vdmVkIHVwIGJlZm9yZSBhIGNvbW1lbnQgbWFya2luZyB0aGUgc3RhcnQgb2YgaW50ZXJuYWwtdXNlLW9ubHkgZmllbGRzLiBMYXlvdXQgY2hhbmdlLgoKKiAgIGBkYW1vbl9maWx0ZXJgOiBObyBsYXlvdXQgY2hhbmdlLgoKKiAgIGBkYW1vbl9wcm9iZWA6IE5vIGxheW91dCBjaGFuZ2UuCgoqICAgYGRhbW9uX2N0eGA6IGBvcHNgIGFuZCBgcHJvYmVzYCBhcmUgbW92ZWQgZG93bi4gTGF5b3V0IGNoYW5nZS4KClNvLCBpbiBzdW1tYXJ5LCB0aGVzZSBhcmUgYWxtb3N0IGVudGlyZWx5IGxheW91dCBjaGFuZ2VzLCBpbXByb3ZpbmcgY29kZSByZWFkYWJpbGl0eS4gTm8gZnVuY3Rpb25hbCBiZWhhdmlvciBpcyB0b3VjaGVkIGJ5IHRoZXNlIGNoYW5nZXMuCgpIb3dldmVyLCB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBpczoKYGBgYwotCWlmIChjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgJmFtcDsmYW1wOyBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDEpCiYjNDM7CWlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMSkKYGBgCgpUaGUgbmV3IGNvbmRpdGlvbmFsIGluIGBtbS9kYW1vbi9zeXNmcy5jYCByZXBsYWNlcyBgY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIEkgd2FzIGNvbmNlcm5lZCBhYm91dCBpbXBsaWNpdCBiZWhhdmlvciwgYnV0IGFmdGVyIHJldmlld2luZyB0aGUgZW51bSBkZWZpbml0aW9uLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBhcmUgbG9naWNhbGx5IGVxdWl2YWxlbnQgY29uZGl0aW9ucywgd2hlcmUgYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIGlzIHRydWUgaWYgd2UgYXJlIGluIFZBRERSIG9yIEZWQUREUiBvcGVyYXRpb25zLCBhbmQgaXMgZmFsc2Ugb3RoZXJ3aXNlLiBTbywgdGhpcyBpcyBhbHNvIGEgcmVmYWN0b3JpbmcsIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbi4gVGhlIGNvbmRpdGlvbiBjaGFuZ2UgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuCgpUaGlzIHdob2xlIHBhdGNoIGlzLCB0aGVyZWZvcmUsIGEgdmVyeSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBzdHJ1Y3Qgb3JnYW5pemF0aW9uLCBkb2N1bWVudGF0aW9uLCBhbmQgbWlub3IgY29kZS1jbGFyaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDQ3LVxubW0vZGFtb24vc3lzZnMuYzoyMDQ4OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMuYy0yMDQ5LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyAqc3lzZnNfdGFyZ2V0cylcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjExMy1cdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL3N5c2ZzLmM6MjExNDpcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cdTAwM2V0YXJnZXRzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjExNS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaD0zOT1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc190ZXN0X2FkZF90YXJnZXRzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTgxLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaDo4MjpcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTgzLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDF1LCBucl9kYW1vbl90YXJnZXRzKGN0eCkpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtODYtXHRcdFx0c3lzZnNfdGFyZ2V0LVx1MDAzZXBpZCAmIzQzOyAxLCAyMDApO1xubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaDo4NzpcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTg4LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDJ1LCBucl9kYW1vbl90YXJnZXRzKGN0eCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgdGhlIHVzZSBjYXNlIGhlcmU/IFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aG9zZSBpbnB1dHM/JiMzNDsgSSBrbm93IHRoZSBEYW1vbiBzdWJzeXN0ZW0sIHNvIG15IGJyYWluIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhYm91dCBhcHBseWluZyB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMgZGlyZWN0bHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIG9yIGEgdHJpZ2dlciBmb3IgYWN0aW9uPyBJJiMzOTttIGhvcGluZyBpdCBpc24mIzM5O3Qgb3Zlcmx5IGNvbXBsaWNhdGVkLCB0aGF0IGl0IGhhcyBhIGNsZWFyIGludGVyZmFjZS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiB3aGVyZSBjaGFuZ2VzIGluIGEgc3lzZnMgbm9kZSB0cmFuc2xhdGUgaW50byBhY3R1YWwgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4gSSByZWFsbHkgd2FudCB0byBlbnN1cmUgdGhlIGlucHV0cyBhcmUgdmFsaWRhdGVkIGNvcnJlY3RseSB0byBlbnN1cmUgc2FmZXR5LiBBbHNvLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgY29tZSB0byBtaW5kIGltbWVkaWF0ZWx5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBlbnRyeSBwb2ludCwgc2VlIHdoYXQga2luZCBvZiBpbnB1dHMgaXQgYWNjZXB0cy4gVGhlbiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIGRldGVybWluZSBpdHMgc2lkZS1lZmZlY3RzIG9uIHRoZSBEYW1vbiBzeXN0ZW0sIGFuZCBvbiB0aGUgbWFjaGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDkwOlx0XHRyZXR1cm4ga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggXHUwMDI2XHUwMDI2XG4yMDkxOlx0XHRcdGRhbW9uX2lzX3J1bm5pbmcoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpO1xuMjA5MjpcdH1cbjIwOTM6XHRcbjIwOTQ6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4yMDk1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuMjA5NjpcdHtcbjIwOTc6XHRcdGludCBlcnI7XG4yMDk4Olx0XG4yMDk5Olx0XHRlcnIgPSBkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgc3lzX2N0eC1cdTAwM2VvcHNfaWQpO1xuMjEwMDpcdFx0aWYgKGVycilcbjIxMDE6XHRcdFx0cmV0dXJuIGVycjtcbjIxMDI6XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQgPSBzeXNfY3R4LVx1MDAzZWFkZHJfdW5pdDtcbjIxMDM6XHRcdC8qIGFkZHJfdW5pdCBpcyByZXNwZWN0ZWQgYnkgb25seSBEQU1PTl9PUFNfUEFERFIgKi9cbjIxMDQ6XHRcdGlmIChzeXNfY3R4LVx1MDAzZW9wc19pZCA9PSBEQU1PTl9PUFNfUEFERFIpXG4yMTA1Olx0XHRcdGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KFxuMjEwNjpcdFx0XHRcdFx0REFNT05fTUlOX1JFR0lPTl9TWiAvIHN5c19jdHgtXHUwMDNlYWRkcl91bml0LCAxKTtcbjIxMDc6XHRcdGN0eC1cdTAwM2VwYXVzZSA9IHN5c19jdHgtXHUwMDNlcGF1c2U7XG4yMTA4Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfYXR0cnMoY3R4LCBzeXNfY3R4LVx1MDAzZWF0dHJzKTtcbjIxMDk6XHRcdGlmIChlcnIpXG4yMTEwOlx0XHRcdHJldHVybiBlcnI7XG4yMTExOlx0XHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKGN0eCwgc3lzX2N0eC1cdTAwM2VhdHRycy1cdTAwM2Vwcm9iZXMpO1xuMjExMjpcdFx0aWYgKGVycilcbjIxMTM6XHRcdFx0cmV0dXJuIGVycjtcbjIxMTQ6XHRcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cdTAwM2V0YXJnZXRzKTtcbjIxMTU6XHRcdGlmIChlcnIpXG4yMTE2Olx0XHRcdHJldHVybiBlcnI7XG4yMTE3Olx0XHRyZXR1cm4gZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoY3R4LCBzeXNfY3R4LVx1MDAzZXNjaGVtZXMpO1xuMjExODpcdH1cbjIxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NTcKCQkJCQkJCW91dHB1dDogODcKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEEgV2FzdGUgb2YgRnV6emluZyBUaW1lKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBzeXNfY3R4LSZndDtvcHNfaWQpYCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0c2AuIENydWNpYWxseSwgYHN5c19jdHgtJmd0O29wc19pZGAgaXMgZGVyaXZlZCBmcm9tIHRoZSBgZGFtb25fb3BzX2lkYCBlbnVtLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBgY3R4LSZndDtvcHMuaWRgIGlzIGFsd2F5cyBhIHZhbGlkIGVudW0gdmFsdWXigJRzcGVjaWZpY2FsbHksIGVpdGhlciBgVkFERFJgLCBgRlZBRERSYCwgb3IgYFBBRERSYC4KClRoaXMgbWVhbnMgdGhhdCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIGlzICpmdW5jdGlvbmFsbHkgaWRlbnRpY2FsKiB0byBgY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBlcXVpdmFsZW5jZS4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgaW50cm9kdWNlZDsgaXQmIzM5O3MgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50LiBUaGlzIHNjcmVhbXMgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0Oy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgb25seSB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuCgpJbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgaXQmIzM5O3MgYWxsIGFib3V0IHN0cnVjdCBsYXlvdXQgcmVvcmdhbml6YXRpb24uIEVzc2VudGlhbGx5LCBtb3Zpbmcgc29tZSBtZW1iZXJzIGludG8gYSAmIzM0O3ByaXZhdGUmIzM0OyBzZWN0aW9uIG9yIHJlb3JkZXJpbmcgbWVtYmVycyB3aXRoaW4gdGhlIHN0cnVjdHMuIE5vIG5ldyBmaWVsZHMsIG5vIGNoYW5nZXMgdG8gZXh0ZXJuYWxseSB2aXNpYmxlIGludGVyZmFjZXMgb3IgVUFQSSwgbm90aGluZyB0aGF0IHdvdWxkIGltcGFjdCB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93IGluIGFueSB3YXkuIFN0cnVjdCBtZW1iZXIgb3JkZXJpbmcgY2hhbmdlcyBhcmUgaW50ZXJuYWwgYW5kIHdvbiYjMzk7dCBicmVhayBiaW5hcnkgY29tcGF0aWJpbGl0eS4KCkluIGBtbS9kYW1vbi9zeXNmcy5jYCwgdGhlIG9ubHkgY2hhbmdlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGF0IGBjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIGNvbmRpdGlvbiB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIEFzIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCwgdGhlc2UgYXJlIGxvZ2ljYWxseSBpZGVudGljYWwgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGN0eGAgc3RydWN0LiBUaGlzIGlzIGp1c3QgYSBtb3JlIHJlYWRhYmxlIHVzZSBvZiBhbiBleGlzdGluZyBoZWxwZXIgZnVuY3Rpb24uCgpUaGVyZWZvcmUsIHNpbmNlIHRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb3NtZXRpYyBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGxvZ2ljIG9yIGV4cG9zZSBhbnl0aGluZyBuZXcgdG8gdGhlIG91dHNpZGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgcGF0Y2guIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0IGxheW91dCByZW9yZGVyaW5nIHRvIGdyb3VwIHB1YmxpYy9wcml2YXRlIGZpZWxkcyBmb3Iga2VybmVsLWRvYywgYW5kIGEgcHVyZSByZWZhY3RvcmluZyBpbiBtbS9kYW1vbi9zeXNmcy5jIHRoYXQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3QgbGF5b3V0IHJlb3JkZXJpbmcgdG8gZ3JvdXAgcHVibGljL3ByaXZhdGUgZmllbGRzIGZvciBrZXJuZWwtZG9jLCBhbmQgYSBwdXJlIHJlZmFjdG9yaW5nIGluIG1tL2RhbW9uL3N5c2ZzLmMgdGhhdCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6MzIuMDI0Nzc3ODU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY0MTQ4MjYzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0IGxheW91dCByZW9yZGVyaW5nIHRvIGdyb3VwIHB1YmxpYy9wcml2YXRlIGZpZWxkcyBmb3Iga2VybmVsLWRvYywgYW5kIGEgcHVyZSByZWZhY3RvcmluZyBpbiBtbS9kYW1vbi9zeXNmcy5jIHRoYXQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6MzIuMDI0NzgzODI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg3NjE2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZWNkMmY5NGNkZDhkNzQzYTEyOGQxYmNiNThiMTM3YWRlODBiODQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDA4OjUyOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IGY2OTQ0MmE5ZDQzMTI4Li4zMjdmNTM0Njk2YWE4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDYsNyArNDYsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBzYW1wbGluZ19hZGRyOlxcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxcbiAgKiBAbnJfYWNjZXNzZXM6XFx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cXG4gICogQHByb2JlX2hpdHM6XFx0XFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAYWdlOlxcdFxcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cXG4gICpcXG4gICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxcbkBAIC02OCw5ICs2NywxMSBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XFxuIFxcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHR1bnNpZ25lZCBpbnQgYWdlO1xcbi0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbisvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cXG4rXFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbGFzdF9ucl9hY2Nlc3NlcztcXG4gXFx0dW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XFxuIH07XFxuQEAgLTc4LDkgKzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuIC8qKlxcbiAgKiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0LlxcbiAgKiBAcGlkOlxcdFxcdFRoZSBQSUQgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBtb25pdG9yLlxcbi0gKiBAbnJfcmVnaW9uczpcXHRcXHROdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC5cXG4tICogQHJlZ2lvbnNfbGlzdDpcXHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0Llxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAb2Jzb2xldGU6XFx0XFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cXG4gICpcXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxcbkBAIC05NCwxMCArOTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IHtcXG4gXFx0c3RydWN0IHBpZCAqcGlkO1xcbitcXHRib29sIG9ic29sZXRlO1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cXG4gXFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnM7XFxuK1xcdC8qIEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0O1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLVxcdGJvb2wgb2Jzb2xldGU7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTczLDEwICsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcXG4gICogQG1ldHJpYzpcXHRcXHRNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLlxcbiAgKiBAdGFyZ2V0X3ZhbHVlOlxcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxcbiAgKiBAY3VycmVudF92YWx1ZTpcXHRDdXJyZW50IHZhbHVlIG9mIEBtZXRyaWMuXFxuLSAqIEBsYXN0X3BzaV90b3RhbDpcXHRMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSVxcbiAgKiBAbmlkOlxcdFxcdE5vZGUgaWQuXFxuICAqIEBtZW1jZ19pZDpcXHRcXHRNZW1jZyBpZC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXFxuICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW5cXG5AQCAtMTk5LDEyICsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbiBcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxuIFxcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXFxuIFxcdHVuaW9uIHtcXG4tXFx0XFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRpbnQgbmlkO1xcbiBcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuIFxcdFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdFxcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXFxuK1xcdFxcdHU2NCBsYXN0X3BzaV90b3RhbDtcXG4rXFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTIyMyw3ICsyMjgsNiBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XFx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cXG4gICogQG1zOlxcdFxcdFxcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxcbiAgKiBAc3o6XFx0XFx0XFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxcbi0gKiBAZ29hbHM6XFx0XFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxcbiAgKiBAZ29hbF90dW5lcjpcXHRcXHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXFxuICAqIEBlc3o6XFx0XFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXFxuICAqIEBmYWlsX2NoYXJnZV9udW06XFx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxcbkBAIC0yNTAsNyArMjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4gICogdGhlIHNjaGVtZSdzIGFjdGlvbi4gIERBTU9OIHRoZW4gY29tcGFyZXMgaXQgYWdhaW5zdCBcXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxcbiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cXG4gICpcXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxcbisgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcXG4gICogZ29hbHMgdXNpbmcgaXRzIGludGVybmFsIGZlZWRiYWNrIGxvb3AgYWxnb3JpdGhtLCBmb3IgZXZlcnkgQHJlc2V0X2ludGVydmFsLlxcbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXFxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXFxuQEAgLTI3MSw3ICsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1zO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbitcXG4gXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXN6O1xcbiBcXG5AQCAtMjgzLDYgKzI4Nyw4IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XFxuIFxcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xcbiBcXG4gLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbiBcXHQvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX25zO1xcbkBAIC00MjYsNyArNDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuICAqXFx0XFx0XFx1MDAyNmRhbW9uX2N0eC1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xcbiAgKlxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cXG4gICogQHN6X3JhbmdlOlxcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cXG4tICogQGxpc3Q6XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcXHUwMDI2ZGFtb3MtXFx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcXG5AQCAtNDQ0LDYgKzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xcbiBcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gXFx0XFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTUxNSwxMiArNTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKiBAd21hcmtzOlxcdFxcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cXG4gICogQG1pZ3JhdGVfZGVzdHM6XFx0RGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyBcXFwibWlncmF0ZV97aG90LGNvbGR9XFxcIi5cXG4gICogQHRhcmdldF9uaWQ6XFx0XFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFxcXCJtaWdyYXRlX3tob3QsY29sZH1cXFwiLlxcbi0gKiBAY29yZV9maWx0ZXJzOlxcdEFkZGl0aW9uYWwgc2V0IG9mIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcXHUwMDI2YWN0aW9uLlxcbi0gKiBAb3BzX2ZpbHRlcnM6XFx0b3BzIGxheWVyIGhhbmRsaW5nIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cXG4tICogQGxhc3RfYXBwbGllZDpcXHRMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbiAgKiBAc3RhdDpcXHRcXHRTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLlxcbiAgKiBAbWF4X25yX3NuYXBzaG90czpcXHRVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcXG4gICogXFx1MDAyNnBhdHRlcm4gYW5kIGFwcGxpZXMgXFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXFxuQEAgLTU0MiwxNiArNTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKlxcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFxcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnNcXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3RcXG4tICogXFx1MDAyNmNvcmVfZmlsdGVyc1xcbi0gKlxcbi0gKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmdcXG4tICogXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcXG4tICogYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XFxuLSAqIEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuICBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uXFxuLSAqIG11bHRpcGxlIFxcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcXHUwMDI2c3RydWN0XFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXFxuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcXG4tICogZmluaXNoZWQuXFxuKyAqIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxcbiAgKlxcbiAgKiBBZnRlciBhcHBseWluZyB0aGUgXFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXFx1MDAyNnN0YXQgaXMgdXBkYXRlZC5cXG4gICpcXG5AQCAtNTYyLDYgKzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3Mge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcXG4gXFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuK1xcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4rXFx0XFx0fTtcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xcbiBcXHQvKlxcbiBcXHQgKiBudW1iZXIgb2Ygc2FtcGxlIGludGVydmFscyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgYmVmb3JlIGFwcGx5aW5nXFxuQEAgLTU3OCwyMCArNTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7XFxuIFxcdC8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqL1xcbiBcXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4gXFx0Ym9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4tLyogcHVibGljOiAqL1xcbi1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuLVxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4tXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4tXFx0XFx0fTtcXG4tXFx0fTtcXG4rXFx0LyogQWRkaXRpb25hbCBzZXQgb2YgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFxcdTAwMjZhY3Rpb24uICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzO1xcbitcXHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xcbitcXHQvKlxcbitcXHQgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlXFxuK1xcdCAqIHVuZGVybHlpbmcgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXFxuK1xcdCAqIHdpdGggdGhlIGNvcmUgbGF5ZXIgYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdFxcbitcXHQgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuXFxuK1xcdCAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgXFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cXG4rXFx0ICogb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFxcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cXG4rXFx0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXFxuK1xcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xcbitcXHQgKiBmaW5pc2hlZC5cXG4rXFx0ICovXFxuIFxcdHZvaWQgKmxhc3RfYXBwbGllZDtcXG4tXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIH07XFxuIFxcbkBAIC03NDksNyArNzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XFxuICAqIEBtYXRjaGluZzpcXHRXaGV0aGVyIHRoaXMgZmlsdGVyIGlzIGZvciB0aGUgdHlwZS1tYXRjaGluZyBvbmVzLlxcbiAgKiBAYWxsb3c6XFx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXFxuICAqIEBtZW1jZ19pZDpcXHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxcbi0gKiBAbGlzdDpcXHRTaWJsaW5ncyBsaXN0LlxcbiAgKi9cXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIFxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG5AQCAtNzU4LDYgKzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gXFx0fTtcXG4rLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtNzY1LDEyICs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cXG4gICpcXG4gICogQHdlaWdodDpcXHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxcbi0gKiBAZmlsdGVyczpcXHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXFxuLSAqIEBsaXN0OlxcdFNpYmxpbmdzIGxpc3QuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtODM3LDE0ICs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMge1xcbiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsXFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cXG4gICpcXG4tICogQG9wczpcXHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXFxuLSAqIEBwcm9iZXM6XFx0SGVhZCBvZiBwcm9iZXMgKFxcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cXG4gICogQGFkZHJfdW5pdDpcXHRTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi5cXG4gICogQG1pbl9yZWdpb25fc3o6XFx0TWluaW11bSByZWdpb24gc2l6ZS5cXG4gICogQHBhdXNlOlxcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxcbi0gKiBAYWRhcHRpdmVfdGFyZ2V0czpcXHRIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cXG4tICogQHNjaGVtZXM6XFx0XFx0SGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuXFxuLSAqIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xcbkBAIC04OTMsMTUgKzg5OSwyMSBAQCBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcXG4gXFxuIC8qIHB1YmxpYzogKi9cXG4tXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zejtcXG4gXFx0Ym9vbCBwYXVzZTtcXG4gXFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi9cXG4rXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbitcXHQvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzO1xcbitcXHQvKiBIZWFkIG9mIHByb2JlcyAoXFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4rXFx0LyogSGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcXG4gXFxuK1xcdC8qIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovXFxuIFxcdHN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMjA1MSw3ICsyMDUxLDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbiBcXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbi1cXHRpZiAoY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4rXFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnI7IGkrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MjozMi42MzQwNzgwNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1ODA1NTIwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdCBsYXlvdXQgcmVvcmRlcmluZyB0byBncm91cCBwdWJsaWMvcHJpdmF0ZSBmaWVsZHMgZm9yIGtlcm5lbC1kb2MsIGFuZCBhIHB1cmUgcmVmYWN0b3JpbmcgaW4gbW0vZGFtb24vc3lzZnMuYyB0aGF0IHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWVjZDJmOTRjZGQ4ZDc0M2ExMjhkMWJjYjU4YjEzN2FkZTgwYjg0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDA4OjUyOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCBmNjk0NDJhOWQ0MzEyOC4uMzI3ZjUzNDY5NmFhODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTQ2LDcgKzQ2LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBzYW1wbGluZ19hZGRyOlx0QWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suXG4gICogQG5yX2FjY2Vzc2VzOlx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cbiAgKiBAcHJvYmVfaGl0czpcdFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBhZ2U6XHRcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cbiAgKlxuICAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcbkBAIC02OCw5ICs2NywxMSBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcbiBcdHVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjtcbiBcdHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcztcbiBcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdHVuc2lnbmVkIGludCBhZ2U7XG4tLyogcHJpdmF0ZTogSW50ZXJuYWwgdmFsdWUgZm9yIGFnZSBjYWxjdWxhdGlvbi4gKi9cbisvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cbitcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xuIFx0dW5zaWduZWQgaW50IGxhc3RfbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIGxhc3RfcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbiB9O1xuQEAgLTc4LDkgKzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gLyoqXG4gICogc3RydWN0IGRhbW9uX3RhcmdldCAtIFJlcHJlc2VudHMgYSBtb25pdG9yaW5nIHRhcmdldC5cbiAgKiBAcGlkOlx0XHRUaGUgUElEIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gbW9uaXRvci5cbi0gKiBAbnJfcmVnaW9uczpcdFx0TnVtYmVyIG9mIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQHJlZ2lvbnNfbGlzdDpcdEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICogQG9ic29sZXRlOlx0XHRXaGV0aGVyIHRoZSBjb21taXQgZGVzdGluYXRpb24gdGFyZ2V0IGlzIG9ic29sZXRlLlxuICAqXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxuQEAgLTk0LDEwICs5MiwxNCBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcbiAgKi9cbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IHtcbiBcdHN0cnVjdCBwaWQgKnBpZDtcbitcdGJvb2wgb2Jzb2xldGU7XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqL1xuIFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnM7XG4rXHQvKiBIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7XG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0Ym9vbCBvYnNvbGV0ZTtcbiB9O1xuIFxuIC8qKlxuQEAgLTE3MywxMCArMTc1LDggQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XG4gICogQG1ldHJpYzpcdFx0TWV0cmljIHRvIGJlIHVzZWQgZm9yIHJlcHJlc2VudGluZyB0aGUgZ29hbC5cbiAgKiBAdGFyZ2V0X3ZhbHVlOlx0VGFyZ2V0IHZhbHVlIG9mIEBtZXRyaWMgdG8gYWNoaWV2ZSB3aXRoIHRoZSB0dW5pbmcuXG4gICogQGN1cnJlbnRfdmFsdWU6XHRDdXJyZW50IHZhbHVlIG9mIEBtZXRyaWMuXG4tICogQGxhc3RfcHNpX3RvdGFsOlx0TGFzdCBtZWFzdXJlZCB0b3RhbCBQU0lcbiAgKiBAbmlkOlx0XHROb2RlIGlkLlxuICAqIEBtZW1jZ19pZDpcdFx0TWVtY2cgaWQuXG4tICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBEYXRhIHN0cnVjdHVyZSBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCBzY29yZSBvZiB0aGUgcXVvdGEgdHVuaW5nIGdvYWwuICBUaGVcbiAgKiBzY29yZSBpcyBjYWxjdWxhdGVkIGJ5IGhvdyBjbG9zZSBAY3VycmVudF92YWx1ZSBhbmQgQHRhcmdldF92YWx1ZSBhcmUuICBUaGVuXG5AQCAtMTk5LDEyICsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuIFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xuIFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cbiBcdHVuaW9uIHtcbi1cdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdGludCBuaWQ7XG4gXHRcdFx0dTY0IG1lbWNnX2lkO1xuIFx0XHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHRcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXG4rXHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbitcbiBcdH07XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC0yMjMsNyArMjI4LDYgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxuICAqIEBtczpcdFx0XHRNYXhpbXVtIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBzY2hlbWUgY2FuIHVzZS5cbiAgKiBAc3o6XHRcdFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxuLSAqIEBnb2FsczpcdFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFx1MDAyNmRhbW9zX3F1b3RhX2dvYWwpIGxpc3QuXG4gICogQGdvYWxfdHVuZXI6XHRcdEdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS5cbiAgKiBAZXN6Olx0XHRFZmZlY3RpdmUgc2l6ZSBxdW90YSBpbiBieXRlcy5cbiAgKiBAZmFpbF9jaGFyZ2VfbnVtOlx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxuQEAgLTI1MCw3ICsyNTQsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xuICAqIHRoZSBzY2hlbWUncyBhY3Rpb24uICBEQU1PTiB0aGVuIGNvbXBhcmVzIGl0IGFnYWluc3QgXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxuICAqIG9uZSBhcyB0aGUgZWZmZWN0aXZlIHF1b3RhLlxuICAqXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuKyAqIElmIGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuICAqIGdvYWxzIHVzaW5nIGl0cyBpbnRlcm5hbCBmZWVkYmFjayBsb29wIGFsZ29yaXRobSwgZm9yIGV2ZXJ5IEByZXNldF9pbnRlcnZhbC5cbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXG4gICogbmV3IHNpemUgcXVvdGEgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbkBAIC0yNzEsNyArMjc1LDcgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmVzZXRfaW50ZXJ2YWw7XG4gXHR1bnNpZ25lZCBsb25nIG1zO1xuIFx0dW5zaWduZWQgbG9uZyBzejtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7XG4rXG4gXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcbiBcdHVuc2lnbmVkIGxvbmcgZXN6O1xuIFxuQEAgLTI4Myw2ICsyODcsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF9hZ2U7XG4gXG4gLyogcHJpdmF0ZTogKi9cbitcdC8qIEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzIChcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcbiBcdC8qIEZvciB0aHJvdWdocHV0IGVzdGltYXRpb24gKi9cbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9ucztcbkBAIC00MjYsNyArNDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuLSAqIEBsaXN0Olx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDQ0LDYgKzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xuIFx0XHRpbnQgdGFyZ2V0X2lkeDtcbiBcdFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4gXHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNTE1LDEyICs1MjIsOCBAQCBzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyB7XG4gICogQHdtYXJrczpcdFx0V2F0ZXJtYXJrcyBmb3IgYXV0b21hdGVkIChpbilhY3RpdmF0aW9uIG9mIHRoaXMgc2NoZW1lLlxuICAqIEBtaWdyYXRlX2Rlc3RzOlx0RGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyBcIm1pZ3JhdGVfe2hvdCxjb2xkfVwiLlxuICAqIEB0YXJnZXRfbmlkOlx0XHREZXN0aW5hdGlvbiBub2RlIGlmIEBhY3Rpb24gaXMgXCJtaWdyYXRlX3tob3QsY29sZH1cIi5cbi0gKiBAY29yZV9maWx0ZXJzOlx0QWRkaXRpb25hbCBzZXQgb2YgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgXHUwMDI2YWN0aW9uLlxuLSAqIEBvcHNfZmlsdGVyczpcdG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cbi0gKiBAbGFzdF9hcHBsaWVkOlx0TGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbiAgKiBAc3RhdDpcdFx0U3RhdGlzdGljcyBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWF4X25yX3NuYXBzaG90czpcdFVwcGVyIGxpbWl0IG9mIG5yX3NuYXBzaG90cyBzdGF0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcbiAgKiBcdTAwMjZwYXR0ZXJuIGFuZCBhcHBsaWVzIFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXG5AQCAtNTQyLDE2ICs1NDUsNyBAQCBzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyB7XG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcdTAwMjZhY3Rpb24gdG8gcmVzcGVjdFxuLSAqIFx1MDAyNmNvcmVfZmlsdGVyc1xuLSAqXG4tICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nXG4tICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWQgd2l0aCB0aGUgY29yZSBsYXllclxuLSAqIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHlcbi0gKiBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLiAgTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvblxuLSAqIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb24gb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFx1MDAyNnN0cnVjdFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXG4tICogdW5zZXRzIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuLSAqIGZpbmlzaGVkLlxuKyAqIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIuXG4gICpcbiAgKiBBZnRlciBhcHBseWluZyB0aGUgXHUwMDI2YWN0aW9uIHRvIGVhY2ggcmVnaW9uLCBcdTAwMjZzdGF0IGlzIHVwZGF0ZWQuXG4gICpcbkBAIC01NjIsNiArNTU2LDE2IEBAIHN0cnVjdCBkYW1vcyB7XG4gXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcbiBcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjtcbiBcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG4rXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3M7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0aW50IHRhcmdldF9uaWQ7XG4rXHRcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcbitcdFx0fTtcbitcdH07XG4rXHRzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0O1xuK1x0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xuIC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXG4gXHQvKlxuIFx0ICogbnVtYmVyIG9mIHNhbXBsZSBpbnRlcnZhbHMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGJlZm9yZSBhcHBseWluZ1xuQEAgLTU3OCwyMCArNTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7XG4gXHQvKiB3aGV0aGVyIHRvIHJlamVjdCBjb3JlL29wcyBmaWx0ZXJzIHVtYXRjaGVkIHJlZ2lvbnMgKi9cbiBcdGJvb2wgY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0O1xuIFx0Ym9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcbi0vKiBwdWJsaWM6ICovXG4tXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG4tXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3M7XG4tXHR1bmlvbiB7XG4tXHRcdHN0cnVjdCB7XG4tXHRcdFx0aW50IHRhcmdldF9uaWQ7XG4tXHRcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcbi1cdFx0fTtcbi1cdH07XG4rXHQvKiBBZGRpdGlvbmFsIHNldCBvZiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcdTAwMjZhY3Rpb24uICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNvcmVfZmlsdGVycztcbitcdC8qIG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgb3BzX2ZpbHRlcnM7XG4rXHQvKlxuK1x0ICogTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbitcdCAqXG4rXHQgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlXG4rXHQgKiB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXG4rXHQgKiB3aXRoIHRoZSBjb3JlIGxheWVyIGFic3RyYWN0LCBuYW1lbHkgXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXHUwMDI2c3RydWN0XG4rXHQgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuXG4rXHQgKiBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cbitcdCAqIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cbitcdCAqIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljIHVuc2V0c1xuK1x0ICogQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzXG4rXHQgKiBmaW5pc2hlZC5cbitcdCAqL1xuIFx0dm9pZCAqbGFzdF9hcHBsaWVkO1xuLVx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cztcbitcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NDksNyArNzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XG4gICogQG1hdGNoaW5nOlx0V2hldGhlciB0aGlzIGZpbHRlciBpcyBmb3IgdGhlIHR5cGUtbWF0Y2hpbmcgb25lcy5cbiAgKiBAYWxsb3c6XHRXaGV0aGVyIHRoZSBAdHlwZS1AbWF0Y2hpbmcgb25lcyBzaG91bGQgcGFzcyB0aGlzIGZpbHRlci5cbiAgKiBAbWVtY2dfaWQ6XHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxuLSAqIEBsaXN0Olx0U2libGluZ3MgbGlzdC5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiBcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbkBAIC03NTgsNiArNzY2LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gXHR1bmlvbiB7XG4gXHRcdHU2NCBtZW1jZ19pZDtcbiBcdH07XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIFNpYmxpbmdzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NjUsMTIgKzc3NSwxMyBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiAgKiBzdHJ1Y3QgZGFtb25fcHJvYmUgLSBEYXRhIHJlZ2lvbiBhdHRyaWJ1dGUgcHJvYmUuXG4gICpcbiAgKiBAd2VpZ2h0Olx0UmVsYXRpdmUgcHJpb3JpdHkgb2YgdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBwcm9iZS5cbi0gKiBAZmlsdGVyczpcdEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS5cbi0gKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX3Byb2JlIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4rLyogcHJpdmF0ZTogKi9cbitcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbitcdC8qIFNpYmxpbmdzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC04MzcsMTQgKzg0OCw5IEBAIHN0cnVjdCBkYW1vbl9hdHRycyB7XG4gICogdGhyZWFkIG90aGVyIHRoYW4gdGhlIGtkYW1vbmQgc2hvdWxkIGJlIG1hZGUgdXNpbmcgc2FmZSBEQU1PTiBBUElzLFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cbiAgKlxuLSAqIEBvcHM6XHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4tICogQHByb2JlczpcdEhlYWQgb2YgcHJvYmVzIChcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cbiAgKiBAYWRkcl91bml0Olx0U2NhbGUgZmFjdG9yIGZvciBjb3JlIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXG4gICogQG1pbl9yZWdpb25fc3o6XHRNaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqIEBwYXVzZTpcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxuLSAqIEBhZGFwdGl2ZV90YXJnZXRzOlx0SGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cbi0gKiBAc2NoZW1lczpcdFx0SGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC5cbi0gKiBAcm5kX3N0YXRlOlx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXG4gICovXG4gc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XG5AQCAtODkzLDE1ICs4OTksMjEgQEAgc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgbXV0ZXgga2RhbW9uZF9sb2NrO1xuIFxuIC8qIHB1YmxpYzogKi9cbi1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcztcbi1cdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XG4gXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3o7XG4gXHRib29sIHBhdXNlO1xuIFxuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuICovXG4rXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4rXHQvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXHUwMDI2ZGFtb25fdGFyZ2V0KSBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzO1xuK1x0LyogSGVhZCBvZiBwcm9iZXMgKFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7XG4rXHQvKiBIZWFkIG9mIHNjaGVtZXMgKFx1MDAyNmRhbW9zKSBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBzY2hlbWVzO1xuIFxuK1x0LyogQHJuZF9zdGF0ZTpcdFBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLiAqL1xuIFx0c3RydWN0IHJuZF9zdGF0ZSBybmRfc3RhdGU7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggYjVmZTAzNmY3ODAxNTIuLjIwOGJiNjM5ZjUwZmZiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIwNTEsNyArMjA1MSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0aW50IGksIGVycjtcbiBcbiBcdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXG4tXHRpZiAoY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG4rXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3lzZnNfdGFyZ2V0cy1cdTAwM2VucjsgaSsrKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MjozMi42MzQwNzkzMTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDYzMDExNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSdyZSBjaGFuZ2luZyBzb21lIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGUgYGRhbW9uLmhgIGNoYW5nZXMgYXBwZWFyIHRvIGJlIG1vc3RseSBjb3NtZXRpYyAtIHJlLWFycmFuZ2luZyBjb21tZW50cyBhbmQgYWRkaW5nIHRob3NlIGAvKiBwcml2YXRlOiAqL2AgbWFya2VycyB0byBjb250cm9sIGtlcm5lbC1kb2MgdmlzaWJpbGl0eSwgcmUtb3JkZXJpbmcgdGhlIGZpZWxkcy4gTm90aGluZyBpbW1lZGlhdGVseSBjb25jZXJuaW5nIHRoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byBgbW0vZGFtb24vc3lzZnMuY2AuIEkgc2VlIHRoZSBkaWZmLiBBaCwgaGVyZSdzIHRoZSBjcml0aWNhbCBjaGFuZ2U6IHRoZXkndmUgcmVwbGFjZWQgYGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBzdHlsZSB0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBFc3NlbnRpYWxseSwgdGhleSd2ZSBhbHRlcmVkIHRoZSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBtdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIGRvZXMuIElzIHRoaXMgYSBtb3JlIGdlbmVyYWwgY2hlY2sgdGhhbiB0aGUgc3BlY2lmaWMgYFBBRERSYCBjYXNlPyBJcyBpdCBhIGJ1ZyBmaXg/IE9yIGlzIGl0IGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtP1xuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6MzguMDk3MDkyOTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTM3NTIzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdGFyZ2V0X2hhc19waWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzI9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzQ6c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU4Nz1zdGF0aWMgdm9pZCBkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1OTEtXFxubW0vZGFtb24vY29yZS5jOjE1OTI6XFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjAzPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cXHRcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbm1tL2RhbW9uL2NvcmUuYzoxNjE4OlxcdFxcdFxcdFxcdFxcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXFxubW0vZGFtb24vY29yZS5jOjE2MTk6XFx0XFx0XFx0XFx0XFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcXG5tbS9kYW1vbi9jb3JlLmMtMTYyMC1cXHRcXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NTItXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcXHRcXHRcXHRcXHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxcbm1tL2RhbW9uL2NvcmUuYy0xNjU0LVxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzYtXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAzNzpcXHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cXHRcXHR0LVxcdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cXHUwMDNlcGlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1My1cXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA1NDpcXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXFx1MDAyNlxcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnIgXFx1MDAzZSAxKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NDAuOTUwODQ5NDM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3OTc5MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgZGFtb25fdGFyZ2V0X2hhc19waWRgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCB2YXJpYWJsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHByZWNpc2Ugcm9sZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcy4gSXMgaXQgYSBmbGFnLCBhbiBpbnRlZ2VyLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBXaGF0IGNvbnRleHQgZG9lcyBpdCBvcGVyYXRlIHdpdGhpbiDigJMgaXMgaXQgcmVsYXRlZCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHJlc291cmNlIGNvbnRyb2wsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBjb25uZWN0aW9uIHRvIGEgc3BlY2lmaWMgdGFyZ2V0IGFuZCB0aGUgUHJvY2VzcyBJRCAoUElEKS4gSSdsbCB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0sIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgaW50ZXJhY3Qgd2l0aCBpdCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0IHRvIGJlIHNldCBvciB1bnNldC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgaW1wYWN0cyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJbiBzaG9ydCwgaG93IGRvZXMgdGhpcyBwaWVjZSBvZiBkYXRhIGZpdCBpbiB0byB0aGUgYmlnZ2VyIHBpY3R1cmU/IEknbGwgcHJvYmFibHkgbG9vayBmb3IgaXRzIGRlY2xhcmF0aW9uIGFuZCB3aGVyZSBpdCdzIG1vZGlmaWVkIGluIHRoZSBjb2RlLCBhbmQgdGhlbiB0cnkgdG8gd29yayBteSB3YXkgdXAgZnJvbSB0aGVyZSwga2VlcGluZyBpbiBtaW5kIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUyOjQ0LjUzMDY0MjYxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA5MTEyODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mj1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NDcuNTM5NzYwNjA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NjE0MDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIElubmVyIFdvcmtpbmdzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gTGV0J3MgemVybyBpbiBvbiBsaW5lIDEwNzQuIFRoYXQgYXJlYSBpcyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIGRlZmluZWQgaW4gYSBoZWFkZXIgZmlsZS4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSBwcm9iYWJseSBkZWZpbmVzIG9uZSBvZiB0aGUgaW1wb3J0YW50IHN0cnVjdHMgb3IgZW51bXMgcmVsYXRlZCB0byBEYXRhIEFjY2VzcyBNT05pdG9yIChEQU1PTikuIEknbSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbi4gRGVwZW5kaW5nIG9uIHdoYXQgdGhhdCBsaW5lIGlzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBEQU1PTiBvcGVyYXRlcyBmcm9tIGEgaGlnaCBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NTAuNjE1OTA1MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjU6XFx0aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xcbjEwNjY6XFx0dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuMTA2NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLCBzc2l6ZV90IG5yX3NjaGVtZXMpO1xcbjEwNjg6XFx0aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqb2xkX2N0eCwgc3RydWN0IGRhbW9uX2N0eCAqbmV3X2N0eCk7XFxuMTA2OTpcXHRpbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpO1xcbjEwNzA6XFx0Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuMTA3MTpcXHRpbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpO1xcbjEwNzI6XFx0aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XFxuMTA3NzpcXHR9XFxuMTA3ODpcXHRcXG4xMDc5OlxcdC8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXFxuMTA4MDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcbjEwODE6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4xMDgyOlxcdHtcXG4xMDgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbjEwODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9zYW1wbGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1Mjo1MC42MTYwNDYyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzU3Njc1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUncyBzd2l0Y2hlZCBmcm9tIGRpcmVjdGx5IGNoZWNraW5nIGBjdHgtXHUwMDNlb3BzLmlkYCBhZ2FpbnN0IGBEQU1PTl9PUFNfUEFERFJgIGFuZCBgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMWAgdG8gdXNpbmcgdGhpcyBgZGFtb25fdGFyZ2V0X2hhc19waWRgIGZ1bmN0aW9uIGFuZCBuZWdhdGluZyBpdHMgcmVzdWx0LCBzdGlsbCBjb21wYXJpbmcgdG8gYHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDFgLiBTbywgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBtdXN0IGJlIHRoZSBrZXkgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCBjaGVja3MgaWYgdGhlIGBjdHgtXHUwMDNlb3BzLmlkYCBpcyBlaXRoZXIgYERBTU9OX09QU19WQUREUmAgb3IgYERBTU9OX09QU19GVkFERFJgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHBhcnQ6IGlmIGBjdHgtXHUwMDNlb3BzLmlkYCAqaXMqIGBEQU1PTl9PUFNfUEFERFJgLCBgZGFtb25fdGFyZ2V0X2hhc19waWRgIHJldHVybnMgZmFsc2UsIHJpZ2h0PyBUaGVyZWZvcmUsIHRoZSBuZWdhdGlvbiBvZiB0aGF0IHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZSB3aGljaCBtaW1pY3MgdGhlIG9sZCBiZWhhdmlvciwgYXMgdGhlIG9sZGVyIGNvbXBhcmlzb24gb2Ygd2hldGhlciBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdvdWxkIGhhdmUgYmVlbiB0cnVlIGFzIHdlbGwuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBzaG91bGQgbWF0Y2ggdW5kZXIgdGhlIG9yaWdpbmFsIGFuZCBuZXcgY2FzZXMsIGFzc3VtaW5nIGFsbCBvdGhlciBjb2RlLXBhdGhzIGFyZSB1bmNoYW5nZWQuXG5cbkJ1dC4uLiB3aGF0IGlmIGBjdHgtXHUwMDNlb3BzLmlkYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBEQU1PTl9PUFNfUEFERFJgLCBgREFNT05fT1BTX1ZBRERSYCwgb3IgYERBTU9OX09QU19GVkFERFJgPyBXaGF0IGlmIGl0J3MsIHNheSwgYERBTU9OX09QU19TR2Agb3Igc29tZSBvdGhlciBuZXcgb3BlcmF0aW9uIElEIHdlJ3ZlIGFkZGVkPyBUaGUgYmVoYXZpb3Igb2YgdGhlIG9sZCBjb2RlIHdvdWxkIGhhdmUgbm90IHJ1biB0aGlzIHBhdGgsIG5vdyBpdCBtaWdodC4gVGhlIG5lZ2F0aW9uIG9mIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgaXMgbm93IG1vcmUgY29tcGxleC4gV2UgbmVlZCB0byBrbm93IHRoZSBjb21wbGV0ZSBzZXQgb2YgcG9zc2libGUgdmFsdWVzIGZvciBgZGFtb25fb3BzX2lkYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgdGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB3aGF0IHRob3NlIHZhbHVlcyBjb3VsZCBiZSwgYW5kIHRoZW4gdGhpbmsgYWJvdXQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGNvdWxkIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjY0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTI6NTUuNjkxODE1OTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzU2MDUzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gZGFtb25fb3BzX2lkIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTUtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxNjplbnVtIGRhbW9uX29wc19pZCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxNy1cXHREQU1PTl9PUFNfVkFERFIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUyOjU5LjA0Nzg3MzcyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI1MzAwMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBDb3JlOiBFeGFtaW5pbmcgZGFtb24uaCBBcm91bmQgTGluZSA2MTYqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OLCB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyLCBoYW5kbGVzIGl0cyBtb25pdG9yaW5nIGxvb3BzLCBzcGVjaWZpY2FsbHkgdGhlaXIgY29udHJvbC4gTXkgbWluZCBpcyBkcmF3biB0byBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIEkgZmlndXJlIGxpbmUgNjE2IGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBjcnVjaWFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhpcyB0eXBlIG9mIGxvb3AgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGhlIGNvbnRyb2wgc3RydWN0cywgY3JpdGljYWwgaW5saW5lIGZ1bmN0aW9ucywgb3IgdGhlIG1hY3JvcyB0aGF0IGRlZmluZSBsb29wIGl0ZXJhdGlvbnMuIEZyb20gcHJpb3IgZXhwZXJpZW5jZSwgdGhhdCBhcmVhIG9mdGVuIGhvdXNlcyB0aGUgZm91bmRhdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyAqaG93KiBhbmQgKndoZW4qIERBTU9OIG1vbml0b3JzIHRoZSBtZW1vcnkgcmVnaW9ucy4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgZm91bmRhdGlvbmFsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjAyLjM3MzE3Njk4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0ICogQERBTU9OX09QU19WQUREUjpcXHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXG4gNjExOlxcdCAqIEBEQU1PTl9PUFNfRlZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3Igb25seSBmaXhlZCByYW5nZXMgb2YgdmlydHVhbFxcbiA2MTI6XFx0ICpcXHRcXHRcXHRhZGRyZXNzIHNwYWNlc1xcbiA2MTM6XFx0ICogQERBTU9OX09QU19QQUREUjpcXHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxuIDYxNDpcXHQgKiBATlJfREFNT05fT1BTOlxcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXFxuIDYxNTpcXHQgKi9cXG4gNjE2OlxcdGVudW0gZGFtb25fb3BzX2lkIHtcXG4gNjE3OlxcdFxcdERBTU9OX09QU19WQUREUixcXG4gNjE4OlxcdFxcdERBTU9OX09QU19GVkFERFIsXFxuIDYxOTpcXHRcXHREQU1PTl9PUFNfUEFERFIsXFxuIDYyMDpcXHRcXHROUl9EQU1PTl9PUFMsXFxuIDYyMTpcXHR9O1xcbiA2MjI6XFx0XFxuIDYyMzpcXHQvKipcXG4gNjI0OlxcdCAqIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIC0gTW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXFxuIDYyNTpcXHQgKlxcbiA2MjY6XFx0ICogQGlkOlxcdFxcdFxcdFxcdElkZW50aWZpZXIgb2YgdGhpcyBvcGVyYXRpb25zIHNldC5cXG4gNjI3OlxcdCAqIEBpbml0OlxcdFxcdFxcdEluaXRpYWxpemUgb3BlcmF0aW9ucy1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcy5cXG4gNjI4OlxcdCAqIEB1cGRhdGU6XFx0XFx0XFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXFxuIDYyOTpcXHQgKiBAcHJlcGFyZV9hY2Nlc3NfY2hlY2tzOlxcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjAyLjM3NDM2NjA0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA0NTEzMTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHByaW1hcmlseSBhIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGVmZm9ydC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHJlcGxhY2luZyBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdpdGggYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gSSBjYW4gc2VlIHRoYXQgYGRhbW9uX29wc19pZGAgY2FuIGJlIG9uZSBvZiBgREFNT05fT1BTX1ZBRERSYCwgYERBTU9OX09QU19GVkFERFJgLCBvciBgREFNT05fT1BTX1BBRERSYC4gTm93LCB0aGUgZnVuY3Rpb24gYGRhbW9uX3RhcmdldF9oYXNfcGlkYCByZXR1cm5zIHRydWUgaWYgdGhlIGBvcHNfaWRgIGlzIGVpdGhlciBgVkFERFJgIG9yIGBGVkFERFJgLCBhbmQgZmFsc2UgaWYgaXQncyBgUEFERFJgLiBTaW5jZSB0aG9zZSBhcmUgdGhlICpvbmx5KiB2YWxpZCB2YWx1ZXMgZm9yIGBjdHgtXHUwMDNlb3BzLmlkYCwgdGhpcyBzdWJzdGl0dXRpb24gc2hvdWxkIGJlIGxvZ2ljYWxseSBlcXVpdmFsZW50LiBJdCBzaW1wbGlmaWVzIHRoZSBjb25kaXRpb25hbC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoZXJlIGFyZSBubyBvdGhlciBmdW5jdGlvbmFsIHNoaWZ0cyBidXJpZWQgaGVyZS4gVGhlIHBhdGNoIGRpZmYgYWxzbyBzaG93cyByZW9yZGVyaW5nIGZpZWxkcyBpbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgYW5kIGFkZGluZyBhIGAvKiBwcml2YXRlOiAqL2AgY29tbWVudC4gT2theSwgc28gaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCB0aGF0J3MgdGhlIG9ubHkgbG9naWMgY2hhbmdlLCB0aGUgcmVwbGFjZW1lbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgdHJ1bHkgYSByZWZhY3RvcmluZy4gSSdtIHRoaW5raW5nLCB3aGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgYGN0eC1cdTAwM2VvcHMuaWRgPyBJZiBpdCdzIHplcm8sIHRoYXQncyBlcXVpdmFsZW50IHRvIGBEQU1PTl9PUFNfVkFERFJgLCBhbmQgaW4gdGhhdCBzY2VuYXJpbyBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHdvdWxkIHN0aWxsIGJlIGZhbHNlLCBqdXN0IGxpa2UgYGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSYCB3b3VsZCBiZS4gVGhlcmVmb3JlLCB0aGUgcmVmYWN0b3JpbmcgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBoZWFkZXIgZmlsZSBjaGFuZ2UuIFJlb3JkZXJpbmcgc3RydWN0IGZpZWxkcyAqY2FuKiBiZSBwcm9ibGVtYXRpYywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciBpZiBpdCBjYXVzZXMgYmluYXJ5IGNvbXBhdGliaWxpdHkgaXNzdWVzLiBIb3dldmVyLCBzaW5jZSBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBpcyBub3QgaW4gYGluY2x1ZGUvdWFwaWAsIGFuZCB0aGlzIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3QsIGl0J3MgbGVzcyBsaWtlbHkgdG8gYmUgYSBjb25jZXJuLCBhc3N1bWluZyBubyBoYXJkY29kZWQgb2Zmc2V0cyBhcmUgYmVpbmcgdXNlZCBzb21ld2hlcmUuIFRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBhbHNvIGluY2x1ZGVzIHNvbWUgYC8qIHByaXZhdGU6ICovYCBjb21tZW50cy5cblxuVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhlIGBsaXN0YCBtZW1iZXIgaXMgYmVpbmcgbW92ZWQgdG8gdGhlIGVuZCwgYW5kIG1hcmtlZCBwcml2YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBicmVhayBhbnl0aGluZy4gSSBkb24ndCBzZWUgYW55IGhhcmRjb2RlZCBvZmZzZXRzIHVzZWQgaW4gdGhpcyBjYXNlLCBhbmQgdGhlIGluY2x1ZGUgaXMgbm90IGEgVUFQSS4gU28gdGhlIGxheW91dCBjaGFuZ2Ugc2hvdWxkbid0IGFmZmVjdCBhbnl0aGluZywgdW5sZXNzLCBhbmQgdGhpcyBpcyBhIHBvc3NpYmlsaXR5LCBpdCBpcyB1c2VkIGluIHNvbWUgd2VpcmQgb3IgdW5leHBlY3RlZCB3YXkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzoxMy40MTk1MDAyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3MTg4OTk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb25fcmVnaW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ1IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mzg9c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQzLS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0NDogKiBzdHJ1Y3QgZGFtb25fcmVnaW9uIC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbi5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDUtICogQGFyOlxcdFxcdFxcdFRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSByZWdpb24uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjQtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY1OnN0cnVjdCBkYW1vbl9yZWdpb24ge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC02Ni1cXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD00NzA9c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQ3MS1cXHR2b2lkICgqd2Fsa19mbikodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0NzI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDczLVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcywgdW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC01OTMtXFx0ICogdW5kZXJseWluZyBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuICBTaW5jZSBpdCBtYXkgbm90IGJlIGFsaWduZWRcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTk0OlxcdCAqIHdpdGggdGhlIGNvcmUgbGF5ZXIgYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC01OTUtXFx0ICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTY3ND1zdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjgyLVxcdGludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY4MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY4NC1cXHR1bnNpZ25lZCBsb25nICgqYXBwbHlfc2NoZW1lKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2ODU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjg2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lLCB1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD05MjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3JhbmQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkzNS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTM2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV4dF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM3LXtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTM4OlxcdHJldHVybiBjb250YWluZXJfb2Yoci1cXHUwMDNlbGlzdC5uZXh0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uLCBsaXN0KTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTM5LX1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTQwLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NDE6c3RhdGljIGlubGluZSBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9wcmV2X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDIte1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NDM6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihyLVxcdTAwM2VsaXN0LnByZXYsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDQtfVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk0NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk0Ny17XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk0ODpcXHRyZXR1cm4gbGlzdF9sYXN0X2VudHJ5KFxcdTAwMjZ0LVxcdTAwM2VyZWdpb25zX2xpc3QsIHN0cnVjdCBkYW1vbl9yZWdpb24sIGxpc3QpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NDktfVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NTAtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk1MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX2ZpcnN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC05NTIte1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5NTM6XFx0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnQtXFx1MDAzZXJlZ2lvbnNfbGlzdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiwgbGlzdCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1NC19XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk1NS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTU2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTU3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDIwPXZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjEtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjI6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjM6dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMjQtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyNTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyNi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDI3OnVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDI4LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzMD1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDMyOnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMy1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9Nzc9VFJBQ0VfRVZFTlRfQ09ORElUSU9OKGRhbW9zX2JlZm9yZV9hcHBseSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtNzktXFx0VFBfUFJPVE8odW5zaWduZWQgaW50IGNvbnRleHRfaWR4LCB1bnNpZ25lZCBpbnQgc2NoZW1lX2lkeCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oOjgwOlxcdFxcdHVuc2lnbmVkIGludCB0YXJnZXRfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtODEtXFx0XFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCB1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9MTM1PVRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vbl9yZWdpb25fYWdncmVnYXRlZCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTEzNi1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oOjEzNzpcXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmgtMTM4LVxcdFxcdHVuc2lnbmVkIGludCBucl9yZWdpb25zLCB1bnNpZ25lZCBpbnQgbnJfcHJvYmVzKSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmg9MTczPVRSQUNFX0VWRU5UKGRhbW9uX2FnZ3JlZ2F0ZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaC0xNzQtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaDoxNzU6XFx0VFBfUFJPVE8odW5zaWduZWQgaW50IHRhcmdldF9pZCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oLTE3Ni1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyksXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjQ0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjMtICovXFxubW0vZGFtb24vY29yZS5jOjI2NDp1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMjY1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODctXFxubW0vZGFtb24vY29yZS5jOjI4ODp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMjg5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMTg9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjg6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzI5LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzMwOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcXG5tbS9kYW1vbi9jb3JlLmMtMzMxLVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzUzOnN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtMzU0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjEtICovXFxubW0vZGFtb24vY29yZS5jOjM2MjpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYzozNjM6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcXG5tbS9kYW1vbi9jb3JlLmMtMzY0LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc2PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzgwLVxcbm1tL2RhbW9uL2NvcmUuYzozODE6c3RhdGljIHZvaWQgZGFtb25fZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy0zODIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4OC1cXG5tbS9kYW1vbi9jb3JlLmM6Mzg5OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vY29yZS5jLTM5MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkzLVxcbm1tL2RhbW9uL2NvcmUuYzozOTQ6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzk1LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwLVxcbm1tL2RhbW9uL2NvcmUuYzo0MDE6c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtNDAyLVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDE0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MTU6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jLTQxNi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDM1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MzY6c3RhdGljIGJvb2wgZGFtb25faW50ZXJzZWN0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTQzNy1cXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDQ0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0NDU6c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXFxubW0vZGFtb24vY29yZS5jOjQ0NjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsYXN0LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy00NDcte1xcbm1tL2RhbW9uL2NvcmUuYzo0NDg6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciA9IGZpcnN0O1xcbm1tL2RhbW9uL2NvcmUuYy00NDktXFxubW0vZGFtb24vY29yZS5jLTQ1MC1cXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XFxubW0vZGFtb24vY29yZS5jOjQ1MTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpuZXh0LCAqbmV3cjtcXG5tbS9kYW1vbi9jb3JlLmMtNDUyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ3OD1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODAte1xcbm1tL2RhbW9uL2NvcmUuYzo0ODE6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTQ4Mi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MjMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjUyNDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCA9IE5VTEwsICpsYXN0LCAqbmV3cjtcXG5tbS9kYW1vbi9jb3JlLmMtNTI1LVxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MDc9dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04MDgte1xcbm1tL2RhbW9uL2NvcmUuYzo4MDk6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTgxMC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05MzI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkzOC1cXG5tbS9kYW1vbi9jb3JlLmM6OTM5OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTk0MC1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTU4LVxcbm1tL2RhbW9uL2NvcmUuYzo5NTk6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTk2MC1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9OTg5PXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTk5My1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL2NvcmUuYzo5OTQ6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtOTk1LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1MjU9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1Mjcte1xcbm1tL2RhbW9uL2NvcmUuYzoxNTI4OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnNyY19yZWdpb24sICpwcmV2ID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMTUyOS1cXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4Njk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcmVnaW9uX3N6X2xpbWl0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODcxLVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vY29yZS5jOjE4NzI6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtMTg3My1cXHR1bnNpZ25lZCBsb25nIHN6ID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODg4PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYzoxODg5OlxcdFxcdFxcdFxcdCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgdW5zaWduZWQgbG9uZyBzel9yKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg5MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTA3LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vY29yZS5jOjE5MDg6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTE5MDktXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjEwMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE0My0gKiBpbnZvY2F0aW9uLCBmb3IgZWFjaCBzY2hlbWUuICBUaGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gY2FuIGhlbmNlIHNhZmVseVxcbm1tL2RhbW9uL2NvcmUuYzoyMTQ0OiAqIGFjY2VzcyB0aGUgaW50ZXJuYWwgZGF0YSBvZiBcXHUwMDI2c3RydWN0IGRhbW9uX2N0eCBhbmQgXFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24gdGhhdFxcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIGVhY2ggb2YgdGhlIHNjaGVtZSB3aWxsIGFwcGx5IHRoZSBhY3Rpb24gZm9yIG5leHQgaW50ZXJ2YWwsIHdpdGhvdXRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTgwPXN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxOTItXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjE5MzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTk0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZ2V0X2ludGVydmFsc19zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyMTQtXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG5tbS9kYW1vbi9jb3JlLmM6MjIxNTpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjE2LVxcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBtYXhfYWNjZXNzX2V2ZW50cyA9IDAsIGFjY2Vzc19ldmVudHMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyNTE9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjcyLVxcbm1tL2RhbW9uL2NvcmUuYzoyMjczOnN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG5tbS9kYW1vbi9jb3JlLmMtMjI3NC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyOTQ9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI5OS1cXG5tbS9kYW1vbi9jb3JlLmM6MjMwMDpzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMjMwMS1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjMzNj1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjIzMzc6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYy0yMzM4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzg2PXN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjIzODc6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxcbm1tL2RhbW9uL2NvcmUuYy0yMzg4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDM1PXN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjI0MzY6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDM3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDYyPXN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfY2FsbF93YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmM6MjQ2MzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxubW0vZGFtb24vY29yZS5jLTI0NjQtXFx0XFx0dW5zaWduZWQgbG9uZyBzel9maWx0ZXJfcGFzc2VkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1Njk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjI1NzA6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjM5PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG5tbS9kYW1vbi9jb3JlLmMtMjY0MC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYzoyNjQxOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vY29yZS5jLTI2NDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2OTE9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY5My17XFxubW0vZGFtb24vY29yZS5jOjI2OTQ6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtMjY5NS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY5Ni1cXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNjk3OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXZfcjtcXG5tbS9kYW1vbi9jb3JlLmMtMjY5OC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODc4PXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg4MS1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL2NvcmUuYzoyODgyOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vY29yZS5jLTI4ODMtXFx0cGh5c19hZGRyX3QgdG90YWxfZWxpZ2libGUgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMzU9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTM4LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vY29yZS5jOjMxMzk6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9jb3JlLmMtMzE0MC1cXHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2VzejtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjU4PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG5tbS9kYW1vbi9jb3JlLmM6MzI1OTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjYwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjY2PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG5tbS9kYW1vbi9jb3JlLmM6MzI2NzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjY4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjc1PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jOjMyNzY6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzI5MzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzI5NC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMxMD1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzEyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MzMxMzpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYy0zMzE0LVxcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNjM9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM4My0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYzozMzg0OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzM4NS1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM5MS0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzozMzkyOnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzM5My1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQwND1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmM6MzQwNTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHVuc2lnbmVkIGxvbmcgc3pfcilcXG5tbS9kYW1vbi9jb3JlLmMtMzQwNi17XFxubW0vZGFtb24vY29yZS5jOjM0MDc6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV3O1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA4LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0Mjg9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQzMS17XFxubW0vZGFtb24vY29yZS5jOjM0MzI6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTM0MzMtXFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHN6X3N1YiA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQ1OD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjItXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ2MzpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJvdGF0aW9uKysgJSBzcGxpdF9zdGVwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2MTI9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2MTQtXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG5tbS9kYW1vbi9jb3JlLmM6MzYxNTpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjE2LVxcbm1tL2RhbW9uL2NvcmUuYy0zNjE3LVxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxubW0vZGFtb24vY29yZS5jOjM2MTg6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldl9yID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMzYxOS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzk2Nj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzk5MTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcXG5tbS9kYW1vbi9jb3JlLmMtMzk5Mi17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDQ6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE0OC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTQ5OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTM9Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ4LVxcbm1tL2RhbW9uL3BhZGRyLmM6NDk6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtNTAtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz01Nz1zdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy01OS1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3BhZGRyLmM6NjA6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG5tbS9kYW1vbi9wYWRkci5jLTYxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyAqZm9saW9fc3opXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTgxLVxcbm1tL2RhbW9uL3BhZGRyLmM6ODI6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTgzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEwNi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3BhZGRyLmM6MTA3OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYy0xMDgtXFx0dW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE2OT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3Mi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3BhZGRyLmM6MTczOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYy0xNzQtXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMjE9c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIzMS1cXG5tbS9kYW1vbi9wYWRkci5jOjIzMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0yMzMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjkwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jOjI5MTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG5tbS9kYW1vbi9wYWRkci5jLTI5Mi1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIGJvb2wgYWN0aXZhdGUsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMyMy1cXG5tbS9kYW1vbi9wYWRkci5jOjMyNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI1LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMzMC1cXG5tbS9kYW1vbi9wYWRkci5jOjMzMTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZWFjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0zMzItXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzM3LVxcbm1tL2RhbW9uL3BhZGRyLmM6MzM4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTMzOS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zNzEtXFxubW0vZGFtb24vcGFkZHIuYzozNzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzczLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTM5OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3BhZGRyLmM6NDAwOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy00MDEtXFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQyNj1zdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbm1tL2RhbW9uL3BhZGRyLmM6NDI3OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbm1tL2RhbW9uL3BhZGRyLmMtNDI4LXtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz01ND1zdGF0aWMgdm9pZCBkYW1vbl9zdGF0X3NldF9lc3RpbWF0ZWRfbWVtb3J5X2JhbmR3aWR0aChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTU2LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vc3RhdC5jOjU3OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vc3RhdC5jLTU4LVxcdHVuc2lnbmVkIGxvbmcgYWNjZXNzX2J5dGVzID0gMDtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy02OC1cXG5tbS9kYW1vbi9zdGF0LmM6Njk6c3RhdGljIGludCBkYW1vbl9zdGF0X2lkbGV0aW1lKGNvbnN0IHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vc3RhdC5jLTcwLXtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz03Nj1zdGF0aWMgaW50IGRhbW9uX3N0YXRfY21wX3JlZ2lvbnMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5tbS9kYW1vbi9zdGF0LmMtNzcte1xcbm1tL2RhbW9uL3N0YXQuYzo3ODpcXHRjb25zdCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyYSA9ICooY29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqKilhO1xcbm1tL2RhbW9uL3N0YXQuYzo3OTpcXHRjb25zdCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyYiA9ICooY29uc3Qgc3RydWN0IGRhbW9uX3JlZ2lvbiAqKiliO1xcbm1tL2RhbW9uL3N0YXQuYy04MC1cXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz04ND1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc29ydF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vc3RhdC5jOjg1OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKioqc29ydGVkX3B0ciwgaW50ICpucl9yZWdpb25zX3B0cixcXG5tbS9kYW1vbi9zdGF0LmMtODYtXFx0XFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc3pfcHRyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTg4LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vc3RhdC5jOjg5OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vc3RhdC5jOjkwOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKipyZWdpb25fcG9pbnRlcnM7XFxubW0vZGFtb24vc3RhdC5jLTkxLVxcdHVuc2lnbmVkIGludCBucl9yZWdpb25zID0gMDtcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0xMTM9c3RhdGljIHZvaWQgZGFtb25fc3RhdF9zZXRfaWRsZXRpbWVfcGVyY2VudGlsZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9zdGF0LmMtMTE0LXtcXG5tbS9kYW1vbi9zdGF0LmM6MTE1OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKipzb3J0ZWRfcmVnaW9ucywgKnJlZ2lvbjtcXG5tbS9kYW1vbi9zdGF0LmMtMTE2LVxcdGludCBucl9yZWdpb25zO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NDY9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0ODpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDktXFx0XFx0Ym9vbCB0b3RhbF9ieXRlc19vbmx5LCB1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2JlcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTE6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24pXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjA9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjE6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2Mi17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpkcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODAte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMDE9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAyLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzEwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsIGJvb2wgdG90YWxfYnl0ZXNfb25seSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNC1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzMTk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmUodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjMyMDpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMyMS1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHVuc2lnbmVkIGxvbmcgc3pfZmlsdGVyX3Bhc3NlZClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNC17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1OlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2LVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9hZ2dyZWdhdGUoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyLVxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkzOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk0LVxcdGludCBpdCwgaXI7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0Mi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDM6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnJfbmV3O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQtXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTM6MTYuMjkxMzk2MDg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTU3NTAyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWdpb24gU3RydWN0dXJlKipcblxuT2theSwgc28gdGhlIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBpcyBoZWF2aWx5IHV0aWxpemVkLCBidXQgaXQncyBub3QgZXhwb3NlZCBhcyBwYXJ0IG9mIHRoZSBVc2VyIEFQSSwgd2hpY2ggaXMgYSBrZXkgcG9pbnQuIExldCdzIGRlbHZlIGJhY2sgaW50byB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXRzZWxmLiBIbW0sIGhlcmUgaXQgaXM6IGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGUgcmVjZW50IG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWFycmFuZ2VtZW50IG9mIHRoZSBgbGlzdGAgZmllbGQuIEl0IGxvb2tzIGxpa2UgaXQgd2FzIG1vdmVkIGZyb20gYmVmb3JlIGBhZ2VgIHRvIGFmdGVyIGBhZ2VgLiBOb3csIG15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGhhcyBhbnkgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBhbnkgaGFyZGNvZGVkIG9mZnNldHMgb3IgYXNzZW1ibHkgY29kZSB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZSBzcGVjaWZpYyBtZW1iZXJzIG9mIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYC4gVGhhbmtmdWxseSwgYSBxdWljayBzY2FuIGRvZXNuJ3QgcmV2ZWFsIGFueXRoaW5nIGxpa2UgdGhhdC4gSXQncyBqdXN0IGEgc3RhbmRhcmQgQyBzdHJ1Y3R1cmUuIEJ1dCB3YWl0LCB3aGF0IGFib3V0IGBtZW1zZXRgIG9yIGBtZW1jcHlgIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBiZSBzZW5zaXRpdmUgdG8gdGhlIHN0cnVjdHVyZSdzIGxheW91dD8gVGhleSBjb3VsZCBiZSBhbiBpc3N1ZS4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgYGRhbW9uX25ld19yZWdpb25gIGlzIGltcGxlbWVudGVkLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBhIG5ldyByZWdpb24gd291bGQgYmUgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgbm90aGluZyB0aGVyZSBpcyBnb2luZyB0byBibG93IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYxMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzoyMS45ODcxNDkxODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzczODU0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAyMD12b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDIxLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDIyOnN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDIzLXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxOD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjctICovXFxubW0vZGFtb24vY29yZS5jOjMyODpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NTYtXFx0XFx0aWYgKHItXFx1MDAzZWFyLmVuZCAhPSBuZXh0LVxcdTAwM2Vhci5zdGFydCkge1xcbm1tL2RhbW9uL2NvcmUuYzo0NTc6XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oci1cXHUwMDNlYXIuZW5kLCBuZXh0LVxcdTAwM2Vhci5zdGFydCk7XFxubW0vZGFtb24vY29yZS5jLTQ1OC1cXHRcXHRcXHRpZiAoIW5ld3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDc4PWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTUwOS1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTEwOlxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy01MTEtXFx0XFx0XFx0XFx0XFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTQyLVxcdFxcdFxcdC8qIG5vIHJlZ2lvbiBpbnRlcnNlY3RzIHdpdGggdGhpcyByYW5nZSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo1NDM6XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oXFxubW0vZGFtb24vY29yZS5jLTU0NC1cXHRcXHRcXHRcXHRcXHRBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VzdGFydCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDA0PXN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDktXFx0ZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChyLCBzel9yKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzQxMDpcXHRuZXcgPSBkYW1vbl9uZXdfcmVnaW9uKHItXFx1MDAzZWFyLnN0YXJ0ICsgc3pfciwgci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQxMS1cXHRpZiAoIW5ldylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODpcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigxLCAyKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTktXFx0aWYgKCFyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYWdncmVnYXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTAtXFx0XFx0Zm9yIChpciA9IDA7IGlyIFxcdTAwM2MgMzsgaXIrKykge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTE6XFx0XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oc2FkZHJbaXRdW2lyXSwgZWFkZHJbaXRdW2lyXSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMi1cXHRcXHRcXHRpZiAoIXIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ3LVxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE0ODpcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCAxMDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDktXFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODAtXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwidGFyZ2V0IGFsbG9jIGZhaWxcXFwiKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTgxOlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIDEwMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4Mi1cXHRpZiAoIXIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODgtXFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTg5OlxcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5MC1cXHRpZiAoIXIyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjI3PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNhKTsgaSsrKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI1MDpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNTEtXFx0XFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjg5LVxcdH1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjkwOlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIDIyKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjkxLVxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTMwNS1cXHR9XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjMwNjpcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCAyMjApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMDctXFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzIyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNhKTsgaSsrKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjMyMzpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMjQtXFx0XFx0aWYgKCFyKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQ2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzItXFx0XFx0c3RhcnQgPSBpICogcmVnaW9uX3N6O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzM6XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oc3RhcnQsIHN0YXJ0ICsgcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc0LVxcdFxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQ1ND1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzel9vbGRfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDY4OlxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKG9sZF9yYW5nZXNbaV0uc3RhcnQsIG9sZF9yYW5nZXNbaV0uZW5kKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY5LVxcdFxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU4Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTkxLVxcdHN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU5MjpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTkzLVxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl90ZXN0X2hlbHBfc2V0dXBfdGFyZ2V0KFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExODMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JlZ2lvbnM7IGkrKykge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTg0OlxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHJlZ2lvbl9zdGFydF9lbmRbaV1bMF0sXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExODUtXFx0XFx0XFx0XFx0cmVnaW9uX3N0YXJ0X2VuZFtpXVsxXSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTI2Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2ZpbHRlcl9vdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyNzctXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjc4OlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjc5LVxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0NDQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NjMtXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDY0OlxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIHN6X3JlZ2lvbnMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDY1LVxcdGlmICghcikge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0OTU9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNDsgaSsrKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MDY6XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oaSAqIDIsIChpICsgMSkgKiAyKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNy1cXHRcXHRpZiAoIXIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTM6MjQuNjI0NTQxMDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDUyNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHdoYXQgSSdtIGRlYWxpbmcgd2l0aCwgSSdtIHByZXR0eSBzdXJlIHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoYXQgbGluZSAzMjggbWlnaHQgYmUgdGhlIGNyaXRpY2FsIGFyZWEgdG8gZm9jdXMgb24uIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBsb2NhdGlvbiwgYXMgSSBzdXNwZWN0IHRoZXJlIGlzIHNvbWV0aGluZyByZWxldmFudCB0byB3aGF0IEknbSBpbnZlc3RpZ2F0aW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjI3Ljg2OTA3MTUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdH1cXG4gMzIxOlxcdCNlbmRpZlxcbiAzMjI6XFx0XFxuIDMyMzpcXHQvKlxcbiAzMjQ6XFx0ICogQ29uc3RydWN0IGEgZGFtb25fcmVnaW9uIHN0cnVjdFxcbiAzMjU6XFx0ICpcXG4gMzI2OlxcdCAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzdHJ1Y3QgaWYgc3VjY2Vzcywgb3IgTlVMTCBvdGhlcndpc2VcXG4gMzI3OlxcdCAqL1xcbiAzMjg6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gMzI5OlxcdHtcXG4gMzMwOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcXG4gMzMxOlxcdFxcdGludCBpO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbihzdGFydCwgZW5kKTtcXG4gMzM0OlxcdFxcdHJlZ2lvbiA9IGttZW1fY2FjaGVfYWxsb2MoZGFtb25fcmVnaW9uX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG4gMzM1OlxcdFxcdGlmICghcmVnaW9uKVxcbiAzMzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdHJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcXG4gMzM5OlxcdFxcdHJlZ2lvbi1cXHUwMDNlYXIuZW5kID0gZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzoyNy44Njk3NjA0OTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTk5NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBkYW1vbl9uZXdfcmVnaW9uYCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9uX25ld19yZWdpb25gIHRoaW5nLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgb3ZlcmFsbCBkZXNpZ24gYW5kIHdoYXQga2luZCBvZiBpbXBsaWNhdGlvbnMgaXQgaGFzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGp1c3QgZ2V0IGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiwgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGFyY2hpdGVjdHVyZSwgd2hlcmUgaXQncyBiZWluZyB1c2VkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBhaW4gcG9pbnRzIG9yIGRlc2lnbiBpc3N1ZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBzeXN0ZW07IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlIG9yIGFuIGluY3JlbWVudGFsIGFkZGl0aW9uPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5PyBBbmQsIG1vc3QgY3JpdGljYWxseSwgaG93IGRvZXMgdGhpcyBuZXcgcmVnaW9uIGltcGFjdCB0aGUgZXhpc3Rpbmcgd29ya2Zsb3dzPyBJIGV4cGVjdCB0aGVyZSBtYXkgYmUgZWRnZSBjYXNlcyB0byBjb25zaWRlci4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZGF0YSBpbmNvbnNpc3RlbmNpZXMsIGFuZCwgb2YgY291cnNlLCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIG15IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzozMS4zMjE3NjE0MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0cmVnaW9uLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XFxuIDM0MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxuIDM0MjpcXHRcXHRcXHRyZWdpb24tXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbiAzNDM6XFx0XFx0XFx0cmVnaW9uLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSAwO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGlzdCk7XFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdHJlZ2lvbi1cXHUwMDNlYWdlID0gMDtcXG4gMzQ4OlxcdFxcdHJlZ2lvbi1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDA7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdHJldHVybiByZWdpb247XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdHN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4gMzU0OlxcdHtcXG4gMzU1OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnItXFx1MDAzZWxpc3QsIFxcdTAwMjZ0LVxcdTAwM2VyZWdpb25zX2xpc3QpO1xcbiAzNTY6XFx0XFx0dC1cXHUwMDNlbnJfcmVnaW9ucysrO1xcbiAzNTc6XFx0fVxcbiAzNTg6XFx0XFxuIDM1OTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1MzozMS4zMjIwMDQ0MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4MTMzMTU2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgREFNT04gU3RydWN0dXJlIFJlb3JkZXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoLCBhbmQgaXQncyBhbG1vc3QgZW50aXJlbHkgc3RydWN0dXJhbC4gRXNzZW50aWFsbHksIHdlIGFyZSBqdXN0IHJlb3JkZXJpbmcgdGhlIGZpZWxkcyB3aXRoaW4gc2V2ZXJhbCBgc3RydWN0YCBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgdG8gZ3JvdXAgcHVibGljLWZhY2luZyBmaWVsZHMgYW5kIHByaXZhdGUsIGludGVybmFsIGZpZWxkcywgYW5kIHNvbWUgYWNjb21wYW55aW5nIGtlcm5lbC1kb2MgY29tbWVudHMgaGF2ZSBiZWVuIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG5cbkxvb2tpbmcgYXQgZWFjaCBzdHJ1Y3Q6XG5cbiogICBgZGFtb25fbmV3X3JlZ2lvbmA6IE5vIGNoYW5nZXMgb3RoZXIgdGhhbiBpbml0aWFsaXphdGlvbiBiZWhhdmlvciB1bmFmZmVjdGVkIGJ5IHRoZSBsYXlvdXQuXG5cbiogICBgZGFtb25fdGFyZ2V0YDogVGhlIGBvYnNvbGV0ZWAgZmxhZyBpcyBtb3ZlZCB1cC4gVGhlIGZpZWxkczogYG5yX3JlZ2lvbnNgLCBgcmVnaW9uc19saXN0YCwgYW5kIGBsaXN0YCBhcmUgcmVvcmRlcmVkIGludG8gYSBwcml2YXRlIHNlY3Rpb24uIEl0IGlzIHdvcnRoIG5vdGluZyB0aGUgZmllbGRzIGBucl9yZWdpb25zYCwgYHJlZ2lvbnNfbGlzdGAsIGFuZCBgbGlzdGAgYXJlIG1vdmVkIGRvd24gYW5kIG1hcmtlZCBhcyBwcml2YXRlLlxuXG4qICAgYGRhbW9zX3F1b3RhX2dvYWxgOiBgbGFzdF9wc2lfdG90YWxgIHdhcyBhbHJlYWR5IHdpdGhpbiBhIHVuaW9uLCBhbmQgaXMgc2ltcGx5IG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIHVuaW9uLiBObyByZWFsIGNoYW5nZSBoZXJlLlxuXG4qICAgYGRhbW9zX3F1b3RhYDogVGhlIGBnb2Fsc2AgZmllbGQgaXMgbW92ZWQgdG8gdGhlIHByaXZhdGUgc2VjdGlvbi4gQSBsYXlvdXQgY2hhbmdlLlxuXG4qICAgYGRhbW9zX2ZpbHRlcmA6IE5vIGxheW91dCBjaGFuZ2U7IGNvbW1lbnRzIHdlcmUgYWRkZWQgdG8gZXhwbGFpbiBwcml2YXRlIHN0YXRlLlxuXG4qICAgYGRhbW9zYDogU2V2ZXJhbCBmaWVsZHMgKGBxdW90YWAsIGB3bWFya3NgLCB0aGUgdW5pb24sIGBzdGF0YCwgYG1heF9ucl9zbmFwc2hvdHNgKSBhcmUgbW92ZWQgdXAgYmVmb3JlIGEgY29tbWVudCBtYXJraW5nIHRoZSBzdGFydCBvZiBpbnRlcm5hbC11c2Utb25seSBmaWVsZHMuIExheW91dCBjaGFuZ2UuXG5cbiogICBgZGFtb25fZmlsdGVyYDogTm8gbGF5b3V0IGNoYW5nZS5cblxuKiAgIGBkYW1vbl9wcm9iZWA6IE5vIGxheW91dCBjaGFuZ2UuXG5cbiogICBgZGFtb25fY3R4YDogYG9wc2AgYW5kIGBwcm9iZXNgIGFyZSBtb3ZlZCBkb3duLiBMYXlvdXQgY2hhbmdlLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhlc2UgYXJlIGFsbW9zdCBlbnRpcmVseSBsYXlvdXQgY2hhbmdlcywgaW1wcm92aW5nIGNvZGUgcmVhZGFiaWxpdHkuIE5vIGZ1bmN0aW9uYWwgYmVoYXZpb3IgaXMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLlxuXG5Ib3dldmVyLCB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBpczpcbmBgYGNcbi1cdGlmIChjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19QQUREUiBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbitcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbmBgYFxuXG5UaGUgbmV3IGNvbmRpdGlvbmFsIGluIGBtbS9kYW1vbi9zeXNmcy5jYCByZXBsYWNlcyBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIHdpdGggYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gSSB3YXMgY29uY2VybmVkIGFib3V0IGltcGxpY2l0IGJlaGF2aW9yLCBidXQgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBlbnVtIGRlZmluaXRpb24sIGl0J3MgY2xlYXIgdGhlc2UgYXJlIGxvZ2ljYWxseSBlcXVpdmFsZW50IGNvbmRpdGlvbnMsIHdoZXJlIGBkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYCBpcyB0cnVlIGlmIHdlIGFyZSBpbiBWQUREUiBvciBGVkFERFIgb3BlcmF0aW9ucywgYW5kIGlzIGZhbHNlIG90aGVyd2lzZS4gU28sIHRoaXMgaXMgYWxzbyBhIHJlZmFjdG9yaW5nLCB0byBjbGFyaWZ5IHRoZSBjb25kaXRpb24uIFRoZSBjb25kaXRpb24gY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LlxuXG5UaGlzIHdob2xlIHBhdGNoIGlzLCB0aGVyZWZvcmUsIGEgdmVyeSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBzdHJ1Y3Qgb3JnYW5pemF0aW9uLCBkb2N1bWVudGF0aW9uLCBhbmQgbWlub3IgY29kZS1jbGFyaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODo1Mzo1My4xMzUzMjI0NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODc4NDg3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfYWRkX3RhcmdldHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMDI5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDQ3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjA0ODpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDktXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldHMgKnN5c2ZzX3RhcmdldHMpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTEzLVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vc3lzZnMuYzoyMTE0OlxcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cXHUwMDNldGFyZ2V0cyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTE1LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oPTM5PXN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Rlc3RfYWRkX3RhcmdldHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC04MS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjgyOlxcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC04My1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMXUsIG5yX2RhbW9uX3RhcmdldHMoY3R4KSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTg2LVxcdFxcdFxcdHN5c2ZzX3RhcmdldC1cXHUwMDNlcGlkICsgMSwgMjAwKTtcXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjg3OlxcdGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzZnNfdGFyZ2V0cyk7XFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC04OC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMnUsIG5yX2RhbW9uX3RhcmdldHMoY3R4KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjU1LjYyMzE3Njc3MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE4OTAyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgd2hhdCdzIHRoZSB1c2UgY2FzZSBoZXJlPyBXaGF0J3MgaXQgZG9pbmcgd2l0aCB0aG9zZSBpbnB1dHM/XCIgSSBrbm93IHRoZSBEYW1vbiBzdWJzeXN0ZW0sIHNvIG15IGJyYWluIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhYm91dCBhcHBseWluZyB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMgZGlyZWN0bHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIG9yIGEgdHJpZ2dlciBmb3IgYWN0aW9uPyBJJ20gaG9waW5nIGl0IGlzbid0IG92ZXJseSBjb21wbGljYXRlZCwgdGhhdCBpdCBoYXMgYSBjbGVhciBpbnRlcmZhY2UuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiB3aGVyZSBjaGFuZ2VzIGluIGEgc3lzZnMgbm9kZSB0cmFuc2xhdGUgaW50byBhY3R1YWwgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4gSSByZWFsbHkgd2FudCB0byBlbnN1cmUgdGhlIGlucHV0cyBhcmUgdmFsaWRhdGVkIGNvcnJlY3RseSB0byBlbnN1cmUgc2FmZXR5LiBBbHNvLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgY29tZSB0byBtaW5kIGltbWVkaWF0ZWx5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50LCBzZWUgd2hhdCBraW5kIG9mIGlucHV0cyBpdCBhY2NlcHRzLiBUaGVuIEknbGwgYmUgbG9va2luZyB0byBkZXRlcm1pbmUgaXRzIHNpZGUtZWZmZWN0cyBvbiB0aGUgRGFtb24gc3lzdGVtLCBhbmQgb24gdGhlIG1hY2hpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6NTM6NTkuNTQyMDgxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDkwOlxcdFxcdHJldHVybiBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggXFx1MDAyNlxcdTAwMjZcXG4yMDkxOlxcdFxcdFxcdGRhbW9uX2lzX3J1bm5pbmcoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMDkyOlxcdH1cXG4yMDkzOlxcdFxcbjIwOTQ6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbjIwOTU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpXFxuMjA5NjpcXHR7XFxuMjA5NzpcXHRcXHRpbnQgZXJyO1xcbjIwOTg6XFx0XFxuMjA5OTpcXHRcXHRlcnIgPSBkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgc3lzX2N0eC1cXHUwMDNlb3BzX2lkKTtcXG4yMTAwOlxcdFxcdGlmIChlcnIpXFxuMjEwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIxMDI6XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQgPSBzeXNfY3R4LVxcdTAwM2VhZGRyX3VuaXQ7XFxuMjEwMzpcXHRcXHQvKiBhZGRyX3VuaXQgaXMgcmVzcGVjdGVkIGJ5IG9ubHkgREFNT05fT1BTX1BBRERSICovXFxuMjEwNDpcXHRcXHRpZiAoc3lzX2N0eC1cXHUwMDNlb3BzX2lkID09IERBTU9OX09QU19QQUREUilcXG4yMTA1OlxcdFxcdFxcdGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChcXG4yMTA2OlxcdFxcdFxcdFxcdFxcdERBTU9OX01JTl9SRUdJT05fU1ogLyBzeXNfY3R4LVxcdTAwM2VhZGRyX3VuaXQsIDEpO1xcbjIxMDc6XFx0XFx0Y3R4LVxcdTAwM2VwYXVzZSA9IHN5c19jdHgtXFx1MDAzZXBhdXNlO1xcbjIxMDg6XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMpO1xcbjIxMDk6XFx0XFx0aWYgKGVycilcXG4yMTEwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjExMTpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMtXFx1MDAzZXByb2Jlcyk7XFxuMjExMjpcXHRcXHRpZiAoZXJyKVxcbjIxMTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE0OlxcdFxcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cXHUwMDNldGFyZ2V0cyk7XFxuMjExNTpcXHRcXHRpZiAoZXJyKVxcbjIxMTY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE3OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhjdHgsIHN5c19jdHgtXFx1MDAzZXNjaGVtZXMpO1xcbjIxMTg6XFx0fVxcbjIxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjUzOjU5LjU0MjIzMDUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTczNDM4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IEEgV2FzdGUgb2YgRnV6emluZyBUaW1lKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgc3lzX2N0eC1cdTAwM2VvcHNfaWQpYCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0c2AuIENydWNpYWxseSwgYHN5c19jdHgtXHUwMDNlb3BzX2lkYCBpcyBkZXJpdmVkIGZyb20gdGhlIGBkYW1vbl9vcHNfaWRgIGVudW0uIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGBjdHgtXHUwMDNlb3BzLmlkYCBpcyBhbHdheXMgYSB2YWxpZCBlbnVtIHZhbHVl4oCUc3BlY2lmaWNhbGx5LCBlaXRoZXIgYFZBRERSYCwgYEZWQUREUmAsIG9yIGBQQUREUmAuXG5cblRoaXMgbWVhbnMgdGhhdCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIGlzICpmdW5jdGlvbmFsbHkgaWRlbnRpY2FsKiB0byBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGVxdWl2YWxlbmNlLiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBpbnRyb2R1Y2VkOyBpdCdzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudC4gVGhpcyBzY3JlYW1zIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgb25seSB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuXG5cbkluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCBpdCdzIGFsbCBhYm91dCBzdHJ1Y3QgbGF5b3V0IHJlb3JnYW5pemF0aW9uLiBFc3NlbnRpYWxseSwgbW92aW5nIHNvbWUgbWVtYmVycyBpbnRvIGEgXCJwcml2YXRlXCIgc2VjdGlvbiBvciByZW9yZGVyaW5nIG1lbWJlcnMgd2l0aGluIHRoZSBzdHJ1Y3RzLiBObyBuZXcgZmllbGRzLCBubyBjaGFuZ2VzIHRvIGV4dGVybmFsbHkgdmlzaWJsZSBpbnRlcmZhY2VzIG9yIFVBUEksIG5vdGhpbmcgdGhhdCB3b3VsZCBpbXBhY3QgdGhlIGtlcm5lbCdzIGV4ZWN1dGlvbiBmbG93IGluIGFueSB3YXkuIFN0cnVjdCBtZW1iZXIgb3JkZXJpbmcgY2hhbmdlcyBhcmUgaW50ZXJuYWwgYW5kIHdvbid0IGJyZWFrIGJpbmFyeSBjb21wYXRpYmlsaXR5LlxuXG5JbiBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBvbmx5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgdGhhdCBgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFJgIGNvbmRpdGlvbiB3aXRoIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIEFzIHdlJ3ZlIGVzdGFibGlzaGVkLCB0aGVzZSBhcmUgbG9naWNhbGx5IGlkZW50aWNhbCBkdWUgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY3R4YCBzdHJ1Y3QuIFRoaXMgaXMganVzdCBhIG1vcmUgcmVhZGFibGUgdXNlIG9mIGFuIGV4aXN0aW5nIGhlbHBlciBmdW5jdGlvbi5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgY29zbWV0aWMgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IGxvZ2ljIG9yIGV4cG9zZSBhbnl0aGluZyBuZXcgdG8gdGhlIG91dHNpZGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgcGF0Y2guIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ1NywiT3V0cHV0VG9rZW5zIjo4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjU0OjA4LjQzOTU3NjY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3QgbGF5b3V0IHJlb3JkZXJpbmcgdG8gZ3JvdXAgcHVibGljL3ByaXZhdGUgZmllbGRzIGZvciBrZXJuZWwtZG9jLCBhbmQgYSBwdXJlIHJlZmFjdG9yaW5nIGluIG1tL2RhbW9uL3N5c2ZzLmMgdGhhdCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdCBsYXlvdXQgcmVvcmRlcmluZyB0byBncm91cCBwdWJsaWMvcHJpdmF0ZSBmaWVsZHMgZm9yIGtlcm5lbC1kb2MsIGFuZCBhIHB1cmUgcmVmYWN0b3JpbmcgaW4gbW0vZGFtb24vc3lzZnMuYyB0aGF0IHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rd5v[1] Phase: Running StartedAt: 2026-07-14 08:54:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rd5v[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-14 08:54:21 +0000 UTC FinishedAt: 2026-07-14 08:54:30 +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,}